天天看點

舵機控制之智障sg90 360°舵機

舵機控制之智障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;

}

繼續閱讀