舵机控制 —— 一篇就够

来看文章的都是想快速学会使用的,咱们挑重点的说

【舵机有多种,本文仅介绍固定180度舵机(MG996R舵机、SG90舵机、MG90S舵机等)】

红色 棕色 黄色
VCC GND 信号线

2.如何让舵机转动起来?

舵机的转动角度跟输入脉冲有关,详细看下表:

             

脉冲总周期20ms
角度 高电平 低电平
0 0.5ms 19.5ms
45 1ms 19ms
90 1.5ms 18.5ms
135 2ms 18ms
180 2.5ms 17.5ms

          可以发现一个规律:角度每次增加45度,高电平时间相应增加0.5ms

          总周期 - 高电平脉冲 = 低电平脉冲

         舵机角度的转动就是通过高、低脉冲的变化实现的

知道了规律,这下子我们可以来写代码了↓ 

#include <regx51.h>

sbit PWM=P1^1;  //定义给舵机信号线接的I/O口

void Delay(unsigned char i)   //12MHz 延时函数  
{
    unsigned char a,b;        //该段延时函数Delay(1)=0.5ms
    for(;i>0;i--)
      for(b=71;b>0;b--)
        for(a=2;a>0;a--);
}

/****************************************************************
                            总周期20ms
                通过调节占空比实现舵机需要转动的角度
舵机代码用定时器控制更方便稳定,本文方便读者了解使用,使用延时计算
                         其功能可正常使用
*****************************************************************/
void zero(void) //0度 子程序
{   
        PWM=1;
        Delay(1);       //高电平 Delay(1)=0.5ms。因为周期为20ms,所以低电平就是19.5ms 
        PWM=0;
        Delay(39);      //低电平 Delay(39)=19.5ms
}

void one(void) //45度 子程序
{
        PWM=1;
        Delay(2);      //高电平  Delay(2)=1ms
        PWM=0;   
        Delay(38);     //低电平  Delay(38)=19ms
}

void two(void)  //90度 子程序
{
         PWM=1;
        Delay(3);       //高电平 Delay(3)=1.5ms
        PWM=0;
        Delay(37);     //低电平  18.5ms
}

void three(void) //135度 子程序
{
        PWM=1;
        Delay(4);       //高电平 Delay(4)=2ms
        PWM=0;
        Delay(36);      //低电平 18ms
}

void four(void) //180度 子程序
{
        PWM=1;
        Delay(5);      //高电平 Delay(5)=2.5ms
        PWM=0;
        Delay(35);     //低电平 17.5ms
}


void main()  //主程序
{     
    while(1)
    {    
         two();     //调用90度的子程序,实现舵机转动90度
    }
}

//end

如果需要按键控制,可以通过改变主程序代码实现,如↓ 

void main()
{     
	while(1)
	{	
         if(P3_1==0)   //按键接P3^1口。如果按键按下
		{
		  /* Delay(20);   //10ms的按键消抖,可删,看需要添加。
			 if(P3_1==0)    */
             two();  //如果按键按下,调用舵机90度子程序,实现转动90度。			 
		}

		 else         //否则
		    zero();   //舵机为0度
    }
}

PS:建议写代码时先写一个0度的程序,先确定舵机0度位置,方便确定舵机转动的方向和角度

相关链接:

延时函数计算软件

单片机小精灵(延时、定时计算软件)_啊维的博客-CSDN博客https://blog.csdn.net/qq_51272949/article/details/121553635?spm=1001.2014.3001.5502

版权声明:本文为CSDN博主「阿维啊」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_51272949/article/details/120228587

生成海报
点赞 0

阿维啊

我还没有学会写个人说明!

暂无评论

发表评论

相关推荐

51单片机+ LCD1602+PCF8574转IIC接口+DHT11数据显示

51单片机+ LCD1602+PCF8574转IIC接口+DHT11数据显示 在做这个实验的时候又一次被自己的不注意,掉坑里面去了,调试了好久都不出数据,结果在延时函数和引脚定义上被自己坑了一把。希望大家在写代码的时候多加注意。 LCD1602

51单片机温度报警

器件:   基于普中51A2单片机 用到的模块:LCD1602、蜂鸣器、4个独立按键、DS18B20温度传感器。现象说明: LCD1602可以显示两行数据,每行可以显示16个字符&#xff

51单片机实战教程(33 步进电机的驱动与控制)

步进电机虽然同为电机的一种,但不能像直流电机或者交流电机那样按额定电压与电流给线圈通上直流或交流电机就可正常运转。它需要专用的驱动器或驱动电路供电,才可正常工作。每给驱动器一个脉冲信号,电机就转动一定角