1、為啥要學PWM
PWM 是 Pulse Width Modulation 的縮寫,中文意思就是脈沖寬度調制,簡稱脈寬調制。它是利用微處理器的數字輸出來對模擬電路進行控制的一種非常有效的技術,其控制簡單、靈活和動態響應好等優點而成為電力電子技術最廣泛應用的控制方式,其應用領域包括測量,通信,功率控制與變換,電動機控制、伺服控制、調光、開關電源,甚至某些音頻放大器,因此學習 PWM 具有十分重要的現實意義。
STM32F1 除了基本定時器 TIM6 和 TIM7,其他定時器都可以產生 PWM 輸出。其中高級定時器 TIM1 和 TIM8 可以同時產生多達 7 路的 PWM 輸出。而通用定時器也能同時產生多達 4 路的 PWM 輸出。
2、通用定時器 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;
/* 開啟時鐘 */
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);//復用功能重映射就需要開啟 AFIO 時鐘
/* 配置GPIO的模式和IO口 */
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_6;
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;//復用推挽輸出
GPIO_Init(GPIOC,&GPIO_InitStructure);
/*第一個參數是選擇是部分重映射還是完全重映射,因為映射到燈接到的GPIO才能看到呼吸效果*/
GPIO_PinRemapConfig(GPIO_FullRemap_TIM3,ENABLE);//改變指定管腳的映射
TIM_TimeBaseInitStructure.TIM_Period=per; //自動裝載值
TIM_TimeBaseInitStructure.TIM_Prescaler=psc; //分頻系數
TIM_TimeBaseInitStructure.TIM_ClockDivision=TIM_CKD_DIV1; //時鐘分頻
TIM_TimeBaseInitStructure.TIM_CounterMode=TIM_CounterMode_Up; //設置向上計數模式
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 上的預裝載寄存器
TIM_ARRPreloadConfig(TIM3,ENABLE);//使能預裝載寄存器
TIM_Cmd(TIM3,ENABLE); //使能定時器
}
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,因為ARR最大值是499.
delay_nms(10);//延遲是為了人眼能看到呼吸效果
}
}
3、測試驗證,實測可以達到初步效果,實驗完成,不同硬件環境需要自定義修改對應的代碼,方可實現對應效果。
--END--
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。
舉報投訴
-
PWM
+關注
關注
114文章
5201瀏覽量
214967 -
微處理器
+關注
關注
11文章
2274瀏覽量
82814 -
脈沖寬度調制
+關注
關注
7文章
81瀏覽量
13796
發布評論請先 登錄
相關推薦
STM32 PWM驅動舵機實驗
STM32 simulink驅動舵機效果如圖5.1所示,本次實驗用到的Simulink簡易模型如圖5.2所示,電路圖接法如圖5.3所示,YF-STM32-ALPHA開發板舵機接口位置如圖5.4所示
![<b class='flag-5'>STM32</b> <b class='flag-5'>PWM</b>驅動舵機<b class='flag-5'>實驗</b>](https://file1.elecfans.com/web2/M00/B3/8A/wKgZomVm9eGAWou_AFuu-YGxZEY092.jpg)
轉:基礎篇--STM32視頻 13.STM32 PWM輸出實驗
【眾想】大黃蜂STM32視頻教程 ----劉洋邊講邊寫基礎篇-- 13.STM32 PWM輸出實驗http://www.stmcu.org/module/forum/thread-6
發表于 07-14 16:56
基于STM32單片機進行PWM輸出實驗的詳細資料說明
本文檔的主要內容詳細介紹的是基于STM32單片機進行PWM輸出實驗的詳細資料說明包括了:1.通用定時器PWM概述,2.常用寄存器和庫函數配置,3.手把手寫
發表于 03-18 08:00
?18次下載
![基于<b class='flag-5'>STM32</b>單片機進行<b class='flag-5'>PWM</b>輸出<b class='flag-5'>實驗</b>的詳細資料說明](https://file.elecfans.com/web1/M00/8A/9F/pIYBAFyPEe6AIXe2AAFl8Gig0KA813.png)
使用STM32F103RB單片機實現PWM呼吸燈實驗的資料免費下載
本文檔的主要內容詳細介紹的是使用STM32F103RB單片機實現PWM呼吸燈實驗的資料免費下載。
發表于 04-07 08:00
?8次下載
![使用<b class='flag-5'>STM32</b>F103RB單片機實現<b class='flag-5'>PWM</b>呼吸燈<b class='flag-5'>實驗</b>的資料免費下載](https://file.elecfans.com/web1/M00/B9/DC/pIYBAF6MJSSAGbo8AAXLVUePbL4128.png)
STM32學習心得二十七:PWM DAC數模轉換實驗及PWM知識復習
記錄一下,方便以后翻閱~主要內容:1) PWM原理復習;2) DAC PWM數模轉換原理;3) 相關實驗代碼解讀。實驗功能:官方資料:《STM3
發表于 11-30 12:21
?11次下載
![<b class='flag-5'>STM32</b>學習心得二十七:<b class='flag-5'>PWM</b> DAC數模轉換<b class='flag-5'>實驗</b>及<b class='flag-5'>PWM</b>知識復習](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
STM32 使用PWM實現呼吸燈
STM32 PWM實現呼吸燈使用STM32F103ZET6 定時器4 CH2通道產生PWM波,在GPIOD,GPIO_PIN13引腳LED1產生呼吸燈效果。
發表于 12-24 19:41
?55次下載
![<b class='flag-5'>STM32</b> 使用<b class='flag-5'>PWM</b>實現呼吸燈](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
評論