色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
电子发烧友
开通电子发烧友VIP会员 尊享10大特权
海量资料免费下载
精品直播免费看
优质内容免费畅学
课程9折专享价
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

如何通過STM32的定時器輸出PWM?

GReq_mcu168 ? 來源:玩轉單片機 ? 作者:玩轉單片機 ? 2021-02-20 15:08 ? 次閱讀

本文將介紹通過STM32定時器輸出PWM,如果對定時器不太熟悉的同學可以看下之前的文章《STM32基礎定時器詳解》,關于定時器的基礎功能不再詳解。

01 PWM介紹

PWM定義:脈沖寬度調制(PulseWidthModulation,PWM)簡稱脈寬調制。通俗講,PWM是一種對模擬信號電平進行數字編碼的方法。通過高分辨率計數器的使用,方波的占空比被調制用來對一個具體模擬信號的電平進行編碼。PWM信號仍然是數字的,因為在給定的任何時刻,滿幅值的直流供電要么完全有(ON),要么完全無(OFF)。電壓或電流源是以一種通(ON)或斷(OFF)的重復脈沖序列被加到模擬負載上去的。通的時候即是直流供電被加到負載上的時候,斷的時候即是供電被斷開的時候。只要帶寬足夠,任何模擬值都可以使用PWM進行編碼。

占空比定義:占空比就是高電平所占整個周期的時間,如下圖所示:

95afdcb2-71b8-11eb-8b86-12bb97331649.png

第一個PWM波,周期為10ms,高電平的時間為4ms,所以占空比為40%,同理第二個PWM波為60%,第三個為80%。

PWM的頻率:PWM的頻率的整個周期的倒數,所以說上圖PWM的周期為1/0.01,也就是100HZ。改變PWM的頻率是通過改變整個的周期實現的。所以通過改變高低電平總共的時間、改變高電平占總周期的比例就可以實現任意頻率、任意占空比的PWM波。

PWM的用途和優點:電機調速、功率調制、PID調節、通信等等,配置簡單、抗干擾能力強,從處理器到被控系統信號都是數字形式的,無需進行數模轉換。并且讓信號保持為數字形式可將噪聲影響降到最小,噪聲只有在強到足以將邏輯1改變為邏輯0或將邏輯0改變為邏輯1時,也才能對數字信號產生影響,這是PWM用于通信的主要原因。

02 STM32的管腳復用

STM32沒有專門的PWM引腳,所以使用IO口的復用模式。首先確認PWM功能的輸出管腳,使用定時器9。從下面的框圖中得知,timer9只有兩個輸出通道,所以timer9只能輸出兩路PWM。

95e68672-71b8-11eb-8b86-12bb97331649.png

在STM32F207數據手冊中的Alternatefunction mapping圖片中,timer9的兩個通道分別可以復用為PA2,PA3,PE5和PE6。

96411fa6-71b8-11eb-8b86-12bb97331649.png

03 STM32輸出PWM原理

下圖中的①部分,在《STM32基礎定時器詳解》講解過了,關于影子寄存器,也在《STM32影子寄存器》中講述,下文不再贅述了。本文將重點在②部分,捕獲/對比通道講解,其中STM32的PWM就是利用對比通道實現的。

969111aa-71b8-11eb-8b86-12bb97331649.png

Pulse Width Modulation mode allows you to generate a signal with afrequency determined by the value of the TIMx_ARR register and a dutycycle determined by the value of the TIMx_CCRx register。 節選自STM32F207 Reference manual手冊

脈沖寬度調制模式可以生成一個信號,該信號頻率由TIMx_ARR 寄存器值決定,其占空比則由TIMx_CCRx 寄存器值決定。

從下圖可以看出,當CCR寄存器和CNT計數器數值一樣時,會產生動作(改變通道對應的GPIO電平)。由于CNT溢出時,重載值由TIMx_ARR寄存器值決定的。所以說TIMx_ARR寄存器值決定周期,而TIMx_CCRx寄存器值決定CNT溢出時,經過多久會產生動作(改變通道對應的GPIO電平),也就是決定了占空比。

96f613de-71b8-11eb-8b86-12bb97331649.png

以向上計數為例,重載值為ARR,比較值為CRRx

9738d9d0-71b8-11eb-8b86-12bb97331649.png

上圖可以看出:

0-t1段,定時器計數器TIMx_CNT值小于CCRx值,輸出低電平。

t1-t2段,定時器計數器TIMx_CNT值大于CCRx值,輸出高電平。

