⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 寻迹小车 followme—— 之五:电机测速及转速控制.htm

📁 机器人应用的全套实例寻机小车
💻 HTM
📖 第 1 页 / 共 3 页
字号:
                        href="http://www.robotdiy.com/phpbb2/viewtopic.php?t=15365" 
                        target=_blank>&nbsp;kk</A> on 26-01-07 @ 
                        14:18</FONT><BR><BR></TD></TR></TBODY></TABLE></TD></TR></TBODY></TABLE><BR><!-- Start themeplugin -->
            <TABLE style="TEXT-ALIGN: left" cellSpacing=1 cellPadding=4 
            width="100%" border=0>
              <TBODY>
              <TR>
                <TD class=boxtop style="BACKGROUND-COLOR: #e0e0e0" 
                  width="100%">智能机器人相关链接</TD></TR>
              <TR>
                <TD><FONT color=#0000ff size=+1>
                  <TABLE width="100%" border=1>
                    <TBODY>
                    <TR>
                      <TD><A href="http://www.for-expo.com/ch/car/jqr.htm" 
                        target=_blank><IMG 
                        src="寻迹小车 FollowMe—— 之五:电机测速及转速控制.files/Shanghai_Robot_Expo_2006.png"></A></TD></TR>
                    <TR>
                      <TD><A 
                        href="http://www.robotdiy.com/mod.php?mod=weblink&amp;op=view_category&amp;cid=105&amp;start_num=0"><IMG 
                        src="寻迹小车 FollowMe—— 之五:电机测速及转速控制.files/dytrol_logo.gif"></A></TD></TR>
                    <TR>
                      <TD><A 
                        href="http://www.robotdiy.com/mod.php?mod=weblink&amp;op=view_category&amp;cid=101&amp;start_num=0"><IMG 
                        src="寻迹小车 FollowMe—— 之五:电机测速及转速控制.files/ChinaAI_logo.gif"></A></TD></TR>
                    <TR>
                      <TD><A href="http://www.sciei.com/" target=_blank><IMG 
                        src="寻迹小车 FollowMe—— 之五:电机测速及转速控制.files/sciei.gif"></A></TD></TR></TBODY></TABLE></FONT></TD></TR></TBODY></TABLE><BR></TD>
        <TR>
          <TD>FireFox,一个比IE更好的浏览器,点击马上下载Google的工具条:<BR>
            <SCRIPT type=text/javascript><!--google_ad_client = "pub-1177468215529121";google_ad_width = 120;google_ad_height = 240;google_ad_format = "120x240_as_rimg";google_cpa_choice = "CAAQ4cP8zwEaCFyqZHuqSKdeKKG_93M";//--></SCRIPT>

            <SCRIPT src="寻迹小车 FollowMe—— 之五:电机测速及转速控制.files/show_ads.js" 
            type=text/javascript></SCRIPT>
            <BR>ROBOTDIY所有页面全面支持FireFox。 </TD></TR></TR></TBODY></TABLE></TD>
    <TD class=leftshade vAlign=bottom width="1%"><!-- <img src="themes/career/img/btmleft.gif" width="19" height="19" alt="." border="0">-->&nbsp; 
    </TD>
    <TD vAlign=top width="80%">
      <TABLE cellSpacing=0 cellPadding=0 width="100%" border=0>
        <TBODY>
        <TR>
          <TD vAlign=top colSpan=2>
            <TABLE cellSpacing=0 cellPadding=6 width="100%" 
            summary="Data for Introduction" border=0>
              <TBODY>
              <TR>
                <TD><IMG height=50 alt=. 
                  src="寻迹小车 FollowMe—— 之五:电机测速及转速控制.files/trans.gif" width=1 
                  border=0></TD>
                <TD vAlign=top align=right width="99%"><IMG 
                  src="寻迹小车 FollowMe—— 之五:电机测速及转速控制.files/robot_diy_ban.gif" 
                  border=0> </TD></TR>
              <TR>
                <TD>&nbsp;</TD>
                <TD align=right><B>| <A class=foot 
                  onclick="javascript:window.external.addfavorite('http://www.robotdiy.com','机器人发烧友天地--ROBOTDIY')" 
                  href="http://www.robotdiy.com/#">加入收藏夹 </A>| <A 
                  href="http://www.robotdiy.com/phpbb2/" 
                  target=_blank>机器人技术论坛</A> | <A 
                  href="http://www.robotdiy.com/help.htm" target=_blank>帮助</A> 
                  |<A href="http://www.robotdiy.com/aboutus.htm" 
                  target=_blank>关于我们</A> |<A 
                  href="http://www.robotdiy.com/aboutus_e.htm" 
                  target=_blank>About Us</A>|</B> </TD></TR></TBODY></TABLE>
            <HR>
          </TD></TR>
        <TR>
          <TD vAlign=top>
            <TABLE cellSpacing=4 cellPadding=6 width="100%" 
            summary="Data for Introduction" border=0>
              <TBODY>
              <TR>
                <TD><!-- End of header.php file -->
                  <SCRIPT type=text/javascript><!--google_ad_client = "pub-1177468215529121";google_ad_width = 728;google_ad_height = 90;google_ad_format = "728x90_as";google_ad_type = "text_image";google_ad_channel ="";//--></SCRIPT>

                  <SCRIPT src="寻迹小车 FollowMe—— 之五:电机测速及转速控制.files/show_ads.js" 
                  type=text/javascript></SCRIPT>

                  <TABLE style="TEXT-ALIGN: left" cellSpacing=5 cellPadding=4 
                  width="100%" border=0>
                    <TBODY>
                    <TR>
                      <TD class=article-top style="BACKGROUND-COLOR: #e0e0e0" 
                      width="99%">寻迹小车 FollowMe—— 之五:电机测速及转速控制<BR><SPAN 
                        class=smalltype>写于: 星期一 14 八月 @ 16:45:34 </SPAN></TD></TR>
                    <TR>
                      <TD></TD></TR>
                    <TR>
                      <TD><A 
                        href="http://www.robotdiy.com/topics.php?op=viewtopic&amp;topic=4"><IMG 
                        height=77 alt=智能机器人开发 hspace=4 
                        src="寻迹小车 FollowMe—— 之五:电机测速及转速控制.files/robot_hardware.gif" 
                        width=40 align=right border=0></A><I>此篇涉及电机的测速和转速控制。</I> 
                        <BR><BR>
                        <H1 align=center>寻迹小车 FollowMe</H1>
                        <H2 align=center>—— 之五:电机测速及转速控制</H2>
                        <P align=center>作者:<A 
                        href="http://www.robotdiy.com/phpbb2/profile.php?mode=viewprofile&amp;u=3954" 
                        target=_blank>Hanker</A></P>
                        <P>前面已完成了<A 
                        href="http://www.robotdiy.com/article.php?sid=261" 
                        target=_blank>车的主体</A>,<A 
                        href="http://www.robotdiy.com/article.php?sid=262" 
                        target=_blank>控制部分中的电机驱动器设计</A>,<A 
                        href="http://www.robotdiy.com/article.php?sid=263" 
                        target=_blank>轨迹采样及逻辑控制部分硬件设计</A>和<A 
                        href="http://www.robotdiy.com/article.php?sid=264" 
                        target=_blank>开环控制功能</A>,此篇涉及电机的测速和转速控制。 
                        <H3>6.1.3.3 转速测量</H3>
                        <P>因为本项目的主要目的是学习单片机的应用,能够低成本的实现功能是主要目标,性能的要求相对弱一些,所以测速选择了简易码盘作为速度反馈信号,使用反射式采样,由于担心反射式采样的分辨率有限,所以只设计10个黑印,我所选择的反射采样器是Sharp的GP330,其特点是反射距离远,受自然光干涉少,作为轨迹采样十分适合,但作为码盘采样有些“粗”了。建议有意尝试者改用其它的小体积、近距离的反射采样器,这样分辨率会高一些,可以多印一些黑印,以提高转速测量的速度和精度。</P>
                        <P>最好使用透射式码盘,但是那样结构就相对复杂一些,但测量的分辨率可以大大提高。<BR>因为是反射式采样,输入信号不会很好,所以在硬件设计时就做了考虑,线路如下:<BR></P>
                        <P align=center><IMG height=390 
                        src="寻迹小车 FollowMe—— 之五:电机测速及转速控制.files/Decode.gif" 
                        width=799> </P>
                        <P><BR>输入电路设计一个回差较大的比较器,以避免信号不好带来的误脉冲,而且回差可以通过R7(R10)来调整,还可以通过改变R12(R14)来改变输入信号幅度,通过改变R5和R6(R8和R9)的比值来改变比较的门槛电平,这样设计的目的是:<BR>a) 
                        弥补反射式采样器安装带来的偏差;<BR>b) 
                        尽量使输出的脉冲信号接近50%的占空比,为倍速测量提供可能。<BR>M_Speed 信号接入单片机的PCA2 
                        端, 使用STC12C54XX PCA模块的捕获模式:<BR></P>
                        <P align=center><IMG height=521 
                        src="寻迹小车 FollowMe—— 之五:电机测速及转速控制.files/PCA_Capture_Mode.gif" 
                        width=859></P>
                        <P><BR>从图中可以看出,在捕获模式下,很容易实现对脉冲周期的测量,但是由于我们不能保证得到的脉冲周期是50%占空比的,虽然码盘可以保证,但判断电平的变化无法避免。所以必须在软件上做略为复杂的运算,实现相同跳变之间的时间测量。</P>
                        <P>设置2对时间计数器,分别记录对应跳变的上次时间和本次时间,即可计算出相应的周期。之所以在硬件上还要通过调整使输出尽量接近50%,是为了输出的速度数据尽量分布均匀,便于调速功能使用。</P>
                        <P>使用这种方式使一圈可以输出20个速度值,提高了一倍。</P>
                        <P>因为这种周期测速方式,速度值的输出间隔和转速相关,不像使用测脉冲频率的方式,可以基本保证一个等时间间隔,这对于PID方式的调速控制有些麻烦,因为数字化的PID控制算法多数是以等时间间隔为基础的,为此测速部分除了要返回转速值外,还要返回本次测速经历的时间(即周期),以便于PID控制部分作相应的修正。</P>
                        <P>为减少中断服务的时间,在中断中只记录时间,不做速度计算,建立标志后又主程序负责计算。 </P>
                        <H3>6.1.3.4 行走距离控制</H3>
                        <P>这是测速功能的一个副产品,利用对码盘的脉冲计数,可以方便的实现对行走距离的控制,按目前的码盘精度,可以控制到1.3 
                        cm左右(轮子周长约 13 cm,一圈10个分割)。因为占空比不能保证,所以只能取一个边沿信号计数。</P>
                        <P>程序中设计为正跳沿处理脉冲计数。因为是控制行走距离,所以应当在结束时采用“刹车”控制,使轮子尽快停下。</P>
                        <P>这个功能还是有些作用的,比如预先知道轨迹的情况下,提前在转弯处减速,以保证寻迹的可靠。<BR>因为算法比较简单,不再赘述,详见程序。</P>
                        <H3>6.1.3.5 电机PID调速控制</H3>
                        <P>PID控制算法源于模拟控制方式,其控制的结果和反馈是连续不断的,可以用一个数学模型来表示。而数字式的PID控制算法如果要接近模拟的效果,采样的间隔必须足够小,也就是要求有足够快的采样速度,否则会由于数据反馈的滞后带来较大的偏差,导致系统不稳定。</P>
                        <P>由于目前所用的简易码盘方式不可能有快速的采样,而且还会由于速度的变化使采样间隔发生变化,相当于在控制回路中增加了一个较大的滞后环节,所以系统的特性不会很好,只是能够借此学习一下PID控制的算法,体会一下PID控制的感觉。由于控制对象的不确定、不理想,倒是增加了学习的挑战性。</P>
                        <P>从这里分析可以看出,要想得到好的电机控制效果,良好的速度采样机构是必须的,所以在FIRA足球机器人中,所用的电机多为Fanhaimer的空心杯电机,且带有512线(直接连在电机输出轴上,一圈512个脉冲)的码盘,由于它的电机转速较高,其减速比也较大,综合后相当于我们这个的1000倍,这样的采样分辨率就可以采用定间隔频率采样方式了。</P>
                        <P>基于学习的目的,这里还是参照《电动机的单片机控制》书中所介绍的算法对PID控制做一个尝试,至少可以让转速作相应变化,不至于出现以下现象:</P>
                        <P>因为电机的负载太轻(尤其是经过减速的电机),即使供给最小的PWM值,电机还是以全速转动,但是负载加大一点,电机又不转了,失去了调速的功能。</P>
                        <P>书中介绍了两种数字PID算法,对于直流电机的控制,应当采用位置式PID控制。从便于实现的角度考虑,采用通过增量式控制算法递推得到,详见书中描述:<BR></P>
                        <P align=center><IMG height=972 
                        src="寻迹小车 FollowMe—— 之五:电机测速及转速控制.files/PID.gif" 
                        width=800><IMG height=918 
                        src="寻迹小车 FollowMe—— 之五:电机测速及转速控制.files/PID02.gif" 
                        width=800> </P>
                        <P><BR>如上所示,书中对两种算法作了清晰的描述,在设计阶段,完全按照上述的算法编写程序,在调试阶段,再考虑利用书中所介绍的各种改进的算法结合具体的情况修改。(因为书中的描述已十分全面,所以采用了直接引用的方式,以免耽误了读者,因为我这方面也没有深入的研究。)</P>
                        <P>书中所提供的程序是汇编语言实现的,此处采用C语言实现,原理一样,只是可读性会好一些。</P>
                        <P>程序的基础是上面文中的 
                        (4-7)式和(4-9)式,作为原始数据,保存最近三次的速度值和最近两次的时间间隔,通过计算可以得到: 
                        Ek、Ek-1、Ek-2 
                        以及对应的变化量,取两次时间间隔的平均值作为T,此处也可以看出,必须要调整硬件参数,以尽量保证输出脉冲的占空比为50%,因为测量的时间间隔就是脉冲的高、低电平时间(见程序中的速度计算函数)。</P>
                        <P>而算式中的Kp、Td、Ti将作为待调整参数,可以通过参数设置命令设置。在调试时确定。</P>
                        <P>目前的程序先从PWM初值“10%”开始,调试时如果感觉效果不好,考虑通过测量PWM值和转速之间的关系,得到一个根据命令转速值确定一个对应PWM初值的关系式,在收到速度命令后设定一个PWM初值,尤其在启动以及转速变化较大时。</P>
                        <P>具体实现过程见程序。</P>
                        <P>至此,一个完整的电机控制程序已完成,期望可以实现“调功”和“调速”两种功能,但实际的效果有待调试后才能知道,下次将描述电机控制部分调试中遇到的问题及效果。<BR>(未完待续)</P>
                        <H2>附件:</H2>
                        <P>1、电机驱动模块程序压缩包<BR>含:MotorDrv.c C51程序<BR>STC12C5410AD.H 
                        STC12C54XX的C语言头文件,内有所有SFR的定义<BR>Port_Def.H 
                        对应硬件设计的I/O口变量定义<BR>constant.H 
                        程序中硬件初始化参数、符号化常量的定义<BR>Motor_Var.H 
                        程序中全局变量的定义<BR>注:程序只通过了编译,还未调试,所以会有不妥之处,仅供参考。</P>
                        <H2>参考资料:</H2>
                        <P>1、 STC12C54XX 数据手册<BR>2、 《电动机的单片机控制》王晓明编著 
                        北京航空航天大学出版社</P>
                        <H2 align=left>提示:</H2>
                        <P>由于文章是分开多节上传到网站上,为了方便大家讨论,请把相关的问题集中在<A 
                        href="http://www.robotdiy.com/phpbb2/viewtopic.php?p=48671" 
                        target=_blank>这个帖子</A>上,这样可以方便作者回答大家的问题,谢谢!<BR></P></TD></TR>
                    <TR>
                      <TD class=type4 align=right>
                        <DIV align=right><A 
                        href="http://www.robotdiy.com/friend.php?op=FriendSend&amp;sid=265"><IMG 
                        alt="Send this announcement to a friend" 
                        src="寻迹小车 FollowMe—— 之五:电机测速及转速控制.files/friend.gif" 
                        align=middle border=0></A> &nbsp;|&nbsp; <A 
                        href="http://www.robotdiy.com/article.php?op=Print&amp;sid=265"><IMG 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -