欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

專注電子技術(shù)學(xué)習(xí)與研究
當(dāng)前位置:單片機(jī)教程網(wǎng) >> Arduino >> 瀏覽文章

基于Proteus的Arduino學(xué)習(xí)10-舵機(jī)與舵機(jī)的控制

作者:我不是奔跑哥   來源:我不是奔跑哥的blog   點(diǎn)擊數(shù):  更新時(shí)間:2014年06月08日   【字體:

在前面的幾節(jié)的學(xué)習(xí)筆記中,我們學(xué)習(xí)了幾種傳感器及用法,這一節(jié)學(xué)習(xí)筆記帶領(lǐng)大家學(xué)習(xí)舵機(jī)及使用Arduino對(duì)舵機(jī)進(jìn)行控制。

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

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

圖5 修改后的Proteus仿真圖
下面編寫Arduino程序,實(shí)現(xiàn)舵機(jī)自動(dòng)旋轉(zhuǎn)180°,并旋轉(zhuǎn)回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 
 
調(diào)試與演示

圖6 舵機(jī)旋轉(zhuǎn)至180°

圖7 舵機(jī)旋轉(zhuǎn)至137°
關(guān)閉窗口

相關(guān)文章