在實(shí)際產(chǎn)品開發(fā)中有時(shí)可能需要實(shí)現(xiàn)一些指定個(gè)數(shù)脈沖的輸出,這里介紹幾種基于定時(shí)器的實(shí)現(xiàn)方式。
1、 利用RCR寄存器結(jié)合單脈沖模式;
2、 利用DMA實(shí)時(shí)修改CCR寄存器的模式;
3、 利用定時(shí)器主從模式;
4、 利用中斷對脈沖實(shí)現(xiàn)計(jì)數(shù)模式;
一、利用RCR結(jié)合單脈沖模式
這種方式僅限于帶RCR寄存器的高級定時(shí)器,配合單脈沖模式,實(shí)現(xiàn)起來非常方便。
基本原理:計(jì)數(shù)器發(fā)生RCR+1個(gè)溢出動作后觸發(fā)更新事件,在單脈沖模式下,定時(shí)器發(fā)生更新事件時(shí)將停止計(jì)數(shù)并實(shí)現(xiàn)指定個(gè)數(shù)的脈沖輸出。
參考配置:
HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_1);//TIM1通道1輸出一串脈沖。
二、利用DMA實(shí)時(shí)修改CCR寄存器的模式;
基本原理:基于定時(shí)器事件觸發(fā)DMA從而動態(tài)修改CCR寄存器的值最終實(shí)現(xiàn)指定個(gè)數(shù)的脈沖輸出。
下面示例使用定時(shí)器更新事件觸發(fā)DMA,輸出10個(gè)脈寬各不一樣的脈沖.
uint16_tDataforCCr[]={25,43,18,65,27,44,66,38,76,11,00};
參考配置:
TIM_CCxChannelCmd(htim3.Instance, TIM_CHANNEL_1,TIM_CCx_ENABLE);
__HAL_TIM_CLEAR_FLAG(&htim3, TIM_FLAG_UPDATE);
__HAL_TIM_ENABLE_DMA(&htim3, TIM_DMA_UPDATE);
HAL_DMA_Start(&hdma_tim3_up,(uint32_t)DataforCCr, (uint32_t)&htim3.Instance->CCR1, 11);
__HAL_TIM_ENABLE(&htim3);
TIM3->EGR = TIM_EGR_UG;
眼尖的人可能發(fā)現(xiàn)上圖中最后有個(gè)額外的尖脈沖,那是因?yàn)檫@里是基于更新事件觸發(fā)DMA,DMA傳輸新數(shù)據(jù)過來時(shí)有點(diǎn)延遲導(dǎo)致下一個(gè)PWM脈沖已經(jīng)發(fā)生作用。這時(shí),我們可以調(diào)整觸發(fā)事件,比方這里將觸發(fā)事件調(diào)整為比較事件,并開啟預(yù)裝功能即可以消除這個(gè)問題。上面測試過程是關(guān)閉了CCR寄存器的預(yù)裝功能的。
該方式可以做到非常靈活精準(zhǔn),但要多用個(gè)DMA外設(shè)。
三、利用定時(shí)器主從模式
基本原理:利用兩個(gè)定時(shí)器級聯(lián)成主從模式,一個(gè)定時(shí)器輸出門控信號,控制另外一個(gè)定時(shí)器的計(jì)數(shù)工作。
下面TIM4工作在主模式,其OC輸出作為觸發(fā)信號給到TIM8,TIM8工作在門控模式。
TIM_CCxChannelCmd(htim4.Instance, TIM_CHANNEL_1,TIM_CCx_ENABLE);
__HAL_TIM_ENABLE(&htim4);
TIM_CCxChannelCmd(htim8.Instance, TIM_CHANNEL_1, TIM_CCx_ENABLE);
__HAL_TIM_MOE_ENABLE(&htim8);
__HAL_TIM_ENABLE(&htim8);
此模式實(shí)現(xiàn)起來簡單快捷,但當(dāng)門控信號時(shí)鐘與從定時(shí)器時(shí)鐘缺乏同步關(guān)系時(shí),輸出脈沖個(gè)數(shù)可能有偏差,尤其結(jié)尾的電平可能搖擺不定。
四、利用定時(shí)器中斷模式
基本原理:基于定時(shí)器更新事件或比較事件對脈沖個(gè)數(shù)進(jìn)行實(shí)時(shí)計(jì)數(shù),到達(dá)指
定數(shù)據(jù)后通過修改CCR或ARR寄存器的值來停止后續(xù)PWM的輸出。具體操
作需結(jié)合PWM輸出模式和最后希望停止輸出時(shí)的電平來對CCR進(jìn)行賦值。
比如:輸出10個(gè)脈沖,最后電平停留在高電平。我們可以基于比較事件來對脈沖進(jìn)行,并開啟CCR寄存器的預(yù)裝功能。若選用PWM1模式,極性選擇為高有效,向上計(jì)數(shù)模式時(shí),則在第10個(gè)比較中斷里修改CCR=ARR+n[n大于等于1];若選用PWM2模式,極性選擇為高有效,則在第10個(gè)比較中斷里修改CCR=00。
該模式實(shí)現(xiàn)起來較為簡單,只需對定時(shí)器有些基本的了解即可,無需涉及定時(shí)器更多知識及DMA方面的應(yīng)用等。
上面大體介紹了利用STM32定時(shí)器實(shí)現(xiàn)指定個(gè)數(shù)脈沖輸出的四種模式,各有特色,供君參考。我們實(shí)際應(yīng)用中可以靈活采用。
審核編輯:湯梓紅
-
寄存器
+關(guān)注
關(guān)注
31文章
5294瀏覽量
119814 -
STM32
+關(guān)注
關(guān)注
2264文章
10854瀏覽量
354289 -
定時(shí)器
+關(guān)注
關(guān)注
23文章
3231瀏覽量
114326 -
脈沖輸出
+關(guān)注
關(guān)注
0文章
18瀏覽量
10753
原文標(biāo)題:使用定時(shí)器輸出指定個(gè)數(shù)脈沖的幾種方式
文章出處:【微信號:stmcu832,微信公眾號:茶話MCU】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論