1. 程式人生 > >atmega16應用之舵機控制

atmega16應用之舵機控制

atmega16應用之舵機控制

舵機工作的原理

(不會看版)控制電路板接受來自訊號線的控制訊號,控制電機轉動,電機帶動一系列齒輪組,減速後傳動至輸出舵盤。舵機的輸出軸和位置反饋電位計是相連的,舵盤轉動的同時,帶動位置反饋電位計,電位計將輸出一個電壓訊號到控制電路板,進行反饋,然後控制電路板根據所在位置決定電機轉動的方向和速度,從而達到目標停止
(正經版)舵機的控制訊號週期為20MS的脈寬調製(PWM)訊號,其中脈衝寬度從0.5-2.5MS,相對應的舵盤位置為0-180度,呈線性變化。也就是說,給他提供一定的脈寬,它的輸出軸就會保持一定對應角度上,無論外界轉矩怎麼改變,直到給它提供一個另外寬度的脈衝訊號,它才會改變輸出角度到新的對應位置上如圖7所求。舵機內部有一個基準電路,產生週期為20MS,寬度1.5MS的基準訊號,有一個比出較器,將外加訊號與基準訊號相比較,判斷出方向和大小,從而生產電機的轉動訊號。
(懶人版) 舵機控制是不在乎PWM的週期的,只要你在一個時鐘週期裡輸出0.5ms~2.5ms的高電平,就能讓舵機旋轉-90到90度旋轉角度,就這麼簡單

在這裡插入圖片描述![在這裡插入圖片描述](https://img-blog.csdnimg.cn/20190106125408369.
在這裡插入圖片描述

程式碼

舵機控制程式碼非常簡單,就是定時器0的CTC模式,其實你也可以用快速P波模式和相位修正模式,只要滿足要求就行


void Serv(void)         //控制舵機
{
    DDRB |= (1 << 3);   //引腳PB3
    PORTB |= (1<< 3);	
    TCCR0 |= (1 << WGM01);  TCCR0 |= (1 << WGM00);//快P
    TCCR0 |= (1 << COM01); TCCR0 &= ~(1 << COM00);//比較匹配時清零,輸出P波
TCCR0 &= ~(1 << CS02); TCCR0 |= (1 << CS01); TCCR0 |= (1 << CS00);//內部時鐘1MHZ,64分頻 //OCR0 = 40; //16是最小值; //24是舵機中值; OCR0=20; //輸出約1.5ms,旋轉90度 delay_ms(1000); OCR0 = 36; //輸出約2.5ms,旋轉180度 delay_ms(500); TCCR0 &= ~(1 << COM01); TCCR0 &= ~(1
<< COM00);//將PB3設定為通用引腳,關舵機 //Counter_Time0(); }

這就是舵機控制的過程,有沒有覺得很簡單