基于51单片机理解SG90舵机原理并用按键控制

发布时间:2023-01-31  

具体功能实现

当按下开关时,舵机的角度分别运行到0°,45°,90°,135°,180°,0°(最后停止位置),其中每转动一个角度时间延时1s。


器件:

AT89C52,sg90舵机,三根杜邦线公对母,两支按键

转动角度展示图:


转动至45°

转动至180°

转动至90°

知识介绍:

sg90舵机简介

由直流电机、减速齿轮组、传感器(可变电阻)和控制电路组成的一套自动控制系统。

直流电机是一圈圈转动的,舵机只能在一定角度内转动(有最大旋转角度比如:180度),不能一圈圈转。

外部中断:

STC89C52有4个外部中断;

STC89C52的外部中断有两种触发方式:

下降沿触发和低电平触发

下降沿触发:当按键按下不松手时只触发一次

低电平触发:当按键按下不松手时会持续触发

中断号:

由定时器和中断系统这张图来分析,可以得到定时器0的初始代码如下:

void Init_Timer0()

{

TMOD = 0x01;

TL0 = 0x33; //设置定时初值

TH0 = 0xFE; //设置定时初值

EA = 1;

ET0 = 1;

TR0 = 1;

PT0 = 1;

TF0=0;

}

PWM脉冲宽度调制定理

PWM(Pulse Width Modulation)即脉冲宽度调制,在具有惯性的系统中,可以通过对一系列脉冲的宽度进行调制,来等效地获得所需要的模拟参量,常应用于电机控速、开关电源等领域

PWM重要参数:

频率 = 1 / TS 占空比 = TON / TS 精度 = 占空比变化步距

例子:在制作LED呼吸灯时,如果想要让LED亮的时间更长,只需要提高比较值。


sg90舵机接线图

舵机的输入线共有三条:

红色线——电源正线(需接5V电源才能驱动)

棕色线——电源地线

黄色线——信号线(本项目使用P2^7端口)

sg90舵机控制原理


本文采用的是定时器0来计时,初始值设为0.5ms,每次定时器溢出是0.5ms,设置一个计数值count=0,每一个0.5ms count都会自增1,加了40次就20ms,是舵机控制的一个周期。


所以0.5ms是自增一次,1ms是自增两次,1.5ms是自增三次,2ms是自增四次,2.5ms是自增五次。

主函数代码(C语言)KEIL5实现:

无按键自转代码:


#include


sbit Sg90_com = P2^7;


unsigned char compare=0,count=0; //compare比较值控制占空比大小,控制舵机转动的角度


void Delay1ms(unsigned int num) //@11.0592MHz


{


unsigned char i, j;


while(num--)


{


i = 2;


j = 199;


do


{


while (--j);


} while (--i);


}


}


void Init_Timer0()


{


TMOD = 0x01;


TL0 = 0x33; //设置定时初值


TH0 = 0xFE; //设置定时初值


EA = 1;


ET0 = 1;


TR0 = 1;


PT0 = 1;


TF0=0;


}


void main()


{


Init_Timer0();


while(1)


{


compare = 1; //0度


Delay1ms(1000);


compare = 2; //45度


Delay1ms(1000);


compare = 3; //90度


Delay1ms(1000);


compare = 4; //135度


Delay1ms(1000);


compare = 5; //180度


Delay1ms(1000);


}


}


void Timer0_Rountine() interrupt 1 //每次定时器溢出时是0.5ms


{


TL0 = 0x33; //设置定时初值


TH0 = 0xFE; //设置定时初值


count++;


//PWM控制


if(count < 40) //每一个0.5mscount都会++,加了40次就20ms,是舵机控制的一个周期


{


if(count < compare) //通过比较值控制高电平占据周期的时间,也就是占空比大小


{


Sg90_com = 1;


}


else


{


Sg90_com = 0;


}


}


else //count加到40后清零


{


count = 0;


Sg90_com = 1;


}


}




按键自转代码:


#include


sbit Sg90_com = P2^7;


sbit key1 = P3^1;    //独立按键1


sbit key2 = P3^0; //独立按键2




unsigned char compare=0,count=0; //compare比较值控制占空比大小,控制舵机转动的角度


void Delay1ms(unsigned int num) //@11.0592MHz


{


unsigned char i, j;


while(num--)


{


i = 2;


j = 199;


do


{


while (--j);


} while (--i);


}


}


void Init_Timer0()


{


TMOD = 0x01;


TL0 = 0x33; //设置定时初值


TH0 = 0xFE; //设置定时初值


EA = 1;


ET0 = 1;


TR0 = 1;


PT0 = 1;


TF0=0;


}


void main()


{


Init_Timer0();


while(1)


{


while(key1==0){


compare = 1; //0度


Delay1ms(1000);


}


while(key2==0){


compare = 5; //180度


Delay1ms(1000);


}


}


}


void Timer0_Rountine() interrupt 1 //每次定时器溢出时是0.5ms


{


TL0 = 0x33; //设置定时初值


TH0 = 0xFE; //设置定时初值


count++;


//PWM控制


if(count < 40) //每一个0.5mscount都会++,加了40次就20ms,是舵机控制的一个周期


{


if(count < compare) //通过比较值控制高电平占据周期的时间,也就是占空比大小


{


Sg90_com = 1;


}


else


{


Sg90_com = 0;


}


}


else //count加到40后清零


{


count = 0;


Sg90_com = 1;


}


}

