本帖最后由 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++;
}
}
上面包括修改频率,计算步数等。
上位机部分,串口发送数据,通知下位机开启、停止及变速。
因为程序简单,具体内容请看附件代码。
以下为程序运行截图:
|