单片机——SG90舵机工作原理

这篇具有很好参考价值的文章主要介绍了单片机——SG90舵机工作原理。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言:
舵机控制的另一个专业名字叫伺服控制。

经过百度,伺服”—词源于希腊语“奴隶”的意思。人们想把“伺服机构”当个得心应手的驯服工具,服从控制信号的要求而动作。在讯号来到之前,转子静止不动;讯号来到之后,转子立即转动;当讯号消失,转子能即时自行停转。由于它的“伺服”性能,因此而得名——伺服系统。

我们这次就是要控制舵机转动任意角度。

舵机

一、外观

单片机——SG90舵机工作原理
接线方法:
红-------------------------VCC
棕色----------------------GND
橙色----------------------信号线

二、相关参数

单片机——SG90舵机工作原理

三、工作原理

舵机的控制信号为周期是20ms 的脉宽调制(PWM)信号,其中脉冲宽度从0.5ms-2.5ms,相对应舵盘的位置为0—180度,呈线性变化。也就是说,给它提供一定的脉宽,它的输出轴就会保持在一个相对应的角度上,无论外界转矩怎样改变,直到给它提供一个另外宽度的脉冲信号,它才会改变输出角度到新的对应的位置上。舵机内部有一个基准电路,产生周期20ms,宽度1.5ms的基准信号,有一个比较器,将外加信号与基准信号相比较,判断出方向和大小,从而产生电机的转动信号。

控制电路板接受来自信号线相应的PWM控制信号,进而控制电机转动,电机带动一系列齿轮组,减速后传动至输出舵盘。舵机的输出轴和位置反馈电位计是相连的,舵盘转动的同时,带动位置反馈电位计,电位计将输出一个电压信号到控制电路板,进行反馈,然后控制电路板根据所在位置决定电机的转动方向和速度,从而达到目标停止。

舵机的控制需要MCU产生一个周期为20ms的脉冲信号,以0.5ms到2.5ms的高电平来控制舵机转动的角度。
单片机——SG90舵机工作原理

四、舵机购买注意事项

1、在购买时,需要分清楚你的舵机可以转180度,还是360度。相关区别购买时可以了解。
单片机——SG90舵机工作原理
单片机——SG90舵机工作原理

2、舵机又分为数字舵机和模拟舵机。

模拟舵机:需要不断的发送相应角度的PWM信号,才能旋转到指定位置。例如:我现在让它旋转90度,我就需要在一个时间内不断的发送90度的PWM信号,舵机转动到指定位置就会停止。

数字舵机:只需给一个目的地PWM信号,即可旋转到指定位置。例如:我现在让它旋转90度,我只需要发送一次90度的PWM信号,它就可以旋转到90度。

SG90舵机 是模拟舵机,SG90S舵机 我记得好像是数字舵机,总之数字舵机比模拟舵机好些,无论实在程序控制方面还是在运行情况方面都要好些

五、代码编写

舵机要用PWM来控制,PWM的产生可以用软件延时和定时器的方法。这里为了体现精确性,采用定时器的方式。

首先还是看下这张图片,这个是PWM控制SG90舵机的关键。我们只有按照给舵机输入正确的PWM波形,舵机才会转动到指定的角度。
单片机——SG90舵机工作原理
上代码:

1、PWM波形的周期我们用定时器产生,所以先对定时器做初始化:
void Timer_Init()
{
  TMOD=0X01;      //T0定时方式1
  TH0=0Xfe;
  TL0=0X33;       //计数初值设置为0.5ms
  ET0=1;          //打开定时器0的中断
  TR0=1;          //打开定时器0
  EA=1;           //开总中断
}
2、然后就是编写定时器中断函数,和输出对应的PWM波形了:

PWM波形这里是在定时器里产生的。

sbit PWM=P2^3;  	//对应舵机的PWM引脚
int count=0;		//全局变量count用于定时器计数
int c=0;	//这个值为高低电平的临界值,可以改变,
			//这里初始化为0表示开始让舵机复位到0度位置(输出0.5ms的高电平)

