1. 請教360度舵機具體控制方法
360度舵機,可調速,可控制轉向,但是不能定角度控制。
說白了就跟直流減速電機一個樣。
建議重買舵機。最便宜的輝盛sg90就可以。
2. 如果控制舵機
利用單片機PWM信號進行舵機控制
[日期:2005-10-15] 來源:今日電子 作者:北京交通大學 時瑋 [字體:大 中 小]
基於單片機的舵機控制方法具有簡單、精度高、成本低、體積小的特點,並可根據不同的舵機數量加以靈活應用。
在機器人機電控制系統中,舵機控制效果是性能的重要影響因素。舵機可以在微機電系統和航模中作為基本的輸出執行機構,其簡單的控制和輸出使得單片機系統非常容易與之介面。
舵機是一種位置伺服的驅動器,適用於那些需要角度不斷變化並可以保持的控制系統。其工作原理是:控制信號由接收機的通道進入信號調制晶元,獲得直流偏置電壓。它內部有一個基準電路,產生周期為20ms,寬度為1.5ms的基準信號,將獲得的直流偏置電壓與電位器的電壓比較,獲得電壓差輸出。最後,電壓差的正負輸出到電機驅動晶元決定電機的正反轉。當電機轉速一定時,通過級聯減速齒輪帶動電位器旋轉,使得電壓差為0,電機停止轉動。
圖1 舵機的控制要求
舵機的控制信號是PWM信號,利用占空比的變化改變舵機的位置。一般舵機的控制要求如圖1所示。
單片機實現舵機轉角控制
可以使用FPGA、模擬電路、單片機來產生舵機的控制信號,但FPGA成本高且電路復雜。對於脈寬調制信號的脈寬變換,常用的一種方法是採用調制信號獲取有源濾波後的直流電壓,但是需要50Hz(周期是20ms)的信號,這對運放器件的選擇有較高要求,從電路體積和功耗考慮也不易採用。5mV以上的控制電壓的變化就會引起舵機的抖動,對於機載的測控系統而言,電源和其他器件的信號雜訊都遠大於5mV,所以濾波電路的精度難以達到舵機的控制精度要求。
也可以用單片機作為舵機的控制單元,使PWM信號的脈沖寬度實現微秒級的變化,從而提高舵機的轉角精度。單片機完成控制演算法,再將計算結果轉化為PWM信號輸出到舵機,由於單片機系統是一個數字系統,其控制信號的變化完全依靠硬體計數,所以受外界干擾較小,整個系統工作可靠。
單片機系統實現對舵機輸出轉角的控制,必須首先完成兩個任務:首先是產生基本的PWM周期信號,本設計是產生20ms的周期信號;其次是脈寬的調整,即單片機模擬PWM信號的輸出,並且調整占空比。
當系統中只需要實現一個舵機的控制,採用的控制方式是改變單片機的一個定時器中斷的初值,將20ms分為兩次中斷執行,一次短定時中斷和一次長定時中斷。這樣既節省了硬體電路,也減少了軟體開銷,控制系統工作效率和控制精度都很高。
具體的設計過程:例如想讓舵機轉向左極限的角度,它的正脈沖為2ms,則負脈沖為20ms-2ms=18ms,所以開始時在控制口發送高電平,然後設置定時器在2ms後發生中斷,中斷發生後,在中斷程序里將控制口改為低電平,並將中斷時間改為18ms,再過18ms進入下一次定時中斷,再將控制口改為高電平,並將定時器初值改為2ms,等待下次中斷到來,如此往復實現PWM信號輸出到舵機。用修改定時器中斷初值的方法巧妙形成了脈沖信號,調整時間段的寬度便可使伺服機靈活運動。
為保證軟體在定時中斷里採集其他信號,並且使發生PWM信號的程序不影響中斷程序的運行(如果這些程序所佔用時間過長,有可能會發生中斷程序還未結束,下次中斷又到來的後果),所以需要將採集信號的函數放在長定時中斷過程中執行,也就是說每經過兩次中斷執行一次這些程序,執行的周期還是20ms。軟體流程如圖2所示。
如圖2 產生PWM信號的軟體流程
如果系統中需要控制幾個舵機的准確轉動,可以用單片機和計數器進行脈沖計數產生PWM信號。
脈沖計數可以利用51單片機的內部計數器來實現,但是從軟體系統的穩定性和程序結構的合理性看,宜使用外部的計數器,還可以提高CPU的工作效率。實驗後從精度上考慮,對於FUTABA系列的接收機,當採用1MHz的外部晶振時,其控制電壓幅值的變化為0.6mV,而且不會出現誤差積累,可以滿足控制舵機的要求。最後考慮數字系統的離散誤差,經估算誤差的范圍在±0.3%內,所以採用單片機和8253、8254這樣的計數器晶元的PWM信號產生電路是可靠的。圖3是硬體連接圖。
圖3 PWA信號的計數和輸出電路
基於8253產生PWM信號的程序主要包括三方面內容:一是定義8253寄存器的地址,二是控制字的寫入,三是數據的寫入。軟體流程如圖4所示,具體代碼如下。
//關鍵程序及注釋:
//定時器T0中斷,向8253發送控制字和數據
void T0Int() interrupt 1
{
TH0 = 0xB1;
TL0 = 0xE0;
//20ms的時鍾基準
//先寫入控制字,再寫入計數值
SERVO0 = 0x30; //選擇計數器0,寫入控制字
PWM0 = BUF0L; //先寫低,後寫高
PWM0 = BUF0H;
SERVO1 = 0x70; //選擇計數器1,寫入控制字
PWM1 = BUF1L;
PWM1 = BUF1H;
SERVO2 = 0xB0; //選擇計數器2,寫入控制字
PWM2 = BUF2L;
PWM2 = BUF2H;
}
圖4 基於8253產生PWA信號的軟體流程
當系統的主要工作任務就是控制多舵機的工作,並且使用的舵機工作周期均為20ms時,要求硬體產生的多路PWM波的周期也相同。使用51單片機的內部定時器產生脈沖計數,一般工作正脈沖寬度小於周期的1/8,這樣可以在1個周期內分時啟動各路PWM波的上升沿,再利用定時器中斷T0確定各路PWM波的輸出寬度,定時器中斷T1控制20ms的基準時間。
第1次定時器中斷T0按20ms的 1/8設置初值,並設置輸出I/O口,第1次T0定時中斷響應後,將當前輸出I/O口對應的引腳輸出置高電平,設置該路輸出正脈沖寬度,並啟動第2次定時器中斷,輸出I/O口指向下一個輸出口。第2次定時器定時時間結束後,將當前輸出引腳置低電平,設置此中斷周期為20ms的1/8減去正脈沖的時間,此路PWM信號在該周期中輸出完畢,往復輸出。在每次循環的第16次(2×8=16)中斷實行關定時中斷T0的操作,最後就可以實現8路舵機控制信號的輸出。
也可以採用外部計數器進行多路舵機的控制,但是因為常見的8253、8254晶元都只有3個計數器,所以當系統需要產生多路PWM信號時,使用上述方法可以減少電路,降低成本,也可以達到較高的精度。調試時注意到由於程序中脈沖寬度的調整是靠調整定時器的初值,中斷程序也被分成了8個狀態周期,並且需要嚴格的周期循環,而且運行其他中斷程序代碼的時間需要嚴格把握。
在實際應用中,採用51單片機簡單方便地實現了舵機控制需要的PWM信號。對機器人舵機控制的測試表明,舵機控制系統工作穩定,PWM占空比 (0.5~2.5ms 的正脈沖寬度)和舵機的轉角(-90°~90°)線性度較好。
參考文獻
1 胡漢才.單片機原理及介面技術.清華大學出版社.1996
2 王時勝,姜建平.採用單片機實現PWM式D/A轉換技術.電子質量.2004
3 劉歌群.盧京潮.閆建國.薛堯舜.用單片機產生7路舵機控制PWM波的方法.機械與電子.2004
舵機是一種位置伺服的驅動器,適用於那些需要角度不斷變化並可以保持的控制系統。其工作原理是:控制信號由接收機的通道進入信號調制晶元,獲得直流偏置電壓。它內部有一個基準電路,產生周期為20ms,寬度為1.5ms的基準信號,將獲得的直流偏置電壓與電位器的電壓比較,獲得電壓差輸出。最後,電壓差的正負輸出到電機驅動晶元決定電機的正反轉。當電機轉速一定時,通過級聯減速齒輪帶動電位器旋轉,使得電壓差為0,電機停止轉動。
3. arino舵機控制問題
舵機是一種位置伺服的驅動器,主要是由外殼、電路板、無核心馬達、齒輪與位置檢測器所構成。其工作原理是由接收機或者單片機發出信號給舵機,其內部有一個基準電路,產生周期為20ms,寬度為1.5ms 的基準信號,將獲得的直流偏置電壓與電位器的電壓比較,獲得電壓差輸出。經由電路板上的IC 判斷轉動方向,再驅動無核心馬達開始轉動,透過減速齒輪將動力傳至擺臂,同時由位置檢測器送回信號,判斷是否已經到達定位。適用於那些需要角度不斷變化並可以保持的控制系統。當電機轉速一定時,通過級聯減速齒輪帶動電位器旋轉,使得電壓差為0,電機停止轉動。一般舵機旋轉的角度范圍是0 度到180 度。
舵機有很多規格,但所有的舵機都有外接三根線,分別用棕、紅、橙三種顏色進行區分,由於舵機品牌不同,顏色也會有所差異,棕色為接地線,紅色為電源正極線,橙色為信號線。
舵機的轉動的角度是通過調節PWM(脈沖寬度調制)信號的占空比來實現的,標准PWM(脈沖寬度調制)信號的周期固定為20ms(50Hz),理論上脈寬分布應在1ms到2ms 之間,但是,事實上脈寬可由0.5ms 到2.5ms 之間,脈寬和舵機的轉角0°~180°相對應。有一點值得注意的地方,由於舵機牌子不同,對於同一信號,不同牌子的舵機旋轉的角度也會有所不同。
用Arino 控制舵機的方法有兩種,一種是通過Arino 的普通數字感測器介面產生占空比不同的方波,模擬產生PWM 信號進行舵機定位,第二種是直接利用Arino 自帶的Servo 函數進行舵機的控制,這種控制方法的優點在於程序編寫,缺點是只能控制2 路舵機,因為Arino 自帶函數只能利用數字9、10 介面。Arino 的驅動能力有限,所以當需要控制1 個以上的舵機時需要外接電源。
方法一:
將舵機接數字 9 介面上。
編寫一個程序讓舵機轉動到用戶輸入數字所對應的角度數的位置,並將角度列印顯示到屏幕上。
int servopin=9;//定義數字介面9 連接伺服舵機信號線
int myangle;//定義角度變數
int pulsewidth;//定義脈寬變數
int val;
void servopulse(int servopin,int myangle)//定義一個脈沖函數
{
pulsewidth=(myangle*11)+500;//將角度轉化為500-2480 的脈寬值
digitalWrite(servopin,HIGH);//將舵機介面電平至高
delayMicroseconds(pulsewidth);//延時脈寬值的微秒數
digitalWrite(servopin,LOW);//將舵機介面電平至低
delay(20-pulsewidth/1000);
}
void setup()
{
pinMode(servopin,OUTPUT);//設定舵機介面為輸出介面
Serial.begin(9600);//連接到串列埠,波特率為9600
Serial.println("servo=o_seral_simple ready" ) ;
}
void loop()//將0 到9 的數轉化為0 到180 角度,並讓LED 閃爍相應數的次數
{
val=Serial.read();//讀取串列埠的值
if(val>'0'&&val<='9')
{
val=val-'0';//將特徵量轉化為數值變數
val=val*(180/9);//將數字轉化為角度
Serial.print("moving servo to ");
Serial.print(val,DEC);
Serial.println();
for(int i=0;i<=50;i++) //給予舵機足夠的時間讓它轉到指定角度
{
servopulse(servopin,val);//引用脈沖函數
}
}
}
方法二
先具體分析一下 Arino 自帶的Servo 函數及其語句,來介紹一下舵機函數的幾個常用語句吧。
1、attach(介面)——設定舵機的介面,只有數字9 或10 介面可利用。
2、write(角度)——用於設定舵機旋轉角度的語句,可設定的角度范圍是0°到180°。
3、read()——用於讀取舵機角度的語句,可理解為讀取最後一條write()命令中
的值。
4、attached()——判斷舵機參數是否已發送到舵機所在介面。
5、detach()——使舵機與其介面分離,該介面(數字9 或10 介面)可繼續被用作PWM 介面。
註:以上語句的書寫格式均為「舵機變數名.具體語句()」例如:myservo.attach(9)。
仍然將舵機接在數字9 介面上即可。
參考源程序B:
#include <Servo.h>//定義頭文件,這里有一點要注意,可以直接在Arino 軟體菜單欄單擊Sketch>Importlibrary>Servo,調用Servo 函數,也可以直接輸入#include <Servo.h>,但是在輸入時要注意在#include 與<Servo.h>之間要有空格,否則編譯時會報錯。
Servo myservo;//定義舵機變數名
void setup()
{
myservo.attach(9);//定義舵機介面(9、10 都可以,缺點只能控制2 個)
}
void loop()
{
myservo.write(90);//設置舵機旋轉的角度
}
4. 怎樣控制舵機,用什麼控制舵機
舵機一般用單片機或者數字電路控制。
舵機工作主要跟控制線的高電平持續時間有關系,一般按0.5ms(毫秒)劃分,如果持續時間為0.5ms,1ms,1.5ms,2ms,2.5ms時,舵機會轉過不同的角度。
不過具體控制起來非常復雜,教學書里對舵機的控制能寫上10來頁,而且有圖,這么多的東西,要在這里說清楚,不太可能。還是建議你去網路文庫里找找,也可以去找找圖書館或者書店。
《新概念51單片機C語言教程:入門、提高、開發、拓展全攻略》
郭天祥
電子工業出版社
(2009-01出版),這本書里我記得有。
舵機的控制不簡單,一般的話屬於大學二、三年級的水平了,電子電氣專業的問題。
5. 模擬舵機和數字舵機的使用方法
一、舵機的原理
標準的舵機有3條導線,分別是:電源線、地線、控制線,如圖2所示。
以日本FUTABA-S3003型舵機為例,圖1是FUFABA-S3003型舵機的內部電路。
3003舵機的工作原理是:PWM信號由接收通道進入信號解調電路BA6688的12腳進行解調,獲得一個直流偏置電壓。該直流偏置電壓與電位器的電壓比較,獲得電壓差由BA6688的3腳輸出。該輸出送入電機驅動集成電路BAL6686,以驅動電機正反轉。當電機轉動時,通過級聯減速齒輪帶動電位器Rw1旋轉,直到電壓差為O,電機停止轉動。
舵機的控制信號是PWM信號,利用占空比的變化,改變舵機的位置。
有個很有趣的技術話題可以稍微提一下,就是BA6688是有EMF控制的,主要用途是控制在高速時候電機最大轉速。
原理是這樣的:
收到1個脈沖以後,BA6688內部也產生1個以5K電位器實際電壓為基準的脈沖,2個脈沖比較以後展寬,輸出給驅動使用。當輸出足夠時候,馬達就開始加速,馬達就能產生EMF,這個和轉速成正比的。
因為取的是中心電壓,所以正常不能檢測到的,但是運行以後就電平發生傾斜,就能檢測出來。超過EMF判斷電壓時候就減小展寬,甚至關閉,讓馬達減速或者停車。這樣的好處是可以避免過沖現象(就是到了定位點還繼續走,然後回頭,再靠近)
一些國產便宜舵機用的便宜的晶元,就沒有EMF控制,馬達、齒輪的機械慣性就容易發生過沖現象,產生抖舵
電源線和地線用於提供舵機內部的直流電機和控制線路所需的能源.電壓通常介於4~6V,一般取5V。注意,給舵機供電電源應能提供足夠的功率。控制線的輸入是一個寬度可調的周期性方波脈沖信號,方波脈沖信號的周期為20 ms(即頻率為50 Hz)。當方波的脈沖寬度改變時,舵機轉軸的角度發生改變,角度變化與脈沖寬度的變化成正比。某型舵機的輸出軸轉角與輸入信號的脈沖寬度之間的關系可用圍3來表示。
二、數碼舵機 VS 模擬舵機
數碼舵機比傳統的模擬舵機,在工作方式上有一些優點,但是這些優點也同時帶來了一些缺點。
傳統的舵機在空載的時候,沒有動力被傳到舵機馬達。當有信號輸入使舵機移動,或者舵機的搖臂受到外力的時候,舵機會作出反應,向舵機馬達輸出驅動電壓。由第一節的電路分析我們知道——馬達是否獲得驅動電壓,取決於BA6688的第3腳是否輸出一個電壓信號給BAL6686馬達驅動IC。
數碼舵機最大的差別是在於它處理接收機的輸入信號的方式。相對與傳統的50脈沖/秒的PWM信號解調方式,數碼舵機使用信號預處理方式,將頻率提高到300脈沖/秒。因為頻率高的關系,意味著舵機動作會更精確,「無反應區」變小。
以下的三個圖表各顯示了兩個周期的開/關脈沖。
圖1是空載的情況;圖2是脈沖寬度較窄,比較小的動力信號被輸入馬達;圖3是更寬,持續時間更長的脈沖,更多的輸入動力。
您可以想像,一個短促的脈沖,緊接著很長的停頓,這意味著舵機控制精度是不夠高的,這也是為什麼模擬舵機有「無反應區」的存在。比如說,舵機對於發射機的細小動作,反應遲鈍或者根本就沒有反應。
而數碼舵機提升了脈沖密度,輕微的信號改變都會變的可以讀取,這樣無論是遙控桿的輕微變動,或者舵機搖臂在外力作用下的極輕微變動,都會能夠檢測出來,從而進行更細微的修正。
三、數碼舵機的缺點:
以上我們已經知道數碼舵機會更精確這個優點,那麼我們來看數碼舵機的缺點
1、數碼舵機需要消耗更多的動力。其實這是很自然的。數碼舵機以更高頻率去修正馬達,這一定會增加總體的動力消耗。
2、相對教短的壽命。其實這是很自然的。馬達總在轉來轉去做修正,這一定會增加馬達等轉動部位的消耗。
四、擬人化比喻
技術性的東西說了這么多,也許很多對電路原理不熟悉的朋友還是不明白,呵呵,舉個簡單的例子來說明吧!
比如遙控器是老師,舵機控制電路是家長,舵機的馬達是小孩
現在的任務是老師要求家長輔導孩子做一個動作,比如倒立
以數字舵機而言,家長自主地給這個動作設置了非常非常嚴格的標准,他要求孩子倒立時在鞋面上擺一個豎立的硬幣,然後盯著硬幣,硬幣向左一震動他在右邊給孩子一鞭子,硬幣向右一震動他在左邊給孩子一鞭子.........總之他要求的不再是老師要求的「倒立」,而是倒立以後頂一枚不倒的硬幣..........
模擬舵機的家長部分則是柔和派,老師要求倒立是吧?他忠實地按老師的要求,讓孩子倒立起來,孩子身體的輕微調整他不去關注了,他只關心是不是偏移了老師的標准,呵呵
五、實際應用選擇
我們已經知道模擬舵機對於極輕微的外力干擾導致舵機盤移位的敏感度,和舵機執行命令的精確度,是不如數碼舵機的了,那麼我們是不是應該盡量使用數碼舵機呢???我個人而言不是這么認為。
首先——舵機的素質,其實不單純是電路決定的,還有舵機的齒輪精度,還有非常非常關鍵的舵機電位器的精度。一顆質量上乘的模擬舵機,往往比電路雖然是數碼但是零件卻是普通貨色的數碼舵機更准確,更不會抖舵。
其次,要知道我們在模型車上應用的時候,很多時候太高的精度並不是好事!比如你玩1/8的車,特別是大腳車和越野車,那麼爛的路面導致車時而滑動適合騰空,動不動就是零點幾秒、N公分的偏差,舵機的微秒級別敏感、微米級別精度對整個事件能起怎麼改善??那叫神經質的舵機反應...........
其實應用在1/8車輛上,一顆0.1秒反應的模擬舵機是更合適的搭配。它會更省電,更順滑,不會那麼神經質。而且最重要的——它不會在一台轉向虛位有幾毫米的1/8越野車上,去不停地吱吱叫著去找那0.1毫米的居中(其實你即使把舵機連桿給它拆掉,讓舵機空轉,它也往往找不到那0.1毫米的居中,只是自己不停地吱吱叫著折騰自己而已,哈哈)
實際的應用上,我建議是1/10的競賽級別房車,暴力型的飛機,可以選用數碼舵機。所謂神經質配神經質,呵呵。
其實我個人選擇舵機,更看重的是品牌和玩家反響,而不是某些山寨工廠一力鼓吹的什麼狗屁數碼........
下面這篇文章,我大致看過,是符合科學原理的,想學習知識的可以看看。
注意吸收知識,要由根本上去分析,而不是以訛傳訛!否則你必定就象很多人一樣去堅守「數碼舵機比模擬舵機快」這個完全錯誤的觀點,呵呵,那會被真正掌握知識的人暗地裡面恥笑的
6. 怎樣才能控制舵機旋轉
控制舵機旋轉方法:
1、控制信號(如圖H)是一種脈寬調制(PWM)信號,凡是微控制器能輕松的產生這種信號。在此文中,我用的是常用的Arino開發環境下的微控制器。
2、 脈沖的高電平持續1到2毫秒(ms),也就是1000到2000微秒(µs)。在1000µs時,舵機左滿舵。在2000µs時,右滿舵。不過你可以通過調整脈寬來實現更大或者更小范圍內的運動。
3、控制脈沖的低電平持續20毫秒。每經過20毫秒(50次每秒),就要再次跳變為高電平,否則舵機就可能罷工,難以保持穩定。不過你要是想讓它一瘸一拐的跳舞,倒可以採取這種方法。
7. 如何控制舵機旋轉
控制舵機旋轉方法:
1、控制信號(如圖H)是一種脈寬調制(PWM)信號,凡是微控制器能輕松的產生這種信號。在此文中,我用的是常用的Arino開發環境下的微控制器。
2、 脈沖的高電平持續1到2毫秒(ms),也就是1000到2000微秒(µs)。在1000µs時,舵機左滿舵。在2000µs時,右滿舵。不過你可以通過調整脈寬來實現更大或者更小范圍內的運動。
3、控制脈沖的低電平持續20毫秒。每經過20毫秒(50次每秒),就要再次跳變為高電平,否則舵機就可能罷工,難以保持穩定。不過你要是想讓它一瘸一拐的跳舞,倒可以採取這種方法。
8. 如何控制舵機啊
船上的舵機有多種控制方法「
小船直接由舵手轉動舵輪帶動鏈輪通過鏈條來操縱舵機。
較大的船舶就有電氣或液壓操舵儀:1)手動操舵---手動接通開關,使舵轉動,舵的轉動角度由舵角指示儀反饋到操舵手面前,當舵轉到需要的角度時,操舵手斷開電源,舵停止;
2)隨動舵---操舵手將舵輪轉動一個角度,舵就在隨動系統的控制下轉到所需要的角度才停下來;
3)自動舵---舵自動轉動,使船舶在預定的方向直線前進,不管風浪和潮流;