PWM控制舵機(jī)
1 舵機(jī)簡(jiǎn)介
伺服電機(jī)通常被稱為舵機(jī),它是一種帶有輸出軸的小裝置。當(dāng)我們向伺服器發(fā)送一個(gè)控制信號(hào)時(shí),輸出軸就可以轉(zhuǎn)到特定的位置。只要控制信號(hào)持續(xù)不變,伺服機(jī)構(gòu)就會(huì)保持軸的角度位置不改變。如果控制信號(hào)發(fā)生變化,輸出軸的位置也會(huì)相應(yīng)發(fā)生變化。日常生活中,舵機(jī)常被用于遙控飛機(jī)、遙控汽車、機(jī)器人等領(lǐng)域。
舵機(jī)在機(jī)器人領(lǐng)域非常有用。因?yàn)槎鏅C(jī)有內(nèi)置的控制電路,它們的尺寸雖然很小,但輸出力夠大。像Futaba S-148這樣的標(biāo)準(zhǔn)舵機(jī)能提供 0.3牛/米的扭矩,相對(duì)于它的外形大小來(lái)說這已經(jīng)足夠強(qiáng)大了。同時(shí),舵機(jī)消耗的能量與機(jī)械負(fù)荷成正比。因此,一個(gè)輕載的舵機(jī)系統(tǒng)不會(huì)消耗太多的能量。
2 舵機(jī)結(jié)構(gòu)
舵機(jī)主要由以下幾個(gè)部分組成:外殼、舵盤、直流電機(jī)、減速齒輪組、角度傳感器、控制驅(qū)動(dòng)電路和接口線纜等。常見的舵機(jī)內(nèi)部結(jié)構(gòu)如下圖所示。
舵機(jī)的輸入有三根線,一般的中間的紅色線為電源正極,咖啡色線的為電源負(fù)極,黃色色線為控制線號(hào)線。
3 舵機(jī)控制
控制線用于傳輸角度控制信號(hào)。這個(gè)角度是由控制信號(hào)脈沖的持續(xù)時(shí)間決定的,這叫做脈沖編碼調(diào)制(PCM)。舵機(jī)的控制一般需要一個(gè)20ms左右的時(shí)基脈沖,該脈沖的高電平部分一般為0.5ms-2.5ms范圍,總間隔為2ms。脈沖的寬度將決定馬達(dá)轉(zhuǎn)動(dòng)的距離。
例如:1.5毫秒的脈沖,電機(jī)將轉(zhuǎn)向90度的位置(通常稱為中立位置,對(duì)于180°舵機(jī)來(lái)說,就是90°位置)。如果脈沖寬度小于1.5毫秒,那么電機(jī)軸向朝向0度方向。如果脈沖寬度大于1.5毫秒,軸向就朝向180度方向。以180度舵機(jī)為例,對(duì)應(yīng)的控制關(guān)系是這樣的:
0.5ms | 0度 |
---|---|
1.0ms | 45度 |
1.5ms | 90度 |
2.0ms | 135度 |
2.5ms | 180度 |
4 任務(wù)實(shí)踐
通過按鍵控制舵機(jī)角度,當(dāng)KEY1按下后, 減少占空比,當(dāng)KEY2按下后,增加占空比,并在串口輸出此時(shí)的角度。
- PWM參數(shù)計(jì)算
PWM信號(hào)周期Period=20ms,采用STM32內(nèi)部8MHz的時(shí)鐘,計(jì)算可得(ARR+1)*(PSC+1)=160000,故可取ARR=199,PSC=799。舵機(jī)為0度時(shí),高電平持續(xù)時(shí)間為0.5ms,即占空比Duty=0.025,則CCR初始值可以設(shè)為5.
PWM參數(shù)計(jì)算在STM32基礎(chǔ):定時(shí)器的PWM輸出功能中有詳細(xì)講解。
- 在CubeMX中配置PWM(采用定時(shí)器3通道1)、串口以及按鍵1和按鍵2對(duì)應(yīng)GPIO為中斷模式并使能.
在CubeMX中配置串口,在Keil中使用“Use MicroLIB”并在代碼中重定向printf函數(shù)的方法在STM32基礎(chǔ):定時(shí)器的定時(shí)計(jì)數(shù)功能有詳細(xì)講解。
在CubeMX中配置GPIO中斷并使能的方法已經(jīng)按鍵的相關(guān)操作在STM32基礎(chǔ):中斷系統(tǒng)中有詳細(xì)講解。
- 編寫代碼
/* USER CODE BEGIN PD */
#define CCR_MAX 25 // CCR最大值
/* USER CODE END PD */
/* USER CODE BEGIN PV */
uint16_t CCR = 5; // CCR初始值
uint16_t Step = 5; // CCR步進(jìn)值
/* USER CODE END PV */
/* USER CODE BEGIN 4 */
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
{
if(GPIO_Pin == KEY1_Pin)
{
(CCR >= CCR_MAX) ? (CCR = 5) : (CCR += Step);
__HAL_TIM_SetCompare(&htim3, TIM_CHANNEL_1, CCR);
printf("Sigle = %d", (CCR/5 - 1)*45);
HAL_Delay(200);
}
else if (GPIO_Pin == KEY2_Pin)
{
(CCR <= 5) ? (CCR = CCR_MAX) : (CCR -= Step);
__HAL_TIM_SetCompare(&htim3, TIM_CHANNEL_1, CCR);
printf("Sigle = %d", (CCR/5 - 1)*45);
HAL_Delay(200);
}
}
/* USER CODE END 4 */
-
直流電機(jī)
+關(guān)注
關(guān)注
36文章
1710瀏覽量
70156 -
PWM
+關(guān)注
關(guān)注
114文章
5181瀏覽量
213795 -
STM32
+關(guān)注
關(guān)注
2270文章
10895瀏覽量
355725 -
伺服電機(jī)
+關(guān)注
關(guān)注
85文章
2043瀏覽量
57808 -
舵機(jī)
+關(guān)注
關(guān)注
17文章
268瀏覽量
41013
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論