提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
文章来源地址https://www.toymoban.com/news/detail-424826.html
文章目录
- 一、PWM是什么?
- 二、如何控制舵机?
一、PWM是什么?
PWM,英文名Pulse Width Modulation,是脉冲宽度调制缩写,它是通过对一系列脉冲的宽度进
行调制,等效出所需要的波形(包含形状以及幅值),对模拟信号电平进行数字编码,也就是说通
过调节占空比的变化来调节信号、能量等的变化,占空比就是指在一个周期内,信号处于高电平的
时间占据整个信号周期的百分比,例如方波的占空比就是50%.
脉冲宽度调制
通过占空比编码模拟信号
占空比 一个周期内,高电平占据时长的百分比
二、如何控制舵机?
1. 什么是舵机
如下图所示,最便宜的舵机sg90,常用三根或者四根接线,黄色为PWM信号控制
用处:垃圾桶项目开盖用、智能小车的全比例转向、摄像头云台、机械臂等
常见的有0-90°、0-180°、0-360°
2. 怎么控制舵机
向黄色信号线“灌入”PWM信号,通过控制高电平的时间,来控制舵机的角度
PWM波的频率不能太高,大约50HZ,即周期=1/频率=1/50=0.02s,20ms左右
数据:
0.5ms-------------0度; 2.5% 对应函数中占空比为250
1.0ms------------45度; 5.0% 对应函数中占空比为500
1.5ms------------90度; 7.5% 对应函数中占空比为750
2.0ms-----------135度; 10.0% 对应函数中占空比为1000
2.5ms-----------180度; 12.5% 对应函数中占空比为1250
3、定时器定时
定时器需要定时20ms, 关心的单位0.5ms, 40个的0.5ms,初值0.5ms,定时器看晶振频率。
加1经过了多少时间
当晶振频率(时钟频率)是11.0592MHz的时候,等于11059.2KHz = 11059200Hz
机器周期 = 12 x 时钟周期 =12 x (1/时钟频率) 秒 = 12 / 时钟频率 秒 = 12 / 11059200 秒 = 12 000 000/ 11059200 微秒 = 1.085 微秒
代码如下(示例):
#include <reg52.h>
int jd;
sbit sg90_c = P1^1;
int cnt =0;
void Delay300ms() //@11.0592MHz
{
unsigned char i, j, k;
i = 3;
j = 26;
k = 223;
do
{
do
{
while (--k);
} while (--j);
} while (--i);
}
void Time0init() //定时器0初始化
{
//1.配置定时器0工作模式位16位计时
TMOD=0x01; //TL0,TH0全用 0 1
//2.给初值,定一个10ms出来
TL0= 0x33;
TH0= 0xFE; //TL0存放低八位00,TH0存放高8位DC
//3.开始计时
TR0=1;
//4.打开定时器0中断
ET0=1;
//5.打开总中断EA
EA=1;
}
void main()
{
Delay300ms();
Time0init();
jd =1; //角度为1,即只有一个0.5ms的高电平,为0°
cnt = 0;
sg90_c = 1; //先让舵机一开始处于高电平
//4.爆表了
while(1)
{
jd=4; //舵机转135°时,高电平时间是2ms,需要4个0.5ms
cnt =0;
Delay300ms();
jd = 1;
cnt=0;
Delay300ms();
}
}
//TF0爆表时,硬件自动调用中断函数
void Time0Handler() interrupt 1 //定时器0的中断号
{
cnt++;
//重新赋初值
TL0=0x33;
TH0=0xFE;
if(cnt<jd) //舵机转135°时,高电平时间是2ms,需要4个0.5ms
{
sg90_c=1;
}
else
{
sg90_c = 0; //一直保持低电平到结束
}
if(cnt==40) //爆表40次,经过20ms,结束第一次PWM周期,PWM为50HZ
{
cnt=0; //重新让cnt从0开始,计算下一次的20ms
sg90_c=1; //每次cnt为0时(即初始状态)处于高电平,等待PWM
}
}
文章来源:https://www.toymoban.com/news/detail-424826.html
到了这里,关于单片机PWM舵机控制的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!