劉靜波,蘇格諾,劉燁楠
(南京工程學院 信息與通信工程學院,江蘇 南京 211167)
電子信息工程專業綜合訓練是重要的實踐性教學環節,是對學生進行專業基礎訓練,培養實踐動手能力,掌握分析問題、解決問題能力的重要課程。在訓練過程中,學生以團隊合作形式,形成分工協作、互相討論、相互促進的氛圍[1],能夠將所學知識正確應用到綜合訓練中,實現綜合訓練課題提出的要求和功能,達到學以致用的教學目的,提升學生工程實踐能力和創新能力[2]。
STM32是目前常用的主控芯片,具備資源豐富、高性能、高性價比特點[3],本文選擇STM32F103RCT6為主控單片機,設計基于阿里云的遠程數據采集與控制系統,作為綜合訓練的教學案例。通過該案例,把STM32相關知識點和傳感器技術等貫穿其中;同時將STM32終端設備與物聯網平臺結合,實現遠程數據傳輸與控制。相比于以往單一功能訓練課題,該案例具備較強的綜合應用特點,對提高學生的綜合應用能力有較好的促進作用[4]。
系統組成如圖1所示,STM32F103RCT6為主控單片機,該芯片主頻達72 MHz,具備串口、定時器(PWM)、外中斷、SPI、DMA、AD轉換等豐富資源[5],是理想控制器。LCD顯示部分采用2.0寸8位數據并口的顯示屏,分辨率為320×240,具備分辨率高、占用單片機數據線少的優點。字庫芯片作為可選擇添加系統的芯片,可以接在SPI1接口,用以顯示漢字,當然也可以省略;溫濕度傳感器HDC1080、存儲芯片AT24C02和時鐘芯片DS3231是I2C接口,因此規劃一組IO端口作為I2C接口,程序通過不同的器件地址訪問,讀取溫濕度數據和時間信息等,云平臺下發的設置報警閾值存放于AT24C02中;遠程訪問通過WiFi模塊ESP8266連接物聯網云平臺,實現遠程數據傳輸與控制。

圖1 系統總體設計結構
系統實現以下功能:終端裝置采集溫濕度數據,讀取時間等參數;在LCD顯示溫濕度數據、時間和閾值、狀態信息等;通過WiFi模塊連接阿里云飛燕平臺后,創建手機可視化頁面,接收溫濕度數據和終端裝置狀態信息;手機端可設置報警閾值,下發到終端裝置,當測量的溫度或濕度超過閾值后,啟動語音提示,同時控制對應風扇運行,風扇轉速根據溫濕度數據高低分不同的轉速擋位運行。
圖2是硬件設計原理圖,硬件設計主要是綜合考慮STM32的外部資源合理分配,LCD接在PB端口,其中有8位數據線和若干控制線;WiFi模塊接入串口2,PA12控制WiFi模塊復位;PC10和PC11作為I2C接口接入時鐘DS3231、溫濕度模塊HDC1080和存儲芯片AT24C02;語音播報可以選擇JQ8900模塊,占用兩個IO端口控制對應的語音播報,可以自行選用未被占用的IO口,分別提示溫度和濕度報警;兩路風扇驅動采用L298,其中PC0、PC1和PC6控制風扇1,PC2、PC3和PC7控制風扇2,PC6和PC7是STM32的定時器8的PWM輸出通道CH1和CH2的控制端,用不同輸出占空比控制風扇的轉速。SPI1接口如果接入字庫芯片,通過SPI總線訪問并讀取字庫數據,取出漢字字模,方便顯示中文字符;如果系統中字庫芯片未采用,程序設計中可以自己取字模,顯示必要的中文信息提示。PC4端口接入DS3231的秒信號,配置PC4為外中斷引腳,作為外中斷控制端,在程序中讀取數據、顯示數據和狀態信息等都在外中斷服務程序中實現[6],提高了主程序效率。

圖2 硬件電路設計
圖3是主流程。首先是終端裝置與服務器建立連接;當連接成功后,完成報文訂閱并確認訂閱是否成功。單片機每隔5 s在定時器中斷發送溫濕度數據和狀態信息,當終端裝置接收到下發的數據或命令后,則對接收的數據或命令進行處理。這實際上是對接收到的字符串進行解析并提取和下發數據信息或命令關鍵字。主程序中,對測量的溫濕度數據與閾值進行比較,當超過設定的閾值后,則會分別進行報警提示和啟動對應的風扇運行。當前狀態信息也會上傳至云平臺,用戶在手機端實時掌握所有數據和狀態信息。終端裝置讀取溫濕度數據和時間信息、顯示數據和閾值以及狀態信息等都在外中斷服務程序中進行,不占用主程序運行。

