iT邦幫忙

0

【Day21】:客製化的PWM輸出

客製化PWM

這裡所說的客製化PWM指的就是我們可以輸出任何想要的方波波形,例如輸出10個完整的波後停止輸出,或著是輸出10個波的循環,而在一個循環內,每個波的工作週期遞增(0%、10%、20%...)。我們接下來就來實作看看這兩個吧~

  1. 輸出10個波後停止輸出
    絲路:用一個變數來記錄現在輸出幾個波,再利用PWM的中斷功能,在一個周期內,波從高電位變低電位的時候進入中斷,把變數加一,只要大於我們指定的數就停止輸出。
    先來介紹PWM中斷函式
void HAL_TIM_PWM_PulseFinishedCallback(TIM_HandleTypeDef *htim) {
}

這個函式一樣在tim.c檔當中以若定義的形式定義過了,我們可以直接複製到main.c檔當中重新定義。
完整的程式如下:

/* USER CODE BEGIN 4 */
int pulse = 5;
int count = 0;
void HAL_TIM_PWM_PulseFinishedCallback(TIM_HandleTypeDef *htim) {
	if (++count == pulse) {
		count = 0;
		HAL_TIM_PWM_Stop_IT(&htim2, TIM_CHANNEL_1);
	}
}
/* USER CODE END 4 */

在main當中啟動PWM輸出

HAL_TIM_PWM_Start_IT(&htim2, TIM_CHANNEL_1);
	while (1) {
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
	}
  /* USER CODE END 3 */

這是一個經過巧妙設計的中斷函式,這裡個count要用前置++才可以喔!我們只要更改pulse的值就可以改變輸出波的數量。
這裡的HAL_TIM_PWM_Stop_IT()可以停止PWM的輸出
同樣的,我們一開始要啟用這個函式但是由於我們是啟用中斷版本的PWM輸出,函式為以下這個

HAL_TIM_PWM_Start_IT(TIM_HandleTypeDef *htim, uint32_t Channel)
  1. duty cycle遞增的10個波

尚未有邦友留言

立即登入留言