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

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > 基于51單片機雙極型PWM 的軟件實現(xiàn)

          基于51單片機雙極型PWM 的軟件實現(xiàn)

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

          基于51單片機雙極型PWM 的軟件實現(xiàn)
          下面計算產(chǎn)生 所需的定時初值。實際上穩(wěn)定工作時,只有一個引腳有輸出,即一般兩個引腳不會同時輸出,所以可看作是兩個相對獨立的過程,可假設脈寬和誤差信號的線性對應關系:
          基于51單片機雙極型PWM 的軟件實現(xiàn)
          據(jù)此可求出定時初值與誤差信號的關系:
          基于51單片機雙極型PWM 的軟件實現(xiàn)
          由(1)式有
          基于51單片機雙極型PWM 的軟件實現(xiàn)
          把式(5)代入式(6)得:
          基于51單片機雙極型PWM 的軟件實現(xiàn)
          當晶振頻率取12 MHz時,f=12。采用定時方式1,則可以得到即時的控制信號V(t)和定時初值在PWM 信號的一個周期內(nèi)的關系:
          基于51單片機雙極型PWM 的軟件實現(xiàn)
          因為V和V(t)通過對誤差計算都可以得到,所以根據(jù)式(8)可以求出t時刻對應的PWM 一個周期高低脈寬的定時初值(注意這里的T的單位是us,頻率f的單位為MHz)。

          3 Keil C下的程序?qū)崿F(xiàn)
          Keil C是基于標準C的C51專用高級編程語言,它具備標準C的強大靈活的編程能力,同時又相對增加了對C硬件資源的直接操作,故在Keil C下對C51的程序設計幾乎使人們可擺脫對C51底層寄存器等硬件的煩瑣操作,編程效率顯著提高,并且程序運行速度和所占空間和匯編差別不大。這里利用定時器T0的方式1,采用其時間溢出中斷,中斷號為1,具體程序流程如圖2所示。
          基于51單片機雙極型PWM 的軟件實現(xiàn)
          圖2 PWM信號實現(xiàn)的軟件流程
          E -誤差控制器;TH0-T0定時器高位;TL0-T0定時器低位;Twh、Twl-定時器初值

          4 結語
          單片機硬件發(fā)展很快,出現(xiàn)了16位、32位等多位機,但今后一段時期的8位機將仍占主流。通過適當?shù)能浖_發(fā),可以挖掘其內(nèi)在價值,這樣既降低了生產(chǎn)成本,又鍛煉了個人的軟件開發(fā)能力。
          參考文獻:
          [1] 李朝青.原理及接口技術[M].北京:北京航空航天大學出版社,1999.
          [2] 孫傳友.測控系統(tǒng)原理與設計[M].北京:北京航空航天大學出版社,2002.
          [32 張運波.PWM 信號的軟件實現(xiàn)方法[J].微型計算機信息,2002,8(10)

          pwm相關文章:pwm是什么


          51單片機相關文章:51單片機教程


          pwm相關文章:pwm原理



          上一頁 1 2 下一頁

          評論


          相關推薦

          技術專區(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); })();