目錄
一、概述
二、PWM簡(jiǎn)單介紹
?三、通用定時(shí)器輸出比較
3.1 輸出比較簡(jiǎn)介
3.2 輸出比較通道
3.3 產(chǎn)生PWM的過程
四、實(shí)驗(yàn)硬件介紹及PWM模塊程序
4.1 舵機(jī)簡(jiǎn)介
4.2 直流電機(jī)及驅(qū)動(dòng)芯片TB6612
?4.3 PWM模塊驅(qū)動(dòng)程序
一、概述
????????主要介紹通用定時(shí)器輸出比較功能,在GPIO口輸出PWM來控制舵機(jī)旋轉(zhuǎn)角度和直流電機(jī)的轉(zhuǎn)速。調(diào)節(jié)PWM波,有三個(gè)參數(shù):①PWM頻率;②占空比;③分辨率。
二、PWM簡(jiǎn)單介紹
????????PWM之前在51單片機(jī)中學(xué)習(xí)過,它相當(dāng)于D/A轉(zhuǎn)換器,把單片機(jī)輸出的數(shù)字量通過調(diào)節(jié)PWM的占空比可以模擬出模擬量。常用于電機(jī)調(diào)速
- PWM(Pulse Width Modulation)脈沖寬度調(diào)制
- 在具有慣性的系統(tǒng)中,可以通過對(duì)一系列脈沖的寬度進(jìn)行調(diào)制,來等效地獲得所需要的模擬參量,常應(yīng)用于電機(jī)控速等領(lǐng)域
- PWM參數(shù): ? ? ?頻率 = 1 / TS ? ? ? ? ? ?占空比 = TON / TS ? ? ? ? ? 分辨率 = 占空比變化步距
?三、通用定時(shí)器輸出比較
3.1 輸出比較簡(jiǎn)介
- OC(Output Compare)輸出比較
- 輸出比較可以通過比較CNT與CCR寄存器值的關(guān)系,來對(duì)輸出電平進(jìn)行置1、置0或翻轉(zhuǎn)的操作,用于輸出一定頻率和占空比的PWM波形
- 每個(gè)高級(jí)定時(shí)器和通用定時(shí)器都擁有4個(gè)輸出比較通道
- 高級(jí)定時(shí)器的前3個(gè)通道額外擁有死區(qū)生成和互補(bǔ)輸出的功能
3.2 輸出比較通道
- ?輸出模式選擇:確定ref信號(hào)。
- 極性選擇。高極性ref不變,低極性ref高低電平取反。
- 輸出使能。
輸出比較模式:
模式 |
描述 |
凍結(jié) |
CNT=CCR時(shí),REF保持為原狀態(tài) |
匹配時(shí)置有效電平 |
CNT=CCR時(shí),REF置有效電平 |
匹配時(shí)置無效電平 |
CNT=CCR時(shí),REF置無效電平 |
匹配時(shí)電平翻轉(zhuǎn) |
CNT=CCR時(shí),REF電平翻轉(zhuǎn) |
強(qiáng)制為無效電平 |
CNT與CCR無效,REF強(qiáng)制為無效電平 |
強(qiáng)制為有效電平 |
CNT與CCR無效,REF強(qiáng)制為有效電平 |
PWM模式1 |
向上計(jì)數(shù):CNT<CCR時(shí),REF置有效電平,CNT≥CCR時(shí),REF置無效電平 向下計(jì)數(shù):CNT>CCR時(shí),REF置無效電平,CNT≤CCR時(shí),REF置有效電平 |
PWM模式2 |
向上計(jì)數(shù):CNT<CCR時(shí),REF置無效電平,CNT≥CCR時(shí),REF置有效電平 向下計(jì)數(shù):CNT>CCR時(shí),REF置有效電平,CNT≤CCR時(shí),REF置無效電平 |
3.3 產(chǎn)生PWM的過程
- ?使能TIM2時(shí)鐘。
- 選擇進(jìn)入時(shí)基單元的時(shí)鐘(內(nèi)部時(shí)鐘)。
- 初始化時(shí)基單元。
- 初始化輸出比較單元,包括輸出模式選擇、極性選擇和輸出使能。
- 使能GPIO時(shí)鐘。
- 初始化GPIO,記得是復(fù)位推挽輸出模式,由TIM控制GPIO口的輸出。
- 使能TIM2。
四、實(shí)驗(yàn)硬件介紹及PWM模塊程序
4.1 舵機(jī)簡(jiǎn)介
- ?一個(gè)PWM周期是20ms。
- 高電平寬度為0.5ms~2.5ms,對(duì)應(yīng)舵機(jī)輸出軸轉(zhuǎn)角0~180°。
4.2 直流電機(jī)及驅(qū)動(dòng)芯片TB6612
TB6612芯片的硬件電路:文章來源:http://www.zghlxwxcb.cn/news/detail-638375.html
文章來源地址http://www.zghlxwxcb.cn/news/detail-638375.html
?4.3 PWM模塊驅(qū)動(dòng)程序
#include "stm32f10x.h" // Device header
void PWM_Init(void)
{
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,ENABLE);
//GPIO復(fù)用
// TIM_InternalClockConfig(TIM2);
// RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);
// GPIO_PinRemapConfig(GPIO_PartialRemap1_TIM2,ENABLE);
// GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable,ENABLE);
TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStruct;
TIM_TimeBaseInitStruct.TIM_ClockDivision=TIM_CKD_DIV1;
TIM_TimeBaseInitStruct.TIM_CounterMode=TIM_CounterMode_Up;
TIM_TimeBaseInitStruct.TIM_Period=100-1;
TIM_TimeBaseInitStruct.TIM_Prescaler=36-1;
TIM_TimeBaseInitStruct.TIM_RepetitionCounter=0;
TIM_TimeBaseInit(TIM2,&TIM_TimeBaseInitStruct);
TIM_OCInitTypeDef TIM_OCInitStruct;
TIM_OCStructInit(&TIM_OCInitStruct);
TIM_OCInitStruct.TIM_OCMode=TIM_OCMode_PWM1;
TIM_OCInitStruct.TIM_OCPolarity=TIM_OCPolarity_High;
TIM_OCInitStruct.TIM_OutputState=TIM_OutputState_Enable;
TIM_OCInitStruct.TIM_Pulse=0;
TIM_OC2Init(TIM2,&TIM_OCInitStruct);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
GPIO_InitTypeDef GPIO_InitStruct;
GPIO_InitStruct.GPIO_Mode=GPIO_Mode_AF_PP;//復(fù)用推挽輸出
GPIO_InitStruct.GPIO_Pin=GPIO_Pin_1;
GPIO_InitStruct.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_Init(GPIOA,&GPIO_InitStruct);
TIM_Cmd(TIM2,ENABLE);
}
void TIM_SetCCR(uint16_t CCR)
{
TIM_SetCompare2(TIM2,CCR);
}
到了這里,關(guān)于STM32筆記——定時(shí)器輸出比較功能(產(chǎn)生PWM波)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!