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

你可能感兴趣的:(51单片机,单片机,舵机,数字舵机,模拟舵机)