1.舵机的与单片机的连接
2.PWM波的简单了解
3.程序示例
4.开发程序难点
---------------------------------------------------------------------------------------------------------------------------------
1.舵机的与单片机的连接
如图所示,舵机正极接单片机vcc,负极接gnd,signal的连接可自定义。
---------------------------------------------------------------------------------------------------------------------------------
2.PWM波的简单了解
51单片机通过按键来控制舵机正反转,需要通过PWM波来实现,本文仅对如何使用PWM波控制舵机旋转做出解释。
对于一般的舵机来说,所对应的PWM波的周期为200ms,即单片机信号口输出200ms为一个周期。设信号口输出‘1’的时间为 x ms,剩余时间均输出‘0’,x/200的比值即为占空比的值。单片机通过控制占空比的值来控制舵机的旋转。
对于常见的舵机来说,占空比的值与对应的角度有以下关系:
0.5ms/200ms = 0 度
1.0ms/200ms = 45 度
1.5ms/200ms = 90 度
2.0ms/200ms = 135 度
2.5ms/200ms = 180 度
在51单片机中,通过定时器来计时,通过信号输出口输出‘1’或‘0’来控制舵机的旋转。
3.程序示例
#include<reg52.h>
sbit key1 = P3^2;
sbit key2 = P3^3;
sbit pwm1 = P2^0;
unsigned int target =12,percent = 0;
void Timer0Initial();
void initial_Timer();
void delay(unsigned int x);
void keyscan();
void keyscan()
{
delay(30);
if(key1 == 0)
{
delay(10);
if(key1 == 0)
{
if(target >= 5)
target -= 1;
}
}
if(key2 == 0)
{
delay(10);
if(key2 == 0)
{
if(target <= 25)
target += 1;
}
}
}
void initial()
{
key1 = 1;
key2 = 1;
initial_Timer();
}
void Timer0Initial()
{
TH0 = (65536-65)/256;
TL0 = (65536-65)%256;
}
void initial_Timer()
{
EA = 1;
ET0 = 1;
TMOD = 0x01;
Timer0Initial();
TR0 = 1;
}
void delay(unsigned int x)
{
unsigned int i,j;
for(i=x;i>0;i--)
for(j=110;j>0;j--);
}
void main()
{
initial();
while(1)
{
keyscan();
}
}
void Timer0() interrupt 1 using 0
{
percent+=1;
if(percent<=target)
pwm1=1;
收集整理了一份《2024年最新物联网嵌入式全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升的朋友。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人
都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!