文章代碼使用 HAL 庫。
文章目錄
- 一、1.PWM原理
- 二、LED 原理圖
- 三、使用cubemx 配置 led
- 四、PWM 相關函數
- 五、PWM占空比占空比計算
- 六、PWM 呼吸燈重要代碼
- 總結
呼吸燈
一、1.PWM原理
PWM全稱為脈沖寬度調制(Pulse Width Modulation),是一種常用的調制技術。它通過改變信號脈沖的寬度來控制電路或裝置的輸出功率或電壓。
在PWM中,周期性的方波信號被產生,其中脈沖的寬度是可變的,而脈沖的頻率是固定的。通常,PWM信號的周期稱為周期時間,而脈沖的占空比則是脈沖寬度與周期時間之間的比值。
PWM信號可用于控制電機速度、調節LED的亮度、產生模擬信號等各種應用。通過改變PWM信號的占空比,可以在時間上控制輸出信號的強度或控制設備的工作時間比。
周期:PWM周期(Pulse Width Modulation period)指的是PWM信號一個完整的周期的時間長度。在PWM信號中,周期是指一個完整的脈沖周期,包括脈沖的高電平和低電平部分。
計算公式:(定時器預分頻系數 + 1) * (重裝載值 + 1) / 時鐘主頻
占空比:
占空比通常用百分比或比例表示,可以取值在 0% 到 100% 之間,或是 0 到 1 之間。占空比為 0% 表示PWM 信號全為低電平,占空比為 100% 表示 PWM 信號全為高電平。一般而言,占空比決定了 PWM信號中高電平的時間長度,從而控制到達被驅動裝置的電源的平均電壓水平。
對于直流電機或LED等裝置,常用 PWM 控制來調節速度或亮度。例如,在 50% 的占空比下,PWM 信號在一個周期內將有一半的時間為高電平,一半的時間為低電平,這將導致電機轉速或燈光亮度的降低。ARR(自動重載寄存器)增加占空比將增加高電平時間,減小占空比則減小高電平時間。
例子:在輸出電壓為10V的電路中,設置PWM占空比為40%,那么起始這個電路輸出的實際電壓是4V。
通常控制LED時只需要給一個高電平就可以控制那么下面是LED電平狀態圖使用PWM控制LED調節亮度的電平狀態圖.
二、LED 原理圖
可以看到有4個led。 其中 LED2 接到了PB2引腳, LED3 接到了PB1引腳, LED4 接到了PB0引腳,所以我們需要配置對應 led 的 gpio 引腳為輸出引腳。
三、使用cubemx 配置 led
四、PWM 相關函數
啟動定時器PWM模式
HAL_TIM_PWM_Start(TIM_HandleTypeDef *htim, uint32_t Channel);
參數:
-
TIM_HandleTypeDef *htim`:指向 TIM_HandleTypeDef 結構體的指針,該結構體包含了定時器的配置和狀態信息。
-
uint32_t Channel`:指定要啟動 PWM 的通道。對于 STM32 定時器而言,可以有多個通道,每個通道可以獨立地生成 PWM 信號。
設置 占空比
__HAL_TIM_SET_COMPARE(__HANDLE__, __CHANNEL__, __COMPARE__);
參數:
-
HANDLE:是一個宏或變量,用于表示特定定時器的句柄。
-
CHANNEL:這是指定要操作的定時器通道。
-
COMPARE:這是要設置的比較值,用于比較寄存器的內容。
// 也可以使用 CCRx 比較寄存器設置 占空比。
TIM3->CCR3 = 200;
// 也可以通過htim3.Instance->CCRx直接修改CCR的值
htim3.Instance->CCR3 = 200;
五、PWM占空比占空比計算
CCR(捕獲/比較寄存器)/ ARR(自動重載寄存器) 100%*
如果 ARR(自動重載值) = 500時,當 CCR(比較寄存器值) = 100 則 占空比是 20%
六、PWM 呼吸燈重要代碼
int pwm_value = 0; // 占空比// 開啟 pwm 輸出
HAL_TIM_PWM_Start(&htim3, TIM_CHANNEL_3);for(uint16_t i=1;i<500;i++) // 通過循環逐漸改變CCR,進而改變占空比。
{htim3.Instance->CCR3 = i; HAL_Delay(1);
}for(uint16_t i=499;i>=1;i--)
{htim3.Instance->CCR3 = i; // 通過htim3.Instance->CCRx直接修改CCR的值HAL_Delay(1);
}
總結
下篇文章為大家介紹 無源蜂鳴器唱歌。