问题解答:

Q1:代码超出版本限制如何解决?如图:

A1:用注册机对KEIL5软件进行重新破解,破解步骤链接:

Q2:延时函数如何快速自动生成?

A2:在STC-ISP中根据红色方框进行设计


Q3:单片机计时器TH0 和TL0初值的计算方法

A3:首先计算计数值:
例如:计数值=10000us(10ms转换成微秒)* 11.0592(晶振大小)/12 计算结果=9216
TH0=(65536-9216)/256 =DC
TL0=(65536-9216)%256 =00

//8位逢256进位,整除的结果为高位,取余的结果为低位

Q4:单片机计时器TMOD设置

A4:通常情况下,定时器0的TMOD=0x01,工作模式1——16位计时计数器 (65536)


下面两张图是工作模式1和2的对比流程图:



文章来源于:电子工程世界    原文链接
本站所有转载文章系出于传递更多信息之目的,且明确注明来源,不希望被转载的媒体或个人可与我们联系,我们将立即进行删除处理。

相关文章

    调速电机三根线怎么接 调速电机的六根调速线如何接;  调速电机三根线怎么接   调速电机一般有三根线:一个相线、一个中线和一个接地线。三根线的连接方法根据具体的电机型号和控制器型号有所不同,一般......
    在购买电机时直接选择适合的三相电机,以获得更好的效果和稳定性。   两相电机三根线怎么接电源   两相电机通常有两个线圈,每个线圈有两个端子,所以总共有四个线端。如果您只有三根电源线,则需要将两个线圈的其中一根端子连接起来,形成......
    三相电机为什么只有三根线 三相电机只有三根线怎么接线;  三相电机为什么只有三根线   俗称的三根火线其实就是三根相线,要想知道为什么电动机(三相)要接三根相线就有必要了解一下这三根......
    解答闭锁器五线怎么接和中控马达五线怎么接;汽车后加的闭锁器中控锁一般主驾驶是五根线,分别如何与防盗器对接? 答:车辆防盗器基本上来讲中控锁套装的一般为负触发,单独加装中控锁的是正负触发的比较多,这个......
    解答汽车主闭锁器四根线怎么接和左前门闭锁器插头上四根线怎么接;汽车主闭锁器四根线的都是什么线,怎么接? 两根是闭锁电机的控制线,两根是闭锁触发控制线,加装防盗器就是接在这两根触发线强。 四线......
    步进电机怎么接线_步进电机正反转接线图;  步进电机四根线怎么接   随着步进电机的应用越来越广泛,生产的厂家也随之多了起来,一些小品牌出的步进电机,也没有一些说明书,图纸这些,从而导致了,一部......
    。 器件: AT89C52,sg90舵机三根杜邦线公对母,两支按键 转动角度展示图: 转动至45° 转动至180° 转动至90° 知识介绍: sg90舵机简介 由直流电机、减速齿轮组、传感......
    受的电源电压必须等于或接近于电动机的额定电压。 380V的接线方法,有三根相线,没有零线,全是火线,我们已经在上面说明了它的接线方法。家庭220V的则有两根线,一根火线,一根零线,它怎么接到接线盒中的三根......
    是船舶上的一种大甲板机械。   本文主要介绍的是51单片机PWM双舵机控制,具体的跟随小编来了解一下。   51单片机PWM双舵机控制详解   使用的舵机——盛辉SG90舵机(标准版)      盛辉SG90舵机......
    用户采用星角接转换起动,从电机接出来六根线,可以用同样的方法先倒上面三根,如果不行,再倒下面的三根线。 以上分析了电机三相电流不平衡的原因,并给出了电机三相电流不平衡问题的处理方法,希望对大家有所帮助。 ......

我们与500+贴片厂合作,完美满足客户的定制需求。为品牌提供定制化的推广方案、专属产品特色页,多渠道推广,SEM/SEO精准营销以及与公众号的联合推广...详细>>

利用葫芦芯平台的卓越技术服务和新产品推广能力,原厂代理能轻松打入消费物联网(IOT)、信息与通信(ICT)、汽车及新能源汽车、工业自动化及工业物联网、装备及功率电子...详细>>

充分利用其强大的电子元器件采购流量,创新性地为这些物料提供了一个全新的窗口。我们的高效数字营销技术,不仅可以助你轻松识别与连接到需求方,更能够极大地提高“闲置物料”的处理能力,通过葫芦芯平台...详细>>

我们的目标很明确:构建一个全方位的半导体产业生态系统。成为一家全球领先的半导体互联网生态公司。目前,我们已成功打造了智能汽车、智能家居、大健康医疗、机器人和材料等五大生态领域。更为重要的是...详细>>

我们深知加工与定制类服务商的价值和重要性,因此,我们倾力为您提供最顶尖的营销资源。在我们的平台上,您可以直接接触到100万的研发工程师和采购工程师,以及10万的活跃客户群体...详细>>

凭借我们强大的专业流量和尖端的互联网数字营销技术,我们承诺为原厂提供免费的产品资料推广服务。无论是最新的资讯、技术动态还是创新产品,都可以通过我们的平台迅速传达给目标客户...详细>>

我们不止于将线索转化为潜在客户。葫芦芯平台致力于形成业务闭环,从引流、宣传到最终销售,全程跟进,确保每一个potential lead都得到妥善处理,从而大幅提高转化率。不仅如此...详细>>