當TIMx_CNT值達到ARR時,定時器溢出,重新向上計數...循環此過程至此一個PWM周期完成。

上圖更加形象的說明了

信號頻率由TIMx_ARR 寄存器值決定。

占空比則由TIMx_CCRx 寄存器值決定。

STM32輸出PWM的過程:

1、首先配置GPIO,配置定時器,具體參考一下代碼。定時器配置參考《STM32基礎定時器詳解》。

2、捕獲/比較通道使能比較通道。

977125f6-71b8-11eb-8b86-12bb97331649.png

上圖看到,①寄存器名字為:Capture/Compare1register??梢赃x擇從②處輸入捕獲,也可以選擇從從③中輸出,也就是我們需要的PWM輸出功能。選擇捕獲通道,還是選擇比較通道,在框圖中沒有找到具體的說明,但在TIMx_CCMR1寄存器CC1S[1:0]控制位使能。

97b8c3c0-71b8-11eb-8b86-12bb97331649.png

3、使能完輸出,就要配置PWM輸出了

a78b464c-71b8-11eb-8b86-12bb97331649.png

①TIMx_CCMR1寄存器的OC1M[2:0]位,設置輸出模式控制器

110:PWM模式1,111:PWM模式2。

②計數器值TIMx_CNT與通道1捕獲比較寄存器CCR1進行比較,通過比較結果輸出有效電平和無效電平。

OC1REF=0 無效電平,OC1REF=1無效電平。

③通過輸出模式控制器產生的信號。TIMx_CCER寄存器的CC1P位,設置輸入/捕獲通道1輸出極性。

0:高電平有效,1:低電平有效。

④TIMx_CCER:CC1E位控制輸出使能電路,信號由此輸出到對應引腳。

0:關閉,1:打開。

首先對PWM模式1和PWM模式2進行介紹:

01 模式1

在向上計數時,一旦TIMx_CNTTIMx_CCR1時通道1為無效電平(OC1REF=0),否則為有效電平(OC1REF=1)。

02 模式2

在向上計數時,一旦TIMx_CNTTIMx_CCR1時通道1為有效電平,否則為無效電平。

TIMx_CNT>TIMx_CCR1時通道1為有效電平,否則為無效電平。

PWM輸出高低電平由TIMx_CCMR1:OC1M位和TIMx_CCER:CC1P位共同決定。

總結下來:

模式1:

CNT

CNT>CCR為無效電平//(OC1REF =0)

模式2:

CNT

CNT>CCR為有效電平//(OC1REF =1)

CC1P:

0:高電平有效

1:低電平有效

04 STM32輸出PWM配置

分析了原理,那么下面就分析STM32生成PWM的過程。

1、首先要將GPIO設置為復用輸出

/* GPIOE clock enable */RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOE,ENABLE); /* GPIOE Configuration: TIM9 CH2(PE6)*/GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5 |GPIO_Pin_6;GPIO_InitStructure.GPIO_Mode =GPIO_Mode_AF;GPIO_InitStructure.GPIO_Speed =GPIO_Speed_100MHz;GPIO_InitStructure.GPIO_OType =GPIO_OType_PP;GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;GPIO_Init(GPIOE, &GPIO_InitStructure); /*Connect TIM9 pins to AF3 */ GPIO_PinAFConfig(GPIOE,GPIO_PinSource5, GPIO_AF_TIM9);GPIO_PinAFConfig(GPIOE,GPIO_PinSource6, GPIO_AF_TIM9);

2、配置定時器向上計數,配置定時器頻率

/* TIM9 clock enable */RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM9,ENABLE); /* Compute the prescaler value */PrescalerValue= (uint16_t) ((SystemCoreClock) / 2000000) - 1; /* Timebase configuration */TIM_TimeBaseStructure.TIM_Period =1000-1;TIM_TimeBaseStructure.TIM_Prescaler =PrescalerValue;TIM_TimeBaseStructure.TIM_ClockDivision =0;TIM_TimeBaseStructure.TIM_CounterMode =TIM_CounterMode_Up; TIM_TimeBaseInit(TIM9,&TIM_TimeBaseStructure);3、配置PWM輸出 上面分析過程較為麻煩,ST提供了標準外設庫,我們只需要配置TIM_OCInitTypeDef結構體即可。

