2019年 12月 01日 星期日
您的位置: 威廉希尔主页 > 单片机技术 >

浅谈用单片机控制SG90舵机(原理+编程)

来源:未知     作者:威廉希尔     发布时间:2019-11-29 07:42         

  一、日常吐槽额~~~~~~,在开始今天的主题之前,占用大家一些时间。容我骂街一番,$##%%%$%#$#$$%^艹……………….,哎呀妈呀,骂的有点喘不过来了,额~呸,是言(文明人,文明人)。可能就奇了怪了,你不好好码字,骂什么街呢!说来惭愧,上边被骂的人就是笔者自己。今天在调试程序的时候,对,就这个鬼舵机,怎么都不转!!!检查硬件---检查程序---百度,如此反复N小时。始终找不到问题所在,程序呢,怎么看,怎么美!硬件呢,怎么看,怎么帅!说是急,那是快,电闪雷鸣,刀光剑影,啪,一个数字1摔在脸上,于是乎,快速打开课本,啪~啪~啪,数字0、1,大脑瓜子一拍,哎呀,一定是这错误了!快速拿起闪闪发光的鼠标,熟练的打开Keil4,一段操作猛如虎,只听见那吱~吱~吱~吱,舵机工作了~~~~

  二、主咖登场基本概念:1.舵机:舵机是一种(角度)伺服的驱动器,适用那些需要角度不断变化并可以保持的控制系统。舵机只是一种通俗的叫法,其实质是一个伺服马达。2.模拟舵机:需要不断的发送目的地PWM信号,才能旋转到指定。例如:我现在让它旋转90度,我就需要不断的发送90度的PWM信号直到到达指定才能停止。3.数字舵机:只需给一个目的地PWM信号,即可旋转到指定。例如:我现在让它旋转90度,我只需要发送一次90度的PWM信号,它就可以旋转到90度。4.PWM信号:PWM(脉冲宽度调制)是利用微处理器的数字输出来对模拟电进行控制的一种非常有效的技术。那么什么叫PWM信号呢,笔者就简单的谈一下自己的看法,我们都知道,我们所使用的单片机都是数字电,它的I/O口只有两种状态,那就是高电平(1),低电平(0)。知道了这些之后,我们通过控制微处理器输出1-0-1-0-1-0-1-0……如此循环往复,就成为下图1所示的情况,这就是PWM信号。

  原理:舵机内部有一个基准电压,微处理器产生的PWM信号通过信号线进入舵机产生直流偏置电压,与舵机内部的基准电压作比较,获得电压差输出。电压差的正负输出到电机驱动芯片上,从而决定正反转。当舵机开始旋转的时候,舵机内部通过级联减速齿轮带动电位器旋转,使得电压差为零,电机停止转动。重点:作为一个单片机编写者,具体的原理,我们不必要搞清楚,我们只需知道如何控制它即可,以下将如何控制舵机运转。

  第一步:我们需要使用单片机产生周期为20ms,高电平t等于0.5ms-2.5ms之间的这样一个方波。定时器+中断产生这样的方波。

  第二步:简单讲一下编程思想吧,我所使用的是方法是定时器+中断,定时器每0.5ms中断一次,需要中断40次才能达到20ms。我们此时需要一个全局变量来记录中断的次数,当中断达到40次时,全局变量重新清零。当中断次数小于a时,信号线输出高电平,否则输出零。此时a的值对应关系如下(1--0度,2--45度,3--90度,4--135度,5--180度)。

  为什么此处要此处a==16,a==32,首先,这个值是我一步步测试出来的,如果你看见源程序的话,有详细的介绍,此处不再赘述。我们知道SG90是一个模拟舵机,需要不断的给出信号才能到达指定的。到达这个并不是一蹴而就的,它需要时间,实际的a==16,相当于延时,这段时间刚好能够让舵机达到指定的,然后在接收下一个回摆程序。a==32,是因为我需要让它来回摆动的时间对称,所以才用a==32的。有兴趣的可以改变a的值,观察一下具体的情况。

  if(a==16) //20是比较舒服的连贯动作,20以上动作些许不连贯 10的时候出现打架情况,15的时候打架几乎没有,16比较完美

  本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。

  AVR单片机ARM单片机嵌入式系统汽车电子消费电子数据处理视频教程电子百科其他技术STM32MSP430单片机资源下载单片机习题与教程

      威廉希尔