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

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > 基于AVR單片機的通用電機控制裝置的設計

          基于AVR單片機的通用電機控制裝置的設計

          作者: 時間:2011-11-21 來源:網(wǎng)絡 收藏

          1.6 轉速測量電路
          轉速測量可采用一組鼠標上用的紅外對管來實現(xiàn),其電路原理如圖8所示。當紅外發(fā)射管與紅外接收管之間被直流電機光柵轉盤的不透明部分遮擋時,紅外接收管處于截止狀態(tài),此時圖中的SPEED輸出高電平。反之,當光柵轉盤的通光槽轉至紅外對管之間時,紅外接收管處于導通狀態(tài),此時SPEED輸出低電平。這樣,將SPEED連接到單片機的I/O口,即可通過定時計數(shù)的方法計算出電機的轉動速度。

          1f.JPG

          2 單片機程序設計
          2.1 主程序
          本驅動器的程序設計使用模塊化編程思想,其主程序用于完成對各子程序的調用。系統(tǒng)工作后,首先調用初始化子程序,以完成具有復用功能的I/0腳的選擇和設置、各種中斷功能的選擇及其設置、AT89S51和ATmegal6的初始化、中斷屏蔽寄存器的設置、中斷寄存器的清零、系統(tǒng)變量的初始化等,最后完成開中斷。初始化完成之后,系統(tǒng)將調用驅動程序,并完成系統(tǒng)的起動。系統(tǒng)起動之后,即進入正常運行狀態(tài)。系統(tǒng)的全部運行過程均可由鍵盤進行實時控制和調節(jié)。
          2.2 初始化程序
          系統(tǒng)的初始化程序流程圖如圖9所示。該程序中包括LCD顯示器、鍵盤等人機接口部分的初始化。主要功能是對具有復用功能引腳的選擇和設置,以及各種中斷功能的選擇及設置(如外部鍵盤的中斷選擇等),同時包括AT89S5l的初始化、鍵盤的方式選擇、工作時間的確定、顯示方式的設定等。而系統(tǒng)變量的初始化包括溫度的設定,轉速初值的設定等。

          1g.JPG


          2.3 控制程序
          系統(tǒng)起動后即進入控制程序??刂瞥绦蚴窍到y(tǒng)程序的主要部分,主要用來保證系統(tǒng)在給定的轉速下正常運行,該程序主要調節(jié)單片機PWM口的占空比,從而調節(jié)電機繞組兩端的平均電壓,達到調速的目的,其控制程序流程如圖10所示。

          1h.JPG

          3 結束語
          本設計實現(xiàn)了一種以ATmega16單片機為核心的電機控制裝置。該裝置具有各類電機驅動脈沖的輸出、電機溫度監(jiān)測與保護、人機操作界面和長距離工業(yè)總線通信等功能。利用具備的軟硬件特點,可實現(xiàn)對多種電機的驅動與控制,以用于電機驅動研究、網(wǎng)絡化電機集中控制等領域。由于該控制器采用主從單片機設計,系統(tǒng)的運行得以很好地分工,其中從單片機實現(xiàn)低速人際交互,主單片機則實現(xiàn)高速的電機驅動與控制,主從單片機各司其職,故可使系統(tǒng)的運行效率達到最高。本電機控制裝置的架構開放,使用靈活,可以很好地應用于直流電機的調速控制,交流電機的變頻驅動,步進電機的步距細分等多種電機驅動和控制領域。


          上一頁 1 2 3 4 下一頁

          評論


          相關推薦

          技術專區(qū)

          關閉
          看屁屁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); })();