海濤 陸代澤 韋文 吳宗霖 海藍(lán)天
摘? 要:為了實(shí)現(xiàn)對(duì)各類信號(hào)源的模擬、捕獲和顯示,基于STM32設(shè)計(jì)了一個(gè)綜合實(shí)驗(yàn)方案,并采取“信號(hào)發(fā)生+信號(hào)捕獲”的設(shè)計(jì)理念.以方波信號(hào)為例,利用STM32開發(fā)板,設(shè)計(jì)了一套方波信號(hào)源和相應(yīng)的檢測(cè)系統(tǒng),該系統(tǒng)利用一塊STM32按要求輸出不同類型的方波信號(hào),另一塊STM32對(duì)方波信號(hào)進(jìn)行捕獲.實(shí)驗(yàn)結(jié)果表明:?jiǎn)纹瑱C(jī)1可成功實(shí)現(xiàn)對(duì)方波信號(hào)的模擬,單片機(jī)2則實(shí)現(xiàn)了對(duì)信號(hào)的捕獲與顯示,證實(shí)了方案的正確性與可行性.該方案是一種拓寬單片機(jī)實(shí)驗(yàn)范圍的新思路,可應(yīng)用于對(duì)工業(yè)現(xiàn)場(chǎng)各類信號(hào)源的模擬及捕獲.
關(guān)鍵詞:STM32;信號(hào)源;方波信號(hào);輸入捕獲
中圖分類號(hào):TP368;TN409? ? ? ? DOI:10.16375/j.cnki.cn45-1395/t.2021.01.004
0? ? 引言
目前,國(guó)內(nèi)高校的單片機(jī)教學(xué)都是以51系列單片機(jī)為教學(xué)對(duì)象,實(shí)驗(yàn)裝置多以51系列單片機(jī)為控制核心[1-4].雖然可以使用ATmega 16等性能更強(qiáng)的單片機(jī)替代51系列單片機(jī),從而完成對(duì)實(shí)驗(yàn)裝置的升級(jí)改造[5].但是實(shí)驗(yàn)裝置采取的是實(shí)驗(yàn)箱的形式,不僅笨重而且大都是偏向于驗(yàn)證性的實(shí)驗(yàn)[6].當(dāng)學(xué)生需要進(jìn)行一些創(chuàng)新性設(shè)計(jì)時(shí),實(shí)驗(yàn)裝置無法滿足要求,迫切需要新的單片機(jī)及理念來滿足學(xué)生的學(xué)習(xí)需求.與51單片機(jī)相比,STM32具有內(nèi)核先進(jìn)、高度集成、性能出眾、易于開發(fā)、便于攜帶的特點(diǎn)[7],且相關(guān)軟件、硬件資料完全公開[8].以STM32開發(fā)板代替原有的實(shí)驗(yàn)裝置或?qū)嶒?yàn)平臺(tái),作為單片機(jī)實(shí)驗(yàn)教學(xué)的延伸,有助于激發(fā)學(xué)生的創(chuàng)新能力,為單片機(jī)的實(shí)驗(yàn)教學(xué)開拓了一種新的思路.
本文基于STM32開發(fā)了一個(gè)方波信號(hào)發(fā)生器及其檢測(cè)的實(shí)驗(yàn)系統(tǒng),即實(shí)驗(yàn)由兩個(gè)綜合實(shí)驗(yàn)構(gòu)成(一個(gè)模擬輸出與輸入實(shí)驗(yàn)).通過該實(shí)驗(yàn)可使學(xué)生掌握STM32的信號(hào)發(fā)生、輸入捕獲、LED顯示以及定時(shí)器的原理和應(yīng)用,起到舉一反三的作用.
1? ? 總體設(shè)計(jì)方案
設(shè)計(jì)目標(biāo)是:使用STM32單片機(jī)1(簡(jiǎn)稱單片機(jī)1)產(chǎn)生一個(gè)可調(diào)的方波信號(hào),通過另一塊STM32單片機(jī)2(簡(jiǎn)稱單片機(jī)2)捕獲方波信號(hào)并進(jìn)行顯示.實(shí)現(xiàn)方式為:通過按鍵電路在單片機(jī)1上產(chǎn)生可調(diào)的方波信號(hào),再由單片機(jī)2來捕獲單片機(jī)1產(chǎn)生的方波信號(hào),最終利用液晶屏、示波器等對(duì)方波信號(hào)進(jìn)行顯示.本次設(shè)計(jì)的方波信號(hào)發(fā)生與檢測(cè)系統(tǒng)的原理圖如圖1所示:?jiǎn)纹瑱C(jī)1通過PB5與PE5端口產(chǎn)生方波信號(hào),單片機(jī)2使用PA0與PE3端口進(jìn)行方波信號(hào)的捕獲檢測(cè).
方波信號(hào)發(fā)生器在設(shè)計(jì)時(shí)要求具有待機(jī)、PB5端口輸出方波、PE5端口輸出方波以及可調(diào)相位差等4種狀態(tài),并通過STM32上的LED燈DS0、DS1來顯示其狀態(tài).設(shè)計(jì)的方波信號(hào)發(fā)生器預(yù)計(jì)能實(shí)現(xiàn)的功能如圖2所示.
從圖2可知,按鍵KEY0與按鍵KEY1是低電平有效,按鍵KEY_UP為高電平有效.由KEY0來實(shí)現(xiàn)狀態(tài)的切換選擇,通過KEY1與KEY_UP對(duì)方波信號(hào)進(jìn)行控制.
2? ? 方波信號(hào)發(fā)生器的設(shè)計(jì)
2.1? ?硬件設(shè)計(jì)及與傳統(tǒng)發(fā)生器的對(duì)比
STM32常用的有STM32F103~F107系列,基于Cortex-M3內(nèi)核且采取的是馮·諾依曼結(jié)構(gòu)[9-10].本次實(shí)驗(yàn)的單片機(jī)選取STM32F103系列,其芯片為STM32F103ZET6,用到的硬件資源有:指示燈DS0、DS1、按鍵KEY_UP、按鍵KEY0、按鍵KEY1.通過按鍵電路與STM32單片機(jī)結(jié)合產(chǎn)生相位不同、頻率不同的方波信號(hào),并通過LED進(jìn)行顯示.基于STM32F103ZET6方波信號(hào)發(fā)生器的電路原理圖如圖3所示.
傳統(tǒng)的方波信號(hào)發(fā)生器如圖4所示,由純硬件電路所組成,包括振蕩器、變換器、輸出級(jí)、電源等部分.方波信號(hào)的調(diào)頻、調(diào)幅等一系列控制操作均是通過旋鈕改變?cè)骷碾娮柚怠㈦娙葜祦韺?shí)現(xiàn),但此方法存在較大的不足:通過旋鈕調(diào)節(jié)很難準(zhǔn)確調(diào)節(jié)出所需要的變量,在進(jìn)行實(shí)驗(yàn)時(shí)耗時(shí)較大且容易存在誤差;同時(shí),頻繁地對(duì)元器件進(jìn)行調(diào)節(jié)操作會(huì)造成器件的快速磨損,嚴(yán)重降低器件壽命,發(fā)生故障的概率相對(duì)較高.
而基于STM32的方波信號(hào)發(fā)生器是由硬件和軟件相結(jié)合來產(chǎn)生方波信號(hào),其核心部分是由芯片STM32F103ZET6結(jié)合所編程序來實(shí)現(xiàn)方波信號(hào)的產(chǎn)生.與傳統(tǒng)信號(hào)發(fā)生器相比,其頻率和幅值的調(diào)節(jié)都是通過修改程序來實(shí)現(xiàn),在相同實(shí)驗(yàn)條件下,可克服傳統(tǒng)純硬件方波信號(hào)發(fā)生器的一些缺點(diǎn).此外,其產(chǎn)生的方波信號(hào)可以通過單片機(jī)自身的顯示裝置進(jìn)行驗(yàn)證,更加直觀和易于操作.
2.2? ?軟件設(shè)計(jì)
方波信號(hào)實(shí)際上是一個(gè)二值函數(shù),要使STM32產(chǎn)生一個(gè)可調(diào)的方波信號(hào),即通過編程控制STM32的定時(shí)器,調(diào)節(jié)其I/O口電平輸出頻率.STM32擁有多個(gè)GPIO,且每個(gè)GPIO組都有16個(gè)I/O口[11].本次設(shè)計(jì)需要用到的I/O口數(shù)量為5個(gè),其I/O分配表如表1所示.
本次實(shí)驗(yàn)以MDK5.14為STM32的開發(fā)環(huán)境,根據(jù)要求在MDK Keil軟件使用C語(yǔ)言編寫程序,并燒錄到單片機(jī)中,調(diào)整定時(shí)器參數(shù)改變I/O口輸出頻率.方波信號(hào)發(fā)生器的程序設(shè)計(jì)流程示意圖如圖5所示.
如圖5所示:在STM32中,進(jìn)行外設(shè)的配置操作之前先使能該外設(shè)時(shí)鐘,時(shí)鐘的使能通過調(diào)用函數(shù)RCC_APB2PeriphClockCmd()實(shí)現(xiàn).而PB5與PE5初始化通過調(diào)用函數(shù)GPIO_Init()實(shí)現(xiàn),目的是為了配置I/O口模式和速度.開啟AFIO時(shí)鐘,是為了對(duì)AFIO_EXTICRx(x=1~4)寄存器進(jìn)行讀/寫操作而準(zhǔn)備.按照?qǐng)D5的流程圖編寫好程序后,通過與按鍵電路相結(jié)合,即可控制I/O口輸出電平的高低、頻率及脈沖寬度.
3? ? 方波信號(hào)的檢測(cè)
在STM32中,其輸入捕獲模式可以用來測(cè)量高電平的脈沖寬度或信號(hào)的頻率[12].若使用單片機(jī)2來檢測(cè)單片機(jī)1產(chǎn)生的方波信號(hào),則需要通過STM32的定時(shí)器實(shí)現(xiàn)輸入捕獲[13].本次實(shí)驗(yàn)使用TIM5_CH1(PA0端口)來捕獲高電平脈沖,方波信號(hào)捕獲主程序的部分代碼如下:
STM32輸入捕獲的原理為:對(duì)TIMx_CHx上的邊沿信號(hào)進(jìn)行檢測(cè),若檢測(cè)的邊沿信號(hào)發(fā)生突變(上升沿突變或者下降沿突變),則將定時(shí)器的當(dāng)前值TIMx_CNT存放到與其相對(duì)應(yīng)的捕獲/比較寄存器TIMx_CCRx中,從而實(shí)現(xiàn)一次信號(hào)的捕獲.
本次實(shí)驗(yàn)TIM5的CH1先設(shè)置為上升沿捕獲,在第一次捕獲到上升沿的時(shí)候,清除TIM5的計(jì)數(shù)值、計(jì)數(shù)溢出次數(shù)等計(jì)時(shí)變量與相關(guān)寄存器,再設(shè)置PA0端口為下降沿捕獲.成功捕獲下降沿后,按照TIM5的計(jì)時(shí)公式算出高電平脈寬,并進(jìn)行記錄,然后再次把PA0端口配置為上升沿捕獲,TIM5也重新計(jì)時(shí).第二次捕獲到上升沿的時(shí)候,同理,算出時(shí)長(zhǎng),最后將前后兩個(gè)時(shí)間相加再運(yùn)算,即可計(jì)算出方波信號(hào)頻率與周期.在知道方波信號(hào)周期的前提下,通過信號(hào)捕獲功能,即可得到兩個(gè)方波信號(hào)之間的相位差.
為了實(shí)現(xiàn)方波信號(hào)的捕獲與參數(shù)顯示,還需要加入LCD液晶顯示器的顯示程序,STM32的TFTLCD顯示模塊是一塊分辨率為240*320 的電阻觸摸屏,使用16位并口驅(qū)動(dòng)[14],單片機(jī)2信號(hào)捕獲與顯示的程序設(shè)計(jì)流程圖如圖6所示.
4? ? 實(shí)驗(yàn)驗(yàn)證
為了驗(yàn)證單片機(jī)1是否可以產(chǎn)生方波以及單片機(jī)2是否可以捕獲單片機(jī)1產(chǎn)生的方波,通過? ? FlyMcu軟件將MDK Keil中編譯無誤的方波信號(hào)發(fā)生器的程序與信號(hào)捕獲與顯示的程序分別燒錄到兩塊STM32開發(fā)板中進(jìn)行驗(yàn)證.同時(shí)使用杜邦線將單片機(jī)1的PB5和單片機(jī)2的PA0相連接,單片機(jī)1的PE5和單片機(jī)2的PE3相連接.觀察是否可以通過單片機(jī)1上的按鍵產(chǎn)生方波和對(duì)方波信號(hào)進(jìn)行控制,且由單片機(jī)2捕獲其頻率并顯示.
方波信號(hào)發(fā)生器的輸出模式由KEY0進(jìn)行選擇,當(dāng)KEY0按下不同的次數(shù)時(shí),單片機(jī)1的輸出模式及開發(fā)板上的指示燈DS0、DS1的顯示結(jié)果如表2所示.
由于STM32的DS0與DS1是低電平有效,因此,表2中,“1”代表指示燈不亮,“0-”代表指示燈交替閃爍.當(dāng)單個(gè)指示燈交替閃爍時(shí),相應(yīng)端口產(chǎn)生方波信號(hào),同時(shí)閃爍則說明兩個(gè)端口產(chǎn)生方波.
實(shí)驗(yàn)中,單個(gè)方波信號(hào)的初始周期設(shè)定為? ?0.2 s,通過按鍵可在原有周期的基礎(chǔ)上增多或減少0.2 s.PB5與PE5同時(shí)產(chǎn)生方波信號(hào)時(shí),兩個(gè)信號(hào)的周期均為1.2 s,周期的最大值設(shè)定為3.6 s.當(dāng)存在相位差時(shí),通過按鍵每次可在原有相位差上增加或減少36°.若方波信號(hào)同相,按鍵按下5次則將使方波信號(hào)反相(180°),再按5次又將恢復(fù)同相.
為了探究所設(shè)計(jì)方案的可靠性與準(zhǔn)確性,首先以單片機(jī)1隨機(jī)產(chǎn)生12組不同頻率、不同周期以及不同相位差的方波信號(hào),并以單片機(jī)2對(duì)其進(jìn)行捕獲測(cè)量,通過多次反復(fù)試驗(yàn)來觀測(cè)單片機(jī)2可否較好捕獲單片機(jī)所產(chǎn)生的方波信號(hào).實(shí)驗(yàn)數(shù)據(jù)的匯總結(jié)果如表3所示.
表3中,[T1]、[f1]和[T2]、[f2]為單片機(jī)1的PB5與PE5產(chǎn)生的方波信號(hào)的周期、頻率,[T12]、[f12]和[T22]、[f22]為單片機(jī)2的PA0與PE3檢測(cè)到的周期、頻率,[θ1]為單片機(jī)1發(fā)生的兩個(gè)波形的相位差,[θ12]為單片機(jī)2檢測(cè)到的兩個(gè)波形的相位差.
由表3的數(shù)據(jù)對(duì)比可知,在PB5或PE5端口單獨(dú)產(chǎn)生方波信號(hào)、PB5和PE5端口同時(shí)產(chǎn)生方波信號(hào)等不同情況時(shí),單片機(jī)2捕獲后測(cè)量到的周期、頻率以及相位差等參數(shù)與單片機(jī)1產(chǎn)生的信號(hào)相差無幾.單片機(jī)1成功實(shí)現(xiàn)了方波信號(hào)的發(fā)生,單片機(jī)2則實(shí)現(xiàn)了信號(hào)的捕獲與檢測(cè),達(dá)到了預(yù)期的目標(biāo).同時(shí),多次反復(fù)的實(shí)驗(yàn)結(jié)果也從側(cè)面證實(shí)了本文所設(shè)計(jì)方案的可行性與可靠性.
方波信號(hào)并不能直觀地看出,但在單片機(jī)1上可通過LED燈DS0和DS1來判斷是否有方波產(chǎn)生.當(dāng)PB5端口產(chǎn)生方波時(shí)LED燈DS0閃爍;當(dāng)PE5端口產(chǎn)生方波時(shí)LED燈DS1閃爍;當(dāng)PB5與PE5同時(shí)產(chǎn)生方波時(shí),DS0與DS1同時(shí)閃爍.以PB5端口產(chǎn)生方波為例,單片機(jī)1上的紅色LED燈閃爍(DS0),并且單片機(jī)2通過捕獲單片機(jī)1的方波信號(hào)后在液晶屏顯示其頻率,實(shí)驗(yàn)結(jié)果及實(shí)物圖如圖7所示.
為了更加直觀地觀察出方波信號(hào)的相位差及其變化情況,當(dāng)單片機(jī)1的PB5端口與PE5端口同時(shí)產(chǎn)生方波(可調(diào)相位差狀態(tài))時(shí),使用型號(hào)為TDS1001B-SC的示波器對(duì)單片機(jī)2捕獲后的波形進(jìn)行測(cè)量.
實(shí)驗(yàn)的步驟為:首先將KEY0按鍵按下3次使DS0、DS1同時(shí)閃爍,此時(shí)通過單片機(jī)1上的按鍵KEY1與按鍵KEY_UP對(duì)頻率進(jìn)行調(diào)整,對(duì)相位差進(jìn)行控制;之后通過這兩個(gè)按鍵對(duì)方波信號(hào)的相位進(jìn)行調(diào)整和控制,并觀察示波器上波形的變化情況.示波器導(dǎo)出的測(cè)量結(jié)果如圖8所示.
5? ? 結(jié)語(yǔ)
通過利用STM32片機(jī),成功設(shè)計(jì)了一個(gè)方波信號(hào)發(fā)生器及其檢測(cè)的實(shí)驗(yàn)系統(tǒng).單片機(jī)1產(chǎn)生了可調(diào)的方波信號(hào),單片機(jī)2則實(shí)現(xiàn)了捕獲與顯示,并通過多次反復(fù)的實(shí)驗(yàn)證實(shí)了設(shè)計(jì)方案的準(zhǔn)確性與可行性.單片機(jī)1產(chǎn)生的方波信號(hào)亦可以由單片機(jī)1自己捕獲并顯示,其原理與單片機(jī)2的捕獲原理一致.本文成功實(shí)現(xiàn)了方波信號(hào)的模擬輸出和輸入捕獲,能推廣到對(duì)正弦波、鋸齒波、三角波和諧波等各類信號(hào)源的模擬上,也可以模擬應(yīng)用現(xiàn)場(chǎng)的信號(hào)并進(jìn)行發(fā)生和捕捉,降低實(shí)驗(yàn)開發(fā)的成本及周期,拓寬了單片機(jī)的實(shí)驗(yàn)范圍,也為綜合實(shí)驗(yàn)開拓了一種新的思路.本次實(shí)驗(yàn)綜合應(yīng)用了STM32的定時(shí)器、I/O口、按鍵電路、輸入捕獲、LED顯示等多個(gè)模塊與功能,有助于學(xué)生掌握這些模塊的功能與應(yīng)用,激發(fā)學(xué)生的學(xué)習(xí)興趣和自主創(chuàng)新能力.
參考文獻(xiàn)
[1]? ? ?王琳霖,王偉,曹國(guó)強(qiáng),等. 基于單片機(jī)的機(jī)電控制實(shí)訓(xùn)平臺(tái)設(shè)計(jì)[J].實(shí)驗(yàn)技術(shù)與管理,2018,35(4):82-85.
[2]? ? ?朱向慶,黎東濤,蘇超益,等. 適合于項(xiàng)目教學(xué)法的三合一單片機(jī)實(shí)驗(yàn)箱設(shè)計(jì)[J].實(shí)驗(yàn)技術(shù)與管理,2013,30(7):55-59.
[3]? ? ?徐小棟,胡春,董守昆,等. 利用Proteus軟件構(gòu)建單片機(jī)虛擬仿真實(shí)驗(yàn)室[J].計(jì)算機(jī)與數(shù)字工程,2012,40(1):154-157.
[4]? ? ?許京雷. 嵌入式系統(tǒng)課程內(nèi)容設(shè)置[J].中國(guó)教育技術(shù)裝備,2017(8):85-86.
[5]? ? ?海濤,陳明媛,駱武寧,等. 一種單片機(jī)實(shí)驗(yàn)裝置升級(jí)改造的實(shí)現(xiàn)方案[J].實(shí)驗(yàn)室研究與探索,2010,29(3):76-79,87.
[6]? ? ?朱向慶,何昌毅,朱萬(wàn)鴻,等. 基于STM32單片機(jī)的通信技術(shù)實(shí)驗(yàn)系統(tǒng)設(shè)計(jì)[J].實(shí)驗(yàn)技術(shù)與管理,2019,36(8):81-84.
[7]? ? ?湯澤坤,唐培和,徐奕奕. 基于Stm32的光伏監(jiān)控系統(tǒng)的設(shè)計(jì)[J].廣西科技大學(xué)學(xué)報(bào),2015,26(4):54-59.
[8]? ? ?劉軍,張洋,嚴(yán)漢宇. 例說STM32[M].3版. 北京:北京航空航天大學(xué)出版社,2018.
[9]? ? ?沈紅衛(wèi),任沙浦,朱敏杰,等. STM32單片機(jī)應(yīng)用與全案例實(shí)踐[M].北京:電子工業(yè)出版社,2017.
[10]? ?魏永輝. 嵌入式STM32下無源蜂鳴器發(fā)聲[J].科技展望,2016,26(24):163.
[11]? ?盧有亮. 基于STM32的嵌入式系統(tǒng)原理與設(shè)計(jì)[M].北京:機(jī)械工業(yè)出版社,2014.
[12]? ?潘宇. 基于FPGA和STM32的脈寬頻率測(cè)量方法[J].實(shí)驗(yàn)室研究與探索,2017,36(2):83-86.
[13]? ?張洋,劉軍,嚴(yán)漢宇,等. 原子教你玩STM32:庫(kù)函數(shù)版[M].2版. 北京:北京航空航天大學(xué)出版社,2015.
[14]? ?潘盛輝,曹蓬,吳甜甜,等. 基于STM32的障礙物定位檢測(cè)系統(tǒng)設(shè)計(jì)[J].廣西科技大學(xué)學(xué)報(bào),2017,28(3):97-102.