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

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 51單片機(jī)PWM控制電機(jī)

          51單片機(jī)PWM控制電機(jī)

          作者: 時(shí)間:2016-11-19 來源:網(wǎng)絡(luò) 收藏
          小時(shí)候玩的四驅(qū)車,給直流馬達(dá)接通電源就嗤嗤的跑出去了。電機(jī)種類眾多,就屬控制直流電機(jī)最簡單,只要對(duì)調(diào)正負(fù)極就能改變電機(jī)的轉(zhuǎn)向。另外,直流電機(jī)負(fù)載能力強(qiáng),適合做越野車的驅(qū)動(dòng)電機(jī)。為了做可調(diào)速的越野車,就有了這篇文章。

          電源電壓輸出是固定的,電機(jī)的轉(zhuǎn)速也因此是固定的,為了調(diào)節(jié)電機(jī)的轉(zhuǎn)速,就得改變電源電壓的輸出(為嘛要改變電機(jī)轉(zhuǎn)速?舉個(gè)簡單的列子,雙電機(jī)驅(qū)動(dòng)小車-一邊一個(gè)電機(jī)-如何實(shí)現(xiàn)轉(zhuǎn)向?讓兩邊輪胎上的速度不同即可)。how?用PWM調(diào)制的方法,把恒定的直流電源電壓調(diào)制成頻率一定寬度可變的脈沖電壓序列,從而可以改變平均輸出電壓的大小,以調(diào)節(jié)電機(jī)的轉(zhuǎn)速。電源電壓在此處就是51MCU的引腳輸出,4.5-5V,只要在引腳上產(chǎn)生頻率可調(diào)的波形即可。假設(shè)在一個(gè)周期內(nèi),就10ms吧,前5ms引腳輸出高電平,后5ms引腳輸出低電平,周而復(fù)始,引腳上輸出50%占空比的穩(wěn)定方波;再改改,前2ms輸出高電平,后8ms輸出低電平,引腳上輸出20%占空比的穩(wěn)定方波。

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

          MCU產(chǎn)生周期性事件很簡單,用定時(shí)器定時(shí)產(chǎn)生中斷即可。一般差不多一下形式:

          void Isr01() interrupt 1{static unsigned int cnt;cnt++;if(cnt==40){cnt=0;}}
          假設(shè)每250us產(chǎn)生一次中斷,以上中斷函數(shù)統(tǒng)計(jì)40次中斷,即10ms。
          為了完成"可改變占空比的方波"這個(gè)命題,來試試給這個(gè)函數(shù)增加一些統(tǒng)計(jì)事件,在一個(gè)統(tǒng)計(jì)事件中做一些事,另一個(gè)統(tǒng)計(jì)事件中做其他的事。

          unsigned int condition=20;void Isr01() interrupt 1{static unsigned int cnt;cnt++;//一個(gè)周期if(cnt==40){cnt=0;}//事件1if(cntcondition就是新增加的統(tǒng)計(jì)事件,前半個(gè)周期為一個(gè)事件,后半個(gè)周期為另一個(gè)事件。這里,當(dāng)cnt小于5ms,輸出高電平,當(dāng)cnt大于輸出低電平,合在一起生成一個(gè)50%占空比的方波。

          unsigned int condition=20;void Isr01() interrupt 1{static unsigned int cnt;cnt++;//一個(gè)周期if(cnt==40){cnt=0;}if(cnt為了改變占空比,只要在ISR外修改condition即可,貼出最終的代碼:

          #include    #include   sbit P2_0 = P2^0;  sbit P2_1 = P2^1;#define MakeByte(target, Hi,Lo)   do{   target |= (((Hi)<<4)|(Lo));    }while(0);   #define SetTH(n,val)   do{   TH##n = val;   }while(0);   #define SetTL(n,val)    do{   TL##n = val;   }while(0);   #define EnableET(n)   do{   ET##n = 0x01;   IE |= 0x80;   }while(0);  enum KEYSTAT{KEYDOWN=0,KEYUP,};unsigned char iterator = 0x00;void DelayMs(unsigned int ms){int i=0,j=0;for(;i在主函數(shù)中,通過判斷按下鍵來改變condition。


          結(jié)尾部分,貼上仿真圖和仿真結(jié)果:

          1)占空比100%:

          2)差不多55%占空比:


          3)0%的占空比,電機(jī)休息了:



          關(guān)鍵詞: 51單片機(jī)PWM控制電

          評(píng)論


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