TMS320F2812控制步进电机正反转 以及可以调节步进电机速度的 C语言程序 谁有啊?急!顺便能带上液晶显示步进电机的速度的程序 总的来说就是TMS320F2812控制步进电机 要步进电机 能控制它的正反
TMS320F2812控制步进电机正反转 以及可以调节步进电机速度的 C语言程序 谁有啊?急!顺便能带上液晶显示步进电机的速度的程序 总的来说就是TMS320F2812控制步进电机 要步进电机 能控制它的正反
TMS320F2812控制步进电机正反转 以及可以调节步进电机速度的 C语言程序 谁有啊?
急!
顺便能带上液晶显示步进电机的速度的程序 总的来说就是TMS320F2812控制步进电机 要步进电机 能控制它的正反转以及速度 还能在液晶上显示设定的速度值或者步距值
TMS320F2812控制步进电机正反转 以及可以调节步进电机速度的 C语言程序 谁有啊?急!顺便能带上液晶显示步进电机的速度的程序 总的来说就是TMS320F2812控制步进电机 要步进电机 能控制它的正反
还是这个?TMS320LF2407 PWM电机控制实验
作者:61IC 文章来源:点击数:425 更新时间:2007-1-17
//Main.c
//PWM电机控制程序,正反转,默认设置的工作频率1kHz
#include "global.c"
void SystemInit();
void PWM_Init() ;
void KickDog();
int numled0=200;
unsigned int t0=0;
unsigned int XPWM=0;
main()
{
SystemInit(); //系统初始化
MCRA=MCRA & 0xC0FF; //IOPB0-6设为IO口模式
PBDATDIR=0xFFC2; //所有LED=0
PBDATDIR=PBDATDIR |0x003D; //所有LED=1
XPWM=2400; //设置初始值为2400,但最大值不要超过2500
//when xpwm=0~900,逆时针方向旋转,值越小,转速越快
when xpwm=1600~2500,顺时针方向旋转,值越大,转速越快
when xpwm=900~1600,电机两端电压太低,基本上不足以起转
PWM_Init() ; //定时器初始化
asm(" CLRC INTM ");
while(1);
}
void SystemInit()
{
asm(" SETC INTM "); //关闭总中断
asm(" CLRC SXM "); // 禁止符号位扩展
asm(" CLRC CNF "); // B0块映射为 on-chip DARAM
asm(" CLRC OVM "); // 累加器结果正常溢出
SCSR1=0x83FE; // 系统时钟CLKOUT=20*2=40M
// 打开ADC,EVA,EVB,CAN和SCI的时钟,系统时钟CLKOUT=40M */
WDCR=0x006F; // 禁止看门狗,看门狗时钟64分频
KickDog(); // 初始化看门狗
IFR=0xFFFF; // 清除中断标志
IMR=0x0002; // 打开中断2
}
void PWM_Init()
{
MCRA=MCRA | 0x00C0; //PA6-PA7为PWM口
EVAIFRA=0xFFFF; // 清除中断标志
ACTRA=0x0006; //PWM1,2低有效
DBTCONA=0x0530; //使能死区定时器1,分频40M/16=2.5M,死区时间5*0.4us=2us
T1PR=2500; //定时器1周期值,定时0.4us*2500=1ms
CMPR1=XPWM; //比较值
COMCONA=0xA600; //比较控制寄存器
T1CNT=0;
EVAIMRA=0x0080; //定时器1周期中断使能
T1CON=0x144E; //增模式,TPS系数40M/16=2.5M,T1使能,
}
void c_int2() //定时器1中断服务程序
{
if(PIVR!=0x27)
{ asm(" CLRC INTM ");
return;
}
T1CNT=0;
t0++;
numled0--;
if(numled0==0)
{
numled0=2000;
if((PBDATDIR & 0x0001)==0x0001)
PBDATDIR=PBDATDIR & 0xFFFE; //IOPB0=0;LED灭
else
PBDATDIR=PBDATDIR |0x0101; //IOPB0=1;LED亮
}
EVAIFRA=0x80;
asm(" CLRC INTM ");
}
void KickDog() //踢除看门狗
{
WDKEY=0x5555;
WDKEY=0xAAAA;
}