新手上路
- 积分
- 41
- 金钱
- 41
- 注册时间
- 2011-5-13
- 在线时间
- 0 小时
|
发表于 2011-7-21 11:13:03
|
显示全部楼层
回复【9楼】hpy6666:
---------------------------------
代码还没成型,仍在试的阶段。把驱动和中断部分贴上来吧。基于原子的例程,很简单。目前改变“num==”的值能线性加减速,准备改用PWM,看看能否实现加减速曲线控制。
/****************************************************************************/
void step_moto(void) //步进电机驱动
{
u16 plu_num1, plu_num2;
plu_num1=0;
plu_num2=0;
num=0,
// init_direct();
plu_num1=(in_buf[5]*256+in_buf[6])*24; //转角增量1
plu_num2=(in_buf[8]*256+in_buf[9])*24; //转角增量2
while(plu_num1!=0|plu_num2!=0)
{
TIM3->DIER|=1<<0; //允许更新中断
TIM3->DIER|=1<<6; //允许触发中断
TIM3->CR1|=0x01; //使能定时器3
if(num==5) //0.25ms,4,000 plu/sec
{
num=0;
if(plu_num1>0)
{
//pluse_1=~pluse_1;
LED0=!LED0;
plu_num1--;
}
if(plu_num2>0)
{
//pluse_2=~pluse_2;
LED1=!LED1;
plu_num2--;
}
}
}
TIM3->DIER|=0<<0; //不允许更新中断
TIM3->DIER|=0<<6; //不允许触发中断
TIM3->CR1&=0xFE; //关闭定时器3
}
/****************************************************************************/
u8 num;
//定时器3中断服务程序
//2ms中断1次
void TIM3_IRQHandler(void)
{
if(TIM3->SR&0X0001)//溢出中断
{
num=num+1;
}
TIM3->SR&=~(1<<0);//清除中断标志位
}
|
|