<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          關(guān) 閉

          新聞中心

          EEPW首頁 > 工控自動化 > 設(shè)計應(yīng)用 > 步進電機變頻技術(shù)的應(yīng)用

          步進電機變頻技術(shù)的應(yīng)用

          作者: 時間:2016-10-29 來源:網(wǎng)絡(luò) 收藏

          航海羅經(jīng)模擬器的組成結(jié)構(gòu)原理是:船舶舵輪的轉(zhuǎn)動引起了船舶航向的改變,同時也就引起了船舶羅經(jīng)讀數(shù)的變化。當(dāng)羅經(jīng)模擬器要求轉(zhuǎn)動的角度偏大時,設(shè)計應(yīng)用變頻轉(zhuǎn)動的方法來克服轉(zhuǎn)動時間過長的缺點,也就是給出一個具體需要轉(zhuǎn)動的航向值,該模擬器能夠迅速有效地按照要求轉(zhuǎn)到該值。

          本文引用地址:http://www.ex-cimer.com/article/201610/306672.htm

          步進電機的選用與設(shè)計

          步進電機具有轉(zhuǎn)矩大、慣性小、響應(yīng)頻率高等優(yōu)點,具有瞬間起動與急速停止的優(yōu)越特性。與其他驅(qū)動元件相比,有明顯優(yōu)點:通常不需要反饋就能對位移或速度進行精確控制;輸出的轉(zhuǎn)角或位移精度高,誤差不會積累;控制系統(tǒng)結(jié)構(gòu)簡單,與數(shù)字設(shè)備兼容,價格便宜。它每轉(zhuǎn)一周有固定步數(shù),能夠精確控制步進和接收數(shù)字量。為了便于數(shù)據(jù)的處理和驅(qū)動,設(shè)計了由步進電機帶動減速齒輪,再由齒輪帶動羅經(jīng)數(shù)據(jù)轉(zhuǎn)盤,為了提高數(shù)據(jù)精度和提高電機的負(fù)載能力,將減速比設(shè)計為:1:90(比值越小,精度越高,但是比值太小對控制和響應(yīng)頻率要求就太高了)。步進電機的通電方式可采用三相雙六拍通電方式,即按照a、ab、b、bc、c、ca順序循環(huán)通電,這樣步進電機中每個脈沖能驅(qū)動1.5度。三相雙六拍通電的控制模型如表1。

          3.jpg

          步進電機的驅(qū)動采用軟件設(shè)置和功率放大電路來實現(xiàn),其中功率放大器也稱為驅(qū)動電路,其作用是將脈沖發(fā)生器的輸出脈沖進行功率放大,給步進電機相繞組提供足夠的電流,驅(qū)動步進電機正常工作。對功率放大器的要求包括:能提供足夠的幅值;前后沿較陡的勵磁電流;功耗小,效率高;運行穩(wěn)定可靠,便于維修而且成本低。

          軟件設(shè)計中脈沖波的要求

          這里利用mcs-51系列單片機中的p1口來進行控制,因為p1是8位準(zhǔn)雙向i/o口,每一位可以獨立地定義為輸入或輸出,所以,既可以對p1口進行字節(jié)操作也可以進行位的操作。mcs-51系列單片機中有兩個16位的可編程定時器/計數(shù)器,定時器/計數(shù)器ct0由計數(shù)器th0和tl0組成,ct1由th1和tl1組成,th、tl分別為8位計數(shù)器,若拼接在一起就可組成16位計數(shù)器。

          計算tl、th初值

          應(yīng)用cto產(chǎn)生1ms的定時,并使p1產(chǎn)生2ms的方波,設(shè)系統(tǒng)晶振頻率為12mhz。設(shè)12m晶振的周期:t=12/fosc=12/(12×10-6)=1×10-6(us)設(shè)定時初值為x,則有:(216-x)×1×10-6=10-3解算得x=65036=fe0c(h);所以tl0初值設(shè)為0ch;th0初值設(shè)為feh,這樣每秒能產(chǎn)生1000個方波。當(dāng)改變初值x時,就能改變延時時間,x值越小,延時時間就越長,脈沖寬度也越寬。

          計算并設(shè)置轉(zhuǎn)動數(shù)據(jù)

          因為模擬航海羅經(jīng)的精度為一格(即0.1度),同時減速裝置是1:90,所以電機每步應(yīng)轉(zhuǎn)動9度,又因為每個脈沖使電機轉(zhuǎn)動1.5度,所以每步要求有6個脈沖,因此步長要設(shè)置為6。按照上表得知若以a、ab、b、bc、c、ca、a循環(huán),則控制脈沖為:01h,03h,02h,06h,04h,05h;編程時采用查表法來實現(xiàn),首先將步進電機通電方式運行邏輯數(shù)據(jù)列成表格,存入計算機指定內(nèi)存,并設(shè)置數(shù)據(jù)指針,指針自動向下移動或向上移動一組數(shù)據(jù),使步進電機按規(guī)定的通電勵磁方式運行。這樣正轉(zhuǎn)模型按照地址順序的分配分別為:01h、03h、02h、06h、04h、05h、00h;同樣,反轉(zhuǎn)模型地址中的分配分別為:05h、04h、06h、02h、03h、01h、00h。

          在快速轉(zhuǎn)動不同角度時的變頻設(shè)計思路

          因為該模擬羅經(jīng)需要在任意時刻都能夠設(shè)置,所以當(dāng)在設(shè)置狀態(tài)和轉(zhuǎn)動數(shù)據(jù)大,使步進電機在短時間內(nèi)以比較快的速度運轉(zhuǎn)而不出現(xiàn)失步,就要求采用小于或等于步進電機的響應(yīng)頻率,在該頻率之下,步進電機可以隨意地啟動、停止或反轉(zhuǎn)而不發(fā)生失步現(xiàn)象。而步進電機的響應(yīng)頻率通常比較低,當(dāng)步進電機要求走轉(zhuǎn)動的度數(shù)比較多時,就對該電機提出了要求:低速啟動,高速運轉(zhuǎn),然后降低速度,最后停止。這樣才能解決“快速而不失步”的要求。依照該思路,采用改變輸出脈沖寬度的方法,也就是改變控制定時器的延時,如圖1。

          2.jpg

          其中f為步進電機當(dāng)前運行的頻率l1為升頻運行階段;l2為高速運行階段;l3為降頻運行階段。利用定時器的延時,在升頻時,定時器的初值由小變大,在降頻時剛好相反,高速運行段初值不變。因為步進電機從靜止加速到工作轉(zhuǎn)速(一般為每分鐘幾百轉(zhuǎn))需要200~400ms。所以經(jīng)上式計算得如附表中的相應(yīng)定時初值。

          按照附表得出高速運行階段:頻率為1000hz,2s能產(chǎn)生2000個脈沖,能使電機運轉(zhuǎn)最大度數(shù)為:2000×1.5=3000°,所以在高速階段2s內(nèi)電機能驅(qū)動羅經(jīng)轉(zhuǎn)動3000/90=34°,該數(shù)值已經(jīng)完全滿足模擬器轉(zhuǎn)動要求了。

          程序設(shè)計

          該模擬器的步進電機進行控制的一個重要條件是,計算當(dāng)前需要步進電機轉(zhuǎn)動的角度是多少,然后按照需要轉(zhuǎn)動的角度進行設(shè)置不同的電機所需要的三個階段的頻率即:升頻運行階段(啟動)、高速運行階段、降頻運行階段(減速)。程序的設(shè)計流程圖如圖2所示:其中針對需要正向或逆向轉(zhuǎn)動不同的角度,就需要選擇合適的脈沖值,也就是tl0和th0的初值就能夠輕松實現(xiàn)。

          1.jpg

          結(jié)語

          利用步進電機和單片機來設(shè)計航海羅經(jīng)模擬器的方案是充分利用單片機的特點以及采用變頻的控制原理。此設(shè)計采用的硬件比較少,軟件采用模塊化結(jié)構(gòu),利于修改,并為將來程序功能的擴展留下了很好的余地。本設(shè)計對該模擬羅經(jīng)驅(qū)動效果為:連續(xù)工作20小時,誤差僅在2°以內(nèi),完全符合模擬器的要求。



          評論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();