51单片机教程之六:驱动SG90舵机

文章目录

  • sg90介绍
  • sg90工作原理
  • sg90输出pwm
  • 全部代码
  • 总结
  • 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的更多用法请参考网上教程

     

    作者:人越菜瘾越大

    物联沃分享整理
    物联沃-IOTWORD物联网 » 51单片机教程之六:驱动SG90舵机

    发表回复