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

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > 基于PIC18F452單片機(jī)的仿生機(jī)器魚的舵機(jī)控制

          基于PIC18F452單片機(jī)的仿生機(jī)器魚的舵機(jī)控制

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

          3 舵機(jī)的控制
          3.1 舵機(jī)的工作原理:
          舵機(jī)主要由以下幾個部分組成:舵盤、減速齒輪組、比例電位器(位置反饋電位計)、直流電機(jī)(馬達(dá))、控制電路板等。其工作原理:控制電路板接受來自信號線的控制信號,控制直流電機(jī)轉(zhuǎn)動,直流電機(jī)帶動一系列齒輪組,其齒輪組的輸出軸與一個線性的比例電位器相連,該電位器把輸出軸轉(zhuǎn)過的角度θ 轉(zhuǎn)換成比例的電壓反饋給控制電路,控制電路將其與輸入的控制脈沖信號比較,產(chǎn)生糾偏脈沖,并驅(qū)動馬達(dá)正向或反向地轉(zhuǎn)動,使齒輪組的輸出位置與期望值相符,令糾正脈沖趨于為0,從而達(dá)到使舵機(jī)精確定位的目的。舵機(jī)是一個典型閉環(huán)反饋系統(tǒng),其工作原理由圖3 所示。

          舵機(jī)的輸入線共有三條,紅色中間,是電源線,一邊黑色的是地線,這兩根線給舵機(jī)提供最基本的能源保證,主要是電機(jī)的轉(zhuǎn)動消耗。電源有兩種規(guī)格,一是4.8V,一是6.0V,分別對應(yīng)不同的轉(zhuǎn)矩標(biāo)準(zhǔn),另外一根線是控制信號線,一般為白色。
          3.2 單舵機(jī)和多舵機(jī)的角度控制
          3.2.1 單舵機(jī)的角度控制:
          由舵機(jī)的工作原理可知,給舵機(jī)輸入一個周期在20ms 左右,脈沖寬度在0.5ms 至2.5ms 之間的周期性脈沖信號,驅(qū)動舵機(jī)輸出軸達(dá)到-90°到90° 之間的轉(zhuǎn)角,呈線性變化。并且無論外界轉(zhuǎn)矩怎樣改變,舵機(jī)的輸出軸都會保持在一個相對應(yīng)的角度上,直到給它提供一個另外寬度的脈沖信號,才會改變輸出角度到新的對應(yīng)的位置上。通過編程,借助單片機(jī)的輸出端口得到需要的周期性脈沖信號。
          程序示例:(晶振為:4MHZ,脈沖從PORTDbits.RD0 輸出)
          void delay(int j) //此函數(shù)用于產(chǎn)生0.25ms*j 的延時
          {
          for(i=0;ij;i++)
          {

          INTCONbits.TMR0IF=0; //清TMR0 中斷標(biāo)志位
          T0CON=0XCF; //設(shè)定TMR0L 工作于8 位定時器方式、內(nèi)部時鐘、
          TMR0 不用分頻
          TMR0L=0X14; //設(shè)定TMR0 每0.25ms 產(chǎn)生一次中斷
          L1: if(INTCONbits.TMR0IF==1)
          {
          INTCONbits.TMR0IF==0; //清TMR0 中斷標(biāo)志位,關(guān)計時器
          T0CON=0X4F;
          }
          else goto L1;
          }
          }
          PORTDbits.RD0=1; // 輸出脈沖寬度為2ms,周期為20ms 的脈沖信號
          delay(8);
          PORTDbits.RD0=0;
          delay(72);
          從上面的程序可知,通過改變delay 函數(shù)的形參j,可以根據(jù)需要,得到具有相應(yīng)脈沖寬度和周期的脈沖信號。例如,改變以上程序段的1 至4 行為:
          PORTDbits.RD0=1;
          delay(4);
          PORTDbits.RD0=0;
          delay(76);
          得到輸出脈沖寬度為1ms,周期為20ms 的脈沖信號,然后借助for 循環(huán),將能得到所需要的周期性脈沖信號,驅(qū)動舵機(jī)輸出軸達(dá)到-90°到90° 之間的轉(zhuǎn)角。
          3.2.2 多舵機(jī)不同角度的控制:
          通過多舵機(jī)不同角度的控制,可以控制幾個舵機(jī)同時向不同角度扭轉(zhuǎn),以達(dá)到預(yù)期的控制目的。
          具體的實現(xiàn)方法是:在定時器延時函數(shù)中設(shè)定一個計時值t(在程序中t 在初始化時值為0),使t 在每次定時器計時完畢時加1。例如,定時器一周期的定時時間為0.25ms,則t值每加1 就相當(dāng)于0.25ms。當(dāng)t 的代表值達(dá)到20ms 也就是當(dāng)t 等于80 時清零,這樣就可以將脈沖周期控制在20ms,再通過使用if 語句查詢方式,可以調(diào)節(jié)同一周期脈沖的脈沖寬度,即能使多舵機(jī)同時向不同角度旋轉(zhuǎn)。
          程序示例:(晶振為:4MHZ,脈沖從PORTDbits.RD0,PORTDbits.RD1,PORTDbits.RD2三個端口中輸出)
          if(t=0) //端口初始化
          {
          PORTDbits.RD0=1
          PORTDbits.RD1=1
          PORTDbits.RD2=1
          }
          INTCONbits.TMR0IF=0; //清TMR0 中斷標(biāo)志位
          T0CON=0XCF; //設(shè)定TMR0L 工作于8 位定時器方式、內(nèi)部時鐘、TMR0不用分頻
          TMR0L=0X14; //設(shè)定TMR0 每0.25ms 產(chǎn)生一次中斷
          L1: if(INTCONbits.TMR0IF==1)
          {
          INTCONbits.TMR0IF==0; //清TMR0 中斷標(biāo)志位,關(guān)計時器
          T0CON=0X4F;
          t++
          }
          else goto L1;
          if(t=4)
          PORTDbits.RD0=0; //脈沖寬度為:1ms
          else if(t=6)
          PORTDbits.RD1=0; //脈沖寬度為:1.5ms
          else if(t=8)
          PORTDbits.RD2=0; //脈沖寬度為:2ms
          else(t=80)
          t=0; //脈沖周期為:0.25ms*80=20ms



          評論


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