TIM_OCInitTypeDef TIM_OCInitStructure; /* PWM Modeconfiguration: Channel1 */TIM_OCInitStructure.TIM_OCMode =TIM_OCMode_PWM1;TIM_OCInitStructure.TIM_OutputState =TIM_OutputState_Enable;TIM_OCInitStructure.TIM_Pulse =100-1;TIM_OCInitStructure.TIM_OCPolarity =TIM_OCPolarity_High; TIM_OC1Init(TIM9,&TIM_OCInitStructure);TIM_OC1PreloadConfig(TIM9,TIM_OCPreload_Enable);

TIM_OCInitTypeDef結構體解析

typedef struct{ uint16_t TIM_OCMode; //PWM模式1或者模式2 uint16_t TIM_OutputState; // 輸出使能OR失能 uint16_t TIM_OutputNState; // PWM輸出不需要 uint32_t TIM_Pulse; // 比較值 uint16_t TIM_OCPolarity;// 比較輸出極性 uint16_t TIM_OCNPolarity; // PWM輸出不需要 uint16_t TIM_OCIdleState;// PWM輸出不需要 uint16_t TIM_OCNIdleState; // PWM輸出不需要}TIM_OCInitTypeDef;

其中TIM_Pulse可以在初始化時設置,設置完畢后,也可以通過以下接口再次更新。

void TIM_SetCompare1(TIM_TypeDef* TIMx, uint32_t Compare1)

4、使能定時器

TIM_ARRPreloadConfig(TIM9, ENABLE); /* TIM9 enable counter*/TIM_Cmd(TIM9,ENABLE);

使用timer9輸出PWM的波形。

原文標題:STM32 PWM輸出

文章出處:【微信公眾號:玩轉單片機】歡迎添加關注!文章轉載請注明出處。

責任編輯:haq

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • PWM
    PWM
    +關注

    關注

    116

    文章

    5369

    瀏覽量

    218044
  • STM32
    +關注

    關注

    2289

    文章

    11011

    瀏覽量

    362356
  • 定時器
    +關注

    關注

    23

    文章

    3287

    瀏覽量

    117205

原文標題:STM32 PWM輸出

文章出處:【微信號:mcu168,微信公眾號:硬件攻城獅】歡迎添加關注!文章轉載請注明出處。

收藏 2人收藏

    評論

    相關推薦
    熱點推薦

    MCU定時器/計數

    架構與功能特性? 定時器類型與配置? 高級控制定時器?:支持互補PWM輸出與剎車功能,適用于電機驅動等高精度控制場景。通用定時器?:集成輸入
    的頭像 發表于 04-27 13:54 ?165次閱讀

    使用stm32f405做6步pwm輸出時,定時器配置由強制輸出轉為pwm,com觸發后會有延遲生效的現象,怎么解決?

    我在使用stm32f405做6步pwm輸出時發現,定時器的配置由pwm改為強制輸出后會在com觸
    發表于 03-13 07:24

    如何使用定時器在任意IO輸出PWM

    在CubeMx內的配置,計劃在PA2口輸出PWM控制風機,但是TIM2已經初始化做輸入捕獲用了,因此需要用到別的未使用的定時器在PA2口輸出PWM
    發表于 03-13 06:04

    stm32同一個定時器不同的通道,可以不同時的輸出pwm波形嗎?

    請問,stm32的同一個定時器,不同的通道,可以不同時的輸出pwm波形嗎?比如tim1的ch1輸出,延時幾毫秒后tim1的ch2
    發表于 03-07 08:20

    詳解CKS32F107xx系列的定時器同步功能

    我們將圍繞定時器同步功能概述展開,并以其中一種功能為例——將定時器2給定時器3當預分頻,最終級聯同步PWM
    的頭像 發表于 11-26 17:51 ?942次閱讀
    詳解CKS32F107xx系列的<b class='flag-5'>定時器</b>同步功能

    高級定時器PWM輸入模式的配置方法

    我們將向大家介紹高級定時器的另一個常見應用——PWM輸入模式。在本節課中,我們將先圍繞輸入捕獲模式展開,并重點描述PWM輸入模式和涉及的寄存,最后
    的頭像 發表于 11-08 16:48 ?4049次閱讀
    高級<b class='flag-5'>定時器</b><b class='flag-5'>PWM</b>輸入模式的配置方法

    PWM輸出配置方法

    從上節課的定時器分類圖中我們了解到,互補輸出是高級定時器(TIM1、TIM8)所獨有的,它可以輸出兩路互補信號。而在本節課中我們將通過一個簡
    的頭像 發表于 11-04 09:44 ?2629次閱讀
    <b class='flag-5'>PWM</b><b class='flag-5'>輸出</b>配置方法

    使用MSP430高分辨率定時器PWM DAC

    電子發燒友網站提供《使用MSP430高分辨率定時器PWM DAC.pdf》資料免費下載
    發表于 09-20 10:53 ?0次下載
    使用MSP430高分辨率<b class='flag-5'>定時器</b>的<b class='flag-5'>PWM</b> DAC

    定時器自動控制開關怎么設置

    定時器自動控制開關是一種常見的自動化設備,廣泛應用于家庭、工業、農業等多個領域。通過定時器,用戶可以預設時間,讓設備在特定時間自動開啟或關閉,從而實現節能、提高效率和便利性。 一、
    的頭像 發表于 09-19 16:19 ?3468次閱讀

    GD32E230C8T6高級定時器timer0無法正常輸出PWM波形的原因?

    原本想用高級定時器的中央對齊計數模式來輸出SPWM波,但是TIMER0的CH0,CH1等口,都無法正常輸出PWM波形,換成普通定時器就可以了
    發表于 07-26 06:34

    請問如何使用定時器在任意IO輸出PWM

    問題描述: 在CubeMx內的配置,計劃在PA2口輸出PWM控制風機,但是TIM2已經初始化做輸入捕獲用了,因此需要用到別的未使用的定時器在PA2口輸出
    發表于 07-24 06:38

    定時器的工作方式介紹

    或實現周期性事件的硬件模塊。它可以用于實現各種定時任務,如定時中斷、PWM(脈沖寬度調制)輸出、頻率測量等。定時器通常由一個計數
    的頭像 發表于 07-12 10:29 ?1702次閱讀

    定時器相關的寄存有哪些類型

    在微控制編程中,定時器是一種非常常見的功能模塊,用于實現各種定時和計數功能。定時器的工作原理是通過內部的計數
    的頭像 發表于 07-12 10:25 ?1525次閱讀

    STM32G4系列芯片定時器的延時輸出問題

    有人使用STM32G4系列芯片內部的多個定時器PWM輸出,輸出頻率一樣,占空比也一樣,均為50%。可是,當他中途調整各個
    的頭像 發表于 07-01 09:45 ?2489次閱讀
    <b class='flag-5'>STM32</b>G4系列芯片<b class='flag-5'>定時器</b>的延時<b class='flag-5'>輸出</b>問題

    鴻蒙開發系統基礎能力:Timer定時器

    設置一個定時器,該定時器定時器到期后執行一個函數。
    的頭像 發表于 06-28 11:33 ?1364次閱讀
    鴻蒙開發系統基礎能力:Timer<b class='flag-5'>定時器</b>
    主站蜘蛛池模板: 成年免费三级视频 | 久久精品亚洲牛牛影视 | 被肉日常np快穿高h 被肉日常np高h | 97成人碰碰在线人妻少妇 | 亚州免费一级毛片 | 四虎国产精品高清在线观看 | 亚洲三级在线视频 | 久久免费看少妇高潮A片JA | 老外的好大c的我好爽 | 无码人妻精品国产婷婷 | 香蕉免费高清完整 | 国产99在线视频 | 久久88综合| 秋霞影院福利电影 | 一二三区乱码不卡手机版 | 性欧美金发洋妞xxxxbbbb | 亚洲精品久久久无码一区二区 | 亚洲欧美高清在线精品一区 | 美女教师朝桐光在线播放 | 跳蛋按摩棒玉势PLAY高H | 成人bt下载 | 高清无码中文字幕在线观看视频 | 亚州性夜夜射在线观看 | 亚洲精品123区 | 中文字幕精品AV内射夜夜夜 | 午夜理论片YY4399影院 | 把手戳进美女尿口里动态图 | 国产亚洲日韩另类在线观看 | 富婆大保健嗷嗷叫普通话对白 | 成人免费精品视频 | 樱桃bt在线www | 兽交白浆喷水高潮 | 欧美中文字幕一区二区三区 | 解开美女胸衣2破解版 | 高清国产在线观看 | 国产精品综合AV一区二区国产馆 | 中文字幕一区二区视频 | 国产女人乱人伦精品一区二区 | 香蕉久久av一区二区三区 | 伊人久久大香线蕉资源 | 国产亚洲福利在线视频 |

    電子發燒友

    中國電子工程師最喜歡的網站

    • 2931785位工程師會員交流學習
    • 獲取您個性化的科技前沿技術信息
    • 參加活動獲取豐厚的禮品