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

          新聞中心

          EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 飛思卡爾那些事之pwm輸出控制伺服電機(jī)轉(zhuǎn)向

          飛思卡爾那些事之pwm輸出控制伺服電機(jī)轉(zhuǎn)向

          作者: 時(shí)間:2016-11-23 來源:網(wǎng)絡(luò) 收藏
          資源:
          1、伺服電機(jī)。PWM輸出周期在一定范圍內(nèi),舵機(jī)的轉(zhuǎn)向會(huì)和PWM的占空比成正比例關(guān)系。
          2、HCS12的PWM輸出。
          方案:
          1、HCS12中的PWM模塊,通過硬件進(jìn)行PWM輸出。
          2、HCS12中的ECT的比較輸出模塊,通過比較輸出進(jìn)行PWM的輸出。
          鑒于PWM模塊為輸出PWM專用模塊,通過設(shè)置相應(yīng)寄存器即可實(shí)現(xiàn)PWM輸出,簡(jiǎn)單方便,而且精確。故選用PWM模塊進(jìn)行PWM輸出。
          說明:
          1、通過PWM控制舵機(jī)的轉(zhuǎn)角,舵機(jī)接口一般為3根線,黑色地線,紅色為電源線,一般采用4.8V和6V兩種標(biāo)準(zhǔn)。另外一根線為控制信號(hào)線。
          2、通過級(jí)聯(lián)方式實(shí)現(xiàn)16位PWM輸出。
          3、周期為18MS~20MS即輸出周期為56Hz~50Hz。
          4、對(duì)齊方式為PWM左對(duì)齊方式。
          5、輸出極性為起始高電平。
          6、脈寬為1100us~1900us不等,實(shí)現(xiàn)-45°到45°的轉(zhuǎn)向角。
          7、通過級(jí)聯(lián)方式實(shí)現(xiàn)16位PWM輸出。通道PWM45組成通道A。
          8、時(shí)鐘源選擇。
          BusBlock:24MHz。
          void pllclk(void) //24MHz
          {
          SYNR=0x02;//PLLCLK =2*OSCCLK*(SYNR + 1)/(REFDV + 1)
          REFDV=0x01;
          CLKSEL=0x80;//選定PLL時(shí)鐘
          }
          9、PWM時(shí)鐘。
          通道時(shí)鐘周期2us
          輸出周期20MS
          PWM輸出頻率:50Hz。
          預(yù)分頻:8分頻3MHz
          PWMPRCLK=0x66
          分頻:6分頻 500kHz
          ClockSX=ClockX/(2*PWMSCLX)
          PWMSCLx=ClockX/ClockSX*2=3M/(500k*2)=3=0x03
          通過兩次分頻可得通道時(shí)鐘周期為:100US即10KHZ
          通道A時(shí)鐘頻率選擇PWMPRCLK和PWMSCLA;
          通道B時(shí)鐘頻率選擇PWMPRCLK和PWMSCLB;
          周期計(jì)算公式:
          左對(duì)齊方式:
          輸出周期=通道時(shí)鐘周期*(PWMPERx+1)
          PWMPERx=輸出周期/通道時(shí)鐘周期-1
          =20MS/2us-1
          =9999=0x270f
          10、占空比設(shè)置:
          左對(duì)齊起始輸出高電平:
          占空比=[(PWMDTYx+1)/(PWMPERx+1)]*100%
          PWMDTYx=占空比*(PWMPERx+1)/100%
          根據(jù)公式:
          [(PWMDTYx+1)/(PWMPERx+1)]*100%=脈寬寬度/輸出周期*100%
          PWMDTYx=(脈寬寬度*PWMPERx)/輸出周期-1
          =(脈寬寬度*9999)20000-1

          脈寬寬度=旋轉(zhuǎn)角度*(400)/45+1500(us)
          通過循環(huán)即可以求出伺服電機(jī)轉(zhuǎn)動(dòng)角度對(duì)應(yīng)的PWMDTx的值。
          PWMDTYx[28]={859,855,850,846,841,837,832,828,824,819,815,810,806,801,797,792,788,784,779,775,
          770,766,761,757,752,748,744,740,735,731,726,722,717,713,708,704,700,695,691,686,
          682,677,673,668,664,660,655,651,646,642,637}
          求PWMDTYx值的程序如下:
          #include
          void main()
          {
          long int i,X,y;
          X=25;
          for(i=-25;i<=25;i++)
          {
          y=X*(400)/45+1500;
          printf("angle:%3d°pulse:%duscycle:20MSPWMDTYx:%dPWMPERx:9999n",X,y,(int)((9999.0/20000.0)*y)-1);
          X--;
          }
          }

          CODE:
          #include
          #include
          #pragma LINK_INFO DERIVATIVE "mc9s12xs128"

          //===========================================================//
          //16位PWM輸出控制伺服電機(jī)轉(zhuǎn)動(dòng)
          //author: yangtze
          //time:2009/4/21/
          //===========================================================//
          #define PWMPERx0x270F;
          unsigned int PWMDTYxtable[]={
          0x035b,0x0357,0x0352,0x034e,0x0349,0x0345,
          0x0340,0x033c,0x0338,0x0333,0x032f,0x032a,
          0x0326,0x0321,0x031d,0x0318,0x0314,0x0310,
          0x030b,0x0307,0x0302,0x02fe,0x02f9,0x02f5,
          0x02f0,0x02ec,0x02e8,0x02e4,0x02df,0x02db,
          0x02d6,0x02d2,0x02cd,0x02c9,0x02c4,0x02c0,
          0x02bc,0x02b7,0x02b3,0x02ae,0x02aa,0x02a5,
          0x02a1,0x029c,0x0298,0x0294,0x028f,0x028b,
          0x0286,0x0282,0x027d};
          void pllclk(void)//24MHz
          {
          SYNR=0x02;//PLLCLK =2*OSCCLK*(SYNR + 1)/(REFDV + 1)
          REFDV=0x01;
          CLKSEL=0x80;//選定PLL時(shí)鐘
          }


          void PWMServoMotor_init(void)//PWM初始化設(shè)置
          {
          PWMPRCLK=0X66;//設(shè)置通道周期
          PWMSCLA=0X03;
          PWMSCLB=0X03;
          PWMCLK=0XFF;

          PWMPOL=0X00;//起始輸出為高電平
          PWMCAE=0X00;//波形左對(duì)齊
          PWMCTL=0XFC;//選擇級(jí)聯(lián)方式輸出
          }

          void PWM_Pulse(unsigned int PWMPERx,unsigned int PWMDTYx)//PWM輸出周期和占空比設(shè)置
          {
          PWMPERH=(PWMPERx>>8)&0X00FF;
          PWMPERL=PWMPERx&0X00FF;

          PWMPER4=PWMPERH;//設(shè)置輸出周期
          PWMPER5=PWMPERL;

          PWMDTYH=(PWMDTYx>>8)&0X00FF;
          PWMDTYL=PWMDYx&0X00FF;

          PWMDTY4=PWMDTYH;//設(shè)置脈寬
          PWMDTY5=PWMDTYL;

          PWME=0X18;//通道45使能開
          }
          void main(void)
          {
          unsigned int PWMDTYx;
          PWMDTYx=PWMDTYxtable[5];
          pllclk();
          PWMServoMotor_init();
          PWM_Pulse(PWMPERx,PWMDTYx);

          EnableInterrupts;
          for(;;) {}

          }

          //上次編寫直流電機(jī)驅(qū)動(dòng)的程序時(shí),本來是用16位的PWM調(diào)制,可是最后使用的卻僅僅只是8位的。這次又是在使用PWM模塊,認(rèn)真的去研究了這個(gè)模塊的使用方式,才知道,16位的和8位的最大的區(qū)別不是周期長(zhǎng)短或者是占空比大小什么的。事實(shí)上位數(shù)上的差別,影響影響最大的是調(diào)制精度。位數(shù)越大,能設(shè)定的通道周期越小,這樣在設(shè)定的周期和占空比上,就能更精確。而不是之前理解的那樣,能提供更大的輸出周期。


          關(guān)鍵詞: 飛思卡爾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); })();