AVR學習筆記十六舵機控制實驗_第1頁
AVR學習筆記十六舵機控制實驗_第2頁
AVR學習筆記十六舵機控制實驗_第3頁
AVR學習筆記十六舵機控制實驗_第4頁
AVR學習筆記十六舵機控制實驗_第5頁
已閱讀5頁,還剩5頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、AVR學習筆記十六、舵機控制實驗 -基于LT_Mini_M1616.1 舵機控制實驗 舵機的英文名稱是Servo,舵機是一種位置伺服的驅動器,適用于那些需要角度不斷變化并可以保持的控制系統。在機器人機電控制系統中,舵機控制效果是性能的重要影響因素。舵機可以在微機電系統和航模中作為基本的輸出執行機構,其簡單的控制和輸出使得單片機系統非常容易與之接口。 舵機是一種位置(角度)伺服的驅動器,適用于那些需要角度不斷變化并可以保持的控制系統。目前在高檔遙控玩具,如航模,包括飛機模型,潛艇模型;遙控機器人中已經使用得比較普遍。舵機是一種俗稱,其實是一種伺服馬達。 下面是一種舵機的實物圖:圖1 舵機實物圖本

2、實例利用AVR單片機ATmega16來實現單片機對舵機的簡單控制。本實例有3個功能模塊,分別是: 單片機系統:使用ATmega16單片機輸出脈沖信號到舵機的信號接收端,通過脈沖信號實現對舵機的轉動控制。 外圍電路:舵機控制電路。 程序設計:編寫程序實現對舵機的控制。 通過本實例,掌握以下知識點: 單片機如何實現對舵機的控制。 舵機的工作原理和控制方法。 編寫軟件,實現對舵機的控制。16.2 器件和原理 舵機的結構和工作原理舵機是伺服控制系統里最常用的執行機構,其內實際上也是下個閉環的控制系統.舵機只在一根信號線就可以實現機械角度的控制. 1、舵機的結構和連線圖2示出舵機的結構和連線圖, 標準的

3、舵機有三條控制線,分別為:電源、地及控制。電源線與地線用于提供內部的直流馬達及控制線路所需的能源,電壓通常介于4V-6V之間,該電源應盡可能與處理系統的電源隔離(因為伺服馬達會產生噪音)。甚至小伺服馬達在重負載時也會拉低放大器的電壓,所以整個系統的電源供應的比例必須合理。 圖2 舵機的結構和連線圖控制線輸入一個周期性的正向脈沖信號,這個周期性脈沖信號的高電平時間通常在1ms-2ms之間。而低電平時間應在5ms到20ms間,并不很嚴格。圖3表示出一個典型的20ms周期性脈沖的正脈沖寬度與舵機的輸出臂位置的關系: 圖3 舵機輸出轉角與輸入信號脈沖寬度的關系注:如果一直以固定占空比的脈沖控制舵機,則

4、舵機的角度一直保持不變(即角度保持)。16.2.2、舵機的控制原理舵機的工作原理是:控制信號由接收機的通道進入信號調制芯片,獲得直流偏置電壓。它內部有一個基準電路,產生周期為20ms,寬度為1.5ms的基準信號,將獲得的直流偏置電壓與電位器的電壓比較,獲得電壓差輸出。最后,電壓差的正負輸出到電機驅動芯片決定電機的正反轉。當電機轉速一定時,通過級聯減速齒輪帶動電位器旋轉,使得電壓差為0,電機停止轉動。當然我們可以不用去了解它的具體工作原理,知道它的控制原理就夠了。就象我們使用晶體管一樣,知道可以拿它來做開關管或放大管就行了,至于管內的電子具體怎么流動是可以完全不用去考慮的。舵機的控制信號是PWM

5、信號,利用占空比的變化改變舵機的位置。舵機的控制一般需要一個20ms左右的時基脈沖,該脈沖的高電平部分的脈寬一般在0.5ms2.5ms范圍內,其實是利用調節固定周期內的占空比(高電平占整個周期的百分比)來控制角度的變化。以180度角度伺服為例,那么對應的控制關系是這樣的: 0.5ms-0度; 1.0ms-45度; 1.5ms-90度; 2.0ms-135度; 2.5ms-180度;注:這只是一種參考數值,具體的參數,請參見舵機的技術參數。小型舵機的工作電壓一般為4.8V或6V,轉速也不是很快,一般為0.22/s度或0.18/s度,所以假如你更改角度控制脈沖的寬度太快時,舵機可能反應不過來。如果

