在很多工程應用中,需要使用到PWM波(脈寬調製),例如電機調速、溫度控制調整功率等。本文講述怎麼利用單片機的一個定時器生成多路PWM波形。
一般的,PWM的周期t1是一個固定值,如1ms,10ms,100ms等,在一個周期中包含了高電平t2和低電平t3,它們的關係是t2+t3=t1。改變一個周期中高電平的時間,就能達到速度或者功率調整的目的。PWM適用於高速開關器件的控制,不適合於繼電器等低速開關元件的控制,因為繼電器等低速元件達不到如此快的開關速度。
PWM控制的關鍵是控制改變PWM的高電平時間t2,這個時間在其他子程序中由控制算法中進行修改,如PID控制算法。
圖 1
在微處理器,如單片機中,實現一個定時器生成多路PWM的方法如下。
首先來看看用一個定時器實現一路PWM輸出的方法:
>>定義一個時間基準刻度t,這個也是計時器中斷周期,一般在程序中t不改變。PWM的周期、高低電平時間由若干個基準時間t組成;
>>定義一個全局計時變量n,n表示這段時間經過了多少個基準時間t;
>>定義一個全局計時變量n1,n1表示一個PWM的周期包含多少個基準時間t,n1=t1/t。一般在程序中n1,t1不改變。
>>定義一個全局計時變量n2,n2表示一個PWM周期中高電平包含多少個基準時間t,n2=t2/t。由於高電平的時間受其他算法控制改變的,n2也是隨時在改變。
程序的流程如下:
①初始化定時器,定時器中斷時間設置為t,如設置t為1ms或其他;
②初始化變量:n=0;//計時變量n清零
n1=t1/t;//一個PWM的周期t1包含了多少個基準時間t.
//假如設PWM周期為100ms,則n1=100;
n2=t2/t;//計算一個PWM中高電平時間t2由多少個基準時間//t組成。t2由其他控制算法改變。
③開始計時,打開定時器中斷。定時器中斷程序中n++;
當n
程序流程圖如下:
圖2
如果在同一個定時器中需要多路PWM,再定義多組類似的變量,按照圖2 中流程處理即可。
推薦閱讀
大容量的STM32F101xx、STM32F103xx系列和互聯型產品中包含了兩個基本定時器,TIM6和TIM7。這兩個定時器功能非常簡單,基本上和SysTick 定時器相當。但是我在使用的時候確是費了一番周折才調試通過,所以還是應該將這兩個定時器的使用方法好好的寫一寫。基本定時器TIM6和TIM7各包含一個16位自動裝載計數器,由各自的可編程預分頻器驅動。簡單的說兩個定時器是從0計數到N(由自動裝載計數器來確定N的具體值),然後復位回0 重新計數。每次復位到0 的時候可以產生對應的中斷信號,或者產生DMA 請求,還可以觸發DAC 同步電路。不過這次筆記不討論觸發DAC 的問題,等寫到DAC 的使用時在講解如何用這兩定時器驅動
發表於 2020-11-21
SysTick 定時器被集成在NVIC中。因此,只要是Cortex-M3 內核的單片機,就都有它。這個學習筆記就用SysTick 定時器來實現走馬燈的功能。SysTick 定時器非常簡答,只有四個寄存器。這四個寄存器的含義在《Cortex-M3權威指南》那本書中講的非常的清楚,這裡不複述了,下面只講講在STM32上SysTick有什麼特殊之處。按照CMSIS 標準,用C語言訪問這四個寄存器時使用的寄存器名稱分別如下:SysTick->CTRLSysTick->LOADSysTick->VALSysTick->CALIBSysTick->CALIB 的值固定為9000,因此,只有當系統嘀嗒時鐘設定
發表於 2020-11-11
1.STM32的Timer簡介STM32中一共有11個定時器,其中2個高級控制定時器,4個普通定時器和2個基本定時器,以及2個看門狗定時器和1個系統嘀嗒定時器。其中系統嘀嗒定時器是前文中所描述的SysTick,看門狗定時器以後再詳細研究。今天主要是研究剩下的8個定時器。定時器計數器解析度計數器類型預分頻係數產生DMA請求捕獲/比較通道互補輸出TIM1TIM816位向上,向下,向上/向下1-65536之間的任意數可以4有TIM2TIM3TIM4TIM516位向上,向下,向上/向下1-65536之間的任意數可以4沒有TIM6TIM716位向上1-65536之間的任意數可以0沒有其中TIM1和TIM8是能夠產生3對PWM互補輸出的高級
發表於 2020-11-11
一、定時器TImer_A 介紹TImer_A是一個具有多路捕獲/比較寄存器的16位定時/計數器,主要有TAxCTL,TAxR,TAxCCTLn,TAxIV,TAxEX0 幾個寄存器。其中最主要的是TAxCTL寄存器,它決定TImer_A的輸入時鐘信號,TImer_A的工作模式,Timer_A的開啟與停止,中斷的申請等。中斷可以來自定時器溢出或者任意的捕獲/比較寄存器Timer_A的特徵包括:具有4種工作模式的異步定時/計數器可選擇配置的時鐘源可配置的PWM輸出功能異步輸入和同步鎖存二、Timer_A 操作1. 16位定時/計數器16位定時/計數寄存器TAxR,在每個時鐘信號的上升沿做增一計數或減一計數。TAxR可以通過置位
發表於 2020-10-29
1、介紹實現Cortex-M3系統定時器SysTick的配置,需要具備以下知識:Cortex-M3系統定時器默認頻率是HCLK的8分頻(如下圖所示),因此需要會RCC時鐘的配置;然後配置SysTick系統定時器;編寫SysTick中斷處理函數。系統時鐘及系統定時器時鐘(詳見手冊)2、寄存器描述SysTick控制及狀態寄存器STK_CTRLSysTick重裝載數值寄存器STK_LOADSysTick當前數值寄存器STK_VALSysTick校準數值寄存器STK_CALIB 與SysTick相關的固件庫函數有以下幾個:配置SysTick系統時鐘:SysTick_CLKSourceConfig();設置SysTick重裝值
發表於 2020-10-19
3,定時器1的使用 首先,使用IAR新建一個基礎工程 對於STM8S的IO口操作,我們可以向使用51單片機那樣簡單直接位操作,我通過宏定義來對於位操作:#define LED0_Toggle PE_ODR_bit.ODR5 = !PE_ODR_bit.ODR5 //LED接在PE5上 #define LED1_Toggle PC_ODR_bit.ODR1 = !PC_ODR_bit.ODR1 //LED接在PC1上 #define
發表於 2020-10-12