文章目录
sg90介绍
SG90 是一款小型伺服电机,是一种定位精度较高的驱动器,可以精确地控制电机转子位置。SG90 伺服电机的工作原理基于普通直流电机,但它通过内部的控制电路和位置反馈机制来实现精确的位置控制。
sg90工作原理
-
控制信号:伺服电机的控制是基于输入的脉冲宽度调制(PWM)信号。控制信号通常是一个周期约为20毫秒的方波,脉冲宽度(高电平持续时间)通常在1到2毫秒之间变化。
-
位置反馈:内部的电位计(变阻器)与输出轴连接,能够提供电机当前位置的反馈。变阻器把位置转换为电压信号,控制电路将这个电压信号与它从PWM信号中解码得到的目标位置进行比较。
-
控制调整:当控制电路发现当前位置与目标位置不符时,它会调整电机的方向和速度,以使输出轴转动到所需位置。
-
驱动电机:控制电路增加或减少流经电机的电流,驱动电机旋转到正确的位置。
-
维持位置:当输出轴达到目标位置后,控制电路会使用它的电位计反馈来维持这个位置。如果出现任何偏移,电路将重新调整电机,以保持输出轴在目标位置。
sg90输出pwm
sg90输出pwm的周期为20ms,sg90输出pwm的占空比与电机转动角度的关系如下:
(1)0.5ms 脉宽的PWM信号可能会使 SG90 转到 0 度的位置。
(2)1.5ms 脉宽通常会使它转到中间位置,大约是 90 度。
(3)2.5ms 脉宽可能会使 SG90 转到 180 度的位置。
也就是说,pwm脉宽增加1/90ms,电机转动1°
全部代码
sg90.c
#include "sg90.h"
unsigned char angle_value = 5;
unsigned char cnt = 0;
void timer2_init(void)
{
T2MOD= 0x00; //向上计数
CP_RL2=0; //16位自动重装
RCAP2H=(65536-100)/256; //给RCAP2H和RCAP2L赋初值
RCAP2L=(65536-100)%256; //外部晶振12MHz时,定时时间为0.1ms
EA=1; //总中断使能
ET2=1; //定时器2中断使能
TR2=1; //定时器2开始运行
}
void set_value(unsigned char t) //设置脉宽,t = 5为0°,t = 15为90°,t = 25为180°
{
angle_value = t;
}
void timer2_isr(void) interrupt 5
{
TF2=0; //清除标志位
cnt++; //记录定时次数
if(cnt < angle_value) //高电平时间
{
sg90_p =1;
}
else //低电平时间
{
sg90_p =0;
}
if(cnt == 200)
{
cnt= 0; //恢复计数初值
}
}
sg90.h
#ifndef __SG90_H_
#define __SG90_H_
sbit sg90_p = P2^1;
void timer2_init(void);
void set_value(unsigned char t);
#endif
总结
驱动sg90需要输出pwm方波,51单片机的定时器没有比较输出功能,因此使用定时器中断计数的方式依次输出高低电平,形成200ms周期方波,关于sg90的更多用法请参考网上教程