性无码一区二区三区在线观看,少妇被爽到高潮在线观看,午夜精品一区二区三区,无码中文字幕人妻在线一区二区三区,无码精品国产一区二区三区免费

小麥大叔
認(rèn)證:普通會員
所在專題目錄 查看專題
新手零基礎(chǔ)如何快速入門單片機
基于STM32的hello world點燈教程
STM32 使用st-link調(diào)試遇到寫保護(hù) Flash Timeout 問題的解決思路
天哪!原來PWM這么簡單
小小舵機,大大玄機
UART協(xié)議快速掃盲(圖文并茂+超詳細(xì))
作者動態(tài) 更多
一款輕量級的開源GUI項目——SimpleGUI,可以完美適配單色屏
02-22 09:47
看到這100多個軟硬件開源項目,真是爽爆了
2024-11-30 14:12
推薦一個高效,可靠,安全的串口通訊開源方案
2024-11-27 11:17
推薦一款開源hack硬件平臺工具
2024-11-26 13:58
新手學(xué)STM32的話,先學(xué)標(biāo)準(zhǔn)庫還是HAL庫?
2024-10-18 15:09

天哪!原來PWM這么簡單

本文將帶你了解PWM。我們將學(xué)習(xí)PWM的基本原理與分類,PWM如何實現(xiàn),以及程序?qū)崿F(xiàn)。如果覺得不錯,歡迎關(guān)注、分享、收藏、點贊。希望能幫助到大家,如有錯誤敬請指出,謝謝!

目錄

  • 基本原理
  • PWM是如何實現(xiàn)?
  • 分類
  • 程序?qū)崿F(xiàn)
  • 總結(jié)

一、基本原理

PWM的全稱是脈沖寬度調(diào)制Pulse-width modulation),是通過將有效的電信號分散成離散形式從而來降低電信號所傳遞的平均功率的一種方式。

所以根據(jù)面積等效法則,可以通過對改變脈沖的時間寬度,來等效的獲得所需要合成的相應(yīng)幅值頻率的波形。

具體如下圖所示:

由上圖可知,脈沖寬度調(diào)制使用一個脈沖寬度會被調(diào)制的方波,并且波型的平均值會有所變化。

因為不支持自動解析latex公式,又不想重新敲公式,下面文字我直接復(fù)制為圖片了;

占空比

圖中存在三種占空比狀態(tài),25%,50%75%占空比狀態(tài),不難發(fā)現(xiàn),假設(shè)占空比為D,則滿足:

                                   

其中是PWM的周期,通常和載波的周期相同;

二、PWM是如何實現(xiàn)?

PWM實現(xiàn)的原理是通過鋸齒波/三角波(載波)所需要合成的波形(調(diào)制波)進(jìn)行比較,然后確定PWM所需要輸出的極性,通常是ON或者是OFF,因為一般都是作用到開關(guān)元器件上;如下圖所示;

振蕩器和比較器

振蕩器輸出的鋸齒波和參考值 進(jìn)行比較,然后就可以輸出PWM波形了;

matlabsimulink中搭建了一下仿真,具體如下圖所示;

simulink

最終輸出波形如下:

50%占空比

這里簡單說明一下:

  • 鋸齒波(圖中橙色波形)最大為10,然后我希望輸出平均為5的波形(圖1中紅色的水平直線);
  • 那么通過比較,當(dāng)鋸齒波小于5時;PWM輸出低電平,即為OFF;
  • 當(dāng)鋸齒波大于5時,PWM輸出高電平,即為ON;

所以再換一個思路,如果我希望輸出一個電壓逐漸升高的波形呢,該如何設(shè)計呢?

其實很簡單,只要把需要調(diào)制的波形設(shè)置為斜坡輸出的波形就可以了,具體如下圖所示;

占空比逐漸增大

可以看到,最終占空比逐漸從0%增大到100%

然后我們繼續(xù)想,能不能調(diào)制出其他的波形,比如調(diào)制一個正弦波sin wave,那也就是我們常說的SPWM,其實是可以的,具體如下圖所示;

