英创信息技术WinCE工控主板的步进电机控制介绍

描述

步进电机的控制需要对控制脉冲进行精确计数,通常利用CPU的PWM信号作为步进电机控制脉冲,并利用PWM自身的中断功能,每输出一个脉冲产生一次中断,然后计数,以实现对输出脉冲个数的控制。但在WinCE上系统直接实现上述控制过程是有因难的,由于操作系统线程调度,WinCE驱动中对中断的响应会有几十到几百微秒的延时,这显然不能满足高速PWM计数的需求,同时频繁的中断也会对整个系统的性能产生影响。

下图是基于英创工控主板EM9380的步进电机控制示意图。EM9380是英创公司推出的面向实时控制应用的工控主板,预装了正版的WinCE6.0操作系统,在主板上集成了两个CPU,主CPU是450MHz的ARM9,运行WinCE系统,负责通讯管理,人机交互等,从CPU采用了ARM Cortex-M3,专门用做实时控制应用。

嵌入式主板

EM9380步进电机控制

对于步进电机的控制,用户只需要在熟悉的vs2005(vs2008)开发环境下,通过简单的API函数MCU_PWM_CHANNEL()将控制参考传送给Cortex-M3,就可以实现频率可达100KHz,可计数的PWM脉冲输出。MCU_PWM_CHANNEL()函数说明如下:

// MCU PWM操作:启动/停止PWM通道, 启动参数包括频率、占空比和初始极性
BOOL MCU_PWM_CHANNEL(
HANDLE hMCU,
DWORD dwCh, // PWM通道号, = 3, 4, 5, 6, 7, 8
DWORD dwFreq, // PWM输出频率,单位Hz,=0:停止PWM输出
DWORD dwDuty, // PWM输出占空比,单位.1%, 输入范围= 0-1000
DWORD dwPol, // PWM初始极性,= 0: 低电平, = 1: 高电平
DWORD dwNum=0); // PWM脉冲个数, 缺省值=0:连续输出

EM9380 PWM(PWM3~PWM8)实时控制应用举例:

// 打开MCU驱动,输入参数固定为0
HANDLE hMCU = OpenMCU( 0 );
// 控制PWM3以频率100KHz,每个脉冲25%的低电平输出3个脉冲
MCU_PWM_CHANNEL(hMCU, 3, 100000, 250, 0, 3 );
// 控制PWM4以频率100KHz,每个脉冲25%的高电平输出3个脉冲
MCU_PWM_CHANNEL(hMCU, 4, 100000, 250, 1, 3 );
// 控制PWM5输出5MHz,50%占空比的连接PWM信号,dwNum参数使用缺省值
MCU_PWM_CHANNEL(hMCU, 5, 5000000, 500, 0);

// 控制PWM5停止输出
MCU_PWM_CHANNEL(hMCU, 5, 0, 0, 0);
// 关闭MCU驱动,释放相应资源
CloseMCU( hMCU );

执行上述代码后PWM3与PWM4的输出波形如下:(注:下图只是为了说明pol参考对输出波形的影响,实际上PWM3与PWM4并不是同步输出的,EM9380的其它PWM暂时也不具有同步功能)

嵌入式主板

PWM输出波形

EM9380可以支持8路PWM输出,其中6路是从从CPU Crotex-M3上引出的,支持PWM输出计数,他们与GPIO管脚复用关系如下:

EM9380 GPIO# PWM通道 备注
GPIO20 PWM1  
GPIO21 PWM2  
GPIO4 PWM3 可计数
GPIO5 PWM4 可计数
GPIO6 PWM5 可计数
GPIO7 PWM6 可计数
GPIO0 PWM7 可计数
GPIO3 PWM8 可计数

 

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分