打印
[菜农助学交流]

第五批学习笔记:步进电机控制小程序

[复制链接]
2527|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
gary2008|  楼主 | 2012-2-2 20:03 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 gary2008 于 2012-2-3 20:16 编辑

上一篇写的笔记是音量控制小程序,似乎无人问津。见手上有一小步进电机闲置许久,于是做一小程序控制电机以自娱,同时亦可凑3篇之约。现拿出来与大家分享,请多多指教。
下位机部分:自定义协议串口接收数据,控制电机启动停止及变速。
       电机启动:开启定时器0
DrvTIMER_Open(E_TMR0,f,E_PERIODIC_MODE);



DrvTIMER_SetTimerEvent(E_TMR0,1,(TIMER_CALLBACK)UpdateMove,f);



DrvTIMER_EnableInt(E_TMR0);


DrvTIMER_Start(E_TMR0);


PCtrlData=0;

       电机停止:关闭定时器0

DrvTIMER_ClearTimerEvent(E_TMR0, uTimerEventNo[0]);




DrvTIMER_Close(E_TMR0);


PCtrlData=0;

       变速部分:修改频率全局变量f

PCtrlData=0;


f=(uint32_t)CtrlData[3]*256+(uint32_t)CtrlData[4];


DrvUART_Write(UART_PORT0,&CtrlData[3],2);

       速度控制部分:定时器中断程序。
Move();

if(ft>f||ft<f){


if(temp>=N){


if(ft<f){


ft+=8;


ft>f?ft=f:ft;


}


else {


ft-=8;


ft<0?ft=f:ft;


}


temp=0;


DrvTIMER_ClearTimerEvent(E_TMR0, uTimerEventNo[0]);



DrvTIMER_Close(E_TMR0);


DrvTIMER_Open(E_TMR0,ft,E_PERIODIC_MODE);


DrvTIMER_SetTimerEvent(E_TMR0,1,(TIMER_CALLBACK)UpdateMove,ft);



DrvTIMER_EnableInt(E_TMR0);


DrvTIMER_Start(E_TMR0);

              


DrvUART_Write(UART_PORT0,&send[1],1);



}else
temp++;



}

}
上面包括修改频率,计算步数等。
上位机部分,串口发送数据,通知下位机开启、停止及变速。
因为程序简单,具体内容请看附件代码。
以下为程序运行截图:

下位机.rar

623.78 KB

上位机.rar

52.86 KB

相关帖子

沙发
xyz549040622| | 2012-2-2 21:33 | 只看该作者
哪有,上篇很不错,顶一个

使用特权

评论回复
板凳
hotpower| | 2012-2-3 04:00 | 只看该作者
请注明第几批,再:凑三篇笔记真不是助学之目的!!!

使用特权

评论回复
地板
Swallow_0322| | 2012-2-3 07:47 | 只看该作者
一直止步于羡慕上位机+下位机一起玩的高手... 顶!

使用特权

评论回复
5
lixiaoxu2meng| | 2012-2-3 07:54 | 只看该作者
4# Swallow_0322
顶 恩 同三心前辈一样

使用特权

评论回复
6
yan_jian| | 2012-2-3 11:03 | 只看该作者
能不能介绍下电机驱动部分硬件?
我也有类似电机,四线,好像说是两相的.
不懂怎么驱动

谢谢!

使用特权

评论回复
7
gary2008|  楼主 | 2012-2-3 21:25 | 只看该作者
6# yan_jian
硬件上用的是四相、五出线的步进电机,TLP521光耦隔离,L298N驱动。
建议选个合适的集成驱动,做起来更方便。

使用特权

评论回复
8
yan_jian| | 2012-2-3 21:58 | 只看该作者
明白了,谢谢!

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

4

主题

8

帖子

0

粉丝