版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
PAGE19項目6、利用計數(shù)器實現(xiàn)工件計數(shù)顯示和打包控制項目總目標(biāo)看懂STM32內(nèi)部定時器的計數(shù)路徑;掌握利用外部時鐘模式1、外部時鐘模式2以及更新中斷實現(xiàn)脈沖計數(shù)的軟硬件設(shè)計方法。具體工作任務(wù)利用STM32單片機的外部時鐘模式1外部時鐘模式2,實現(xiàn)生產(chǎn)線工件計數(shù)顯示與控制任務(wù)。圖6.0.1生產(chǎn)線工件計數(shù)顯示器示意圖
任務(wù)6.1利用外部時鐘模式1實現(xiàn)生產(chǎn)線工件計數(shù)顯示一、任務(wù)目標(biāo)任務(wù)目標(biāo):初步掌握用外部時鐘模式1和TIMx_CH引腳,實現(xiàn)脈沖計數(shù)的方法。具體工作任務(wù):利用STM32單片機的外部時鐘模式1和TIMx_CH引腳,進行生產(chǎn)線工件檢測,要求每過一個工件,計數(shù)值加1并顯示,滿100個自動清0,并重新開始計數(shù)。二、學(xué)習(xí)與實踐討論與發(fā)言請結(jié)合項目4和項目5,談一談本任務(wù)的設(shè)計思路。請閱讀以下資料并按照指示的工作順序完成任務(wù)。(二)通用定時器的結(jié)構(gòu)再認識1、外部時鐘模式1路徑圖6.1.1通用定時器的TIMx_CH1和TIMx_CH2的外部時鐘模式1路徑在項目5中,我們已經(jīng)使用過內(nèi)部時鐘模式(InternalClockMode)實現(xiàn)定時控制和PWM輸出。本任務(wù)中我們將使用外部時鐘模式1(ExternalTriggerClockMode1)實現(xiàn)對傳感器輸入的脈沖進行計數(shù)。從圖6.1.1可以看出,內(nèi)部時鐘模式下,控制器的輸入脈沖來自CK_INT,也就是TIMxCLK;外部時鐘模式1情況下,控制器的脈沖則來自TRGI(TriggerInput,觸發(fā)輸入)。在項目5中,我們曾使用TIMxCH1~TIMx_CH4引腳做PWM輸出。這四個引腳被表達在圖6.1.1的右側(cè),作為OC1~OC4的輸出引腳。但你一定很早就注意到在圖的左側(cè),也有四個同名的引腳TIMxCH1~TIMx_CH4。將引腳畫在左側(cè),代表做輸入,做TI1~TI4的輸入引腳(TriggerInput)。本任務(wù)中我們只研究TI1和TI2。要實現(xiàn)工件計數(shù)任務(wù),可將光電傳感器輸入的脈沖接在TIMx_CH1或TIMx_CH2引腳上。通過編程,可以使輸入脈沖信號按照如下三條路徑進入CNT計數(shù)器:路徑1:TIMx_CH1→TI1→TI1FP1→TRGI→CK_PSC→CK_CNT路徑2:TIMx_CH1→TI1→TI1F_ED→TRC→TRGI→CK_PSC→CK_CNT路徑3:TIMx_CH2→TI2→TI2FP2→TRGI→CK_PSC→CK_CNT當(dāng)然,從圖6.1.1可以看出,外部時鐘模式1即TRGI的來源不止這三條,本任務(wù)中我們只研究這三條。在這三種情況下,計數(shù)脈沖來自外部引腳,CNT計數(shù)器對外部脈沖(而不是內(nèi)部脈沖CK_CNT)進行計數(shù)。通過讀取計數(shù)值,就可以知道來了多少個脈沖;通過計數(shù)值與ARR值的比較結(jié)果,就可以知道輸入脈沖是否達到了預(yù)定的數(shù)量,這就是TIM進行外部脈沖計數(shù)的原理。2、計數(shù)過程如圖6.1.1,來自TIMx_CH1和TIMx_CH2引腳的外部脈沖經(jīng)過了多路開關(guān)、輸入濾波/邊沿檢測、控制器、PSC預(yù)分頻器被送入CNT計數(shù)器。計數(shù)過程中還使用到ARR寄存器。關(guān)于控制器、PSC預(yù)分頻器、ARR等設(shè)備的作用在項目5中我們已經(jīng)學(xué)習(xí)過,這里只看多路開關(guān)、輸入濾波和邊沿檢測電路。多路開關(guān)多路開關(guān)常常具有多個輸入和1個輸出。輸出來自哪個輸入取決于編程設(shè)置。例如可以通過編程設(shè)置TI1來自TIMx_CH1還是來自異或門。也可以設(shè)置TRC信號來自ITR或TI1F_ED。(2)輸入濾波功能:輸入濾波器用于濾掉疊加在輸入信號中的干擾。過濾掉干擾信號后的理想波形如圖6.1.2所示。圖6.1.2過濾掉干擾后的理想波形設(shè)定值:濾波系數(shù)可編程設(shè)定,允許范圍是0~15。濾波系數(shù)=0,不濾波;濾波系數(shù)=15,濾波能力最強。濾波系數(shù)不同,濾掉干擾信號的頻率范圍不同。本項目暫不考慮濾波系數(shù)的選擇方法,將濾波系數(shù)設(shè)為0。(3)邊沿檢測功能:邊沿檢測用于決定是對輸入信號的上升沿還是下降沿進行檢測,可編程設(shè)定。例如希望輸入信號每來一個上升沿進行計數(shù),就應(yīng)將其設(shè)置為上升沿觸發(fā)。圖6.1.3設(shè)置為上升沿觸發(fā)、加計數(shù)、PSC不分頻、ARR=3圖6.1.4設(shè)置為下降沿觸發(fā)、加計數(shù)、PSC不分頻、ARR=3如圖6.1.3所示,如果指定對輸入信號的上升沿進行檢測,并且PSC不分頻、加計數(shù)模式、ARR=3,則輸入引腳上每來1個上升沿,經(jīng)定時器時鐘CK_INT同步后,CK_CNT輸出1個脈沖,計數(shù)值加1;計數(shù)值加到4自動重裝為0;重裝時,發(fā)出更新中斷請求。如圖6.1.4所示,如果指定對輸入信號的下降沿進行檢測,其它不變,則輸入引腳上每來1個下降沿,計數(shù)值加1;計數(shù)值加到4自動重裝為0,同時發(fā)出更新中斷請求。CNT也可以做減計數(shù)或加/減計數(shù),計數(shù)值的變化規(guī)律同任務(wù)5.1中所述,這里不再細述。3、可使用的引腳做輸入時,TIMx_CH1~TIMx_CH4允許使用的引腳與做輸出時完全相同,詳細情況請參見項目5表5.6.2。本任務(wù)中我們只研究TIMx_CH1和TIMx_CH2。(三)系統(tǒng)方案及電路設(shè)計圖6.1.5系統(tǒng)方案、傳感器電路、數(shù)碼管電路本系統(tǒng)方案和電路設(shè)計與項目4類似,需要光電傳感器進行工件檢測、需要數(shù)碼管進行工件數(shù)顯示。但光電傳感器電路能使用的引腳受到定時器限制,只能從表5.6.2中選擇。本任務(wù)只學(xué)習(xí)TIMxCH1和TIMxCH2輸入,可選TIM5_CH1通道,它默認復(fù)用PA0引腳,剛好與開發(fā)板上K_UP按鍵相同。系統(tǒng)方案、傳感器電路、數(shù)碼管電路如圖6.1.5。(四)程序設(shè)計與調(diào)試1、程序流程設(shè)計圖6.1.6(a)是項目4我們使用外部中斷實現(xiàn)工件計數(shù)的流程。每當(dāng)EXTI引腳有脈沖輸入時,程序自動進入中斷服務(wù)程序。在中斷服務(wù)程序中通過計數(shù)值+1語句實現(xiàn)計數(shù)。圖6.1.6(b)是利用定時器的計數(shù)功能實現(xiàn)工件計數(shù)的流程。初始化定時器后,定時器開始自動檢測PA0引腳是否有脈沖輸入,如果有自動進行加1計數(shù),因此無需軟件加1,主程序只需不斷讀取計數(shù)器的計數(shù)值并將其送數(shù)碼管顯示即可,中斷程序也不再需要。圖6.1.6程序流程2、搭建框架(1)復(fù)制文件夾:05-08-電機調(diào)速-通用定時器PWM輸出-PC7和PC6,修改副本文件名為:06-01-工件計數(shù)-通用計數(shù)器-外部時鐘模式1-路徑1。(2)打開文件夾,修改工程文件名為Workpiece_count。(3)雙擊Workpiece_count,打開keil5,按照圖6.1.7設(shè)置project和包含路徑。圖6.1.7程序框架3、主程序設(shè)計與調(diào)試第13行定時器初始化函數(shù)中,將PSC設(shè)定值設(shè)為1-1,不分頻,這樣每來1個脈沖,計數(shù)值加1。因為希望計數(shù)值滿100個自動清0,第13行將ARR設(shè)定值設(shè)為100-1。第16行用了一個庫宏函數(shù),讀取計數(shù)值。第18行將得到的計數(shù)值送數(shù)碼管顯示。有關(guān)計數(shù)值讀取庫宏__HAL_TIM_GET_COUNTER(&定時器操作變量)的說明參見項目5表5.5.1。定時器程序設(shè)計與調(diào)試應(yīng)將程序中所有的定時器都替換為TIM5。第11~16行用于定時器基本初始化,并調(diào)用第25行的對應(yīng)Base_MspInit函數(shù)。第18行用于啟動定時器。注意這里并不需要啟動定時器中斷,因此庫函數(shù)名中少了“IT”。第34~39行用于初始化PA0引腳。注意第35行,應(yīng)將其設(shè)置為復(fù)用輸入。第36行和37行則根據(jù)需要選擇其中之一。第29~32行用于開啟GPIO時鐘、定時器時鐘、復(fù)用時鐘并指出重映射的方式。關(guān)于重映射方式,請參見項目5表5.6.8~5.6.11。第27行定義了一個時鐘源設(shè)置變量,其類型為TIM_ClockConfigTypeDef。第41~44行是給時鐘源設(shè)置變量賦值,以便指出脈沖從哪里來,觸發(fā)方式、分頻系數(shù)、濾波系數(shù)。第45行使用了時鐘源設(shè)置庫函數(shù),進行時鐘源初始化。關(guān)于時鐘源設(shè)置庫函數(shù)表6.1.1給出了具體解釋。表6.1.1定時器時鐘源設(shè)置庫函數(shù)庫函數(shù)名:HAL_TIM_ConfigClockSource(&TIM操作變量,&TIM時鐘源)原型:HAL_StatusTypeDefHAL_TIM_ConfigClockSource(TIM_HandleTypeDef*htim,TIM_ClockConfigTypeDef*sClockSourceConfig)功能:按照TIM時鐘源的值,設(shè)置TIM操作變量指定的定時器,并返回操作結(jié)果。其中:TIM操作變量類型為TIM_HandleTypeDef,返回值的類型為HAL_StatusTypeDef,這二者的定義參見表5.2.1和5.2.2。TIM時鐘源的數(shù)據(jù)類型為TIM_ClockConfigTypeDef,具體定義如下:typedefstruct{uint32_tClockSource;/*TIM時鐘源,具體取值見后*/uint32_tClockPolarity;/*時鐘極性,具體取值見后*/uint32_tClockPrescaler;/*時鐘分頻系數(shù),具體取值見后*/uint32_tClockFilter;/*濾波系數(shù),取值為:0~15*/}TIM_ClockConfigTypeDef;ClockSource(TIM時鐘源)取值:TIM_CLOCKSOURCE_ETRMODE2:外部時鐘模式2,來自TIMx_ETRTIM_CLOCKSOURCE_INTERNAL:內(nèi)部時鐘模式,來自CK_INTTIM_CLOCKSOURCE_ITR0:外部時鐘模式1,來自ITR0TIM_CLOCKSOURCE_ITR1:外部時鐘模式1,來自ITR1TIM_CLOCKSOURCE_ITR2:外部時鐘模式1,來自ITR2TIM_CLOCKSOURCE_ITR3:外部時鐘模式1,來自ITR3TIM_CLOCKSOURCE_TI1ED:外部時鐘模式1,來自TI1F_EDTIM_CLOCKSOURCE_TI1:外部時鐘模式1,來自TI1FP1TIM_CLOCKSOURCE_TI2:外部時鐘模式1,來自TI2FP2TIM_CLOCKSOURCE_ETRMODE1外部時鐘模式1,來自ETRFClockPolarity(時鐘極性)取值:TIM_CLOCKPOLARITY_INVERTED(取反,ETR時鐘源用)TIM_CLOCKPOLARITY_NONINVERTED(不取反,ETRx時鐘源用)TIM_CLOCKPOLARITY_RISING(上升沿,TIx時鐘源用)TIM_CLOCKPOLARITY_FALLING(下降沿,TIx時鐘源用)TIM_CLOCKPOLARITY_BOTHEDGE(上升和下降沿,TIx時鐘源用)ClockPrescaler(時鐘分頻系數(shù))取值:TIM_CLOCKPRESCALER_DIV1(2)TIM_CLOCKPRESCALER_DIV2(3)TIM_CLOCKPRESCALER_DIV4(4)TIM_CLOCKPRESCALER_DIV8外部時鐘模式1的信號源將圖6.1.1簡化為圖6.1.8,可看到,外部時鐘模式1的信號源TRGI有8個,從上到下分別是:(1)ETRF;(2)ITR0;(3)ITR1;(4)ITR2;(5)ITR3;(6)TI1F_ED;(7)TI1FP1;(8)TI2FP2。圖6.1.8外部時鐘模式1的8個信號源如果將TIM時鐘源設(shè)置為:TIM_CLOCKSOURCE_TI1,則定時器的計數(shù)脈沖來自TI1FP1。很容易看出,TI1FP1來自TI1。由于上電復(fù)位后異或門被關(guān)閉,TI1信號將來自TIMxCH1引腳輸入。這就是之前我們所說的路徑1。如果將TIM時鐘源設(shè)置為:TIM_CLOCKSOURCE_TI1ED(ED=Edge即邊沿),則定時器的計數(shù)脈沖來自TI1F_ED。從圖中可以看出,TI1F_ED同樣來自TI1。在異或門被關(guān)閉情況下,TI1_ED信號也來自引腳TIMx_CH1,這就是之前我們所說的路徑2。路徑2與路徑1的區(qū)別是,路徑2是沿檢測,無論上升沿或下降都觸發(fā)計數(shù)。路徑1則可編程設(shè)定觸發(fā)沿。如果將TIM時鐘源設(shè)置為:TIM_CLOCKSOURCE_TI2,則定時器的計數(shù)脈沖來自TI2FP2。這就是之前我們所說的路徑3。此時脈沖信號來自TIMxCH2引腳。數(shù)碼管程序設(shè)計與調(diào)試與之前相比沒有變化。6、軟硬件聯(lián)調(diào)(1)連接電路,連接開發(fā)板到計算機;(2)按照圖6.1.9,在“Options”中找到開發(fā)板的IDCODE并進行設(shè)置;(3)編譯、生成、下載程序到開發(fā)板;(4)反復(fù)按下K_UP按鍵,模擬工件到來與離去,觀察程序運行效果,如果不正確,修改程序或電路直到運行結(jié)果正確。(5)修改時鐘分割系數(shù)ClockDivision為DIV4,濾波系數(shù)ClockFilter為15,觀察效果。(6)將外部時鐘模式1的信號源指定為TI1F_ED,下載后觀察有何不同。(7)利用TIM5_CH2引腳接收傳感器輸入脈沖,修改程序,下載后調(diào)試。圖6.1.9目標(biāo)板設(shè)置故障現(xiàn)象:解決辦法:原因分析:
三、要點記錄及成果檢驗任務(wù)6.1利用TIMx_CH引腳實現(xiàn)工件計數(shù)顯示姓名學(xué)號日期分數(shù)(一)術(shù)語記錄英文中文ExternalTriggerClockModeInternalClockModeTriggerInputConfigClockSourcePolarityFilterEdge(二)自主設(shè)計用TIM3_CH2引腳和外部時鐘模式1,完成如下功能:每按下按鍵1次,計數(shù)加1并顯示,加到100自動清0。請畫出電路圖,寫出程序并調(diào)試。
任務(wù)6.2利用外部時鐘模式2實現(xiàn)生產(chǎn)線工件計數(shù)顯示一、任務(wù)目標(biāo)任務(wù)目標(biāo):掌握用外部時鐘模式2或外部時鐘模式1對TIMx_ETR引腳輸入脈沖進行計數(shù)的方法。具體工作任務(wù):利用STM32單片機的TIMx_ETR引腳,進行生產(chǎn)線工件檢測,要求每過一個工件,計數(shù)值加1并顯示,滿100個自動清0,并重新開始計數(shù)。二、學(xué)習(xí)與實踐(一)討論與發(fā)言請結(jié)合任務(wù)1,談一談本任務(wù)的設(shè)計思路。請閱讀以下資料并按照指示的工作順序完成任務(wù)。(二)通用定時器的結(jié)構(gòu)再認識1、外部時鐘模式2路徑圖6.2.1通用定時器的TIMx_ETR的外部時鐘模式路徑STM32通用定時器也支持從TIMx_ETR引腳輸入外部脈沖,通過編程,可使信號通過兩條路徑進入CNT計數(shù)器:路徑1:TIMx_ETR→ETR→ETRP→ETRF→TRGI→CK_PSC→CK_CNT(外部時鐘模式1)路徑2:TIMx_ETR→ETR→ETRP→ETRF→→→→CK_PSC→CK_CNT(外部時鐘模式2)無論哪一種,CNT計數(shù)器都是對來自TIMx_ETR引腳的外部脈沖進行計數(shù)。通過讀取計數(shù)值,就可以知道來了多少個脈沖;通過計數(shù)值與ARR值的比較結(jié)果,就可以知道輸入脈沖是否達到了預(yù)定的數(shù)量。2、計數(shù)過程如圖6.2.1,來自TIMx_ETR引腳的外部脈沖經(jīng)過了極性選擇/邊沿檢測/預(yù)分頻器、輸入濾波器、控制器、PSC預(yù)分頻器到達CNT進行計數(shù),并與ARR寄存器內(nèi)容相比較。與來自TIMx_CH1和TIMx_CH2引腳的外部時鐘模式1路徑相比,多了一個預(yù)分頻器,這個預(yù)分頻器也稱為ETR預(yù)分頻器。它的作用和PSC預(yù)分頻器一樣也是對輸入脈沖做分頻處理的。ETR預(yù)分頻系數(shù)設(shè)定值:1、2、4、8。表6.1.1中的ClockPrescaler(時鐘分頻系數(shù))就是設(shè)定此參數(shù)的,這個參數(shù)也叫做ETR預(yù)分頻系數(shù)。加計數(shù)模式下,如果ETR預(yù)分頻系數(shù)=2,PSC預(yù)分頻系數(shù)=3-1,則總分頻系數(shù)=2×3=6,即ETR引腳每來6個脈沖,CNT計數(shù)1次。從直觀的角度,肯定是設(shè)置ETR預(yù)分頻系數(shù)=1比較好,這樣ETR引腳每來一個脈沖,計數(shù)值+1。計數(shù)值和脈沖數(shù)一一對應(yīng)。但是如果輸入脈沖的頻率過高,超過了1/4倍的fCK_INT時,就需要對ETR信號進行預(yù)分頻,以確保定時器能正常工作。fCK_INT=72MHz情況下,可算出,高于72/4=18MHz的信號必須做ETR預(yù)分頻。本項目中傳送帶速度約為每秒1個工件,頻率只有1Hz,遠小于18MHz,無需ETR分頻,設(shè)定為1即可。假如輸入脈沖頻率較高,例如=40MHz,就應(yīng)該做ETR4分頻或者8分頻,如果做4分頻,會降到10MHz,這樣定時器才能正常工作。3、占用引腳通用定時器使用的TIMx_ETR引腳如表6.2.1所示。表6.2.1通用定時器的ETR引腳TIM編號引腳名復(fù)用引腳TIM2TIM2_CH1_ETRPA0(默認)/PA15(部分重映像)TIM3TIM3_ETRPD2(默認)TIM4TIM4_ETRPE0(默認)TIM5TIM5_ETR-其中TIM5沒有ETR引腳,TIM2的ETR引腳叫TIM2_CH1_ETR。如果使用通用定時器,電路設(shè)計時只能使用這4個引腳。這里仍然選用PA0,以便調(diào)試時可以利用開發(fā)板上的K_UP按鍵代替?zhèn)鞲衅?。系統(tǒng)方案及電路設(shè)計系統(tǒng)方案和電路設(shè)計如圖6.2.2所示,與任務(wù)6.1相同。圖6.2.2系統(tǒng)方案、傳感器電路、數(shù)碼管電路(四)程序設(shè)計與調(diào)試1、程序流程設(shè)計按照以上分析,可以利用TIM2_CH1_ETR引腳進行脈沖信號輸入,利用外部時鐘模式1或模式2進行計數(shù)。程序流程與任務(wù)6.1完全相同。圖6.2.3程序流程2、搭建框架(1)復(fù)制文件夾:06-01-工件計數(shù)-通用計數(shù)器-外部時鐘模式1-路徑1,修改副本文件名為:06-02-工件計數(shù)-通用計數(shù)器-外部時鐘模式2,如圖6.2.4所示;(2)雙擊Workpiece,打開keil5。圖6.2.4程序框架3、主程序設(shè)計與調(diào)試將主程序中的TIM5替換為TIM2即可。4、定時器程序設(shè)計與調(diào)試將原程序中所有的TIM5替換為TIM2;修改32行的TIM重映射語句,確保TIM2_CH1_ETR使用PA0引腳;修改41行,將時鐘源設(shè)為:TIM_CLOCKSOURCE_ETRMODE2(外部時鐘模式2)。修改42行,極性設(shè)為TIM_CLOCKPOLARITY_NONINVERTED(不取反)。5、數(shù)碼管程序設(shè)計與調(diào)試不變。6、軟硬件聯(lián)調(diào)(1)連接電路,連接開發(fā)板到計算機;(2)在“Options”中找到開發(fā)板的IDCODE并進行復(fù)位、下載和啟動設(shè)置;(3)編譯、生成、下載程序到開發(fā)板;(4)按下K_UP或用手反復(fù)遮擋光電傳感器,模擬工件到來效果。觀察程序運行效果。如果不正確,修改程序或電路直到運行結(jié)果正確。(5)修改時鐘分割系數(shù)ClockDivision為DIV4,濾波系數(shù)ClockFilter為15,觀察效果。(6)修改ETR預(yù)分頻系數(shù)ClockPrescaler為DIV4觀察效果。(7)修改為TIM_CLOCKSOURCE_ETRMODE1(外部時鐘模式1——ETR輸入),下載后觀察結(jié)果。故障現(xiàn)象:解決辦法:原因分析:
三、要點記錄及成果檢驗任務(wù)6.2利用TIMx_ETR引腳實現(xiàn)工件計數(shù)顯示姓名學(xué)號日期分數(shù)(一)自主設(shè)計1、用TIM4_ETR引腳和外部時鐘模式2,完成如下功能:每按下按鍵3次,計數(shù)加1并顯示,加到100自動清0。請畫出電路圖,寫出程序并調(diào)試。
任務(wù)6.3利用計數(shù)器更新中斷實現(xiàn)打包操作一、任務(wù)目標(biāo)任務(wù)目標(biāo):掌握利用外部時鐘模式和更新中斷,實現(xiàn)各種操作的方法。具體工作任務(wù):利用TIMx_ETR引腳或TIMx_CH引腳、外部時鐘模式2或模式1及更新中斷,實現(xiàn)打包操作:即每來6個工件,啟動電磁閥動作1秒。二、學(xué)習(xí)與實踐(一)討論與發(fā)言請結(jié)合任務(wù)1和任務(wù)2,談一談本任務(wù)的設(shè)計思路。請閱讀以下資料并按照指示的工作順序完成任務(wù)。。(二)方案及電路設(shè)計圖6.3.1系統(tǒng)方案及電路設(shè)計參考任務(wù)6.1和6.2,傳感器仍可接PA0引腳,作為TIM5_CH1或TIM2_CH1_ETR。此外應(yīng)增加電磁閥及驅(qū)動電路??蓞⒄枕椖?的電加熱器驅(qū)動電路,設(shè)計電磁閥驅(qū)動電路。PC7輸出低電平→三極管導(dǎo)通→繼電器線圈得電→繼電器觸點閉合→電磁閥得電→做打包動作;PC7輸出高電平→三極管截止→繼電器線圈失電→繼電器觸點斷開→電磁閥失電→停止打包。(三)程序設(shè)計與調(diào)試設(shè)計思路在任務(wù)6.1和6.2中,我們已經(jīng)知道,將定時器設(shè)置為加計數(shù)器時,如果計數(shù)值>ARR,計數(shù)值就會自動重裝(更新)為0,同時申請中斷。這個中斷也稱為定時器更新中斷。如果編程時允許更新中斷,CPU就會在自動重裝后跳到對應(yīng)的中斷服務(wù)程序。因此我們可以:(1)利用TIM5_CH1(PA0)引腳接收傳感器輸入,設(shè)置TIM5為外部時鐘模式1,TI1輸入,加計數(shù)。(2)設(shè)置ARR=5,當(dāng)?shù)?個工件到來時,計數(shù)值重裝(更新)為0。(3)開啟定時器5更新中斷。當(dāng)?shù)?個工件到來、計數(shù)值重裝為0時,申請更新中斷。(4)在定時器5更新中斷程序中開啟和關(guān)閉電磁閥。2、流程設(shè)計圖6.3.2程序流程3、搭建框架(1)復(fù)制文件夾:06-01-工件計數(shù)-通用計數(shù)器-外部時鐘模式1-路徑1,修改副本文件夾名為:06-03-工件打包-通用計數(shù)器-外部時鐘模式1-TI1-中斷,如圖6.3.3。(2)修改工程名為:workpiece_pack。(3)復(fù)制文件夾LED,并修改文件夾和其內(nèi)兩個文件名為valve。(4)打開工程后注意檢查Project窗口和Options中的IncludePaths中至少應(yīng)包含seg、timer、valve相應(yīng)文件。圖6.3.3框架搭建4、主程序設(shè)計與調(diào)試第5、15行增加了電磁閥初始化內(nèi)容。為使用滴答延時,第2和12行是關(guān)于滴答時鐘的內(nèi)容。為滿足每6個工件中斷一次,第13行ARR設(shè)定值送6-1。5、電磁閥程序設(shè)計與調(diào)試在valve.h中將PC7引腳命名為valve,在valve.c中對PC7做了初始化。6、定時器程序設(shè)計與調(diào)試timer.h文件中增加了對valve.h和Systick.h的包含語句。timer.c的第18行修改為從原來的Start,修改為Start_IT,啟動定時器并開啟中斷。(3)timer.c的第47~49行,用于初始化NVIC。(4)第59~70行是定時器中斷函數(shù)。本系統(tǒng),每來6個工件,進中斷程序。第60行對中斷做一般性處理。清除中斷掛起位。第64~70行對中斷做專門處理。第66行打開電磁閥,做打包動作。第67行延時1S。第68行,撤除打包動作。這里用滴答定時器實現(xiàn)延時。7、數(shù)碼管程序設(shè)計與調(diào)試無需修改,不再列出。8、軟硬件聯(lián)調(diào)(1)連接電路,連接開發(fā)板到計算機;(2)在“Options”中找到開發(fā)板的IDCODE并進行復(fù)位、下載和啟動設(shè)置;(3)編譯、生成、下載程序到開發(fā)板;(4)反復(fù)操作K_UP按鍵,模擬工件到來效果,觀察數(shù)碼管顯示和繼電器動作情況。如果不正確,修改程序或電路直到運行結(jié)果正確。(5)修改時鐘分割系數(shù)ClockDivision為DIV4,濾波系數(shù)ClockFilter為15,觀察效果。(6)為了留出足夠的觀察和測試時間,可以將滴答延時時間加大到5S。(7)觀察本程序有什么缺點。(8)想一想,利用ETR引腳外部時鐘模式1實現(xiàn)如上功能,該怎么改程序?(9)想一想,利用ETR引腳外部時鐘模式2實現(xiàn)如上功能,該怎么改程序?故障現(xiàn)象:解決辦法:原因分析:(四)程序改進與調(diào)試1、問題發(fā)現(xiàn)及解決方案通過以上調(diào)試,你會發(fā)現(xiàn)程序雖然能完成任務(wù),但也存在一個缺點:當(dāng)?shù)?個工件到來時,程序能立即跳到中斷程序開啟電磁閥,但是工件數(shù)顯示卻保持在5個,不能及時顯示為0。延時期間如果又按下按鍵,新增加的數(shù)值也不能馬上顯示出來,延時時間越長,問題越明顯。你會發(fā)現(xiàn)計數(shù)值的更新需要等到延時結(jié)束。這是由于滴答延時占用了CPU的執(zhí)行時間,延時期間,程序一直停留在中斷程序里,無法返回主程序進行計數(shù)值讀取與更新顯示的緣故。圖6.3.4軟件延時的影響解決的辦法是再開啟一個定時器例如TIM2,如圖6.3.5。這樣我們的程序中就會有兩個定時器,一個TIM5,做計數(shù)器用;一個TIM2,做定時器用。TIM5計數(shù)到6,進TIM5中斷開啟電磁閥,同時啟動TIM2計時。TIM2時間到,進TIM2中斷關(guān)閉電磁閥,停止計時。由于開啟和關(guān)閉TIM2后會立即回到主程序,不會影響計數(shù)值的顯示。由此我們可以體會到合理運用中斷的優(yōu)越性。圖6.3.5用TIM2更新中斷實現(xiàn)硬件延時2、框架搭建復(fù)制文件夾:06-03-工件打包-通用計數(shù)器-外部時鐘模式1-TI1-中斷,修改副本文件名為:06-03-工件打包-通用計數(shù)器-外部時鐘模式1-TI1-中斷2個,如圖6.3.6。圖6.3.6用TIM2更新中斷實現(xiàn)硬件延時3、主程序設(shè)計與調(diào)試5和18行增加了電磁閥相關(guān)內(nèi)容。6和7行定義了兩個定時器操作變量。14、16行將原來的一個定時器初始化函數(shù)變成兩個。為區(qū)分方便,用了不同的名字。定時器5做計數(shù)器,計數(shù)滿6個清0。定時器2做定時器,1S延時。如果希望2S,2000-1改成4000-1即可。4、定時器程序設(shè)計與調(diào)試(1)timer.h第6和7行的函數(shù)名響應(yīng)改變。(2)timer.c的第3和4行是定時器5和2的操作變量聲明。7~16行是定時器5初始化函數(shù)。初始化完成直接啟動TIM5及其中斷。19~28行是定時器2初始化函數(shù)。注意初始化完成后并未啟動定時器。第34~72是定時器5和定時器2初始化時都會隱性調(diào)用的函數(shù)。其中第37~59行用于定時器5初始化;第60~71用于定時器2初始化。第75~78行是定時器5中斷一般處理。第80~83行是定時器2中斷一般處理。第85~96行是定時器中斷專門處理。無論定時器5還是定時器2中斷,都會隱性調(diào)用這個函數(shù)。其中第86~90行用于定時器5中斷,定時器5計數(shù)滿后自動進入:開啟電磁閥,開啟定時器2及其中斷,因此定時器2開始計時。定時器2時間到,就產(chǎn)生定時器2中斷,執(zhí)行第91~95行:關(guān)閉電磁閥,關(guān)閉定時器,于是定時器2停止計時。本系統(tǒng)數(shù)碼管和打包電磁閥都使用PC7引腳,二者有沖突,這種沖突一般應(yīng)避免。但考慮到PC7連的是數(shù)碼管的小數(shù)點,作為小數(shù)點數(shù)碼管程序始終輸出1(滅),因此將PC7作為打包控制輸出也是可以的,在電路設(shè)計中,不要把PC7連到數(shù)碼管上即可。但如果電路已將PC7連到數(shù)碼管,可以在編程時做些處理,防止數(shù)碼管程序的干擾。所以在第2行增加了一個全局變量Pack_Status,在89和94行根據(jù)valve也就是PC7的狀態(tài)給Pack_Status賦值。在后面的數(shù)碼管程序中會用到這個變量。電磁閥程序設(shè)計與調(diào)試無變化。數(shù)碼管程序設(shè)計與調(diào)試seg.c的第2行增加了變量Pack_Status的聲明。第31行對Seg_Ones做了修正。由于共陽極段碼表的第7位肯定為1,查表后,Seg_Ones的第7位總是1。如果不修正,執(zhí)行33行后,PC7引腳就會輸出1。如果定時器5計數(shù)滿6個,就會進入TIM5中斷,在timer.c的第87行執(zhí)行valve=0,即向PC7引腳寫0。之后很快返回主程序。返回主程序干什么?執(zhí)行主函數(shù)的20和22行,取計數(shù)值,調(diào)數(shù)碼管函數(shù)。于是PC7立刻被寫1,這導(dǎo)致打包動作立刻被取消??梢姅?shù)碼管函數(shù)干擾了打包動作。加入第31行的修正計算就不同啦。將Seg_Ones和Pack_Status做按位與運算。按位與的規(guī)律是:任何位和“0”與,結(jié)果為“0”,任何位和“1”與,結(jié)果保持。如果Pack_Status=0x7f,即01111111,則Seg_Ones的D7位被清0;第33行執(zhí)行后,PC7=0,與打包結(jié)果相同。如果Pack_Status=0xff,即11111111,則Seg_Ones的D7位被保持為查表結(jié)果,也就是1;第33行執(zhí)行后,PC7=1,同樣與打包結(jié)果相同。這就保證了數(shù)碼管程序不會對打包結(jié)果造成干擾。軟硬件聯(lián)調(diào)調(diào)試過程與之前相同,可以將延時時間給大點,以方便觀察和測試。在此基礎(chǔ)上:(1)修改時鐘分割系數(shù)ClockDivision為DIV4,濾波系數(shù)ClockFilter為15,觀察效果。(2)屏蔽seg.c的第31行,觀察會出現(xiàn)什么現(xiàn)象?(3)想一想,之前利用滴答延時實現(xiàn)打包的程序也存在數(shù)碼管引腳和打包引腳沖突的問題,數(shù)碼管程序沒做數(shù)值修正,為什么我們卻能看到打包動作?(4)利用TIM_ETR引腳實現(xiàn)以上功能,該怎么改程序?故障現(xiàn)象:解決辦法:原因分析:
三、要點記錄及成果檢驗任務(wù)6.3利用計數(shù)器更新中斷實現(xiàn)打包操作姓名學(xué)號日期分數(shù)(一)自主設(shè)計1、用TIM4_ETR外部時鐘模式2完成如上打包功能,請畫出電路寫出程序。2、用TIM3外部時鐘模式1,完成如下功能:每按下按鍵5次,流水燈狀態(tài)左移1位。請畫出電路圖,寫出程序并調(diào)試。
任務(wù)6.4STM32軟硬件深入(六)任務(wù)目標(biāo)理解STM32濾波原理,能根據(jù)干擾信號的頻率,確定濾波系數(shù);對影子寄存器的機制有初步認識;初步了解定時器捕捉功能及其應(yīng)用場合。學(xué)習(xí)與實踐(一)STM32濾波原理及濾波系數(shù)選擇干擾信號對計數(shù)值的影響實際系統(tǒng)送入定時器的外部脈沖信號常常疊加著各種干擾,干擾信號的存在使本該穩(wěn)定的高低電平上出現(xiàn)了額外波動,如圖6.4.1所示。如果不過濾掉這些干擾,多出來的觸發(fā)沿肯定會造成計數(shù)錯誤。一般來說,干擾存在過程中的抖動越頻率(干擾頻率越高)、干擾存在的時間越長,產(chǎn)生的干擾觸發(fā)沿就越多;采樣頻率越高,對干擾越敏感,越容易采集到干擾帶來的觸發(fā)沿。圖6.4.1干擾信號的疊加效果按鍵的抖動也是一種干擾,它會造成一次按鍵卻出現(xiàn)多個觸發(fā)沿。之前我們采用延時的辦法,檢測到上升沿后,延時10~20ms,從而避免采集到多余的干擾沿。這實際上是一種降低信號采集頻率,從而降低對干擾敏感度的濾波方法。STM32TIM濾波器的濾波原理如圖6.1.1,STM32定時器內(nèi)部帶有濾波電路,可以對對來自TIMx_CH或TIMx_ETR引腳上的外部脈沖進行濾波處理。其濾波策略有兩種:(1)通過降低采樣頻率濾除干擾圖6.4.2適當(dāng)降低采樣頻率,可濾除干擾如圖6.4.2,原本只有2個低電平和2個高電平的信號上疊加了多個干擾。可以看出,按照采樣頻率f1進行采樣,干擾不能濾除。降低采樣頻率到f2,干擾全部被濾掉??梢娺m當(dāng)降低采樣頻率可以過濾掉高頻干擾。當(dāng)然,采樣頻率也不能過低,那樣可能會將真正的信號變化也過濾掉。實際應(yīng)用時應(yīng)該根據(jù)干擾信號的頻率選擇合適的采樣頻率。(2)通過對N次采樣結(jié)果進行比較濾除干擾在采樣頻率一定的情況下,如果連續(xù)N次采樣采入的電平都相同,說明信號是穩(wěn)定的,數(shù)據(jù)有效;否則說明信號有波動、不穩(wěn)定,很可能是干擾造成的,數(shù)據(jù)應(yīng)該被丟棄。適當(dāng)增加N值,可提高抗干擾能力。圖6.4.3中,原本只有2個低電平和2個高電平的信號上疊加了許多干擾。按照圖示的采樣頻率,如果取N=1,就是認為每一個采樣值都有效,這顯然不能過濾掉疊加在信號上的干擾帶來的多余上升沿(和下跳沿)。如果取N=2,需要連續(xù)采到2個“0”或者2個“1”數(shù)據(jù)才有效。但從圖中可以看到,干擾發(fā)生期間,采到的信號恰好總是“0”、“1”、“0”、“1”地變化,做不到連續(xù)2個“0”或者2個“1”,于是這些數(shù)據(jù)都被拋棄了,只留下那些符合條件的信號,我們看到,干擾被全部過濾掉。圖6.4.3采樣脈沖不變情況下,N=2時,干擾被全部過濾掉圖6.4.4相對圖6.4.3,干擾信號的脈寬增加了,干擾信號被連續(xù)2次采集到的概率相應(yīng)增加,我們看到,N=2情況下,沒能完全過濾掉干擾,N=3就很好了。圖6.4.4干擾信號變寬了,增大N到3時,干擾被全部過濾掉可見實際應(yīng)用中,應(yīng)該根據(jù)干擾信號和采樣頻率頻率選擇合適的N值,才能得到理想的濾波效果。一般需要N×T采樣>t干擾,即N>t干擾×f采樣,才可以過濾掉干擾。圖6.4.5t干擾/T采樣=5,N至少應(yīng)取6才可濾掉干擾從圖6.4.5可以看出,t干擾/T采樣=5,N至少應(yīng)取6。注意如果干擾高低電平時間不相等,取最大者。例如:f采樣=0.5625MHz,t干擾=10μs,N應(yīng)大于5.625,可以取6或7以上數(shù)值。濾波系數(shù)的選擇在編程時,我們需要聲明的是濾波系數(shù)和時鐘分割系數(shù),它們共同決定了f采樣和N的取值。允許的濾波系數(shù)是0~15,與f采樣及N的關(guān)系如表6.4.1所示。從表中可以看出:表6.4.1濾波系數(shù)與f采樣和N的關(guān)系濾波器系數(shù)采樣頻率f采樣采樣數(shù)N濾波器系數(shù)采樣頻率f采樣采樣數(shù)N0fDTS18fDTS/861fCK_INT29fDTS/882fCK_INT410fDTS/1653fCK_INT811fDTS/1664fDTS/2612fDTS/1685fDTS/2813fDTS/3256fDTS/4614fDTS/3267fDTS/4815fDTS/328當(dāng)濾波系數(shù)設(shè)置為0時,采樣頻率=fDTS,采樣數(shù)N=1;當(dāng)濾波系數(shù)設(shè)置為15時,采樣頻率=fDTS/32,采樣數(shù)N=8。那么fDTS又是什么?fDTS是采樣基準頻率,其大小取決于程序中時鐘分割系數(shù)的設(shè)置。時鐘分割系數(shù)設(shè)定為:TIM_CLOCKDIVISION_DIV1:fDTS=fCK_INT時鐘分割系數(shù)設(shè)定為:TIM_CLOCKDIVISION_DIV2:fDTS=fCK_INT/2時鐘分割系數(shù)設(shè)定為:TIM_CLOCKDIVISION_DIV4:fDTS=fCK_INT/4假如定時器的工作時鐘fCK_INT=72MHz,時鐘分割系數(shù)設(shè)定為:TIM_CKD_DIV4,則fDTS=fCK_INT/4=72MHz/4=18MHz。按照表6.4.1:濾波系數(shù)設(shè)置為14時,f采樣=fDTS/32=0.5625MHz,N=6,t干擾<6/0.5625≈10.67us,即高/低電平時長小于10.67us的干擾可以被過濾掉。假設(shè)干擾為方波,則f干擾=1/(2t干擾),可以計算出STM32能過濾掉的干擾信號頻率范圍:濾波系數(shù)=0、時鐘分割系數(shù)=1:f干擾=f采樣/(2N)=fDTS/2==fCK_INT/2=72/2=36MHz;即高于此頻率的干擾會被過濾;濾波系數(shù)=15、時鐘分割系數(shù)=4:f干擾=f采樣/(2N)=fDTS/(32×2×8)==fCK_INT/(4×32×2×8)=72/(4×32×2×8)≈35KHz;即高于此頻率的干擾會被過濾。如果希望進一步降低濾波頻率的閾值,可以采樣外部時鐘模式2。這種模式下,路徑上還有一個ETR預(yù)分頻器。適當(dāng)增大ETR預(yù)分頻系數(shù)
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024無錫江陰專利許可使用合同
- 2024年跨區(qū)域電子商務(wù)平臺運營協(xié)議
- 2024年跨境電商平臺入駐經(jīng)紀代理服務(wù)協(xié)議3篇
- 2024年貨物買賣合同(進口)
- 第九章《簡單機械 功》單元測試含解析2024-2025學(xué)年魯科版(五四學(xué)制)物理八年級下冊
- 老年健康知識培訓(xùn)課件
- 2024年財產(chǎn)分割協(xié)議書
- 《俄羅斯國情概況》課件
- 2024年版技術(shù)服務(wù)項目詳細分包合同模板版B版
- 2024文化石電商平臺入駐合作采購合同范本3篇
- 2020年高級統(tǒng)計實務(wù)與案例分析真題及答案
- 新型農(nóng)村集體經(jīng)濟研究綜述
- 人教版數(shù)學(xué)八年級上冊第十一章 三角形 作業(yè)設(shè)計 教案(含答案)
- 管理人履職工作報告
- 學(xué)校財務(wù)整改報告范文(合集5篇)
- 產(chǎn)品供貨質(zhì)量保障措施
- 宇電溫控器ai 500 501用戶手冊s 6中文說明書
- 部編版五年級語文下冊第四單元整體教學(xué)設(shè)計
- 股權(quán)激勵外文文獻
- 【事業(yè)單位考試】2023年04月外交學(xué)院度第二次公開招聘人員沖刺題
- 課外文言文閱讀100篇:經(jīng)典古文名篇100
評論
0/150
提交評論