51单片机(六)驱动sg90舵机

文章目录

sg90介绍

        SG90 是一款小型伺服电机,是一种定位精度较高的驱动器,可以精确地控制电机转子位置。SG90 伺服电机的工作原理基于普通直流电机,但它通过内部的控制电路和位置反馈机制来实现精确的位置控制。

sg90工作原理

  1. 控制信号:伺服电机的控制是基于输入的脉冲宽度调制(PWM)信号。控制信号通常是一个周期约为20毫秒的方波,脉冲宽度(高电平持续时间)通常在1到2毫秒之间变化。

  2. 位置反馈:内部的电位计(变阻器)与输出轴连接,能够提供电机当前位置的反馈。变阻器把位置转换为电压信号,控制电路将这个电压信号与它从PWM信号中解码得到的目标位置进行比较。

  3. 控制调整:当控制电路发现当前位置与目标位置不符时,它会调整电机的方向和速度,以使输出轴转动到所需位置。

  4. 驱动电机:控制电路增加或减少流经电机的电流,驱动电机旋转到正确的位置。

  5. 维持位置:当输出轴达到目标位置后,控制电路会使用它的电位计反馈来维持这个位置。如果出现任何偏移,电路将重新调整电机,以保持输出轴在目标位置。

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的更多用法请参考网上教程

 

  • 9
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值