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

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 基于A3967SLB的步進(jìn)電機(jī)細(xì)分驅(qū)動(dòng)系統(tǒng)設(shè)計(jì)

          基于A3967SLB的步進(jìn)電機(jī)細(xì)分驅(qū)動(dòng)系統(tǒng)設(shè)計(jì)

          ——
          作者:西南交通大學(xué) 理學(xué)院 趙運(yùn)福 劉慶想 張政權(quán) 時(shí)間:2007-01-26 來源:《電子設(shè)計(jì)應(yīng)用》 收藏


          步進(jìn)電機(jī)精度高,慣性小,在不失步的情況下沒有步距誤差積累,特別適用于數(shù)字控制的定位系統(tǒng)。傳統(tǒng)的細(xì)分驅(qū)動(dòng)電路由細(xì)分環(huán)行分配器、放大器和合成器等部分組成。這種電路應(yīng)用復(fù)雜,靈活性差。本文利用a3967slb作為步進(jìn)電機(jī)微控芯片,簡(jiǎn)化了步進(jìn)電機(jī)的控制實(shí)現(xiàn)。由于單片機(jī)資源沒有pc豐富,人機(jī)界面也沒有pc友好,因此,本文采用了主從式結(jié)構(gòu),即pc用于管理,單片機(jī)用于執(zhí)行。

          由a3967slb構(gòu)成步進(jìn)電機(jī)的驅(qū)動(dòng)部分

          a3967slb是美國allegro公司生產(chǎn)的pwm恒流控制微步距驅(qū)動(dòng)二相步進(jìn)電機(jī)專用驅(qū)動(dòng)器。它的工作電壓可達(dá)30v,驅(qū)動(dòng)電流達(dá)750ma,一個(gè)a3967slb即可驅(qū)動(dòng)一臺(tái)二相步進(jìn)電機(jī),可實(shí)現(xiàn)8細(xì)分驅(qū)動(dòng)。芯片內(nèi)部的pwm電流控制電路可通過加在pfd的電壓設(shè)置為慢、快、混合三種電流衰減模式,如果pfd端的電壓高于0.6vdd,則選擇慢衰減方式。若低于0.21vdd,則選擇快衰減模式。處于兩者之間為混合衰減模式。另外,a3967slb還能提供完善的保護(hù)措施,包括抑制瞬態(tài)電壓,過熱保護(hù)、防止電流直通、欠電壓自鎖等功能。

          a3967slb和微處理器之間不需要附加其他的接口電路,該芯片采用easy stepper接口,將8條控制線減少了2條(步長和方向),只要簡(jiǎn)單地輸入控制步進(jìn)電機(jī)的脈沖,其內(nèi)嵌的轉(zhuǎn)換器就可以實(shí)現(xiàn)對(duì)步進(jìn)電機(jī)的控制。a3967slb還需要一些電阻、電容來調(diào)整其工作參數(shù),整個(gè)驅(qū)動(dòng)電路非常簡(jiǎn)單。

          如圖1所示,ms1和ms2是步進(jìn)電機(jī)細(xì)分分辨率選擇的邏輯輸入口;dir是電機(jī)運(yùn)轉(zhuǎn)方向的選擇口;reset用于重置芯片初始值,屏蔽所有外部輸出;step為脈沖輸入端口;out1a、out1b、out2a、out2b為h橋的兩對(duì)輸出端口;enable為使能端;sleep為睡眠模式;sense1、sense2為h橋的電流檢測(cè)電阻;ref為參考電壓;gnd為邏輯地和電源地;rc1、rc2為h橋固定截止時(shí)間模擬輸入。最大限流imax是由取樣電阻rs和取樣比較器的輸入?yún)⒖茧妷簐ref決定的:

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

          imax=vref/8rs

          at89c52具有8kb flash,256b內(nèi)部ram,32個(gè)i/o口線,3個(gè)16位定時(shí)/記數(shù)器,一個(gè)6向量?jī)杉?jí)中斷系統(tǒng),一個(gè)全雙工串行通信接口,同時(shí)片內(nèi)還有振蕩器和時(shí)鐘電路。使用很方便。在這個(gè)系統(tǒng)中,單片機(jī)主要用來產(chǎn)生控制脈沖并與上位機(jī)進(jìn)行串行通信。

          通信電路

          在最簡(jiǎn)單的rs-232直接傳送通信系統(tǒng)中,只要發(fā)送和接受雙方同時(shí)準(zhǔn)備好,僅用信號(hào)發(fā)送端(txd)、信號(hào)接收端(rxd)和信號(hào)地(gnd)3根信號(hào)線就可以進(jìn)行通信;若以應(yīng)答方式進(jìn)行數(shù)據(jù)通信,可使用請(qǐng)求發(fā)送(rts)、清除發(fā)送(cts)或數(shù)據(jù)終端準(zhǔn)備(dtr)、數(shù)據(jù)裝置準(zhǔn)備(dsr)4個(gè)信號(hào)進(jìn)行硬件握手。在at89c52單片機(jī)系統(tǒng)中,分別從p3.0和p3.1引出串口線rxd和txd,通過專用的電平轉(zhuǎn)換芯片轉(zhuǎn)換成rs-232接口標(biāo)準(zhǔn)的電平,這樣,二者之間就可以通過rs-232接口進(jìn)行數(shù)字信號(hào)的傳送。單片機(jī)可以通過直接傳送或應(yīng)答握手的方式與主機(jī)進(jìn)行數(shù)據(jù)通信,但由于握手方式占用其它端口,而單片機(jī)的端口數(shù)量有限,所以,計(jì)算機(jī)與單片機(jī)的通信常采用直接傳送的方式。通信電路如圖2所示。

          軟件設(shè)計(jì)

          軟件部分的設(shè)計(jì)主要包括下位機(jī)按mcu的接收程序、脈沖控制程序以及上位機(jī)的串口發(fā)送程序。上位機(jī)與下位機(jī)之間進(jìn)行數(shù)據(jù)通信。上位機(jī)的程序主要通過windows可視化編程vc++實(shí)現(xiàn)。

          下位機(jī)程序主要負(fù)責(zé)接受pc發(fā)來的數(shù)據(jù),按照要求產(chǎn)生控制脈沖,具體流程為:首先對(duì)要使用的串口進(jìn)行初始化,然后p2輸出口清零,接著進(jìn)入住程序的死循環(huán),等待中斷觸發(fā)。接收一個(gè)字節(jié)的數(shù)據(jù),ri=1,接著將ri清零。當(dāng)單片機(jī)接收完數(shù)據(jù)后,標(biāo)志位置1。將緩存中的數(shù)據(jù)存入控制的變量中,以便控制時(shí)使用(具體操作時(shí)先法數(shù)據(jù)幀再發(fā)啟動(dòng)幀)。軟件控制流程如圖3所示。

          結(jié)語

          結(jié)合以上介紹的基于a3967slb的步進(jìn)電機(jī)控制系統(tǒng),在vc++環(huán)境下,利用mscomm控件實(shí)現(xiàn)了pc與單片機(jī)之間的串行通信。實(shí)驗(yàn)結(jié)果表明,用這種方式實(shí)現(xiàn)上位機(jī)對(duì)基于a3967slb的步進(jìn)電機(jī)的控制系統(tǒng)進(jìn)行精確的驅(qū)動(dòng)可行有效。

          本系統(tǒng)中,利用pc的豐富軟硬件資源和強(qiáng)大的系統(tǒng)功能,可進(jìn)行一些數(shù)據(jù)處理、顯示等工作;而從控制器at89c52則用于實(shí)時(shí)控制。另外,該系統(tǒng)為開放式結(jié)構(gòu),便于系統(tǒng)升級(jí)。



          關(guān)鍵詞:

          評(píng)論


          相關(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); })();