圖3 主流程
在教學過程中,首先對與本系統案例相關的軟件程序作必要講解與分析。本案例是一個綜合應用,涵蓋了關于STM32的重要知識點,同時加入了云平臺,構成遠程數據傳輸和控制系統,進一步拓展了應用范圍。其中包括:LCD顯示、I2C接口的傳感器應用等,串口2連接WiFi的遠程訪問,定時器主要應用于定時發送數據和配合WiFi模塊接收數據以及外中斷讀取并顯示數據,定時器產生PWM波等很多方面。因此,應該逐步理解各方面的知識點,對每個方面的軟件進行模塊化編程與測試,這也可以在進行硬件設計時同步開展。在此過程中,可以看到不少同學學習過相關課程,也會有一些相關的軟件包,但應該對此進行細致分析,特別是管腳定義、時序狀態等細節方面,確認是否可以應用到本案例中,這樣才能保證軟件設計的正確性。軟件設計時應該對每一個單元模塊單獨進行測試,這樣才是事半功倍的做法。
學生綜合訓練小組內部自行分工,負責硬件設計的同學重視硬件電路設計,硬件電路是基礎,保證硬件電路的正確性才能為軟件調試打下良好基礎。鼓勵在綜合訓練過程中自己設計電路并完成實物制作,硬件設計同樣是模塊化設計方式,推薦的做法是把單片機芯片、LCD顯示、字庫芯片集成設計到一塊開發板上,開發板留有WiFi模塊接口并引出所有IO端口,另外I2C接口的時鐘、溫濕度模塊和存儲芯片可以單獨做成一個三合一的模塊,最后連接到開發板上,開發板只保留基本的單元,不必把所有的芯片或傳感器都集成到開發板上。這樣做的優點在于:開發板相對獨立,可以更換不同接口的模塊,適用于不同的應用系統。
負責軟件編程和硬件設計的學生在綜合訓練時應加強溝通,編寫若干個獨立單元的軟件模塊測試開發板,查看硬件與軟件是否都能正確運行。例如編寫LCD顯示、串口2收發、溫濕度數據讀取、DS3231時鐘芯片驅動、PWM波形產生等子模塊程序并分別測試一下,一方面驗證開發板功能,另一方面也是提前對每一個軟件部分的模塊化編程進行測試。這樣通過軟硬件設計結合達到綜合訓練的目的。
在實際指導過程中,預先設計制作了整套系統,并測試完成;成功運行后,用照片和視頻方式展示出來。圖4是手機端接收數據與運行狀態的界面。一方面完整展示系統實現的功能;另一方面激發學生學習興趣,指導學生按步驟、有計劃地實施,對每一個單元、模塊分別進行測試,最后再組合進行整體調試,這是必然要經歷的過程。通過這個方式,能夠讓學生學習如何設計與調試項目。物聯網云平臺選擇阿里云的飛燕平臺,該平臺與終端裝置采用MQTT協議進行遠程訪問數據傳輸。很多文獻資料以及網絡資源對該部分內容都有詳細分析[7-8],綜合訓練期間,在進行遠程訪問的功能測試時應先用一個最小化的遠程數據測試軟件系統進行測試。例如遠程控制一個開關的通斷,或遠程發送一個固定的數據等,這樣對遠程連接完成測試后,就掌握了數據上傳與接收等各個環節,這對后續采集上傳變量數據是很有幫助的。其中遠程訪問的一個關鍵點是變量數據與飛燕平臺物模型的相互對應關系,學生理解了這些知識后,可以方便地嵌入到自己的綜合訓練項目。最后,再把測試的每一個模塊軟件統一整合到綜合訓練項目,從而實現綜合訓練的功能任務。總體來說,無論是硬件設計還是軟件編程,都是經歷從單元模塊到整體調試的過程,如果不單獨對軟硬件進行模塊化測試,是很難達到整體功能實現的。學生通過綜合訓練,逐步掌握了軟硬件設計分析方法,對模塊化設計有了較深的理解[9]。

圖4 實際運行的手機界面
本文的綜合訓練案例包含了軟硬件設計與調試等多個方面的知識,體現了綜合訓練具備的基礎性、綜合性、創新性和提高性的特點。通過案例教學的方法,極大地激發了學生的學習興趣,提高了綜合訓練教學的效率,使學生綜合能力有了較大程度的提高[10],有效地培養了學生的分析學習能力、團隊協作能力、工程應用能力和創新能力。在綜合訓練過程中,采用循序漸進的方式,引導學生既要有整體設計思維,又要具備從單元模塊到整體調試的能力。綜合訓練期間進行硬件開發板設計,并完成軟件編程調試,這些都能為后續進一步應用拓展很大的空間。綜合訓練培養學生掌握系統設計方法,鍛煉其實踐應用能力,為今后的發展打下良好的基礎。