1、為啥要學(xué)PWM
PWM 是 Pulse Width Modulation 的縮寫,中文意思就是脈沖寬度調(diào)制,簡稱脈寬調(diào)制。它是利用微處理器的數(shù)字輸出來對(duì)模擬電路進(jìn)行控制的一種非常有效的技術(shù),其控制簡單、靈活和動(dòng)態(tài)響應(yīng)好等優(yōu)點(diǎn)而成為電力電子技術(shù)最廣泛應(yīng)用的控制方式,其應(yīng)用領(lǐng)域包括測(cè)量,通信,功率控制與變換,電動(dòng)機(jī)控制、伺服控制、調(diào)光、開關(guān)電源,甚至某些音頻放大器,因此學(xué)習(xí) PWM 具有十分重要的現(xiàn)實(shí)意義。
STM32F1 除了基本定時(shí)器 TIM6 和 TIM7,其他定時(shí)器都可以產(chǎn)生 PWM 輸出。其中高級(jí)定時(shí)器 TIM1 和 TIM8 可以同時(shí)產(chǎn)生多達(dá) 7 路的 PWM 輸出。而通用定時(shí)器也能同時(shí)產(chǎn)生多達(dá) 4 路的 PWM 輸出。
2、通用定時(shí)器 PWM 輸出配置
#include "stm32f10x.h"
void TIM3_CH1_PWM_Init(u16 per,u16 psc)
{
TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure;
TIM_OCInitTypeDef TIM_OCInitStructure;
GPIO_InitTypeDef GPIO_InitStructure;
/* 開啟時(shí)鐘 */
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);//復(fù)用功能重映射就需要開啟 AFIO 時(shí)鐘
/* 配置GPIO的模式和IO口 */
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_6;
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;//復(fù)用推挽輸出
GPIO_Init(GPIOC,&GPIO_InitStructure);
/*第一個(gè)參數(shù)是選擇是部分重映射還是完全重映射,因?yàn)橛成涞綗艚拥降腉PIO才能看到呼吸效果*/
GPIO_PinRemapConfig(GPIO_FullRemap_TIM3,ENABLE);//改變指定管腳的映射
TIM_TimeBaseInitStructure.TIM_Period=per; //自動(dòng)裝載值
TIM_TimeBaseInitStructure.TIM_Prescaler=psc; //分頻系數(shù)
TIM_TimeBaseInitStructure.TIM_ClockDivision=TIM_CKD_DIV1; //時(shí)鐘分頻
TIM_TimeBaseInitStructure.TIM_CounterMode=TIM_CounterMode_Up; //設(shè)置向上計(jì)數(shù)模式
TIM_TimeBaseInit(TIM3,&TIM_TimeBaseInitStructure);
TIM_OCInitStructure.TIM_OCMode=TIM_OCMode_PWM1;//比較輸出模式選擇
TIM_OCInitStructure.TIM_OCPolarity=TIM_OCPolarity_Low;//輸出極性
TIM_OCInitStructure.TIM_OutputState=TIM_OutputState_Enable;//比較輸出使能
TIM_OC1Init(TIM3,&TIM_OCInitStructure); //輸出比較通道1初始化
TIM_OC1PreloadConfig(TIM3,TIM_OCPreload_Enable); //使能TIMx在 CCR1 上的預(yù)裝載寄存器
TIM_ARRPreloadConfig(TIM3,ENABLE);//使能預(yù)裝載寄存器
TIM_Cmd(TIM3,ENABLE); //使能定時(shí)器
}
void delay_nms(u16 time)
{
u16 i=0;
while(time--)
{
i=12000; //自己定義
while(i--) ;
}
}
int main( void )
{
u16 i=0;
u8 fx=0;
TIM3_CH1_PWM_Init(500,72-1); //頻率是2Kh
while(1)
{
if(fx==0)
{
i++;
if(i==300)
{
fx=1;
}
}
else
{
i--;
if(i==0)
{
fx=0;
}
}
/*修改 TIMx_CCRx 的值控制占空比*/
TIM_SetCompare1(TIM3,i); //i值最大可以取499,因?yàn)锳RR最大值是499.
delay_nms(10);//延遲是為了人眼能看到呼吸效果
}
}
3、測(cè)試驗(yàn)證,實(shí)測(cè)可以達(dá)到初步效果,實(shí)驗(yàn)完成,不同硬件環(huán)境需要自定義修改對(duì)應(yīng)的代碼,方可實(shí)現(xiàn)對(duì)應(yīng)效果。
--END--
-
PWM
+關(guān)注
關(guān)注
114文章
5186瀏覽量
213956 -
微處理器
+關(guān)注
關(guān)注
11文章
2263瀏覽量
82457 -
脈沖寬度調(diào)制
+關(guān)注
關(guān)注
7文章
81瀏覽量
13727
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論