6、需要更快速的反應,就需要更高的轉速了。要精確的控制舵機,其實沒有那么容易,很多舵機的位置等級有1024個,那么,如果舵機的有效角度范圍為180度的話,其控制的角度精度是可以達到180/1024度約0.18度了,從時間上看其實要求的脈寬控制精度為2000/1024us約2us。如果你拿了個舵機,連控制精度為1度都達不到的話,而且還看到舵機在發抖。在這種情況下,只要舵機的電壓沒有抖動,那抖動的就是你的控制脈沖了。而這個脈沖為什么會抖動呢?當然和你選用的脈沖發生器有關了。可以使用FPGA、模擬電路、單片機來產生舵機的控制信號,但FPGA成本高且電路復雜。對于脈寬調制信號的脈寬變換,常用的一種方法是采

7、用調制信號獲取有源濾波后的直流電壓,但是需要50Hz(周期是20ms)的信號,這對運放器件的選擇有較高要求,從電路體積和功耗考慮也不易采用。5mV以上的控制電壓的變化就會引起舵機的抖動,對于機載的測控系統而言,電源和其他器件的信號噪聲都遠大于5mV,所以濾波電路的精度難以達到舵機的控制精度要求。 也可以用單片機作為舵機的控制單元,使PWM信號的脈沖寬度實現微秒級的變化,從而提高舵機的轉角精度。單片機完成控制算法,再將計算結果轉化為PWM信號輸出到舵機,由于單片機系統是一個數字系統,其控制信號的變化完全依靠硬件計數,所以受外界干擾較小,整個系統工作可靠。16.2.3、用單片機實現對舵機的控制單片

8、機系統實現對舵機輸出轉角的控制,必須首先完成兩個任務:首先是產生基本的PWM周期信號,本設計是產生20ms的周期信號;其次是脈寬的調整,即單片機模擬PWM信號的輸出,并且調整占空比。 當系統中只需要實現一個舵機的控制,采用的控制方式是改變單片機的一個定時器中斷的初值,將20ms分為兩次中斷執行,一次短定時中斷和一次長定時中斷。這樣既節省了硬件電路,也減少了軟件開銷,控制系統工作效率和控制精度都很高。 具體的設計過程:例如想讓舵機轉向左極限的角度,它的正脈沖為2ms,則負脈沖為20ms-2ms=18ms,所以開始時在控制口發送高電平,然后設置定時器在2ms后發生中斷,中斷發生后,在中斷程序里將控

9、制口改為低電平,并將中斷時間改為18ms,再過18ms進入下一次定時中斷,再將控制口改為高電平,并將定時器初值改為2ms,等待下次中斷到來,如此往復實現PWM信號輸出到舵機。用修改定時器中斷初值的方法巧妙形成了脈沖信號,調整時間段的寬度便可使伺服機靈活運動。 為保證軟件在定時中斷里采集其他信號,并且使發生PWM信號的程序不影響中斷程序的運行(如果這些程序所占用時間過長,有可能會發生中斷程序還未結束,下次中斷又到來的后果),所以需要將采集信號的函數放在長定時中斷過程中執行,也就是說每經過兩次中斷執行一次這些程序,執行的周期還是20ms。16.3 電路和連接本實例主要包含2部分電路:按鍵檢測電路和

10、舵機控制電路。按鍵檢測用到了實驗板上的4各獨立按鍵,分別按下不同的按鍵,舵機轉動不同的角度。按鍵檢測電路前面實例中已經介紹過,在此不再重復。從前面的敘述我們已經知道:舵機控制需要3條線:電源,地,控制線。圖4畫出了單片機與舵機的連接圖 圖4 單片機與舵機的連接圖1、舵機與單片機的連接實際上,單片機只是通過一根線與舵機相連,單片機通過控制該端口輸出不同占空比的方波信號就可以控制舵機轉動不同的角度。2、舵機的電源控制舵機轉動時需要消耗比較大的電流,所以舵機的電源最好單獨提供,不要和單片機使用同一路電源。當然,本實例只是演示單片機如何控制舵機轉動的,并沒有大功率負載,所以可以直接連接單片機實驗板的電

