寻迹小车FollowMe之六: 电机驱动部分调试
0赞
[提要] 这一系列文章主要是为了帮助初学者入门,借助“寻迹小车”这个项目逐步进入嵌入式控制领域。
本篇主要介绍通过串口使用PC机调试程序的方式,并介绍了一种价廉的无线通讯硬件。
6.2 电机驱动模块调试
6.2.1 调试前准备
电机驱动部分程序已全部编完,进入实际调试阶段,为了便于调试,在PC机上编写了一个测试程序,以实现发送PWM控制值、转速控制值,以及设置PWM频率、PID参数,使调试的过程更方便。
由于电机驱动部分支持了转速测量的功能,为了在调试中能直观的看到转速的变化,增加一个读转速命令,命令帧格式如下:
0x55 0xAA 0x02(帧长) 0x04 (读转速命令) 电机序号(1字节)校验和(1字节)
返回帧为:
0xAA 0x55 0x04(帧长) 0x84 (转速值返回) 电机序号(1字节)转速(2字节)校验和(1字节)
其中:
电机序号 —— 从1开始;
转速值 —— 2字节有符号数,正对应正转,负对应反转,单位为:0.1转/每分钟;
校验和 —— 从命令字开始到数据区结束所有字节的算术和的反码,取低字节。
PC机调试界面如下:

按下“读取”按钮后程序每秒读一次速度值并显示,再按则停止读取。
在单片机程序中也要加入相应的程序。见程序附件。
利用上述程序实现了参数设置和转速读取的功能,但是对于小车这类移动性的应用,使用有线的方式通讯将给调试带来困难,因为小车自身重量和动力都有限,如果拖上一根通讯电缆,将影响小车的运动,使得调试时观察的结果大打折扣。而且运动范围也受到影响,可能无法实现调试的目的,因为小车还没有运动到稳态就被电缆拖住了。
所以上述调试软件如果要切实发挥作用,还必须有一个无线的信道,而且要是使用串口的,否则单片机很难支持(或者要花费较大精力),成本还不能高。
正巧找到了一个低价的无线收发模块,加了一片单片机控制,构成了一个无线串口转换器。这个转换器对于通讯的双方而言是“透明”的,与原来有线通讯一样,只是中间有些延时。
因为目前笔记本电脑很少有串口了,所以在这个转发器上设计了USB转串口的功能,提供一个TTL电平的串口,这一方面为无线转发器接入PC提供了方便,另一方面为STC12系列单片机提供了一个USB口的ISP(在线编程器),为那些没有串口的PC机学习者提供了方便。
串口无线转发器的功能示意如下:

转发器的内部结构如下:

作为PC机侧的串口无线转发应用模式如下:

作为单片机侧的串口无线转发应用模式如下:

作为STC12系列单片机ISP(在线编程)使用如下:

对于PC机侧,使用USB口入(在PC机内虚拟为一个串口,程序按串口控制),无线出。对于单片机(小车)侧,使用TTL电平串口信号入,无线出。
目前所做的转发器为固定波特率,串口为 19200bps 8 N1,无线为19200bps。因为使用的也是STC12系列单片机控制,所以修改很方便,自身的USB转换器就可以为自己编程。
这个串口无线转发器对于调试移动类的机器人项目应当很有帮助,拿最常见的轨迹项目来说,如果能在调试时不断返回小车的速度、控制状态、采集的信号,我想调试者也不用一次次盲目地改变参数。在走线失败的情况下,也不至于靠猜测的原因来修改程序了。
6.2.2 调试步骤
1)调试测速脉冲输入 —— 确定采样器的位置和对应电路中的参数,以使输入MCU的脉冲信号尽量为50%占空比;
2)调试几个特定PWM值下的PWM频率 —— 确定针对所用电机的最佳PWM频率。
3)调试不同PWM值的电机转动状态 —— 分成空载和有载测试,根据转速变化和运动状态确定双极性驱动、受限单极性驱动的转换点。
4)测试不同PWM值命令的转速变化 —— 为PID参数设置做准备,可能要增加一个连续返回转速的功能,通过PC机来计算出转速变化的飞升曲线。
5)根据《电动机的单片机控制》书中4.4节所描述的“经验法”确定PID参数。观察效果。因为各方面的客观条件制约,所以这个PID参数调试过程主要是感受一下三个参数给最终结果带来的影响。
6.2.3 调试记录
电机驱动器内部结构如下:

电机驱动器外形:

6.2.3.1 码盘采样调试
码盘安装:

采样器输入波形:

从输入波形(码盘采样电路中U5的2脚)看,输入的电压最大值3.16V,最小值1.88V,中心值为 2.52V,VCC为3.3V,由此可算出,比较器的判断中值应该为0.76VCC,这样可以得到:
R5 = 10k, R6 = 33k
根据信号的幅度(2.52 +/- 0.6V)可以将比较器的回差定为0.3V,即输入上升时大于2.8V、下降时小于2.2V时输出发生翻转。
根据上限计算:R7 = 14.39k —〉15k,
根据下限计算:R7 = 50k,
因为上下分压电阻的差异,所以导致不对称,同样的电阻,对上限的作用小,下限的作用大,用适当抬高判断的中心值来弥补,即将R6 改为43k, R7 选用 43k,根据这个值计算出实际的上下限为:
上限 = 2.78V ; 下限 = 2.28V
基本符合所期望的值。
按上述参数焊接的电路结果如下:

