MCU微課堂
CKS32F107xx TIM(四)
第四十八期 2024.11.22
定時器同步
CKS32F107xx系列部分定時器在內(nèi)部是相連的,可用于定時器同步或鏈接,方便用戶配置不同的同步模式,以便在電機控制、數(shù)據(jù)采集和PWM信號生成等應(yīng)用中,實現(xiàn)復(fù)雜的時間序列和多通道的同步操作。本節(jié)課我們將圍繞定時器同步功能概述展開,并以其中一種功能為例——將定時器2給定時器3當(dāng)預(yù)分頻器,最終級聯(lián)同步PWM輸出。
依據(jù)《CKS32F107xx參考手冊》的從模式控制寄存器相關(guān)章節(jié)得知,并非任意兩個定時器都能任意級聯(lián),硬件方面是固定的,若某個產(chǎn)品中沒有相應(yīng)的定時器,則對應(yīng)的觸發(fā)信號ITRx也不存在。如下表1所示。
表1 普通輸入捕獲概覽圖
如下圖1所示,TIM2更新事件的輸出信號TRGO1可以連接到TIM3的內(nèi)部觸發(fā)信號線ITR1(可由表1查閱得知),作為TIM3 的時鐘輸入。
圖1 主從定時器示例
要使TIM2和TIM3級聯(lián)同步輸出PWM波形,我們還會用到控制寄存器2(TIMx_CR2)和從模式控制寄存器(TIMx_SMCR)。接下來我們簡單介紹下這兩個寄存器。
首先是控制寄存器2(TIMx_CR2),該寄存器的各位描述如下圖所示:
圖2 TIMx_CR2
關(guān)于該寄存器的詳細(xì)說明,請參照《CKS32F107xx參考手冊》。這里我們用到的是主模式選擇位域MMS,此部分由3位組成。共有8種模式可供選擇,因為我們使用的是更新模式,所以必須設(shè)置為010。
接下來我們介紹從模式控制寄存器(TIMx_SMCR),該寄存器的各位描述如下圖所示:
圖3 TIMx_SMCR
在該寄存器中,我們用到了SMS和TS位域,均由3位組成,各有8種不同模式組合。其中SMS控制從模式選擇,這里我們配置成100,選擇門控模式,確保從定時器的開始和結(jié)束都是由主定時器的輸出信號控制。TS控制觸發(fā)選擇,根據(jù)表1描述得知,我們必須配置成001。
定時器級聯(lián)同步輸出PWM配置操作
通過上述對定時器功能的描述,下面我們要實現(xiàn)TIM2發(fā)生事件更新時發(fā)送觸發(fā)信號驅(qū)動TIM3計數(shù),并使能兩個定時器在PWM1模式下由定時器通道1輸出PWM波形。編程的要點如下所示。
1、配置PA0和PA6引腳為復(fù)用輸出功能
我們調(diào)用如下函數(shù)實現(xiàn):
void TIM_GPIO_Configuration(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_6;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure);
}
2、TIM2配置為主定時器
TIM2配置為PWM1模式輸出,使能主從模式,并選擇更新事件作為觸發(fā)輸出,主要代碼如下:
void TIM2_Master_Mode_Configuration(void)
{
TIM_TimeBaseInitTypeDef TIM2_TimeBaseStructure;
TIM_OCInitTypeDef TIM2_OCInitStructure;
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);
/* Time Base Configuration */
TIM2_TimeBaseStructure.TIM_Prescaler = 8;
TIM2_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
TIM2_TimeBaseStructure.TIM_Period = 79;
TIM2_TimeBaseStructure.TIM_ClockDivision = 0;
TIM_TimeBaseInit(TIM2, &TIM2_TimeBaseStructure);
/* TIM2 Channel 1 Configuration in PWM1 mode */
TIM2_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;
TIM2_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
TIM2_OCInitStructure.TIM_Pulse = 40 ;
TIM2_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;
TIM_OC1Init(TIM2, &TIM2_OCInitStructure);
TIM_SelectMasterSlaveMode(TIM2, TIM_MasterSlaveMode_Enable);
/* Master Mode selection */
TIM_SelectOutputTrigger(TIM2, TIM_TRGOSource_Update);
}
從上述代碼可得知,TIM2CLK固定為72MHz,TIM2預(yù)分頻為8,因此主定時器TIM2計數(shù)器時鐘頻率為8MHz頻率,則TIM2頻率=TIM2計數(shù)器時鐘/(TIM2_Period + 1)=100KHz,占空比為TIM2_CCR1/(TIM2_ARR + 1) = 50%。
3、TIM3配置為從定時器
TIM3配置為門控模式,并選擇ITR1作為輸入,主要代碼如下:
void TIM3_Slave_Mode_Configuration(void)
{
TIM_TimeBaseInitTypeDef TIM3_TimeBaseStructure;
TIM_OCInitTypeDef TIM3_OCInitStructure;
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);
/* Time Base Configuration */
TIM3_TimeBaseStructure.TIM_Prescaler = 0;
TIM3_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
TIM3_TimeBaseStructure.TIM_Period = 4;
TIM3_TimeBaseStructure.TIM_ClockDivision = 0;
TIM_TimeBaseInit(TIM3, &TIM3_TimeBaseStructure);
/* TIM3 Channel 1 Configuration in PWM1 mode */
TIM3_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;
TIM3_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
TIM3_OCInitStructure.TIM_Pulse = 2;
TIM3_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;
TIM_OC1Init(TIM3, &TIM3_OCInitStructure);
/* Slave Mode selection: TIM3 */
TIM_SelectSlaveMode(TIM3, TIM_SlaveMode_Gated);
TIM_SelectInputTrigger(TIM3, TIM_TS_ITR1);
}
從上述代碼可得知,從定時器TIM3頻率為(TIM2 frequency)/ (TIM3 period + 1)=20kHz,占空比為TIM3_CCR1/(TIM3_ARR + 1) = 40%。
4、主函數(shù)
初始化主從定時器,最終實現(xiàn)級聯(lián)同步PWM輸出,主要代碼如下:
int main(void)
{
TIM_GPIO_Configuration();
TIM3_Slave_Mode_Configuration();
TIM2_Master_Mode_Configuration();
TIM_Cmd(TIM2, ENABLE); /* Enable TIM2 Counter */
TIM_Cmd(TIM3, ENABLE); /* Enable TIM3 Counter */
while(1)
{
}
}
至此,用示波器測量PA0和PA6引腳的波形(注意共地);下載程序,調(diào)節(jié)示波器,可在示波器看到有PWM波形輸出,如下圖4所示:
圖4PWM波形輸出
-
電機控制
+關(guān)注
關(guān)注
3534文章
1876瀏覽量
268735 -
寄存器
+關(guān)注
關(guān)注
31文章
5336瀏覽量
120224 -
PWM
+關(guān)注
關(guān)注
114文章
5181瀏覽量
213791 -
定時器
+關(guān)注
關(guān)注
23文章
3246瀏覽量
114714
原文標(biāo)題:MCU微課堂|CKS32F107xx TIM(四)
文章出處:【微信號:中科芯MCU,微信公眾號:中科芯MCU】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論