SPWM

三、分類

參考STM32中PWM的配置,根據(jù)載波波形的形狀,假設(shè)三角波最大值是10,那么它的變化過程可能存在以下兩種情況:

  • 完整周期包括兩個過程,先遞增,再遞減:增加增加減少減少,這種也叫中央對齊PWM;
  • 完整周期只有遞增過程:增加增加

中央對齊PWM

脈沖波的中心將會被固定在時間窗格的中心,同時脈沖波的兩邊可以移動,使得波的寬度被延伸或壓縮,具體如下圖所示;

         中央對齊PWM

另一種類型的PWM脈沖波形如下圖所示;

四、程序?qū)崿F(xiàn)

現(xiàn)在的MCU大部分都自帶硬件PWM發(fā)生器,即配置好相應(yīng)的寄存器,就能直接產(chǎn)生PWM,下面的例子基于NUCLEO-F767ZI,通過cubemx配置了三路PWM輸出,然后實現(xiàn)了呼吸燈的效果;

int main(void)
{

	HAL_Init();

	MX_GPIO_Init();
	MX_TIM4_Init();
	MX_TIM3_Init();
	MX_TIM12_Init();

	int32_t time_stamp = 0;
	int32_t time_stamp_old = 0;
	int32_t ccr_val = 0;
	uint8_t add_flag = 1;
	HAL_TIM_PWM_Start(&htim4, TIM_CHANNEL_2);
	HAL_TIM_PWM_Start(&htim12, TIM_CHANNEL_1);
	HAL_TIM_PWM_Start(&htim3, TIM_CHANNEL_3);	
	while (1)
	{
		time_stamp = HAL_GetTick();
		if(time_stamp - time_stamp_old > 5){
		time_stamp_old = time_stamp;
		if(add_flag){
			ccr_val+=25;
			if(ccr_val >= 0xFFFF){
			ccr_val = 0xFFFF;
			add_flag = 0;
		}
		}else{
			ccr_val-=25;
			if(ccr_val <= 0){
				add_flag = 1;
				ccr_val = 0;
			}
		}
		TIM4->CCR2 = ccr_val;
		TIM12->CCR1 = ccr_val;
		TIM3->CCR3 = ccr_val;
		}
	}
}

整體效果如下:

呼吸燈

通過示波器看其中的一路PWM輸出的占空比也是隨時間變化;

PWM變化情況

五、總結(jié)

本文簡單介紹了PWM的原理,以及如何產(chǎn)生PWM,可以通過鋸齒波作為載波和調(diào)制波經(jīng)過比較強,產(chǎn)生相應(yīng)的PWM輸出波形,最后結(jié)合STM32實現(xiàn)了一個呼吸燈的簡單程序。


聲明:本內(nèi)容為作者獨立觀點,不代表電子星球立場。未經(jīng)允許不得轉(zhuǎn)載。授權(quán)事宜與稿件投訴,請聯(lián)系:editor@netbroad.com
本篇所含全部資料,點擊此處留下郵箱我會發(fā)給你
資料明細(xì):NUCLEO-F767ZI的PWM呼吸燈測試程序
覺得內(nèi)容不錯的朋友,別忘了一鍵三連哦!
贊 2
收藏 9
關(guān)注 144
成為作者 賺取收益
全部留言
0/200
  • stevendo 2021-11-04 13:35
    老師,能不能發(fā)我一下資料,謝謝! 25****@****.com
    回復(fù) 4條回復(fù)
  • xjin1989 2021-06-09 11:10
    老師,能不能發(fā)我一下資料,謝謝! 84****@****.com
    回復(fù) 5條回復(fù)
  • 魚鷹單片機 2021-01-14 17:06
    老師,能不能發(fā)我一下資料,謝謝! ya****@****.com
    回復(fù) 1條回復(fù)
  • VKN007 2020-12-17 18:56
    老師,能不能發(fā)我一下資料,謝謝! 93****@****.com
    回復(fù) 3條回復(fù)