上图中蓝色为输入波形,黄色为比较器输出波形(U5 的1脚),即输入到单片机的信号。注意两道蓝色横线所对应的电平,上面一根电压为2.92V,对应输入信号上升的转换点(即上限),下面一根电压为 2.28V,对应输入信号下降的转换点(即下限),和前面的计算基本一致。(输入中的蓝色毛刺信号可能是测量时接触不良带来的,也可能是电机的干扰)。
6.2.3.2 电机PWM控制调试
因为衡量PWM的效果需要测量速度,而测速时出现以下问题:
在测量转速中发现,转速有跳变的现象,结合上面的波形分析,估计是毛刺干扰造成,应当在设计硬件时加以防护,目前硬件已做好,且是表贴器件,不易加装滤波元件,故考虑用软件消除。
从波形上可以看出,毛刺通常为负尖脉冲,影响正跳边沿。所以考虑:
1)以负跳的周期为基准,当正跳周期相对于对应的负跳周期偏差大于一定值时,则不要此次的正跳数据。
2)将脉冲计数处理改在负跳周期处理。
但是,程序修改后效果仍不理想,用示波器观察后发现,电机在高速转动时带来的干扰很大,而且所用的两个电机干扰还不同,一个略好,这可能与所用电机的电刷质量有关,我目前所用的是奥迪291系列玩具遥控车的电机,工作电压3V,可能性能一般。基于这个情况,我只能将调试的大概情况汇总一下,抛砖引玉,供日后有意尝试者参考。
测量的转速波动见前面的PC调试界面。
PWM控制的效果汇总如下:
1)由于采用的电机供电电压是5V,而电机额定工作电压是3V,所以可使电机转动的PWM值范围可从25% ~ 100%;
2)双极性驱动效果不好,电流很大,但是电机转动比较勉强,是否是由于电机的特性不好造成,还有待仔细测试;
3)PWM的频率变化会带来电流的变化,频率越高电流越小,好像力矩也小了,这与我事先的预测相同:由于电机的感性阻抗作用,随着PWM频率的升高,感抗增大,导致电流减小。尤其我所使用的电机是遥控车电机,额定电流较小,线圈圈数必然较多,感抗自然就较大。
4)什么样的PWM频率最合适可能要根据电机的特性决定,有一个想法:可否在低占空比时采用高PWM频率,而高占空比则降低PWM的频率,这样可以弥补低占空比带来的“断流”问题,以及高占空比带来的高频阻抗问题。这还有待尝试。
5)虽然电机的干扰较大,导致测速脉冲输入有毛刺,但是单片机似乎没有因此而误动作,因为脉冲定数转动功能一直是正常的,所以要解决的问题是测速干扰。
小车测试的状态如下:

测试的过程见所附视频文件。
由于直行会很快遇到障碍物,来不及测量、观察,所以采用了单轮转动模式测量,这样可以在原地不动。调试时使用了无线串口转换器,效果很好。
从图中可以看出,这样的结构有些累赘,正好有个大学生基于这篇文章设计了一个方案,使用一片MCU实现完整的小车寻迹,所有电路在一片PCB上,单片机仍然使用的是STC12C5412AD,我觉得这样更合理,所以准备着手基于这个方案继续,完成小车寻迹功能。而前面所做的电机驱动器可以用在一些要扩充电机驱动能力和改善电机驱动的场合,如增加RCX的驱动能力,或者让RCX能够驱动非LEGO电机等。
单板方案的PCB如下:

因为目前的转速测量存在问题,PID转速控制暂时无法调试,待转速测量问题解决后再进行。
6.3 补白
以上调试的纪录主要目的是为了能让有意学习者了解如何去实施,需要什么手段?应该如何着手?遇到问题该如何处理?那段输入采样电路的计算、调试过程本打算忽略,但我尝试问了一下周围的大学生,很遗憾。所以我还是详细的记录了这个过程,希望能够帮助学习者了解理论、实践的关系,学会分析问题。
出现的干扰问题是意料之中的,因为这是直流电刷电机的最典型特点,但是对于学习者而言,如何能消除这个干扰,却是一个很好的锻炼机会,因为在工业控制中,抗干扰是个非常重要的课题,而火花干扰是最常见的干扰形式。
当然,如果是以小车的性能为核心目标,那不妨尝试使用无刷直流电机。
程序在调试中做了多处修改,望及时更新,以免前面的Bug产生误导。
(未完待续)
附件:
1)更新后的电机驱动程序压缩包(含调试用PC侧程序)
9594473175533.rar
(20060901)
