<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ī)驅(qū)動伺服電機(jī)程序

          51單片機(jī)驅(qū)動伺服電機(jī)程序

          作者: 時間:2016-12-01 來源:網(wǎng)絡(luò) 收藏
          51單片機(jī)除了幾款加強(qiáng)版的帶pwm,很多都不帶,所以要用51控制伺服電機(jī)很多時候就要軟件模擬pwm??戳诵┐a有的是通過延時來輸出pwm波,有的也用了定時器但是那些代碼要驅(qū)動多路伺服電路就顯得比較麻煩。下面的代碼是通過定時器0產(chǎn)生每0.5ms一次的提醒,程序在大循環(huán)中通過調(diào)用DJ()函數(shù)可以返還值給伺服電機(jī)信號引腳,DJ()函數(shù)可以定旋轉(zhuǎn)的角度,但是因?yàn)槎〞r器設(shè)置是0.5ms的中斷這就決定了旋轉(zhuǎn)呢角度只能是-45,-90,0,45,90。如果要提高精度就要通過設(shè)置定時器的初值,改變函數(shù)的num值來達(dá)成。
          #include"reg52.h"
          unsigned int num=0;
          //舵機(jī)
          sbit DJ1=P3^6;
          sbit DJ2=P3^7; /*引腳定義*/
          int DJ(int a); //函數(shù)聲明
          timerinit() //定時器中斷初始化
          {
          TMOD=0x01; //設(shè)置定時器0為工作方式1
          EA=1; //開總中斷
          ET0=1; //定時器0中斷允許
          TH0 = (65536-500)/256; //初值使得定時器0.5毫秒溢出
          TL0 = (65536-500)%256;
          TR0=0;
          }
          main()
          {
          timerinit();
          while(1)
          {
          }
          }
          timer() interrupt 0 //0.5ms發(fā)生一次中斷,20ms后定時器置0重新計(jì)數(shù)
          {
          num++;
          DJ1=DJ(3);
          DJ2=DJ(3);
          if(num>=40)
          {
          num=0;
          TH0 = (65536-500)/256; //初值使得定時器0.5毫秒溢出
          TL0 = (65536-500)%256;
          return;
          }
          }
          int DJ(char a) //當(dāng)a=3舵機(jī)所在的位置是0度a=2 a=1分別對應(yīng)的位置是-45 -90度a=4 a=5對應(yīng)位置為45 90度
          {
          if(num>=a||num>=5)
          return 0;
          if(num>=1)
          return 1;
          }
          時間倉促還沒有測試程序的可行性(通常是沒有問題呢,呵呵),等有時間的話會繼續(xù)完善程序加上可以控制舵機(jī)旋轉(zhuǎn)速度的功能。如果要弄機(jī)器人的話還是弄塊專業(yè)的驅(qū)動板吧,那樣調(diào)試起來會很直觀很方便呢減少許多不必要的麻煩呢。


          評論


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