void Timer() interrupt 1     
{
  TH0=0Xfe;
  TL0=0X33;       //重新赋计数初值为0.5ms
  
  if(count<=c)	//进入定时器的时间和高低电平临界值比较
  {
    PWM=1;		//输出PWM波形中的高电平
  }
  else
  {
    PWM=0;
  }
  count++;
	
  if(count>=40)		//计数40次,每次0.5ms,总共达到20ms周期后清零,为下一周期开始计数做准备
  {
    count=0;
  }
}
3、主函数代码的书写:
void main()
{
Timer_Init();
while(1);
}

嗯嗯,上面就是代码全部了,没有给出整体代码,防止只复制粘贴,不动脑瓜子的童鞋

1、那。。。,博主博主,我把上面的代码组装到工程里去了,烧写到单片机中去,开机舵机没反应呀?

答:看看舵机原本是不是在0度的位置,如果是,请手动把他转到其它角度,在上电,看舵机转到0度了没有。

2、那。。。,博主博主,我想让舵机上电就复位到90度的位置,咋办?

答:认真看下代码里语句的注释,我们将程序中的高低电平临界值变量c,赋值为2,即c=2;上电后,舵机如果不在90度的位置,就会复位到90度了。

3、那。。。,博主博主,我想定义两个按键,按下一个按键舵机转到0度位置,按下另一个按键,舵机转到180位置,咋办?

答:先用sbit定义两个按键引脚,然后在主函数中的while循环里,判断哪个按键按下,然后改变临界值C就行。如下

while(1)
{
	if(key1==0)
	{
		delay_ms(5);
		if(key1==0)
		{
			c=0;		//对应高电平输出0.5ms,转到0度
			while(!key1);
		}
	}
	else if(key2==0)
	{
		delay_ms(5);
		if(key2==0)
		{
			c=4;		//对应高电平输出2.5ms,转到180度
			while(!key2);
		}
	}
}

六、优化后的代码

嗯。。。,咋子优化哦,上面不就可以让舵机抓到指定位置了吗?

SG90是模拟舵机,需要在一个时间内不断的输出一定的PWM波形给舵机,它才会转到到指定位置,上面的代码中我是让定时器不断的工作,不断的输出PWM波形。

其实对于模拟舵机,不需要一直让定时器工作输出PWM波形,只用在一段时间内输出一定的PWM波形就可以。那为什么这样考虑呢?因为给一段时间的PWM波形后,舵机就可以转动到位了,后面再给PWM波形就没有意义了,舵机转动到位后,就可以关闭定时器了(除非你的其它功能要用到定时器,就可以不用关),这样可以避免后面不断的触发定时中断,影响主函数while里其它功能的执行效率,毕竟进入定时中断函数里时,主函数时不得执行的。

上面讲到的那个时间,可以通过实际调试多次测出来,博主这里测出来了。

**完整并优化的项目代码放到最后:
【51单片机控制SG90舵机】
**文章来源地址https://www.toymoban.com/news/detail-404651.html

