劉孝趙,王海圳,董宜孝
(蘇州經貿職業技術學院 機電技術學院,江蘇 蘇州 215000)
隨著全球信息化的不斷發展,數據采集系統逐漸成為現代檢測系統中必不可少的部分?,F實環境中,涉及溫度、光強、壓力等模擬量都需要進行數據采集,實現實時監測。在采集過程中,傳感器模塊作為數據采集的必要前端,大多以電壓的形式輸出信號,對于數字量輸出的傳感器可以由MCU讀取并處理;對于模擬量輸出的傳感器則經由MCU片上ADC采集轉換為數字信號,再交由主控器進行數據處理以決定下一步操作。
本設計采用來自意法半導體公司的STM32F103 RCT6嵌入式微處理器作為處理核心,擁有高性能、低成本、低功耗、方便二次開發等特點。同時,采用ATKESP8266 WiFi模塊進行數據傳輸。該模塊集成度高、外圍電路簡單,擁有較高的性價比和穩定性。
整個系統由電源模塊、STM32F103RCT6主控器模塊和WiFi模塊組成。ADC模塊集成于MCU片上,各個模塊之間相互獨立,模塊集成度高、使用簡單、拓展性強。
本文選用STM32F103RCT6單片機作為主控MCU,該芯片基于Cortex-M3內核,可以進行復雜數據處理。時鐘主頻較高,同時片上集成12位精度的ADC,USART串口等復雜電路。
單片機由AMS1117提供3.3 V電壓供電,芯片內嵌出廠前調校的8 MHz RC振蕩電路,5,6腳接晶振進行8 MHz時鐘信號輸入[1];芯片3,4腳帶用于校準RTC的32 kHz的晶振;本設計選擇芯片42,43腳連接ATK-ESP8266模塊的RXD,TXD引腳。主控MCU芯片及外圍電路如圖1所示。

圖1 STM32F103RCT6芯片及外圍電路
A/D信號采集及轉換模塊采用STM32F103RCT6片上外設的ADC功能。該ADC是一個12位逐次逼近型A/D轉換器,最小采樣時間1 us,可測量外部16個信號源。各個通道的A/D轉換可以以單次、連續、掃描或間斷模式執行。ADC的結果可以被設置成左對齊或右對齊方式存儲在16位數據寄存器中。
STM32的ADC的轉換通道被分成2個通道組:規則通道組和注入通道組。注入通道的轉換可以打斷規則通道的轉換進程,只有在注入通道轉換完成之后,規則通道才能夠繼續進行轉換。ADC_CR1的SCAN位用于設置掃描模式,可以由軟件設置或清除。ADC_CR2的ADON位用于設置打開和關閉A/D轉換器[2],CONT位用于設置是否進行連續轉換。同樣,ADC的觸發也可以通過設置ADC_CR2的EXTSEL[2∶0]和JEXTSEL[2∶0]位來進行控制。EXTSEL[2∶0]用于選擇規則通道的觸發源;JEXTSEL[2∶0]用于選擇注入通道的觸發源。選定后,由ADC控制寄存器ADC_CR2的EXTTRIG和JEXTTRIG來激活。其中,需要特別注意的是ADC3的規則轉換和注入轉換的觸發源與ADC1和ADC2不同。ALIGN位用于設置數據左右對齊;ADC_SQRx用于定義在規則通道轉換序列中的通道數目和轉換順序;ADC_CR2的RSTCAL位和CAL位用于執行復位校準和A/D校準,由軟件置1,在硬件完成后由硬件自動清零。需要注意的是每次初始化時都應進行校準操作,不校準將有可能導致結果錯誤。
ADC_SMPRx用來設置采樣時間,最小位1.5周期。ADC的轉換時間可以由以下公式計算:
T總=采樣時間+12.5個周期
實際采樣時間則是由每個通道的SMP位的設置來決定的。當ADCCLK被設置成14 Mhz時,最小采樣時間T總=1.5+12.5=14個周期=1 us。在實際運用中,一般情況下PCLK2=72 Mhz,經過ADC預分頻器能分頻到最大的時鐘只能是12 M。若采樣周期為1.5個周期,T總=1.17 us,實際運用中常以此為最快轉換時間。之后,向ADC_CR2的SWSTART位寫1即可開始轉換。通道轉換結束后,可以產生中斷和DMA請求,需要注意的是只有ADC1和ADC3可以產生DMA請求。
STM32的ADC同時擁有模擬看門狗特性,允許應用程序自動檢測輸入電壓是否超出用戶定義的高/低閥值??梢酝ㄟ^ADC_HTR和ADC_LRT設置。
在此次設計中,使用ATK-ESP8266模塊來進行WiFi傳輸。TXD TTL,RXD TTL引腳用于連接單片機串口。ATK-ESP8266模塊片上集了模塊運行必要的外圍組件,共同組成一個完整且自成體系的WiFi傳輸模塊,配網成功后單片機通過串口發生數據就可以通過WiFi傳輸至接收端。模塊內置TCP/IP協議棧,可以通過AT指令進行操作。
在此次設計中,STM32設置為TCP服務器模式,電腦端為AP模式,接受由單片機發送過來的數據。數據由單片機采集,并通過USART串口傳輸到ATKESP8266模塊進行數據向電腦端傳輸[3]。經過測試最大傳輸距離可達到15 m,在傳輸距離小于10 m是傳輸結果最為穩定。ATK-ESP8266模塊原理如圖2所示。

圖2 ATK-ESP8266模塊原理
對一個有穩定性要求的系統來說,電源模塊供電的穩定性至關重要。考慮到本系統僅需3.3 V電壓給單片機及ESP8266供電即可,因此選用AMS1117線性穩壓芯片[4],其電路連接如圖3所示。

圖3 AMS1117及其外圍電路
若對功耗較敏感的系統,優先考慮轉換效率,則可以選擇DC/DC電源[5];若考慮成本因素,并且要求較小的紋波和噪聲,則可以選擇LDO電源。
整個軟件代碼由C語言編寫,利用STM32F103標準庫資源。軟件首先需要進行ADC初始化和串口初始化。ADC不斷采集電壓數值,采集結果經由DMA傳輸到串口,使得STM32內核可由于其他任務,為該系統提供了良好的拓展性。最后,數據經由WiFi模塊傳輸給上位機,主程序進行流程圖編寫。
將模擬量信號接入A/D采集通道1,使用信號發生器給出直流信號于電腦端接受的數據對比,多次測量平均誤差小于0.8%。ADC分辨率0.81 mV,測試時為了提高精度選用了更長的ADC采樣時間,實測速度約為300 kHz。若對精度要求不高可以進一步降低采樣時間以提升采樣速度。經過多次反復測量,采集數據符合設計要求,可供后續數據多樣化應用。
需要注意的是實際使用中應外加保護電路以確保接入MCU的電壓數值為0~3.3 V,避免過壓導致芯片損毀。同時,STM32片上ADC采集精度為12位,如對精度有更高要求可以外接更高精度的ADC采集芯片,也可以通過外接比例電阻等方式擴大量程,但會造成測量精度降低,使用時應按需選擇。
本文使用STM32F103RCT及片上ADC搭配ATKESP8266設計制作了數據采集系統,分析了該系統的硬件組成及軟件設計。具有設計功耗低,性價比高可拓展性強等特點。測試結果表明,該設計可以滿足低頻數據的采集及傳輸的需求。