0°

(十)51进阶:伺服电机(舵机)与8051连接教程

介绍

(十)51进阶:伺服电机(舵机)与8051连接教程

伺服电动机是用于精确控制角度旋转的电动装置。它用于需要精确控制的地方,例如控制机械臂的情况。

它由一个合适的电机和控制电路组成,用于精确控制电机轴。

这是一个闭环系统。

通过向其施加PWM信号来控制伺服电动机的旋转角度。

通过改变PWM信号的宽度,我们可以改变电机的旋转角度和方向。 使用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中使用Timer生成PWM。

SG90微伺服电机与8051连接

(十)51进阶:伺服电机(舵机)与8051连接教程

伺服电机接口8051

现在让我们编写AT89S52生成50Hz PWM的程序,以控制伺服电机在-90°到+ 90°的旋转角度。 这里我们在AT89S52的P2.0引脚上产生了PWM。

程序

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

/* Define value to be loaded in timer for PWM period of 20 milli second */
#define PWM_Period 0xB7FE

sbit Servo_Motor_Pin = P2^0;

unsigned int ON_Period, OFF_Period, DutyCycle;

/* Function to provide delay of 1ms at 11.0592 MHz */
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 interrupt service routine (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;
	}	
			
}

/* Calculate ON & OFF period from duty cycle */
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;		/* Enable global interrupt */
   ET0 = 1;         	/* Enable timer0 interrupt */
   Timer_init();while(1)
    {
	Set_DutyCycle_To(2.7);/* 0.54ms(2.7%) of 20ms(100%) period */
	delay(1000);
	Set_DutyCycle_To(7);/* 1.4ms(7%) of 20ms(100%) period */
	delay(1000);
	Set_DutyCycle_To(12);/* 2.4ms(12%) of 20ms(100%) period */
	delay(1000);
    }
}

本教程完整项目工程下载:

「点点赞赏,手留余香」

    还没有人赞赏,快来当第一个赞赏的人吧!
0 条回复 A 作者 M 管理员
    所有的伟大,都源于一个勇敢的开始!
欢迎您,新朋友,感谢参与互动!欢迎您 {{author}},您在本站有{{commentsCount}}条评论