由于比赛机器人的特殊 性,产生了一种中间状态的需求: 它们不像遥控模型那样追求速度,但想要类似于遥控模型的操控特性;如何确定直流电机驱动的PWM频率 www.embedream.com 因为机器人比赛不像赛车,穷其全力一搏,只求瞬间辉煌;它需要有一定时间去做一些蕴含智慧的活动,而不是四肢发达的“莽汉”,所以要有一定的“耐力”。 二、少而“模糊”的答案 在写“寻迹小车 FollowMe”一文时,我找了许多资料,但没有找到一篇可以帮我释疑 解惑的。下面就是几篇我所找到的文章摘录: 1)有的这样说:“PWM 控制的基本电路与ON/OFF 控制相同,电路构成也很简单,施 加在电机上的PWM 信号一般为几千赫至几十千赫”(摘自《机器人控制电子学》P76 2)有的这样说:“PWM控制对频率的要求一般不是太高。从50Hz 到1000Hz 的频段, 电机都可以正常工作。”(摘自《机器人探索 此段文字提到了我所关注的问题:电机特性对PWM频率的影响。可是它的结论和建议如何确定直流电机驱动的PWM频率 www.embedream.com 却给我带来了更多的困惑!(看红线所标注的)读者可以对照一下,这三篇内容就相互“冲突”的厉害,也许读者认为我是断章取义, 作者也许在前或后有先决条件,那可以帮我仔细看看原作,但愿能有所发现。 4)我以前文章中推荐过多次的《电动机的单片机控制》一书对直流电机驱动描述的相 当详细,可唯独没有阐述如何确定PWM的频率,只是留了一道思考题: 4、PWM频率如何选择?”(摘自书中P149 郁闷!是否此问题简单到不用描述了?!5)还有一本我推荐过的书 ——《直流电动机实际应用技巧》,书中也只是泛泛的说了 一下:(摘自书中 P122 文中所说“脉冲列驱动”就是指PWM;电器时间常数te 为电机等效电感La 与等效电 阻Ra 之比(摘自书中的描述,P121 *5),至于如何确定这两个值不太清楚。 这段和第三篇中所描述的比较一致。似乎都是说PWM频率越高越好。我在网上还看到 有这样的言论:频率越高的PWM调速器档次越高! 正是这些“模糊、混乱”的概念导致我“无所适从”,所以在“寻迹小车FollowMe”中, 编写程序时将 PWM PWM的频率都交给使用者确定,期望读者能摸索出合适的选择, 并找出选择的依据。 如何确定直流电机驱动的PWM频率 www.embedream.com 但一直没有看到我想要的反馈,自己略作尝试也未能得出清晰的结论,所以在设计圆梦小车时就放弃了 PWM 频率改变的功能,使用定频方式(7200Hz)。用在当时的130 电机上 没有发现什么明显不妥,也就不再深究了。 三、问题再次显现 这次减速箱装配好后,我满怀希望的替换下原来的130 电机,并且用直流电源先试了一 下,感觉不错(详见“圆梦小车强身健体啦”一文)。 立马装上控制部分,发控制命令;本想“秀”一下,用较低的PWM值,因为我认为减 速比加大后,力矩应该增加,低PWM 值也应能启动。可实际效果让我大失所望,用“走直 线”模式测试,基准PWM50 启动不了,加到100 才勉强能走,到200 才算比较流畅。此时, 我脑子里立马掠过一个念头:“坏了,几万块钱要打水漂了!”。 冷静一会儿才想起可能是PWM频率的问题。又将上面看过的资料再次研读一番,而且 拆了一个电机测量电阻和电感。但第三篇中的那段话还是让我不得其解: 如果为了满足文中的不等式,PWM 频率不是越高越好吗?何来“所允许的最高 PWM 信号频率”?应该是最低频率才对吧?不知原文是如何描述的。 但按基本的电学常识分析,不可能频率越高越好,因为电机的线圈肯定有电感,且电流 越小的电机由于匝数多,电感量会越大。基于电工学常识,电感中的电流不能突变,其感抗 与频率成正比。 所以当施加过高频率的电压后,由于感抗作用,可能电流很小。 而电机的力矩产生于磁场作用,而磁场的强弱与电流成正比,所以过小的电流将大大降 如何确定直流电机驱动的PWM频率 www.embedream.com 低磁力,从而导致电机“无力”。这就像十字路口的红绿灯,假设各方向占50%的通行时间,如果所设间隔恰当,就能保 证最佳的通行效果,如果一味缩短周期,直到小于汽车的启步时间,即使仍保持50%的比例, 那路口也将完全无法通行。这和电机上施加过高频率的电压应该是一样的。 我觉得在新电机上遇到的现象就是这个原因,可遍寻不到依据,只是从 LEGO RCX技术资料上看到:RCX 的PWM频率是125Hz!我觉得LEGO的电机和这次选择的电机参数 类似,所以下决心修改PWM频率。 上图为网页截图,注意红线所标信息以及图示,说明小于 1000Hz PWM频率还是可 以使用的。 四、实施 好在STC12LE5412AD 所提供的PCA 比较灵活,程序只需略作修改即实现了。 原来 PWM 信号是使用 PCA 的PWM 模式产生的,好处是不需要软件干预,只要向相 应的寄存器中赋值即可;缺点是频率变化较单一,靠改变PCA 计数器的信号分频,只有两种 选择 Fosc/12或者Fosc/2 对应MCU 振荡器频率 22.1184MHz,只有两个 PWM 如何确定直流电机驱动的PWM频率 www.embedream.com 频率可选:43200Hz和7200Hz。 由于此次是需要降低频率,所以可以用软件干预方式实现,即: 使用 PCA 的比较器模式,允许匹配中断,在中断中产生 PWM 信号,通过不断加载新 的比较值控制PWM的频率。PCA 初始化如下: 按此模式,只要PWM信号的周期不大于: 1/(22.1184MHz/12) 3.5ms,即频率不低于 28Hz 都可以实现。 中断中产生PWM信号的处理如下: 以上为一个电机的处理,另一个电机完全相同。 变量 g_uiMotorLTime[2] 用于存放PWM信号的高低电平时间,两个单元之和为PWM 的周期。 变量g_uiMotorLTimeCmp 是高低电平时间的累计值,作为PCA 通道的比较值,通过 其控制PCA 的中断。 如何确定直流电机驱动的PWM频率 www.embedream.com 程序中作了一些防护,主要是占空比低于一定值后输出恒为“0”,高于一定值后输出恒为“1”。具体可看所附程序(查找“0805”即可找到所有为此修改的地方)。 以下为设置的常量,通过修改这些值,可方便的改变PWM频率和限定值: 读者可修改上述参数方便地实现不同的PWM频率,观察对电机特性的影响。 五、效果 以下所做测量只是两个PWM频率的对比:7200Hz vs 125Hz。 为了方便测量,在原来的PC 机控制界面增加了一个定时输出功能,可以设定小车的运 行时间,利用PC 定时期到时发出停止命令。界面如下: 之所以选用直接的PWM输出而不用原来的走直线功能,是因为走直线程序中小车会根 据偏移不断改变PWM值,这样的结果就不真实了。 由于电机的差异,所以左右电机的PWM值略有不同,以使小车走的接近直线。 如何确定直流电机驱动的PWM频率 www.embedream.com 测试结果如下:PWM频率 :125Hz PWM频率:7200Hz 左PWM 右PWM 距离 cm 时间 速度cm/s 左PWM 右PWM 距离 cm 时间 速度cm/s 250 235 174 43.5250 235 174 43.5208 195 164 41205 195 140 35160 140 172 34.4157 143 120 24110 90 151 25.1108 93 86 14.377 60 150 10 15 77 67 75 10 7.5 注:小车程序中PWM值250 为100%! 从上表中可以看出,在PWM 值比价大的时候,两个频率的速度差别不大;随着 PWM 值降低,速度差明显变大,我认为是前述原因所致,因为随着 PWM 值降低,有效驱动脉冲 宽度逐渐缩小,导致电机无法得到有效的能量,所以其出力自然不足。 可以肯定,125Hz 不是最佳频率,只能说比7200Hz 好,什么频率更好?如何确定之? 有待读者共同探讨。 月20日星期五 参考资料: 1、《机器人控制电子学》 科学出版社 ISBN7-03-013168-1 2、《机器人探索——工程实践指南》 电子工业出版社 ISBN7-5053-9911-X 3、《机器人设计与控制》 科学出版社 ISBN5-03-012843-5 4、《电动机的单片机控制》北京航空航天大学出版社 ISBN 7-81077-175-2 5、《直流电动机实际应用技巧》 科学出版社 ISBN 7-03-017498-4 6、Lego RCX 电机PWM信息:http://www.jopdesign.com/lego/index.jsp