丁月林



摘要:STM32是一款基于Cortex M3內(nèi)核的微控器,在嵌入式領(lǐng)域有著重要應(yīng)用。本文介紹了一種基于STM32的低功耗溫濕度采集器的硬件設(shè)計及其低功耗實(shí)現(xiàn)。傳感器使用SHT10溫濕度傳感器,介紹并實(shí)現(xiàn)了其通訊時序。該低功耗采集器經(jīng)試驗(yàn)測試可連續(xù)工作近30天,滿足長時間工作的設(shè)計要求。該低功耗實(shí)現(xiàn)方法可應(yīng)用于基于STM32的其他控制系統(tǒng)。
關(guān)鍵詞:STM32;低功耗電源管理
中圖分類號:TP393 文獻(xiàn)標(biāo)識碼:B DOI:10.3969/j.issn.1003-6970.2015.05.018
0 引言
STM32嵌入式系統(tǒng)在許多控制領(lǐng)域有著廣泛的應(yīng)用。STM32是一款基于Cortex-M3內(nèi)核的微控器,該控制器在性能和成本以及低功率操作和硬實(shí)時控制方面設(shè)定了新的標(biāo)準(zhǔn)。Cortex系列是一個完整的處理器核心,一個標(biāo)準(zhǔn)的CPU和系統(tǒng)架構(gòu)。Cortex系列共有三個主要的配置系列:A高端應(yīng)用系列,R為實(shí)時應(yīng)用系列,M為成本敏感和微控器應(yīng)用系列。STM32屬于M配置系列,專為高系統(tǒng)性能與低功耗相結(jié)合設(shè)計。
盡管市場上已有多種溫濕度采集系統(tǒng),但具有低功耗且自帶數(shù)據(jù)記錄功能的采集器較少,并且費(fèi)用較高。本文中采用STM32F103RET6設(shè)計了溫濕度采集系統(tǒng)。該系統(tǒng)工作時間長約30天,低功耗模式采用了停止模式實(shí)現(xiàn),溫濕度傳感器使用SHTIO溫濕度傳感器。結(jié)合實(shí)際使用環(huán)境,采集周期為5分鐘。采用18650鋰電池供電,具有SD卡存儲功能,且能實(shí)現(xiàn)USB全速通信和串口通信。
1 溫濕度采集器設(shè)計
1.1 硬件設(shè)計
采集器的結(jié)構(gòu)框架如圖l所示,主要有供電模塊,USB全速通信模塊,STM32芯片,SD卡存儲模塊,溫濕度傳感器,串口通信模塊,JTAG在線調(diào)試模塊組成。
考慮體積因素,系統(tǒng)采用18650充電鋰電池供電,單節(jié)2400mah電池充滿電后可以工作2個月左右時間。
STM32以合秦公司的HT7333降壓模塊供電。通過RTC實(shí)時時鐘控制,每5分鐘喚醒一次,進(jìn)行數(shù)據(jù)采集。以自定義的通信協(xié)議通過SHT10溫濕度傳感器獲取數(shù)據(jù)。采集到的溫濕度數(shù)據(jù)以16進(jìn)制形式寫入SD卡。SD卡中的數(shù)據(jù)可以經(jīng)由串口通信模塊和USB全速通信模塊導(dǎo)出,也可以直接由SD卡讀出。
1.2 SHT10溫濕度傳感器通信時序
SHT10溫濕度傳感器的通信時序如圖2所示。
傳感器以不小于1V/ms的上電速率供電后,首先進(jìn)入11ms的休眠狀態(tài),在此期間不允許對傳感器發(fā)送任何指令。當(dāng)準(zhǔn)備傳輸數(shù)據(jù)時,需用一組“啟動時序”完成數(shù)據(jù)傳輸?shù)某跏蓟T搯訒r序?yàn)椋寒?dāng)SCK時鐘為高電平時,DATA翻轉(zhuǎn)為低電平,緊接著SCK變?yōu)榈碗娖剑S后在SCK時鐘高電平時,DATA翻轉(zhuǎn)為高電平。后續(xù)命令包含三個地址位和五個命令位。傳感器接收到命令后,會在第8個SCK下降沿后將DATA下拉為低電平(ACK位)。在第9個SCK下降沿后,釋放DATA,將其恢復(fù)為高電平。
其5位的命令集如表1所示。
在“啟動時序”發(fā)送溫濕度測量的命令(00000101表示相對濕度,00000011表示溫度)后,控制器等待測量結(jié)束。過程大約為20/80/320ms,分別對應(yīng)8/12/14bits測量。傳感器通過下拉DATA至低電平并進(jìn)入空閑模式表示測量結(jié)束。控制器在再次出發(fā)SCK前必須等待“數(shù)據(jù)備妥”信號讀取數(shù)據(jù)。溫濕度數(shù)據(jù)可以先被存儲,這樣控制器可以繼續(xù)指向其他任務(wù),在需要時再讀出數(shù)據(jù)。
接著傳輸2個字節(jié)的測量數(shù)據(jù)和1個字節(jié)的CRC奇偶校驗(yàn)。傳感器下拉DATA為低電平,以確認(rèn)每個字節(jié)。所有數(shù)據(jù)從MSB開,右值有效。收到CRC確認(rèn)位之后,表示通訊結(jié)束。若不使用CRC-8校驗(yàn),過保持ACK高電平終止通訊。測量和通訊完成后,傳感器進(jìn)入休眠模式。
1.3 通訊接口配置
溫濕度傳感器與STM32的GPIOB PIN6和GPIOB PIN7連接,其中PIN6為時鐘通訊端口,PIN7為數(shù)據(jù)通訊端口。STM32的PIN6腳為傳輸速度50MHz的推挽輸出,PIN7腳為傳輸速度50MHz的推挽輸入輸出模式(接受數(shù)據(jù)時為輸入,發(fā)送應(yīng)答指令時為輸出)。
“啟動時序”通過寫SHT10的SCK和DATA實(shí)現(xiàn)。先將PIN7腳配置為推挽輸出,速率為50MHz,然后通過拉低SCK時鐘,拉高SCK,拉低DATA,拉低SCK,拉高SCK,拉高DATA,拉低SCK的順序進(jìn)行操作,操作之間設(shè)置一段延遲。在“啟動時序”完成后,通過寫0x03和0x05來實(shí)現(xiàn)發(fā)送命令,進(jìn)行溫度測量和濕度測量。
2 時鐘系統(tǒng)及功耗測試分析
2.1 STM32的時鐘系統(tǒng)
時鐘系統(tǒng)正常工作是使STm32及其外設(shè)正常運(yùn)行的前提,且系統(tǒng)時鐘頻率及外設(shè)時鐘頻率配置的高低對采集器耗電量有著很大影響。STm32有內(nèi)部RC振蕩器,其能夠?yàn)閮?nèi)部提供PLL時鐘,可以達(dá)到微控器最高頻率72MHz的要求。但是內(nèi)部時鐘不及外部晶振準(zhǔn)確和穩(wěn)定,所以在溫濕度采集系統(tǒng)中選用了外部時鐘源,這個外部時鐘源被稱為外部高速振蕩器(HSE)。外部時鐘源用來為Cortex處理器和STM32外設(shè)提供時鐘。由于內(nèi)部PLL時鐘是用整數(shù)值乘以HSE振蕩頻率,因此外部時鐘頻率需能被72MHz。實(shí)際采集系統(tǒng)中選用了振蕩頻率為8MHz的晶振。
其中外部晶振HSE振蕩后,產(chǎn)生8MHz的時鐘信號,經(jīng)PLL鎖相環(huán)9倍頻后至72MHz。系統(tǒng)時鐘以72MHz運(yùn)行,并將APBI外設(shè)時鐘配置為系統(tǒng)時鐘的2分頻,將APB2外設(shè)時鐘配置為系統(tǒng)時鐘的1分頻。
STM32有兩個電源域:主系統(tǒng)和外圍設(shè)備的電源域,備份域。備份域中包括10個16位寄存器,RTC和獨(dú)立看門狗。在低功耗模式下,RTC和獨(dú)立看門狗可以保持繼續(xù)運(yùn)行以喚醒STM32主系統(tǒng)或執(zhí)行系統(tǒng)復(fù)位。STM32包含一個基本的實(shí)時時鐘,它是優(yōu)化了的32位計數(shù)器,當(dāng)有32.768kHz時鐘源提供時鐘時,它會在每一秒到來時計數(shù)。配置時鐘樹時,RTC時鐘源可以選擇來自:內(nèi)部低速振蕩器,外部低速振蕩器或外部高速振蕩器的128分頻。通過RTC可以得到準(zhǔn)確的秒計數(shù),計數(shù)器本身可以產(chǎn)生三種中斷:一秒鐘中斷,溢出中斷和鬧鐘中斷。采集器中選擇外部低速時鐘作為RTC時鐘,通過鬧鐘中斷的方式對主電源域進(jìn)行喚醒,鬧鐘寄存器中存儲的值為32767。
在有電池備份的條件下,RTC可以在主電源域進(jìn)入低功耗模式時繼續(xù)運(yùn)行。通過EXTI他可以在NVIC中產(chǎn)生時間終端,喚醒STM32的主電源域。但是處于體積的考慮,本采集器并未設(shè)計備用電池,而是通過直接通過HT7333模塊輸出管腳為RTC供電。
2.2 功耗測試分析
STM32芯片電源供電框圖如圖3。
溫濕度采集器選用4.2v單節(jié)鋰電池供電,鋰電池容量約為2600mah。由于鋰電池電壓輸出大于芯片供電電壓,且鋰電池使用過程中電壓不斷波動變化,影響數(shù)據(jù)采集準(zhǔn)確性。故采集器中選用了降壓模塊,將電壓降且穩(wěn)定至3.3V,為芯片和外設(shè)供電。
該芯片轉(zhuǎn)換效率約為90%,通過估算方式可得其在3.3V供電時容量約為3000mah。當(dāng)系統(tǒng)時鐘運(yùn)行在最高速72MHz時,用萬用表測量采集系統(tǒng)電流約為100ma。待鋰電池充滿電后進(jìn)行測試,采集周期5分鐘。STM32每次將測量獲得的溫度數(shù)據(jù)、濕度數(shù)據(jù)通過SDIO接口協(xié)議寫入SD卡中。該狀態(tài)下采集時間約為26小時。由此可知,未使用低功耗模式的采集系統(tǒng)耗電量較大。該試驗(yàn)要求的密閉環(huán)境中進(jìn)行采集時,不能滿足長時間持續(xù)工作的設(shè)計要求。
3 低功耗模式的實(shí)現(xiàn)
3.1 STM32的低功耗模式
STM32共有睡眠、停止以及待機(jī)三種低功耗工作模式:
a睡眠模式:默認(rèn)情況下,當(dāng)一個WFE指令或WFI指令被執(zhí)行時Cortex處理器將停止內(nèi)部時鐘,并停止執(zhí)行應(yīng)用程序代碼。該模式下,STM32其余部分將繼續(xù)運(yùn)行。當(dāng)某個外設(shè)產(chǎn)生一個中斷時,其將退出睡眠模式。理論上,若STM32首先禁用所有外設(shè)時鐘(除了喚醒Cortex的外設(shè)以外),再到HSI振蕩器,且將HSI時鐘頻率1MHz一下,可將功耗降低至大約為5ma。
b停止模式:停止模式是Cortex-M3的深睡眠模式基礎(chǔ)上結(jié)合了外設(shè)的時鐘控制機(jī)制。在停止模式下,電壓調(diào)節(jié)器可以運(yùn)行在正常或者低功耗模式。此時1.8V供電區(qū)域的所有時鐘被停止。PLL、HSI和HSE振蕩器功能被禁。本采集器采用停止模式實(shí)現(xiàn)低功耗工作。通過設(shè)置Cortex控制寄存器的SLEEPDEEP位,清除S電源控制寄存器的PDDS位,設(shè)置LPDS為選擇電壓調(diào)節(jié)器的模式,STM32即可進(jìn)人低功耗停止模式。該模式下,WFI或WFE指令的執(zhí)行將停止Cortex處理器,并且關(guān)閉HSE和HSI振蕩器。停止模式下,任意的外部中斷都會將STM32喚醒。
c待機(jī)模式:待機(jī)模式可實(shí)現(xiàn)系統(tǒng)最低功耗,該模式是在Cortex-M3睡眠模式時關(guān)閉電壓調(diào)節(jié)器,整個1.8V供電區(qū)域被斷電。PLL、HIS和HSE振蕩器也被斷電。SRAM和寄存器內(nèi)容丟失,只有備份的寄存器和待機(jī)電路維持供電。待機(jī)模式下STM32僅消耗2uA。通過設(shè)置Cortex電源控制寄存器中的SLEEPDEEP位和STM32的PDDS位可進(jìn)入待機(jī)模式。可以使用RTC鬧鐘喚醒待機(jī)模式,也可以使用外部STM32復(fù)位或獨(dú)立看門狗復(fù)位喚醒,也可以通過PORTA引腳0的上升沿退出待機(jī)模式,但是該引腳必須被配置為喚醒引腳WAKEUP。相應(yīng)的,該模式退出時間花費(fèi)最長,約為50us。
3.2 低功耗停止模式的軟件實(shí)現(xiàn)
首先使能電源控制時鐘和RTC后備寄存器時鐘,之后使能RTC和后備寄存器訪問。然后使能外部32.768kHz低速晶振,待外部晶振振蕩穩(wěn)定之后,配置外部32.768kHz低速晶振作為RTC時鐘,配置完成后使能RTC時鐘。使能RTC時鐘后,等待RTC寄存器同步。對于RTC任何寄存器的寫操作,都必須在前一次寫操作結(jié)束后進(jìn)行。通過查血RTC CR寄存器中的RTOFF狀態(tài)位,判斷RTC寄存器是否處于更新中。當(dāng)且僅當(dāng)RTOFF狀態(tài)位為“1”時,方可寫入RTC寄存器。RTC寄存器配置過程如圖4。
3.3 對比測試分析
在未開啟低功耗停止模式下,取滿電的2600mAh鋰電池進(jìn)行電量測試,采集要素為戶外溫濕度環(huán)境。采集數(shù)據(jù)過程中對電池電流進(jìn)行測試,電流為103mAh。采集點(diǎn)數(shù)為316個點(diǎn),即采集了26小時20分鐘。試驗(yàn)測試采集的數(shù)據(jù)如圖5所示。
在開啟低功耗停止模式下,取滿電的2600mAh鋰電池進(jìn)行電量測試,采集要素也為戶外溫濕度環(huán)境。采集數(shù)據(jù)過程中對電池電流進(jìn)行測試,低功耗模式下電流為4mA,喚醒啟動時,工作電流為54mA。試驗(yàn)開始10天后,測試電源電壓。電壓顯示為3.96V,這表明10天后溫濕度采集器仍在工作。讀取SD卡數(shù)據(jù)。采集點(diǎn)數(shù)為2936個點(diǎn),即采集了10天4小時40分鐘。試驗(yàn)測試采集的數(shù)據(jù)如圖6所示。
按電壓每天下降0.3V速度計算,當(dāng)電壓下降的工作下限3.35V時,其工作時間約為60天。可以滿足長時間工作需要,達(dá)到設(shè)計要求。
4 結(jié)語
介紹了基于STM32F03RET6的低功耗溫濕度采集系統(tǒng)的設(shè)計原理,簡述了SHTIO溫濕度傳感器通訊配置,并給出了“啟動時序”的部分程序?qū)嵗C枋隽薙TM32的低功耗模式,并予以實(shí)現(xiàn)。通過實(shí)際測試,發(fā)現(xiàn)低功耗模式可以使其工作周期延長接近25倍。實(shí)現(xiàn)了長時間連續(xù)采集的設(shè)計要求。該低功耗方法適用于其他STM32控制系統(tǒng),具有較大意義。