11、源。8.4 程序設計 1、程序功能程序的功能是使用輸出不同占空比的PWM信號控制舵機轉動不同的角度。2函數說明本程序調用了按鍵模塊程序。關于按鍵的判斷前面已經做過介紹。按鍵處理程序在此不再詳述 。主程序主要有兩個任務:1、設置定時/計數器0的0.5ms中斷;2、在定時中斷中根據中斷的發生次數來判斷什么時候向舵機發送高低電平信號。由于WINAVR自帶函數庫中的延時函數使用起來很不方便,并且晶振頻率不同,延時時間也有區別,所以本實例中自己寫了兩個延時函數。 3、使用WINAVR開發環境,使用的是外部12M的晶振,所以需要將makefile文件中的時鐘頻率修改為12M。另外在程序燒錄到單片機的時候,

12、熔絲位也要選擇為外部12M晶振(注意是晶振,不是外部振蕩器,一定不要選擇錯了,否則會導致單片機不能再燒寫程序)。4、程序說明略 5、程序代碼/* AVR 利用T/C0定時中斷控制舵機轉動角度范例 * MCU: ATmega16 * 作者: maweili * 編譯器:WINAVR * * 2009.3.2 */主程序:#include <avr/io.h> #include <util/delay.h>#include <avr/interrupt.h> /中斷函數頭文件#include "key.h" /包含按鍵定義頭文件volatil

13、e unsigned char Counter500us; /計時變量,如果在中斷中調用全局變量,必須加volatile來定義,否則變量不會變化unsigned char jiaodu;int main(void) /沒有用到的管腳全部設置為輸入腳,使能內部上拉電阻DDRB = 0x01;PORTB = 0xfe;DDRC = 0x00;PORTC = 0xff;DDRA = 0x00;PORTA = 0xff;/T/C0定時中斷設置TIMSK |= (1 << TOIE0); /T/C0溢出中斷允許TCCR0 |= (1 << CS02) | (1 <<

14、CS00); / T/C0工作于普通模式,1024分頻 TCNT0 = 0xfa; /定時初值設置,定時時間 = (256-250)/12M*1024=500usCounter500us = 0; / 500us計時變量清零jiaodu = 1; sei(); /使能全局中斷 while(1)/根據鍵值設置角度值switch(KeyValue()case 1:jiaodu = 2; break;case 2:jiaodu = 3;break;case 3:jiaodu = 4;break;case 4:jiaodu = 5;break;case 0:/PORTB = 0x00;break;de

15、fault:break;/T/C0定時中斷服務程序ISR(TIMER0_OVF_vect )TCNT0 = 0xfa; /重裝計數初值if(Counter500us < jiaodu) /判斷0.5ms的次數是否小于角度標識PORTB = 0x01; /小于,則繼續發送高電平elsePORTB = 0x00; /大于,則輸出低電平Counter500us+; /0.5ms次數加1Counter500us = Counter500us % 40; /0.5ms次數始終為40,既保持脈沖周期為20ms按鍵模塊程序:/*key.h 按鍵聲明頭文件管腳定義函數聲明*/#ifndef _KEY_H

16、_ /條件編譯指令#define _KEY_H_/頭文件調用#include <avr/io.h> #include <util/delay.h>/按鍵定義#define key1 (1 << PORTD2)#define key2 (1 << PORTD3)#define key3 (1 << PORTD6)#define key4 (1 << PORTD7)/函數聲明extern void keyPort_init(void); /按鍵端口初始化unsigned char keyScan(void); /按鍵檢測ext

17、ern unsigned char KeyValue(void); /獲取按鍵值extern void Delayus(unsigned int lus); /us延時函數extern void Delayms(unsigned int lms); /ms延時函數#endif/*key.c*/#include "key.h" /按鍵端口初始化void keyPort_init(void) /DDRD = 0x33; /PD2367定義為輸入口/PORTD |= key2 | key3 | key4; /按鍵key123內部上拉電阻使能DDRD = 0x00; /PD口全部為

18、輸入腳PORTD = 0xfb; /按鍵key1內部上拉電阻不使能,其余使能 /按鍵檢測unsigned char keyScan(void) if(!(PIND & key4) | (!(PIND & key3) | (!(PIND & key2) | (PIND & key1) /是否有按鍵按下Delayms(20);if(!(PIND & key4) | (!(PIND & key3) | (!(PIND & key2) | (PIND & key1) /按鍵消除抖動后,是否有按鍵按下return 1; /有按鍵按下,返回1return 0; /干擾信號,返回0return 0; /沒有按鍵按下,返回0 /獲取按鍵值unsigned char KeyValue(void)if(keyScan() /判斷那個按鍵被按下if(!(PIND & key4) /按鍵4被按下,則返回鍵值4return 4;if(!(PIND & key3) /按鍵3被按下,則返回鍵值3return 3;if(!(PIND & key2) /按鍵2被按下

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論