如何利用8051单片机控制舵机

  • 内容
  • 评论
  • 相关

我们知道伺服电机常被称为舵机,它是一种用于精确控制旋转角度的电气装置。适用于一些需要精确控制角度的场合,如机械手的控制。舵机由一个直流电机和控制电路组成,控制电路用于控制电机轴的旋转位置。舵机机的旋转角度值是由PWM信号控制的,通过改变PWM信号的宽度,可以改变电机的旋转角度和旋转方向。 有关舵机和如何使用它的更多信息,请参阅:舵机角度的控制原理什么是舵机

伺服电机(舵机)的分类
伺服电机(舵机)

8051单片机

在百度百科中8051单片机的介绍如下:

8051是一种8位元的单芯片微控制器,属于MCS-51单芯片的一种,由英特尔公司于1981年制造。INTEL公司将MCS51的核心技术授权给了很多其它公司,所以有很多公司在做以8051为核心的单片机,如Atmel、飞利浦、深联华等公司,相继开发了功能更多、更强大的兼容产品。

(引自百度百科)

8051单片机引脚图

8051单片机引脚图
8051单片机引脚图

使用8051(H1)产生PWM

在实际使用中,我们发现SG90舵机的实际占空比,从-90°到+90°的旋转时间与理想值存在差异。在约~0.54ms(2.7%的占空比)时,我们得到了轴在-90°时的位置;在约~1.4ms(7%占空比)时,我们得到了轴在0°(中性)的位置;在约~2.4ms(12%占空比),我们得到轴+90°的位置。要控制舵机在-90°至+90°旋转。我们需要产生50Hz的PWM波形,占空比变化从~0.54ms到~2.4ms。这样我们可以使用8051中的定时器来产生PWM信号。

SG90舵机与8051单片机的连接

本例采用的是AT89S52单片机,现在我们用AT89S52编程生成50Hz PWM来控制舵机在-90°到+90°的角度旋转,并在AT89S52的P2.0引脚上产生PWM信号,用于控制舵机。

C程序代码

#include <reg52.h>
#include <intrins.h>

/* 定义值加载在计时器上的PWM周期为20毫秒 */
#define PWM_Period 0xB7FE

sbit Servo_Motor_Pin = P2^0;

unsigned int ON_Period, OFF_Period, DutyCycle;

/* 函数在11.0592MHZ提供1ms的延迟 */
void delay(unsigned int count)
{
    int i,j;
    for(i=0; i<count; i++)
			for(j=0; j<112; j++);
}

void Timer_init()
{
	TMOD = 0x01;		/* Timer0 mode1 */
	TH0 = (PWM_Period >> 8);/* 20ms timer value */
	TL0 = PWM_Period;
	TR0 = 1;		/* Start timer0 */
}

/* Timer0 中断服务程序 (ISR) */
void Timer0_ISR() interrupt 1	
{
	Servo_Motor_Pin = !Servo_Motor_Pin;
	if(Servo_Motor_Pin)
	{
		TH0 = (ON_Period >> 8);
		TL0 = ON_Period;
	}	
	else
	{
		TH0 = (OFF_Period >> 8);
		TL0 = OFF_Period;
	}	
			
}

/* 从占空比中计算开关周期 */
void Set_DutyCycle_To(float duty_cycle)
{
	float period = 65535 - PWM_Period;
	ON_Period = ((period/100.0) * duty_cycle);
	OFF_Period = (period - ON_Period);	
	ON_Period = 65535 - ON_Period;	
	OFF_Period = 65535 - OFF_Period;
}

int main()
{
   EA  = 1;		/* 启用全局中断 */
   ET0 = 1;         	/* 启用 timer0 中断 */
   Timer_init();
   while(1)
    {
	Set_DutyCycle_To(2.7); /* 0.54ms 占20ms周期的 2.7% */
	delay(1000);
	Set_DutyCycle_To(7); /* 1.4ms 占20ms周期的 7% */
	delay(1000);
	Set_DutyCycle_To(12); /* 2.4ms 占20ms周期的 12%*/
	delay(1000);
    }
}

8051控制舵机的源码下载

链接:https://pan.baidu.com/s/1Of-Y36sUk_guiAHL_auaUA
提取码:p3gd