[菜农助学交流] 第五批学习笔记:步进电机控制小程序

[复制链接]
3851|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++;



}

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

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
xyz549040622 发表于 2012-2-2 21:33 | 显示全部楼层
哪有,上篇很不错,顶一个
hotpower 发表于 2012-2-3 04:00 | 显示全部楼层
请注明第几批,再:凑三篇笔记真不是助学之目的!!!
Swallow_0322 发表于 2012-2-3 07:47 | 显示全部楼层
一直止步于羡慕上位机+下位机一起玩的高手... 顶!
lixiaoxu2meng 发表于 2012-2-3 07:54 | 显示全部楼层
4# Swallow_0322
顶 恩 同三心前辈一样
yan_jian 发表于 2012-2-3 11:03 | 显示全部楼层
能不能介绍下电机驱动部分硬件?
我也有类似电机,四线,好像说是两相的.
不懂怎么驱动

谢谢!
 楼主| gary2008 发表于 2012-2-3 21:25 | 显示全部楼层
6# yan_jian
硬件上用的是四相、五出线的步进电机,TLP521光耦隔离,L298N驱动。
建议选个合适的集成驱动,做起来更方便。
yan_jian 发表于 2012-2-3 21:58 | 显示全部楼层
明白了,谢谢!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

4

主题

8

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部