前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >51单片机SG90舵机控制原理

51单片机SG90舵机控制原理

作者头像
全栈程序员站长
发布2022-07-04 14:00:57
7210
发布2022-07-04 14:00:57
举报
文章被收录于专栏:全栈程序员必看

大家好,又见面了,我是你们的朋友全栈君。

舵机三根线的接法:黄线接信号线,红线接vcc,褐色线接GND

1单片机SG90舵机控制原理"
1单片机SG90舵机控制原理"
1单片机SG90舵机控制原理"
1单片机SG90舵机控制原理"

舵机控制原理:通过控制PWM来控制舵机转动的角度,关于PWM的知识可以去智能小车专栏进行学习,转动周期设置为20ms,控制高电平的时间来进行舵机转动的角度。

对于180°舵机 t = 0.5ms——————-舵机会转动 0 ° t = 1.0ms——————-舵机会转动 45° t = 1.5ms——————-舵机会转动 90° t = 2.0ms——————-舵机会转动 135° t = 2.5ms——————-舵机会转动180

这段代码中包含了定时器,中断,pwm的知识,都可以去51智能小车专栏中学习,其中定时器选择了定时器1,运用了两个字符型变量其中timer1决定了高电平的时间,count起到了计数器的功能,运用if语句进行判断两个字符型变量的大小来决定什么时候为高电平是么时候为低电平

代码语言:javascript
复制
// _nop_()延时一个机器周期
#include <reg52.h>
#include <Delay.h>
sbit PWM = P3^2;  //设定PWM输出的I/O端口
unsigned char count = 0;
unsigned char timer1 ;
/*
对于180°舵机
t = 0.5ms——————-舵机会转动 0 ° 
t = 1.0ms——————-舵机会转动 45°
t = 1.5ms——————-舵机会转动 90°
t = 2.0ms——————-舵机会转动 135°
t = 2.5ms——————-舵机会转动180
*/

 
 
/*延时程序*/

/*定时器T0初始化*/
void Timer0_Init()           
{
    TMOD &= 0x00;
    TMOD |= 0x01; //定时器T0设置成方式1
 
    TH0 = 0xff;   //定时常数 0.1ms 晶振为11.0592MHz
    TL0 = 0xa4;
 
    ET0 = 1;      
    TR0 = 1; 
	  EA=1; 
	}
	
/*T0中断初始化*/
void Time0_Init() interrupt 1 
{
	TR0 = 0; 
	TH0 = 0xff; // 0.1ms
	TL0 = 0xa4;

	if(count <= timer1) //5==0° 15==90°
	{ 
		PWM = 1; 
	}
	else 
	{ 
		PWM = 0; 
	}
	count++;
	if (count >= 200) //T = 20ms清零
	{ 
		count = 0; 
	}
	TR0 = 1; //开启T0
}
void main()
{
	Timer0_Init();
	while(1)
	{
		
		timer1 =5;//舵机恢复到0度的位置
		count=0;//让定时器重新计数
		Delay(3000);
		timer1 =10;//舵机旋转45度
		count=0;
		Delay(3000);
		timer1=15;//舵机转动90度
		count=0;
		Delay(3000);
	
	}
}

简单运用了一个延时函数方便代码以后的移植性

Delay.c//1ms级的延时函数

代码语言:javascript
复制
void Delay(unsigned int xms)
{
	unsigned char i, j;
	while(xms--)
	{
		i = 2;
		j = 239;
		do
		{
			while (--j);
		} while (--i);
	}
}

Delay.h

代码语言:javascript
复制
#ifndef __DELAY_H__
#define __DELAY_H__

void Delay(unsigned int xms);

#endif

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/149403.html原文链接:https://javaforall.cn

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档