<acronym id="xonnx"></acronym>
      <td id="xonnx"></td>
    1. <pre id="xonnx"></pre>

      1. 專注電子技術學習與研究
        當前位置:單片機教程網 >> Arduino >> 瀏覽文章

        基于Proteus的Arduino學習10-舵機與舵機的控制

        作者:我不是奔跑哥   來源:我不是奔跑哥的blog   點擊數:  更新時間:2014年06月08日   【字體:

        在前面的幾節的學習筆記中,我們學習了幾種傳感器及用法,這一節學習筆記帶領大家學習舵機及使用Arduino對舵機進行控制。

        舵機(英文叫Servo):它由直流電機、減速齒輪組、傳感器和控制電路組成的一套自動控制系統。通過發送信號,指定輸出軸旋轉角度。舵機一般而言都有最大旋轉角度(比如180度。)與普通直流電機的區別主要在,直流電機是一圈圈轉動的,舵機只能在一定角度內轉動,不能一圈圈轉(數字舵機可以在舵機模式和電機模式中切換,沒有這個問題)。普通直流電機無法反饋轉動的角度信息,而舵機可以。用途也不同,普通直流電機一般是整圈轉動做動力用,舵機是控制某物體轉動一定角度用(比如機器人的關節)!疚墨I1】如圖1所示為9g舵機。一般的舵機接線為三線,VCC、GND和信號線。
        圖1 9g舵機實物圖
        如圖2所示,舵機主要有以下幾部分組成:齒輪組、直流電機、電位器、電機控制板、殼體。其中,齒輪組通過降低速度以提高扭矩;直流電機提供舵機的動力;電機控制板負責接收電位器的信號,通過算法驅動電機;電位器為位置編碼器的作用,作為電機驅動之后的反饋信號!疚墨I1】
        圖2 舵機的組成部分
        舵機的控制信號是脈沖位置調制(PPM)信號,是一種寬度可調的周期性方波脈沖信號,周期一般為20ms,當方波的脈沖寬度改變時,舵機轉軸的角度發生變化,角度變化與脈沖寬度的變化成正比。一般舵機的輸出軸轉角與輸入信號的脈沖寬度之間的關系可用圖3表示!疚墨I2】
         

        圖3 脈沖與角度的關系圖
        首先,我們需要proteus仿真里面添加舵機,在元器件搜索欄中輸入“servo”,并添加至元器件選擇欄中,如圖4所示。并將其中間的管腳接至數字口9腳,也就是ATmega328P的15管腳,同時上管腳接至+5V,下管腳接至地端,修改后的Proteus仿真圖如圖5所示。
        圖4 在proteus中添加"servo"

        圖5 修改后的Proteus仿真圖
        下面編寫Arduino程序,實現舵機自動旋轉180°,并旋轉回0°。
        Arduino代碼清單:
        #include <Servo.h> 
        Servo myservo;  // create servo object to control a servo 
                        // a maximum of eight servo objects can be created 
         
        int pos = 0;    // variable to store the servo position 
         
        void setup() 
          myservo.attach(9);  // attaches the servo on pin 9 to the servo object 
         
         
        void loop() 
          for(pos = 0; pos < 180; pos += 1)  // goes from 0 degrees to 180 degrees 
          {                                  // in steps of 1 degree 
            myservo.write(pos);              // tell servo to go to position in variable 'pos' 
            delay(15);                       // waits 15ms for the servo to reach the position 
         
          for(pos = 180; pos>=1; pos-=1)     // goes from 180 degrees to 0 degrees 
          {                                
            myservo.write(pos);              // tell servo to go to position in variable 'pos' 
            delay(15);                       // waits 15ms for the servo to reach the position 
         
        調試與演示

        圖6 舵機旋轉至180°

        圖7 舵機旋轉至137°
        關閉窗口

        相關文章

        欧美性色欧美精品视频,99热这里只有精品mp4,日韩高清亚洲日韩精品一区二区,2020国自产拍精品高潮