現在常用的舵機控制信號主要有 PWM 信號和串口總線信號兩種:其中PWM信號控制比較簡單,但是功能只有一個即控制舵機轉動;串口總線信號控制則比較復雜,需要控制器有串口輸出功能,但是能實現較多的功能,除了可以控制舵機轉動外還可以獲取舵機的各種信息以及對舵機進行各種設置,具體需要配合相應的協議文件使用。
以下描述怎么使用PWM
信號控制舵機:
PWM 信號:一種周期固定脈寬(高電平寬度)可變的連續電平信號。
PWM 信號產生方式有兩種:
第1種:由MCU的普通GPIO口輸出,分辨率較低,程序比較復雜,需要使用到定時器;
第2種:由MCU的硬件PWM輸出,分辨率較高,可以達到1us或更小,程序比較簡單,須要MCU
具備硬件PWM功能;
在舵機控制中的 PWM 信號的參數一般為:周期=20ms,脈寬(高電平寬度)范圍=0.5ms~2.5ms。
舵機的轉動角度由脈寬決定,例如某個舵機的總轉角為 180°,PWM脈寬范圍為0.5ms~2.5ms,那么
當舵機接收到不同的脈寬信號時轉到對應的位置:
注:信號脈寬和舵機角度是成線性關系的。
信號脈寬 | 舵機角度 |
0.5ms | 0° |
1.0ms | 45° |
1.5ms | 90° |
2.0ms | 135° |
2.5ms | 180° |
控制舵機轉動效果:
1、 舵機鎖舵:
當信號保持不變時,舵機會保持在當前位置,并且輸出的扭力會隨著負載大小不同而不同。
2、 舵機快速轉動:
當信號改變時,如信號從 1ms 變為2ms,舵機會從45°以最快速度轉到135°位置,這個速度會根據
舵機的本身性能以及負載大小有關,一般會在規格書上標注有空載時的最da轉速。
3、 舵機慢速轉動:
當需要讓舵機慢慢轉動時,如舵機從 45°轉到135°位置需要耗時三秒,只需要計算出信號脈寬的變
化增量,在三秒的時間內從 1ms 勻速增到2ms即可,增量越小則轉動的效果越細膩。
程序例子:
一、由 MCU 的普通GPIO口輸出PWM:
#include 《reg51.h》
#define uchar unsigned char
#define uint unsigned int
sbit p10=P1^0;
uint aa;
void delay (uint z)
{
unsigned int x,a;
for(x=z;x>0;x--)
for(a=250;a>0;a--);
}
void timer0()interrupt 1 //定時器 1 為 0.1ms 一個周期, 輸出 1.5ms 脈寬信號
{
TH0=(65536-100)/256;
TL0=(65536-100)%256;
aa++;
if(aa>=200)aa=0;
if(aa<=15) //產生周期為 20ms,高電平為 1.5ms,
p10=1;
else
p10=0;
}
void init()
{
aa=0;
a=0;
p10=0;
TMOD=0x11;
TH0=(65536-100)/256;
TL0=(65536-100)%256;
EA=1;
ET0=1;
}
void main()
{
init();
TR0=1;
p10=1;
while(1)
{
}
}
二、由 MCU 的硬件 PWM 輸出 PWM 信號:
Step1、初始化PWM功能,配置PWM時鐘為1us,周期為20000,占空比為0,信號電平為高電平有效。
Step2、當需要改變信號時,只需要在占空比寄存器中寫入對應的參數即可,如0.5ms則寫入500,2.5ms則寫入 2500.
-
PWM
+關注
關注
114文章
5186瀏覽量
213939 -
舵機
+關注
關注
17文章
270瀏覽量
41035 -
舵機控制
+關注
關注
3文章
45瀏覽量
22375 -
信號控制
+關注
關注
0文章
40瀏覽量
9200
發布評論請先 登錄
相關推薦
評論