提示:文章寫(xiě)完后,目錄可以自動(dòng)生成,如何生成可參考右邊的幫助文檔
?文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-424826.html
文章目錄
- 一、PWM是什么?
- 二、如何控制舵機(jī)?
?
?
一、PWM是什么?
PWM,英文名Pulse Width Modulation,是脈沖寬度調(diào)制縮寫(xiě),它是通過(guò)對(duì)一系列脈沖的寬度進(jìn)
行調(diào)制,等效出所需要的波形(包含形狀以及幅值),對(duì)模擬信號(hào)電平進(jìn)行數(shù)字編碼,也就是說(shuō)通
過(guò)調(diào)節(jié)占空比的變化來(lái)調(diào)節(jié)信號(hào)、能量等的變化,占空比就是指在一個(gè)周期內(nèi),信號(hào)處于高電平的
時(shí)間占據(jù)整個(gè)信號(hào)周期的百分比,例如方波的占空比就是50%.
脈沖寬度調(diào)制
通過(guò)占空比編碼模擬信號(hào)
占空比 一個(gè)周期內(nèi),高電平占據(jù)時(shí)長(zhǎng)的百分比
?
二、如何控制舵機(jī)?
1. 什么是舵機(jī)
如下圖所示,最便宜的舵機(jī)sg90,常用三根或者四根接線,黃色為PWM信號(hào)控制
用處:垃圾桶項(xiàng)目開(kāi)蓋用、智能小車(chē)的全比例轉(zhuǎn)向、攝像頭云臺(tái)、機(jī)械臂等
常見(jiàn)的有0-90°、0-180°、0-360°
?
?2. 怎么控制舵機(jī)
向黃色信號(hào)線“灌入”P(pán)WM信號(hào),通過(guò)控制高電平的時(shí)間,來(lái)控制舵機(jī)的角度
PWM波的頻率不能太高,大約50HZ,即周期=1/頻率=1/50=0.02s,20ms左右
數(shù)據(jù):
0.5ms-------------0度; 2.5% 對(duì)應(yīng)函數(shù)中占空比為250
1.0ms------------45度; 5.0% 對(duì)應(yīng)函數(shù)中占空比為500
1.5ms------------90度; 7.5% 對(duì)應(yīng)函數(shù)中占空比為750
2.0ms-----------135度; 10.0% 對(duì)應(yīng)函數(shù)中占空比為1000
2.5ms-----------180度; 12.5% 對(duì)應(yīng)函數(shù)中占空比為1250
3、定時(shí)器定時(shí)
定時(shí)器需要定時(shí)20ms, 關(guān)心的單位0.5ms, 40個(gè)的0.5ms,初值0.5ms,定時(shí)器看晶振頻率。
加1經(jīng)過(guò)了多少時(shí)間
當(dāng)晶振頻率(時(shí)鐘頻率)是11.0592MHz的時(shí)候,等于11059.2KHz = 11059200Hz
機(jī)器周期 = 12 x 時(shí)鐘周期 =12 x (1/時(shí)鐘頻率) 秒 = 12 / 時(shí)鐘頻率 秒 = 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() //定時(shí)器0初始化
{
//1.配置定時(shí)器0工作模式位16位計(jì)時(shí)
TMOD=0x01; //TL0,TH0全用 0 1
//2.給初值,定一個(gè)10ms出來(lái)
TL0= 0x33;
TH0= 0xFE; //TL0存放低八位00,TH0存放高8位DC
//3.開(kāi)始計(jì)時(shí)
TR0=1;
//4.打開(kāi)定時(shí)器0中斷
ET0=1;
//5.打開(kāi)總中斷EA
EA=1;
}
void main()
{
Delay300ms();
Time0init();
jd =1; //角度為1,即只有一個(gè)0.5ms的高電平,為0°
cnt = 0;
sg90_c = 1; //先讓舵機(jī)一開(kāi)始處于高電平
//4.爆表了
while(1)
{
jd=4; //舵機(jī)轉(zhuǎn)135°時(shí),高電平時(shí)間是2ms,需要4個(gè)0.5ms
cnt =0;
Delay300ms();
jd = 1;
cnt=0;
Delay300ms();
}
}
//TF0爆表時(shí),硬件自動(dòng)調(diào)用中斷函數(shù)
void Time0Handler() interrupt 1 //定時(shí)器0的中斷號(hào)
{
cnt++;
//重新賦初值
TL0=0x33;
TH0=0xFE;
if(cnt<jd) //舵機(jī)轉(zhuǎn)135°時(shí),高電平時(shí)間是2ms,需要4個(gè)0.5ms
{
sg90_c=1;
}
else
{
sg90_c = 0; //一直保持低電平到結(jié)束
}
if(cnt==40) //爆表40次,經(jīng)過(guò)20ms,結(jié)束第一次PWM周期,PWM為50HZ
{
cnt=0; //重新讓cnt從0開(kāi)始,計(jì)算下一次的20ms
sg90_c=1; //每次cnt為0時(shí)(即初始狀態(tài))處于高電平,等待PWM
}
}
?
?
?文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-424826.html
?
到了這里,關(guān)于單片機(jī)PWM舵機(jī)控制的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!