?? 尋跡小車 followme—— 之五:電機(jī)測(cè)速及轉(zhuǎn)速控制.htm
字號(hào):
href="http://www.robotdiy.com/phpbb2/viewtopic.php?t=15365"
target=_blank> 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%">智能機(jī)器人相關(guān)鏈接</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—— 之五:電機(jī)測(cè)速及轉(zhuǎn)速控制.files/Shanghai_Robot_Expo_2006.png"></A></TD></TR>
<TR>
<TD><A
href="http://www.robotdiy.com/mod.php?mod=weblink&op=view_category&cid=105&start_num=0"><IMG
src="尋跡小車 FollowMe—— 之五:電機(jī)測(cè)速及轉(zhuǎn)速控制.files/dytrol_logo.gif"></A></TD></TR>
<TR>
<TD><A
href="http://www.robotdiy.com/mod.php?mod=weblink&op=view_category&cid=101&start_num=0"><IMG
src="尋跡小車 FollowMe—— 之五:電機(jī)測(cè)速及轉(zhuǎn)速控制.files/ChinaAI_logo.gif"></A></TD></TR>
<TR>
<TD><A href="http://www.sciei.com/" target=_blank><IMG
src="尋跡小車 FollowMe—— 之五:電機(jī)測(cè)速及轉(zhuǎn)速控制.files/sciei.gif"></A></TD></TR></TBODY></TABLE></FONT></TD></TR></TBODY></TABLE><BR></TD>
<TR>
<TD>FireFox,一個(gè)比IE更好的瀏覽器,點(diǎn)擊馬上下載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—— 之五:電機(jī)測(cè)速及轉(zhuǎn)速控制.files/show_ads.js"
type=text/javascript></SCRIPT>
<BR>ROBOTDIY所有頁(yè)面全面支持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">-->
</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—— 之五:電機(jī)測(cè)速及轉(zhuǎn)速控制.files/trans.gif" width=1
border=0></TD>
<TD vAlign=top align=right width="99%"><IMG
src="尋跡小車 FollowMe—— 之五:電機(jī)測(cè)速及轉(zhuǎn)速控制.files/robot_diy_ban.gif"
border=0> </TD></TR>
<TR>
<TD> </TD>
<TD align=right><B>| <A class=foot
onclick="javascript:window.external.addfavorite('http://www.robotdiy.com','機(jī)器人發(fā)燒友天地--ROBOTDIY')"
href="http://www.robotdiy.com/#">加入收藏夾 </A>| <A
href="http://www.robotdiy.com/phpbb2/"
target=_blank>機(jī)器人技術(shù)論壇</A> | <A
href="http://www.robotdiy.com/help.htm" target=_blank>幫助</A>
|<A href="http://www.robotdiy.com/aboutus.htm"
target=_blank>關(guān)于我們</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—— 之五:電機(jī)測(cè)速及轉(zhuǎn)速控制.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—— 之五:電機(jī)測(cè)速及轉(zhuǎn)速控制<BR><SPAN
class=smalltype>寫(xiě)于: 星期一 14 八月 @ 16:45:34 </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=智能機(jī)器人開(kāi)發(fā) hspace=4
src="尋跡小車 FollowMe—— 之五:電機(jī)測(cè)速及轉(zhuǎn)速控制.files/robot_hardware.gif"
width=40 align=right border=0></A><I>此篇涉及電機(jī)的測(cè)速和轉(zhuǎn)速控制。</I>
<BR><BR>
<H1 align=center>尋跡小車 FollowMe</H1>
<H2 align=center>—— 之五:電機(jī)測(cè)速及轉(zhuǎn)速控制</H2>
<P align=center>作者:<A
href="http://www.robotdiy.com/phpbb2/profile.php?mode=viewprofile&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>控制部分中的電機(jī)驅(qū)動(dòng)器設(shè)計(jì)</A>,<A
href="http://www.robotdiy.com/article.php?sid=263"
target=_blank>軌跡采樣及邏輯控制部分硬件設(shè)計(jì)</A>和<A
href="http://www.robotdiy.com/article.php?sid=264"
target=_blank>開(kāi)環(huán)控制功能</A>,此篇涉及電機(jī)的測(cè)速和轉(zhuǎn)速控制。
<H3>6.1.3.3 轉(zhuǎn)速測(cè)量</H3>
<P>因?yàn)楸卷?xiàng)目的主要目的是學(xué)習(xí)單片機(jī)的應(yīng)用,能夠低成本的實(shí)現(xiàn)功能是主要目標(biāo),性能的要求相對(duì)弱一些,所以測(cè)速選擇了簡(jiǎn)易碼盤作為速度反饋信號(hào),使用反射式采樣,由于擔(dān)心反射式采樣的分辨率有限,所以只設(shè)計(jì)10個(gè)黑印,我所選擇的反射采樣器是Sharp的GP330,其特點(diǎn)是反射距離遠(yuǎn),受自然光干涉少,作為軌跡采樣十分適合,但作為碼盤采樣有些“粗”了。建議有意嘗試者改用其它的小體積、近距離的反射采樣器,這樣分辨率會(huì)高一些,可以多印一些黑印,以提高轉(zhuǎn)速測(cè)量的速度和精度。</P>
<P>最好使用透射式碼盤,但是那樣結(jié)構(gòu)就相對(duì)復(fù)雜一些,但測(cè)量的分辨率可以大大提高。<BR>因?yàn)槭欠瓷涫讲蓸樱斎胄盘?hào)不會(huì)很好,所以在硬件設(shè)計(jì)時(shí)就做了考慮,線路如下:<BR></P>
<P align=center><IMG height=390
src="尋跡小車 FollowMe—— 之五:電機(jī)測(cè)速及轉(zhuǎn)速控制.files/Decode.gif"
width=799> </P>
<P><BR>輸入電路設(shè)計(jì)一個(gè)回差較大的比較器,以避免信號(hào)不好帶來(lái)的誤脈沖,而且回差可以通過(guò)R7(R10)來(lái)調(diào)整,還可以通過(guò)改變R12(R14)來(lái)改變輸入信號(hào)幅度,通過(guò)改變R5和R6(R8和R9)的比值來(lái)改變比較的門檻電平,這樣設(shè)計(jì)的目的是:<BR>a)
彌補(bǔ)反射式采樣器安裝帶來(lái)的偏差;<BR>b)
盡量使輸出的脈沖信號(hào)接近50%的占空比,為倍速測(cè)量提供可能。<BR>M_Speed 信號(hào)接入單片機(jī)的PCA2
端, 使用STC12C54XX PCA模塊的捕獲模式:<BR></P>
<P align=center><IMG height=521
src="尋跡小車 FollowMe—— 之五:電機(jī)測(cè)速及轉(zhuǎn)速控制.files/PCA_Capture_Mode.gif"
width=859></P>
<P><BR>從圖中可以看出,在捕獲模式下,很容易實(shí)現(xiàn)對(duì)脈沖周期的測(cè)量,但是由于我們不能保證得到的脈沖周期是50%占空比的,雖然碼盤可以保證,但判斷電平的變化無(wú)法避免。所以必須在軟件上做略為復(fù)雜的運(yùn)算,實(shí)現(xiàn)相同跳變之間的時(shí)間測(cè)量。</P>
<P>設(shè)置2對(duì)時(shí)間計(jì)數(shù)器,分別記錄對(duì)應(yīng)跳變的上次時(shí)間和本次時(shí)間,即可計(jì)算出相應(yīng)的周期。之所以在硬件上還要通過(guò)調(diào)整使輸出盡量接近50%,是為了輸出的速度數(shù)據(jù)盡量分布均勻,便于調(diào)速功能使用。</P>
<P>使用這種方式使一圈可以輸出20個(gè)速度值,提高了一倍。</P>
<P>因?yàn)檫@種周期測(cè)速方式,速度值的輸出間隔和轉(zhuǎn)速相關(guān),不像使用測(cè)脈沖頻率的方式,可以基本保證一個(gè)等時(shí)間間隔,這對(duì)于PID方式的調(diào)速控制有些麻煩,因?yàn)閿?shù)字化的PID控制算法多數(shù)是以等時(shí)間間隔為基礎(chǔ)的,為此測(cè)速部分除了要返回轉(zhuǎn)速值外,還要返回本次測(cè)速經(jīng)歷的時(shí)間(即周期),以便于PID控制部分作相應(yīng)的修正。</P>
<P>為減少中斷服務(wù)的時(shí)間,在中斷中只記錄時(shí)間,不做速度計(jì)算,建立標(biāo)志后又主程序負(fù)責(zé)計(jì)算。 </P>
<H3>6.1.3.4 行走距離控制</H3>
<P>這是測(cè)速功能的一個(gè)副產(chǎn)品,利用對(duì)碼盤的脈沖計(jì)數(shù),可以方便的實(shí)現(xiàn)對(duì)行走距離的控制,按目前的碼盤精度,可以控制到1.3
cm左右(輪子周長(zhǎng)約 13 cm,一圈10個(gè)分割)。因?yàn)檎伎毡炔荒鼙WC,所以只能取一個(gè)邊沿信號(hào)計(jì)數(shù)。</P>
<P>程序中設(shè)計(jì)為正跳沿處理脈沖計(jì)數(shù)。因?yàn)槭强刂菩凶呔嚯x,所以應(yīng)當(dāng)在結(jié)束時(shí)采用“剎車”控制,使輪子盡快停下。</P>
<P>這個(gè)功能還是有些作用的,比如預(yù)先知道軌跡的情況下,提前在轉(zhuǎn)彎處減速,以保證尋跡的可靠。<BR>因?yàn)樗惴ū容^簡(jiǎn)單,不再贅述,詳見(jiàn)程序。</P>
<H3>6.1.3.5 電機(jī)PID調(diào)速控制</H3>
<P>PID控制算法源于模擬控制方式,其控制的結(jié)果和反饋是連續(xù)不斷的,可以用一個(gè)數(shù)學(xué)模型來(lái)表示。而數(shù)字式的PID控制算法如果要接近模擬的效果,采樣的間隔必須足夠小,也就是要求有足夠快的采樣速度,否則會(huì)由于數(shù)據(jù)反饋的滯后帶來(lái)較大的偏差,導(dǎo)致系統(tǒng)不穩(wěn)定。</P>
<P>由于目前所用的簡(jiǎn)易碼盤方式不可能有快速的采樣,而且還會(huì)由于速度的變化使采樣間隔發(fā)生變化,相當(dāng)于在控制回路中增加了一個(gè)較大的滯后環(huán)節(jié),所以系統(tǒng)的特性不會(huì)很好,只是能夠借此學(xué)習(xí)一下PID控制的算法,體會(huì)一下PID控制的感覺(jué)。由于控制對(duì)象的不確定、不理想,倒是增加了學(xué)習(xí)的挑戰(zhàn)性。</P>
<P>從這里分析可以看出,要想得到好的電機(jī)控制效果,良好的速度采樣機(jī)構(gòu)是必須的,所以在FIRA足球機(jī)器人中,所用的電機(jī)多為Fanhaimer的空心杯電機(jī),且?guī)в?12線(直接連在電機(jī)輸出軸上,一圈512個(gè)脈沖)的碼盤,由于它的電機(jī)轉(zhuǎn)速較高,其減速比也較大,綜合后相當(dāng)于我們這個(gè)的1000倍,這樣的采樣分辨率就可以采用定間隔頻率采樣方式了。</P>
<P>基于學(xué)習(xí)的目的,這里還是參照《電動(dòng)機(jī)的單片機(jī)控制》書(shū)中所介紹的算法對(duì)PID控制做一個(gè)嘗試,至少可以讓轉(zhuǎn)速作相應(yīng)變化,不至于出現(xiàn)以下現(xiàn)象:</P>
<P>因?yàn)殡姍C(jī)的負(fù)載太輕(尤其是經(jīng)過(guò)減速的電機(jī)),即使供給最小的PWM值,電機(jī)還是以全速轉(zhuǎn)動(dòng),但是負(fù)載加大一點(diǎn),電機(jī)又不轉(zhuǎn)了,失去了調(diào)速的功能。</P>
<P>書(shū)中介紹了兩種數(shù)字PID算法,對(duì)于直流電機(jī)的控制,應(yīng)當(dāng)采用位置式PID控制。從便于實(shí)現(xiàn)的角度考慮,采用通過(guò)增量式控制算法遞推得到,詳見(jiàn)書(shū)中描述:<BR></P>
<P align=center><IMG height=972
src="尋跡小車 FollowMe—— 之五:電機(jī)測(cè)速及轉(zhuǎn)速控制.files/PID.gif"
width=800><IMG height=918
src="尋跡小車 FollowMe—— 之五:電機(jī)測(cè)速及轉(zhuǎn)速控制.files/PID02.gif"
width=800> </P>
<P><BR>如上所示,書(shū)中對(duì)兩種算法作了清晰的描述,在設(shè)計(jì)階段,完全按照上述的算法編寫(xiě)程序,在調(diào)試階段,再考慮利用書(shū)中所介紹的各種改進(jìn)的算法結(jié)合具體的情況修改。(因?yàn)闀?shū)中的描述已十分全面,所以采用了直接引用的方式,以免耽誤了讀者,因?yàn)槲疫@方面也沒(méi)有深入的研究。)</P>
<P>書(shū)中所提供的程序是匯編語(yǔ)言實(shí)現(xiàn)的,此處采用C語(yǔ)言實(shí)現(xiàn),原理一樣,只是可讀性會(huì)好一些。</P>
<P>程序的基礎(chǔ)是上面文中的
(4-7)式和(4-9)式,作為原始數(shù)據(jù),保存最近三次的速度值和最近兩次的時(shí)間間隔,通過(guò)計(jì)算可以得到:
Ek、Ek-1、Ek-2
以及對(duì)應(yīng)的變化量,取兩次時(shí)間間隔的平均值作為T,此處也可以看出,必須要調(diào)整硬件參數(shù),以盡量保證輸出脈沖的占空比為50%,因?yàn)闇y(cè)量的時(shí)間間隔就是脈沖的高、低電平時(shí)間(見(jiàn)程序中的速度計(jì)算函數(shù))。</P>
<P>而算式中的Kp、Td、Ti將作為待調(diào)整參數(shù),可以通過(guò)參數(shù)設(shè)置命令設(shè)置。在調(diào)試時(shí)確定。</P>
<P>目前的程序先從PWM初值“10%”開(kāi)始,調(diào)試時(shí)如果感覺(jué)效果不好,考慮通過(guò)測(cè)量PWM值和轉(zhuǎn)速之間的關(guān)系,得到一個(gè)根據(jù)命令轉(zhuǎn)速值確定一個(gè)對(duì)應(yīng)PWM初值的關(guān)系式,在收到速度命令后設(shè)定一個(gè)PWM初值,尤其在啟動(dòng)以及轉(zhuǎn)速變化較大時(shí)。</P>
<P>具體實(shí)現(xiàn)過(guò)程見(jiàn)程序。</P>
<P>至此,一個(gè)完整的電機(jī)控制程序已完成,期望可以實(shí)現(xiàn)“調(diào)功”和“調(diào)速”兩種功能,但實(shí)際的效果有待調(diào)試后才能知道,下次將描述電機(jī)控制部分調(diào)試中遇到的問(wèn)題及效果。<BR>(未完待續(xù))</P>
<H2>附件:</H2>
<P>1、電機(jī)驅(qū)動(dòng)模塊程序壓縮包<BR>含:MotorDrv.c C51程序<BR>STC12C5410AD.H
STC12C54XX的C語(yǔ)言頭文件,內(nèi)有所有SFR的定義<BR>Port_Def.H
對(duì)應(yīng)硬件設(shè)計(jì)的I/O口變量定義<BR>constant.H
程序中硬件初始化參數(shù)、符號(hào)化常量的定義<BR>Motor_Var.H
程序中全局變量的定義<BR>注:程序只通過(guò)了編譯,還未調(diào)試,所以會(huì)有不妥之處,僅供參考。</P>
<H2>參考資料:</H2>
<P>1、 STC12C54XX 數(shù)據(jù)手冊(cè)<BR>2、 《電動(dòng)機(jī)的單片機(jī)控制》王曉明編著
北京航空航天大學(xué)出版社</P>
<H2 align=left>提示:</H2>
<P>由于文章是分開(kāi)多節(jié)上傳到網(wǎng)站上,為了方便大家討論,請(qǐng)把相關(guān)的問(wèn)題集中在<A
href="http://www.robotdiy.com/phpbb2/viewtopic.php?p=48671"
target=_blank>這個(gè)帖子</A>上,這樣可以方便作者回答大家的問(wèn)題,謝謝!<BR></P></TD></TR>
<TR>
<TD class=type4 align=right>
<DIV align=right><A
href="http://www.robotdiy.com/friend.php?op=FriendSend&sid=265"><IMG
alt="Send this announcement to a friend"
src="尋跡小車 FollowMe—— 之五:電機(jī)測(cè)速及轉(zhuǎn)速控制.files/friend.gif"
align=middle border=0></A> | <A
href="http://www.robotdiy.com/article.php?op=Print&sid=265"><IMG
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -