舵機控制之智障sg90 360°舵機
前言:一般購買舵機都會選擇180°舵機,由于不知道什麼原因我購買了一個360°舵機還傻乎乎地在寫180°舵機的控制程式,還在糾結是哪裡出錯了為何不行,實在鬧心
原理:舵機内部有一個基準電壓,微處理器産生的PWM信号通過信号線進入舵機産生直流偏置電壓,與舵機内部的基準電壓作比較,獲得電壓差輸出。電壓差的正負輸出到電機驅動晶片上,進而決定正反轉。當舵機開始旋轉的時候,舵機内部通過級聯減速齒輪帶動電位器旋轉,使得電壓差為零,電機停止轉動。
- 90°舵機
- 180°舵機:一直給指定的脈沖,舵機将會旋轉到一定角度
- 360°舵機:可以360°旋轉,但不能控制旋轉角度,即舵機隻能一直正轉或者反轉
1.360°舵機PWM控制範圍
在0.5ms~1.5ms期間:舵機正轉,時間越短,轉速越快(盡量不接近1.5ms,否則有可能不轉)
在1.5ms(1.6ms、1.4ms等):停止轉動,即速度為0
在1.5ms~2.5ms:舵機反轉,時間越長,轉速越快(盡量接近1.5ms與2.5ms,否則有可能不轉)
360°舵機(180°舵機)相關資訊:
- 舵機紅色線為VCC;棕色線為GND;橙色為信号線
- 使用的電壓範圍:3.5~6V
2.簡易編寫51單片機控制程式
硬體電路分析:
led用于提示系統正常運作;
led_time用于檢查定時器是否正常設定,每跳入定時器中斷一次,即反轉一次(由于定時器中斷設定時間很短,肉眼觀察不到暗滅,是以led_time看上去是一直亮着的);
output(P1^0口):舵機信号線
舵機VCC:接單片機VCC
舵機GND:接單片機GND
程式:
#include “reg51.h”
sbit led=P2^6;
sbit led_time=P2^3;
sbit output=P1^0;
unsigned long hightime=1000;
void Time0_Init(void);
int main()
{
Time0_Init();
while(1)
{
led=0;
}
}
void Time0_Init(void)
{
TMOD=0x01;
TH0=(65536-500)/256;
TL0=(65536-500)%256;
ET0=1;
TR0=1;
EA=1;
}
void Time0(void) interrupt 1
{
TH0=(65536-500)/256;
TL0=(65536-500)%256;
led_time=~led_time;
output=~output;
}