關(guān)于FPGA在直流電機(jī)位置控制中的應(yīng)用
在直流電機(jī)控制系統(tǒng)中,被控制量一般都是電機(jī)的轉(zhuǎn)速,控制的目的是保持電機(jī)的轉(zhuǎn)速在所需要的定值上。但在實(shí)際生產(chǎn)過(guò)程中,電機(jī)帶動(dòng)生產(chǎn)機(jī)械或者其他負(fù)載運(yùn)動(dòng)的表現(xiàn)不一定都是轉(zhuǎn)速,也可能是使生產(chǎn)機(jī)械或其機(jī)構(gòu)產(chǎn)生一定的位置變化,這時(shí)需要的控制量就不再是電機(jī)的轉(zhuǎn)速,而是控制對(duì)象的直線位移,因此需將電機(jī)的轉(zhuǎn)速輸出轉(zhuǎn)換為電機(jī)的位移輸出。
本文引用地址:http://m.butianyuan.cn/article/201706/349340.htm1 電機(jī)位置控制模塊的設(shè)計(jì)
在此,使用maxon直流電機(jī),通過(guò)與其配套的行星齒輪箱和磁編碼器,能夠?qū)崿F(xiàn)從轉(zhuǎn)速到位移的轉(zhuǎn)換。其工作原理如下:電機(jī)轉(zhuǎn)動(dòng)時(shí),編碼器開(kāi)始輸出反饋脈沖,反饋脈沖的頻率與電機(jī)的轉(zhuǎn)速成正比,最高可達(dá)20 kHz。電機(jī)軸每旋轉(zhuǎn)一圈,編碼器就輸出16個(gè)反饋脈沖,通過(guò)計(jì)算得出每個(gè)脈沖代表電機(jī)所帶負(fù)載產(chǎn)生0.006 14 mm的位移。這樣就可以把要控制的位移量用反饋脈沖的個(gè)數(shù)來(lái)表示,作為FPGA中位置控制模塊給定值,當(dāng)電機(jī)轉(zhuǎn)動(dòng)時(shí),FPGA中的計(jì)數(shù)器會(huì)把反饋脈沖計(jì)數(shù)并保存,位置控制模塊不斷讀取計(jì)數(shù)器里的計(jì)數(shù)值,并與位置控制模塊中的給定值比較。當(dāng)它們相等的時(shí)候,位置控制模塊發(fā)出停止信號(hào),從而控制電機(jī)剎車。電機(jī)停止運(yùn)動(dòng)后,再讀取計(jì)數(shù)器中的計(jì)數(shù)值,與給定值做比較,計(jì)算出差值。如果差值在控制精度范圍內(nèi),則此次控制結(jié)束;如果不在范圍內(nèi),將差值作為下一次控制的給定值,繼續(xù)控制電機(jī)運(yùn)動(dòng),直至達(dá)到要求的精度范圍為止。
1.2 位置控制模塊的組成
位置控制模塊由3部分組成:比較模塊、驅(qū)動(dòng)模塊和延時(shí)模塊。比較模塊的作用是將編碼器反饋的脈沖個(gè)數(shù)與給定的脈沖個(gè)數(shù)做比較,當(dāng)它們相等時(shí),給出電機(jī)停止信號(hào)。驅(qū)動(dòng)模塊的作用是根據(jù)輸入的控制信號(hào)控制電機(jī)的運(yùn)動(dòng)。延時(shí)模塊的作用是防止丟失反饋脈沖,確保準(zhǔn)確讀回編碼器反饋的脈沖個(gè)數(shù)。接下來(lái)將重點(diǎn)介紹各個(gè)模塊的具體實(shí)現(xiàn)。
1.2.1 比較模塊
圖1中,data_in[15..O]為給定的反饋脈沖個(gè)數(shù);EN為電機(jī)工作使能信號(hào);inclk為工作時(shí)鐘;feedback[15..0]為電機(jī)運(yùn)行時(shí)計(jì)數(shù)器的計(jì)數(shù)值;stopinter為電機(jī)停止時(shí)的模塊內(nèi)部傳遞信號(hào);“O”表示無(wú)效,“1”表示有效。比較模塊的工作原理如下:比較模塊在接收到給定值后,也就是根據(jù)要控制的位移量所計(jì)算出的反饋脈沖的個(gè)數(shù),將其鎖存。在工作時(shí)鐘的作用下,模塊會(huì)不斷地檢測(cè)EN信號(hào)是否有效,如果EN信號(hào)有效,模塊將開(kāi)始讀取反饋計(jì)數(shù)值,并與給定值做比較;如果相等,模塊認(rèn)為電機(jī)所帶負(fù)載的運(yùn)動(dòng)到達(dá)指定位置,這時(shí)輸出的stopinter信號(hào)有效,控制電機(jī)剎車;否則 stopinter信號(hào)無(wú)效,電機(jī)繼續(xù)運(yùn)動(dòng)。
如圖2所示,假設(shè)給定的計(jì)數(shù)值為7。當(dāng)使能信號(hào)EN有效時(shí),模塊開(kāi)始讀端口feedback[15..O]中的值(電機(jī)運(yùn)行時(shí)通過(guò)磁編碼器反饋回來(lái)的脈沖個(gè)數(shù)),與data_in[15..0]中給定的脈沖個(gè)數(shù)做比較。當(dāng)它們相等的時(shí)候,表示電機(jī)所帶的負(fù)載運(yùn)動(dòng)到了指定位置,此時(shí)stopinter信號(hào)有效,開(kāi)始控制電機(jī)剎車并停止。
1.2.2 驅(qū)動(dòng)模塊
圖3中,derect[1..O]為電機(jī)的控制輸入信號(hào);EN為電機(jī)工作使能信號(hào),“0”表示無(wú)效,“1”表示有效;inclk為工作時(shí)鐘; stopinter為電機(jī)停止信號(hào)的模塊內(nèi)部傳遞信號(hào);control_outA,control_outB為控制電機(jī)的輸出信號(hào),這兩個(gè)控制信號(hào)直接連接電機(jī)的驅(qū)動(dòng)芯片。驅(qū)動(dòng)模塊的工作原理如下:
在工作時(shí)鐘的作用下,驅(qū)動(dòng)模塊會(huì)不斷地檢測(cè)EN信號(hào)和stopinter信號(hào)是否有效,如果:EN有效,并且stopinter無(wú)效的時(shí)候,模塊的輸出 controi_outA,cont-orl_outB取決于電機(jī)控制輸入信號(hào)derect[1..0]的狀態(tài),當(dāng)derect[1..0]為“01” 時(shí),control_outA輸出為“0”;control_outB輸出為“1”,表示控制電機(jī)反轉(zhuǎn)。當(dāng)derect[1..0]為“10”時(shí), control_outA輸出為“1”;con-trol_outB輸出為“O”,表示控制電機(jī)正轉(zhuǎn)。驅(qū)動(dòng)控制模塊一旦檢測(cè)到stop信號(hào)有效, control_outA和control_outB的輸出都為“O”,表示控制電機(jī)剎車并停止。在EN和stop信號(hào)都無(wú)效的時(shí)候, control_outA和con-trol_outB的輸出都為“1”,表示對(duì)電機(jī)不做任何控制。
如圖4所示,當(dāng)EN和stopinter信號(hào)都為“0”時(shí),模塊的輸出control_outA,contorl_outB都為“1”,對(duì)電機(jī)不做任何控制。當(dāng)EN信號(hào)變?yōu)?ldquo;1”時(shí),表示電機(jī)開(kāi)始運(yùn)動(dòng),模塊的輸出control_outA為“O”,Contorl_outB為“1”,與direction [1..0]中的值“01”相同,此時(shí)電機(jī)反轉(zhuǎn)。當(dāng)stopinter信號(hào)變?yōu)?ldquo;1”時(shí),模塊的輸出control_outA為“O”; contorl_outB也為“O”,此時(shí)電機(jī)剎車并停止。當(dāng)EN信號(hào)為“1”,stopinter信號(hào)再次為“0”時(shí),電機(jī)再次開(kāi)始運(yùn)動(dòng),模塊的輸出 control_outA為“1”;con-torl_outB為“0”,與direction[1..O]中的值“10”相同,此時(shí)電機(jī)反轉(zhuǎn)。
1.2.3 延時(shí)模塊
圖4中,EN為延時(shí)的使能信號(hào),也就是計(jì)數(shù)比較模塊的輸出信號(hào)stopinter;inclk為工作時(shí)鐘;stop為電機(jī)停止信號(hào)對(duì)外部的輸出信號(hào)。延時(shí)模塊(如圖5所示)的工作原理如下:當(dāng)延時(shí)模塊檢測(cè)到stopinter信號(hào)為“1”時(shí),模塊內(nèi)的計(jì)數(shù)器開(kāi)始工作,計(jì)數(shù)器時(shí)鐘即模塊的工作時(shí)鐘10 kHz,當(dāng)記滿300后,模塊輸出信號(hào)為“1”。延時(shí)模塊檢測(cè)到stopinter信號(hào)為“0”時(shí),模塊內(nèi)計(jì)數(shù)器不工作,模塊輸出信號(hào)為“0”。
當(dāng)電機(jī)剎車時(shí),由于存在慣性,電機(jī)不會(huì)立即停止,會(huì)有一段滑行的過(guò)程,在這個(gè)過(guò)程中,電機(jī)仍然會(huì)通過(guò)磁編碼器返回反饋脈沖,只是因?yàn)殡姍C(jī)的轉(zhuǎn)速下降,反饋脈沖的頻率大大降低。當(dāng)stopinter信號(hào)變?yōu)?ldquo;1”時(shí),電機(jī)開(kāi)始剎車,如果此時(shí)立刻讀取feedback[15..O]端口上的反饋脈沖數(shù)值,計(jì)算出電機(jī)所帶負(fù)載的位置,那么必然會(huì)丟失掉滑行過(guò)程中的反饋脈沖。這樣就會(huì)導(dǎo)致讀回的反饋脈沖數(shù)與實(shí)際電機(jī)返回的反饋脈沖數(shù)不相等,從而嚴(yán)重地影響控制精度,所以必須在stopinter信號(hào)變?yōu)?ldquo;1”后,延長(zhǎng)一段時(shí)間,確保電機(jī)停止不動(dòng)后,再給出STOPTEST信號(hào),作為讀取反饋脈沖數(shù)值的有效信號(hào),這時(shí)用讀回的反饋脈沖數(shù)值計(jì)算出負(fù)載的實(shí)際位置是準(zhǔn)確的。
通過(guò)實(shí)驗(yàn),在電機(jī)以最高轉(zhuǎn)速運(yùn)行時(shí),讓電機(jī)剎車,用邏輯分析儀抓出反饋脈沖的波形,找出反饋脈沖頻率開(kāi)始突然下降直到反饋脈沖消失的那段時(shí)間,就是所需要的延時(shí)。通過(guò)反復(fù)進(jìn)行實(shí)驗(yàn),測(cè)試出這段時(shí)間為30 ms,其間的反饋脈沖個(gè)數(shù)為20個(gè)。因此把要控制的位移量換算成反饋脈沖的個(gè)數(shù)后,用這個(gè)值減去20作為比較模塊給定值,就可以抵消滑行過(guò)程中增加的20 個(gè)脈沖。這樣對(duì)電機(jī)的控制能夠達(dá)到一次到位,不需要進(jìn)行再次調(diào)節(jié)。延時(shí)模塊仿真圖如圖6所示。
2 結(jié)語(yǔ)
現(xiàn)場(chǎng)可編程門陣列(FPGA)器件體積小、速度快、集成度高,能夠用硬件電路來(lái)實(shí)現(xiàn)算法。使用FPGA控制電機(jī),能夠保證控制的實(shí)時(shí)性和可靠性。它作為一種有效的數(shù)字化控制方法必將廣泛地為人們所接受和使用。
發(fā)布者:小宇
評(píng)論