📄 寻迹小车 followme—— 之六:电机驱动部分调试.htm
字号:
<TD class=article-top style="BACKGROUND-COLOR: #e0e0e0"
width="99%">寻迹小车 FollowMe—— 之六:电机驱动部分调试<BR><SPAN
class=smalltype>写于: 星期一 04 九月 @ 03:29:59 </SPAN></TD></TR>
<TR>
<TD></TD></TR>
<TR>
<TD><A
href="http://www.robotdiy.com/topics.php?op=viewtopic&topic=4"><IMG
height=77 alt=智能机器人开发 hspace=4
src="寻迹小车 FollowMe—— 之六:电机驱动部分调试.files/robot_hardware.gif"
width=40 align=right
border=0></A><I>电机驱动部分程序已全部编完,进入实际调试阶段,为了便于调试,在PC机上编写了一个测试程序,以实现发送PWM控制值、转速控制值,以及设置PWM频率、PID参数,使调试的过程更方便。</I>
<BR><BR>
<P>
<H1 align=center>寻迹小车 FollowMe</H1>
<H2 align=center>—— 之六:电机驱动部分调试</H2>
<P align=center>作者:<A
href="http://www.robotdiy.com/phpbb2/profile.php?mode=viewprofile&u=3954"
target=_blank>Hanker</A></P>
<P align=left>前面的章节:</P>
<OL>
<LI><A
href="http://www.robotdiy.com/article.php?sid=261"
target=_blank>车的主体</A>;
<LI><A
href="http://www.robotdiy.com/article.php?sid=262"
target=_blank>控制部分中的电机驱动器设计</A>;
<LI><A
href="http://www.robotdiy.com/article.php?sid=263"
target=_blank>轨迹采样及逻辑控制部分硬件设计</A>;
<LI><A
href="http://www.robotdiy.com/article.php?sid=264"
target=_blank>开环控制功能</A>;
<LI><A
href="http://www.robotdiy.com/article.php?sid=265"
target=_blank>电机测速及转速控制</A>; </LI></OL>
<H2>6.2 电机驱动模块调试</H2>
<H3>6.2.1 调试前准备</H3>
<P>电机驱动部分程序已全部编完,进入实际调试阶段,为了便于调试,在PC机上编写了一个测试程序,以实现发送PWM控制值、转速控制值,以及设置PWM频率、PID参数,使调试的过程更方便。</P>
<P>由于电机驱动部分支持了转速测量的功能,为了在调试中能直观的看到转速的变化,增加一个读转速命令,命令帧格式如下:<BR><EM>0x55
0xAA 0x02(帧长) 0x04 (读转速命令) 电机序号(1字节)校验和(1字节)</EM></P>
<P>返回帧为:<BR><EM>0xAA 0x55 0x04(帧长) 0x84 (转速值返回)
电机序号(1字节)转速(2字节)校验和(1字节) </EM></P>
<P>其中:<BR><STRONG>电机序号</STRONG> ——
从1开始;<BR><STRONG>转速值</STRONG> ——
2字节有符号数,正对应正转,负对应反转,单位为:0.1转/每分钟;<BR><STRONG>校验和</STRONG>
—— 从命令字开始到数据区结束所有字节的算术和的反码,取低字节。</P>
<P>PC机调试界面如下:</P>
<P><IMG height=433
src="寻迹小车 FollowMe—— 之六:电机驱动部分调试.files/Debug_Interface.jpg"
width=772> </P>
<P>按下“读取”按钮后程序每秒读一次速度值并显示,再按则停止读取。</P>
<P>在单片机程序中也要加入相应的程序。见程序附件。
<H3></H3>
<P></P>
<P>利用上述程序实现了参数设置和转速读取的功能,但是对于小车这类移动性的应用,使用有线的方式通讯将给调试带来困难,因为小车自身重量和动力都有限,如果拖上一根通讯电缆,将影响小车的运动,使得调试时观察的结果大打折扣。而且运动范围也受到影响,可能无法实现调试的目的,因为小车还没有运动到稳态就被电缆拖住了。</P>
<P>所以上述调试软件如果要切实发挥作用,还必须有一个无线的信道,而且要是使用串口的,否则单片机很难支持(或者要花费较大精力),成本还不能高。</P>
<P>正巧找到了一个低价的无线收发模块,加了一片单片机控制,构成了一个无线串口转换器。这个转换器对于通讯的双方而言是“透明”的,与原来有线通讯一样,只是中间有些延时。</P>
<P>因为目前笔记本电脑很少有串口了,所以在这个转发器上设计了USB转串口的功能,提供一个TTL电平的串口,这一方面为无线转发器接入PC提供了方便,另一方面为STC12系列单片机提供了一个USB口的ISP(在线编程器),为那些没有串口的PC机学习者提供了方便。</P>
<P>串口无线转发器的功能示意如下:</P>
<P><IMG height=140
src="寻迹小车 FollowMe—— 之六:电机驱动部分调试.files/Robot_Wireless_Communication.gif"
width=647> </P>
<P>转发器的内部结构如下:(点击看大图)<BR><A
href="http://www.robotdiy.com/images/FollowMe_robot/USB2Wireless.jpg"><IMG
height=180
src="寻迹小车 FollowMe—— 之六:电机驱动部分调试.files/USB2Wireless_mini.jpg"
width=240 border=0></A> </P>
<P>作为PC机侧的串口无线转发应用模式如下:(点击看大图)<BR><A
href="http://www.robotdiy.com/images/FollowMe_robot/USB2Wireless_Box.jpg"><IMG
height=180
src="寻迹小车 FollowMe—— 之六:电机驱动部分调试.files/USB2Wireless_Box_mini.jpg"
width=240 border=0></A> </P>
<P>作为单片机侧的串口无线转发应用模式如下:(点击看大图)<BR><A
href="http://www.robotdiy.com/images/FollowMe_robot/Wireless_MCU.jpg"><IMG
height=180
src="寻迹小车 FollowMe—— 之六:电机驱动部分调试.files/Wireless_MCU_mini.jpg"
width=240 border=0></A> </P>
<P>作为STC12系列单片机ISP(在线编程)使用如下:(点击看大图)<BR><A
href="http://www.robotdiy.com/images/FollowMe_robot/Wireless_MCU_02.jpg"><IMG
height=180
src="寻迹小车 FollowMe—— 之六:电机驱动部分调试.files/Wireless_MCU_02_mini.jpg"
width=240 border=0></A> </P>
<P>对于PC机侧,使用USB口入(在PC机内虚拟为一个串口,程序按串口控制),无线出。对于单片机(小车)侧,使用TTL电平串口信号入,无线出。</P>
<P>目前所做的转发器为固定波特率,串口为 19200bps 8
N1,无线为19200bps。因为使用的也是STC12系列单片机控制,所以修改很方便,自身的USB转换器就可以为自己编程。</P>
<P>这个串口无线转发器对于调试移动类的机器人项目应当很有帮助,拿最常见的轨迹项目来说,如果能在调试时不断返回小车的速度、控制状态、采集的信号,我想调试者也不用一次次盲目地改变参数。在走线失败的情况下,也不至于靠猜测的原因来修改程序了。</P>
<H3>6.2.2 调试步骤</H3>
<OL>
<LI>调试测速脉冲输入 ——
确定采样器的位置和对应电路中的参数,以使输入MCU的脉冲信号尽量为50%占空比;
<LI>调试几个特定PWM值下的PWM频率 —— 确定针对所用电机的最佳PWM频率。
<LI>调试不同PWM值的电机转动状态 ——
分成空载和有载测试,根据转速变化和运动状态确定双极性驱动、受限单极性驱动的转换点。
<LI>测试不同PWM值命令的转速变化 ——
为PID参数设置做准备,可能要增加一个连续返回转速的功能,通过PC机来计算出转速变化的飞升曲线。
<LI>根据《电动机的单片机控制》书中4.4节所描述的“经验法”确定PID参数。观察效果。因为各方面的客观条件制约,所以这个PID参数调试过程主要是感受一下三个参数给最终结果带来的影响。
</LI></OL>
<H3>6.2.3 调试记录</H3>
<P>电机驱动器内部结构如下:(点击看大图)<BR><A
href="http://www.robotdiy.com/images/FollowMe_robot/Controller_HBridge.jpg"><IMG
height=180
src="寻迹小车 FollowMe—— 之六:电机驱动部分调试.files/Controller_HBridge_mini.jpg"
width=240 border=0></A> </P>
<P>电机驱动器外形:(点击看大图)<BR><A
href="http://www.robotdiy.com/images/FollowMe_robot/Controller_HBridge_Box.jpg"><IMG
height=180
src="寻迹小车 FollowMe—— 之六:电机驱动部分调试.files/Controller_HBridge_Box_mini.jpg"
width=240 border=0></A> </P>
<H3>6.2.3.1 码盘采样调试</H3>
<P>码盘安装:(点击看大图)<BR><A
href="http://www.robotdiy.com/images/FollowMe_robot/Encoder_Installation.jpg"><IMG
height=180
src="寻迹小车 FollowMe—— 之六:电机驱动部分调试.files/Encoder_Installation_mini.jpg"
width=240 border=0></A> </P>
<P>采样器输入波形:(点击看大图)<BR><A
href="http://www.robotdiy.com/images/FollowMe_robot/Wave_01.jpg"><IMG
height=195
src="寻迹小车 FollowMe—— 之六:电机驱动部分调试.files/Wave_01_mini.jpg"
width=240 border=0></A> </P>
<P><BR>从输入波形(码盘采样电路中U5的2脚)看,输入的电压最大值3.16V,最小值1.88V,中心值为
2.52V,VCC为3.3V,由此可算出,比较器的判断中值应该为0.76VCC,这样可以得到:</P>
<P>R5 = 10k, R6 = 33k</P>
<P>根据信号的幅度(2.52 +/-
0.6V)可以将比较器的回差定为0.3V,即输入上升时大于2.8V、下降时小于2.2V时输出发生翻转。</P>
<P>根据上限计算:R7 = 14.39k —〉15k,<BR>根据下限计算:R7 = 50k, </P>
<P>因为上下分压电阻的差异,所以导致不对称,同样的电阻,对上限的作用小,下限的作用大,用适当抬高判断的中心值来弥补,即将R6
改为43k, R7 选用 43k,根据这个值计算出实际的上下限为:</P>
<P>上限 = 2.78V ; 下限 = 2.28V</P>
<P>基本符合所期望的值。<BR>按上述参数焊接的电路结果如下:(点击看大图)<BR></P>
<P><A
href="http://www.robotdiy.com/images/FollowMe_robot/Wave_02.jpg"><IMG
height=196
src="寻迹小车 FollowMe—— 之六:电机驱动部分调试.files/Wave_02_mini.jpg"
width=240 border=0></A> </P>
<P>上图中蓝色为输入波形,黄色为比较器输出波形(U5
的1脚),即输入到单片机的信号。注意两道蓝色横线所对应的电平,上面一根电压为2.92V,对应输入信号上升的转换点(即上限),下面一根电压为2.28V,对应输入信号下降的转换点(即下限),和前面的计算基本一致。(输入中的蓝色毛刺信号可能是测量时接触不良带来的,也可能是电机的干扰)。</P>
<H3>6.2.3.2 电机PWM控制调试</H3>
<P>因为衡量PWM的效果需要测量速度,而测速时出现以下问题:</P>
<P>在测量转速中发现,转速有跳变的现象,结合上面的波形分析,估计是毛刺干扰造成,应当在设计硬件时加以防护,目前硬件已做好,且是表贴器件,不易加装滤波元件,故考虑用软件消除。</P>
<P>从波形上可以看出,毛刺通常为负尖脉冲,影响正跳边沿。所以考虑:</P>
<OL>
<LI>以负跳的周期为基准,当正跳周期相对于对应的负跳周期偏差大于一定值时,则不要此次的正跳数据。
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -