日本黄色一级经典视频|伊人久久精品视频|亚洲黄色色周成人视频九九九|av免费网址黄色小短片|黄色Av无码亚洲成年人|亚洲1区2区3区无码|真人黄片免费观看|无码一级小说欧美日免费三级|日韩中文字幕91在线看|精品久久久无码中文字幕边打电话

當前位置:首頁 > 單片機 > 單片機
[導(dǎo)讀]一。 PWM簡介脈沖寬度調(diào)制(PWM),是英文“Pulse Width Modulation”的縮寫,簡稱脈寬調(diào)制,是利用微處理器的數(shù)字輸出來對模擬電路進行控制的一種非常有效的技術(shù)。簡單一點,就是對脈沖寬度的控制。STM32 的定時器除了

一。 PWM簡介

脈沖寬度調(diào)制(PWM),是英文“Pulse Width Modulation”的縮寫,簡稱脈寬調(diào)制,是利用微處理器的數(shù)字輸出來對模擬電路進行控制的一種非常有效的技術(shù)。簡單一點,就是對脈沖寬度的控制。

STM32 的定時器除了 TIM6 和 7。其他的定時器都可以用來產(chǎn)生 PWM 輸出。其中高級定時器 TIM1 和 TIM8 可以同時產(chǎn)生多達 7 路的 PWM 輸出。而通用定時器也能同時產(chǎn)生多達 4路的 PWM 輸出,這樣,STM32 最多可以同時產(chǎn)生 30 路 PWM 輸出。

這里我們僅利用TIM3的 CH2產(chǎn)生一路 PWM 輸出。




對于每個通道都有一個捕獲比較寄存器CCRx,CCRx中的值與計數(shù)器TIMx_CNT中的值進行比較。

PWM信號的周期由Arr的值以及計數(shù)器的頻率決定,占空比由CCRx中的值決定。

二。PWM模式


輸出模式控制器由CCMR1控制(以通道1為例)。

脈沖寬度調(diào)制模式可以產(chǎn)生一個由TIMx_ARR寄存器確定頻率、由TIMx_CCRx寄存器確定占空比的信號。



PWM模式1:

不管向上計數(shù)還是向下計數(shù),只要計數(shù)值CNTCC1P位決定的,設(shè)置為0是高電平有效,設(shè)置為1是電平有效。

在TIMx_CCMRx寄存器中的OCxM位寫入’110’(PWM模式1)或’111’(PWM模式2),能夠獨立地設(shè)置每個OCx輸出通道產(chǎn)生一路PWM。必須設(shè)置TIMx_CCMRx寄存器OCxPE位以使能相應(yīng)的預(yù)裝載寄存器,最后還要設(shè)置TIMx_CR1寄存器的ARPE位,(在向上計數(shù)或中心對稱模式中)使能自動重裝載的預(yù)裝載寄存器。

向上計數(shù)配置

當TIMx_CR1寄存器中的DIR位為低的時候執(zhí)行向上計數(shù)。

下面是一個PWM模式1的例子。TIMx_CCRx寄存器的值與計數(shù)器寄存器TIMx_CNT的值進行比較。



三。三個寄存器

1. 捕獲 / 比較模式寄存器(TIMx_CCMR1/2)


寄存器分了 2層,上面一層對應(yīng)輸出而下面的則對應(yīng)輸入。這里我們用PWM的輸出。

每個通用定時器有4個PWM通道,通道1和通道2用CCMR1配置,通道3和通道4用CCMR2配置,這里我們用的是CH2,所以用CCMR1配置。

OC1M[2:0]:輸出比較1模式

110:PWM模式1-不管向上計數(shù)還是向下計數(shù),一旦TIMx_CNT

111:PWM模式2- 在向上計數(shù)時,一旦TIMx_CNT>TIMx_CCR1時通道1為有效電平,否則為無效電平。

2.捕獲/比較使能寄存器(TIMx_CCER)

該寄存器控制著各個輸入輸出通道的開關(guān)。


這里只用到了 CC2E 位,該位是輸入/捕獲 2 輸出使能位,要想PWM 從 IO 口輸出,這個位必須設(shè)置為 1。

3.捕獲/比較寄存器(TIMx_CCR1~4)

該寄存器總共有 4 個,對應(yīng) 4 個輸通道 CH1~4。該寄存器中存儲著捕獲比較值CCRx。

在輸出模式下,該寄存器的值與 CNT 的值比較,根據(jù)比較結(jié)果產(chǎn)生相應(yīng)動作。利用這點,我們通過修改這個寄存器的值,就可以控制 PWM 的輸出脈寬了。

四。STM32的重映射

由于開發(fā)板上的LED燈是掛在PB5上,所以需要用部分重映射使PWM輸出在PB5上。

STM32 的重映射控制是由復(fù)用重映射和調(diào)試 IO 配置寄存器(AFIO_MAPR)控制的。


這里用到的是 TIM3 的重映射,從上圖可以看出, TIM3_REMAP 是由[11:10]這 2 個位控制的。TIM3_REMAP[1:0]重映射控制表如表所示:


默認條件下,TIM3_REMAP[1:0]為 00,是沒有重映射的,所以 TIM3_CH1~TIM3_CH4 分別是接在 PA6、PA7、PB0 和 PB1 上的,而我們想讓TIM3_CH2 映射到 PB5 上,則需要設(shè)置TIM3_REMAP[1:0]=10,即部分重映射,這里需要注意,此時 TIM3_CH1 也被映射到 PB4 上了。

五。使用庫函數(shù)配置PWM輸出的步驟



1)開啟 TIM3 時鐘以及復(fù)用功能時鐘,配置 PB5 為復(fù)用推挽輸出。

RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE); //使能定時器 3 時鐘

RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE); //復(fù)用時鐘使能

設(shè)置 PB5 為復(fù)用功能輸出的方法在前面的幾個實驗都有類似的講解,相信大家很明白,這里簡單列出 GPIO 初始化的一行代碼即可:

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //復(fù)用推挽輸出



2)設(shè)置 TIM3_CH2 重映射到 PB5 上。

void GPIO_PinRemapConfig(uint32_t GPIO_Remap, FunctionalState NewState);

TIM3 部分重映射的庫函數(shù)實現(xiàn)方法是:

GPIO_PinRemapConfig(GPIO_PartialRemap_TIM3, ENABLE);

3)初始化 TIM3,設(shè)置 TIM3 的 ARR 和 PSC。

在開啟了 TIM3 的時鐘之后,我們要設(shè)置 ARR 和 PSC 兩個寄存器的值來控制輸出 PWM 的周期。當 PWM 周期太慢(低于 50Hz)的時候,我們就會明顯感覺到閃爍了。因此,PWM 周期在這里不宜設(shè)置的太小。

4)設(shè)置 TIM3_CH2 的 PWM 模式,使能 TIM3 的 CH2 輸出。


設(shè)置PWM輸出只需要設(shè)置紅色的部分。

在庫函數(shù)中,PWM 通道設(shè)置是通過函數(shù)TIM_OC1Init()~TIM_OC4Init()來設(shè)置的, 不同的通道的設(shè)置函數(shù)不一樣, 這里我們使用的是通道 2,所以使用的函數(shù)是 TIM_OC2Init()。

void TIM_OC2Init(TIM_TypeDef* TIMx, TIM_OCInitTypeDef* TIM_OCInitStruct);

TIM_OCInitTypeDef TIM_OCInitStructure;

TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2; //選擇 PWM 模式 2

TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; //比較輸出使能

TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; //輸出極性高

TIM_OC2Init(TIM3, &TIM_OCInitStructure); //初始化 TIM3 OC2

5)使能 TIM3。

先要使能TIM3在CCR2上的預(yù)裝載寄存器

TIM_OC2PreloadConfig(TIM3, TIM_OCPreload_Enable);

TIM_Cmd(TIM3, ENABLE); //使能 TIM3

6)修改 TIM3_CCR2 來控制占空比。

實際上就是修改CCRx寄存器的值。通過修改 TIM3_CCR2 則可以控制 CH2 的輸出占空比。繼而控制 DS0 的亮度。

修改 TIM3_CCR2 占空比的函數(shù)是:

void TIM_SetCompare2(TIM_TypeDef* TIMx, uint16_t Compare2);


本站聲明: 本文章由作者或相關(guān)機構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內(nèi)容真實性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時聯(lián)系本站刪除( 郵箱:macysun@21ic.com )。
換一批
延伸閱讀

嵌入式系統(tǒng)的算法效率與硬件資源的平衡是核心挑戰(zhàn)。STM32微控制器通過零開銷循環(huán)機制與DWT計數(shù)器的結(jié)合,為算法優(yōu)化提供了硬件級支持。本文以插入排序算法為例,探討如何利用STM32的硬件特性驗證排序閾值,實現(xiàn)性能與代碼復(fù)...

關(guān)鍵字: STM32 DWT

智能家居與工業(yè)控制場景,手勢識別作為非接觸式交互的核心技術(shù),正從實驗室走向消費級應(yīng)用。以STM32F407VET6微控制器與TensorFlow Lite Micro框架的組合為例,通過模型量化、硬件加速與低功耗設(shè)計,可...

關(guān)鍵字: STM32 TensorFlow

在高性能電機驅(qū)動的“納秒級戰(zhàn)爭”中,浮點運算單元(FPU)往往成為制約控制環(huán)帶寬的阿喀琉斯之踵。當PWM載波頻率攀升至100kHz,留給電流環(huán)PID、Clarke/Park變換及SVPWM計算的時間窗口僅剩寥寥數(shù)微秒。此...

關(guān)鍵字: 電機控制算法 FOC磁場 STM32

在工業(yè)控制、電機驅(qū)動等實時性要求嚴苛的場景中,中斷響應(yīng)延遲直接影響系統(tǒng)精度與穩(wěn)定性。STM32系列微控制器憑借Cortex-M內(nèi)核的硬件特性,通過合理的系統(tǒng)架構(gòu)設(shè)計可實現(xiàn)微秒級中斷響應(yīng)。本文從硬件配置、中斷處理、代碼優(yōu)化...

關(guān)鍵字: 裸機開發(fā) STM32

在工業(yè)控制、音頻處理等高性能嵌入式場景中,某電機驅(qū)動項目通過混合使用寄存器操作與CMSIS-DSP庫,將PID控制周期從120μs縮短至38μs,系統(tǒng)響應(yīng)速度提升3倍。本文將揭秘這種"底層+高層"混合編程模式的核心技巧。

關(guān)鍵字: HAL STM32 寄存器

嵌入式系統(tǒng)開發(fā)手勢識別作為非接觸式人機交互的核心技術(shù),正從實驗室走向消費級應(yīng)用。然而,傳感器采集的原始信號常因電磁干擾、電源噪聲或機械抖動產(chǎn)生失真,導(dǎo)致識別準確率下降。本文以STM32微控制器與PAJ7620手勢識別傳感...

關(guān)鍵字: STM32 手勢識別 噪聲

在物聯(lián)網(wǎng)設(shè)備開發(fā)中,快速實現(xiàn)穩(wěn)定可靠的網(wǎng)絡(luò)通信是項目成功的關(guān)鍵。W5500作為一款集成硬件TCP/IP協(xié)議棧的以太網(wǎng)控制器,憑借其"開箱即用"的特性,可大幅縮短STM32平臺的網(wǎng)絡(luò)功能開發(fā)周期。本文通...

關(guān)鍵字: STM32 W5500

工業(yè)物聯(lián)網(wǎng)設(shè)備開發(fā)中,某智能電表項目曾因ADC采樣中斷響應(yīng)延遲導(dǎo)致數(shù)據(jù)丟失率高達15%。技術(shù)人員通過重構(gòu)DMA驅(qū)動架構(gòu),將數(shù)據(jù)搬運效率提升12倍,CPU占用率從38%降至3%,成功解決高速采樣場景下的實時性難題。這一案例...

關(guān)鍵字: STM32 DMA

工業(yè)機器人關(guān)節(jié)控制系統(tǒng)中,一個典型的伺服驅(qū)動器需要在100μs周期內(nèi)完成電流采樣、位置反饋、PID計算和PWM輸出等12項關(guān)鍵任務(wù)。當傳統(tǒng)固定優(yōu)先級調(diào)度導(dǎo)致機械臂出現(xiàn)0.3°的位置抖動時,某運動控制廠商通過引入混合排序算...

關(guān)鍵字: 電機控制 STM32

在STM32嵌入式系統(tǒng)開發(fā)中,排序算法的效率直接影響傳感器數(shù)據(jù)處理、通信協(xié)議解析等核心任務(wù)的實時性。傳統(tǒng)快速排序在部分有序數(shù)據(jù)場景下易退化為O(n2)時間復(fù)雜度,而單純依賴三數(shù)取中法優(yōu)化基準值選擇仍存在小規(guī)模數(shù)據(jù)效率不足...

關(guān)鍵字: STM32 傳感器
關(guān)閉