到了这里,关于单片机——SG90舵机工作原理的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【STM32单片机】STM32控制SG90舵机的PWM部分参数的设置解答

    我们要知道,SG90舵机接收的PWM信号的参数:f=50Hz,T=1/f,所以周期为20ms。 当高电平的脉宽在0.5ms-2.5ms之间时舵机就可以对应旋转到不同的角度。 换句话说,我们要用单片机产生一个 周期(20ms) 的PWM波,然后获得对应这些时长(分别是 0.5ms 、 1ms 、 1.5ms 、 2ms 、 2.5ms )的 高电

    2024年02月13日
    浏览(57)
  • 小白入门STM32(2)---控制SG90舵机---基础工作原理详解

    本人一枚软件编程人员,有一定C语言基础,目前自学STM32单片机,写下此篇一巩固所学二交流分享。 按照惯例,先介绍理论再实战上手,穿插习题,最后给出我的愚见。 SG90属于一种舵机,最适合小白入门,可直接由单片机驱动。另外,单片机中给我们封装了很多东西,所以

    2023年04月10日
    浏览(44)
  • SG90舵机的原理和控制方式

    前言 做过机器人、智能车或者玩航模的朋友应该对舵机不会陌生,这种舵机也是很常用的。 舵机只是我们通俗的叫法,它的本质是一个 伺服电机 ,也可以叫做位置(角度)伺服驱动器。一般被应用在那些需要控制角度变化的系统中,可以方便的实现转动任意的角度,实现控制

    2023年04月17日
    浏览(43)
  • SG90舵机介绍

    SG90舵机简介        SG90舵机是一种位置(角度)伺服的驱动器,适用于那些需要角度不断变化并可以保持的控制系统。在机器人机电控制系统中,舵机控制效果是性能的重要影响因素。舵机可以在微机电系统和航模中作为基本的输出执行机构,其简单的控制和输出使得单片

    2024年02月02日
    浏览(43)
  • SG90舵机使用介绍

    型号:SG90 接线 黄线:信号线 红线:电源线 棕线:地线 PWM周期 需要通过信号线往舵机输入PWM波,才能驱动舵机转动 PWM波的频率不能太高,大约50HZ,即周期=1/频率=1/50=0.02s,20ms左右 舵机的控制一般需要一个20ms左右的时基脉冲,该脉冲的高电平部分一般为0.5ms-2.5ms范围内的角

    2024年02月13日
    浏览(37)
  • 【STM32】 SG90舵机

    目录 一:介绍 二:传感器参数 三:接口说明 四:SG90舵机模块接口原理图 五:SG90舵机模块实物图 舵机是一种位置(角度)伺服的驱动器,适用于那些需要角度不断变化并可以保持的控制系统。 目前,在高档遥控玩具,如飞机、潜艇模型,遥控机器人中已经得到了普遍应用

    2024年02月06日
    浏览(49)
  • STM32驱动SG90舵机

    SG90是一种小型伺服电机,通常用于模型制作和小型机械应用中: 问题 答案 SG90的工作电压是多少 SG90的工作电压通常为3V至7.2V SG90最大扭矩是多少 SG90的最大扭矩约为1.5kg/cm SG90的工作温度范围是多少 SG90的工作温度范围通常为0°C至55°C SG90的控制方式是什么 SG90的控制方式通常为

    2024年02月12日
    浏览(38)
  • 单片机学习笔记---AD/DA工作原理(含运算放大器的工作原理)

    目录 AD/DA介绍 硬件电路模型 硬件电路 运算放大器 DA原理 T型电阻网络DA转换器 PWM型DA转换器 AD原理 逐次逼近型AD转换器 AD/DA性能指标 XPT2046 XPT2046时序 AD(Analog to Digital):模拟-数字转换,将模拟信号转换为计算机可操作的数字信号。有时候我们也把AD叫做ADC(C是转换器conv

    2024年02月22日
    浏览(51)
  • 51单片机P0~P3口工作原理

    多路开关MUX决定P0.x是作数据/地址引脚还是作通用I/O引脚。 三态缓冲器BUF1,BUF2由C1,C2控制是读锁存器还是读引脚 控制线置1,MUX连通地址/数据线,此时作P0.x数据/地址引脚 发出信号 数据/地址线置1,V1导通,V2截止。P0.x输出1的数据/地址信号; 数据/地址线置0,V1截止,V2导通。

    2024年04月12日
    浏览(48)
  • 定量分析计算51单片机复位电路工作原理 怎么计算单片机复位电容和电阻大小

    下面画出等效电路图  可以知道单片机内必然有一个电阻RX,为了简化分析,我们假设他是线性电阻(不带电容,电感的支路) 还有一个基础知识: 电容器的充电放电曲线: 还需要知道电容电压的变化是连续的,(高数知识)无法跳变。 一个很大的误区就是认为电容一上电

    2024年02月12日
    浏览(55)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包