隨著物聯(lián)網(wǎng) (IoT) 網(wǎng)絡(luò)日趨復(fù)雜,物聯(lián)網(wǎng)端點(diǎn)邊緣處理的復(fù)雜度亦水漲船高。因而可能需要使用新系統(tǒng)來(lái)升級(jí)現(xiàn)有的端點(diǎn),這個(gè)系統(tǒng)的微控制器需要更快的時(shí)鐘速度、更大的存儲(chǔ)器,處理器內(nèi)核要更強(qiáng)大。
此外,也許還需要高精度的傳感器和模數(shù)轉(zhuǎn)換器 (ADC),并且這些器件可能還需要定期校準(zhǔn)。對(duì)于線性誤差,使用公式即可輕松補(bǔ)償。然而,非線性誤差與傳感器讀數(shù)之間不存在任何固定偏差模式,因此不能簡(jiǎn)單地用數(shù)學(xué)方法進(jìn)行補(bǔ)償。通常,補(bǔ)償固件非線性誤差的最簡(jiǎn)單方法就是,使用數(shù)據(jù)查找表將所需的校正數(shù)據(jù)存儲(chǔ)在存儲(chǔ)器中。
本文將簡(jiǎn)要介紹傳感器誤差和 ADC 誤差,并討論使用數(shù)據(jù)查找表來(lái)校正此類(lèi)誤差的優(yōu)勢(shì)。此外,本文還將闡釋在基于 STMicroelectronics 的 STM32L496VG 微控制器的系統(tǒng)中,如何使用 ON Semiconductor 的外部 LE25S161PCTXG 串行外設(shè)接口 (SPI) 閃存芯片,來(lái)實(shí)現(xiàn)實(shí)用的、高性?xún)r(jià)比數(shù)據(jù)閃存查找表。
傳感器誤差
對(duì)于能檢測(cè)溫度、壓力和電壓等模擬量的傳感器,都可能存在非線性誤差。在項(xiàng)目開(kāi)發(fā)階段,對(duì)照精確基準(zhǔn)來(lái)測(cè)試傳感器,并將傳感器數(shù)字輸出與基準(zhǔn)值進(jìn)行比較,這一點(diǎn)尤為重要。由此開(kāi)發(fā)人員可以盡早確定是否存在任何傳感器基準(zhǔn)值偏離,以及就應(yīng)用要求而言這些偏差可否接受。然后開(kāi)發(fā)人員就能決定是否有必要補(bǔ)償任何偏差,如有必要,則是否應(yīng)該在硬件或固件中補(bǔ)償偏差。
某些傳感器誤差或許是可預(yù)測(cè)的線性誤差。這類(lèi)誤差補(bǔ)償很簡(jiǎn)單,只需對(duì)傳感器輸出加上或減去某個(gè)常數(shù)即可。有時(shí)這類(lèi)誤差可能會(huì)隨傳感器量程而變化。例如,從零到三分之一量程,可能需要加上某個(gè)常數(shù);從三分之一到二分之一量程,可能就需要不同的常數(shù)。
這些誤差均可進(jìn)行預(yù)測(cè),顯然也很容易校正,但是,精確讀數(shù)的偏差可能會(huì)隨時(shí)間推移而發(fā)生變化。此外,由于傳感器暴露于極端溫度、環(huán)境濕度大或傳感器老化等原因,日后可能還會(huì)出現(xiàn)新的誤差。是否需要校正這些誤差則始終取決于應(yīng)用?;蛟S有必要在極端溫度、壓力和濕度條件下測(cè)試系統(tǒng),以確定傳感器性能。汽車(chē)、軍事和某些工業(yè)系統(tǒng)等應(yīng)用需要對(duì)這些環(huán)境進(jìn)行檢測(cè)。然而,如今許多新的物聯(lián)網(wǎng)端點(diǎn)已然延伸至傳感器應(yīng)用范圍之外,因此傳感器測(cè)試可能成為一項(xiàng)新要求。
與模擬傳感器一樣,諸如 ADC 之類(lèi)常用微控制器模擬外設(shè)可能也需要定期進(jìn)行在系統(tǒng)校準(zhǔn)。ADC 誤差并不總是可預(yù)測(cè),即便可以使用算法校正初始誤差,誤差也可能隨著時(shí)間推移而發(fā)生變化,并可能變得無(wú)法通過(guò)算法來(lái)輕松校正。這可能會(huì)導(dǎo)致系統(tǒng)無(wú)法再以所需精度繼續(xù)運(yùn)行,從而導(dǎo)致高昂的更換成本。
使用數(shù)據(jù)查找表進(jìn)行模擬傳感器誤差校正的優(yōu)勢(shì)
數(shù)據(jù)查找表是一種實(shí)用、有效的方法,可以快速執(zhí)行一些常見(jiàn)計(jì)算,諸如三角函數(shù)等復(fù)雜計(jì)算,或者字節(jié)的位反轉(zhuǎn)或格雷碼轉(zhuǎn)換等簡(jiǎn)單計(jì)算。與在固件中執(zhí)行位反轉(zhuǎn)相比,使用 256 字節(jié)的查找表進(jìn)行字節(jié)位反轉(zhuǎn)速度明顯更快。將此查找表存儲(chǔ)在程序或數(shù)據(jù)閃存中很安全,因?yàn)樗加每臻g很小而且永遠(yuǎn)不需要更改。
此外,將數(shù)據(jù)查找表用于存儲(chǔ)傳感器數(shù)據(jù)校準(zhǔn),也是一種行之有效的方法。像內(nèi)置 ADC 這樣的微控制器模擬外設(shè)可能需要定期校準(zhǔn),方法與模擬傳感器校準(zhǔn)完全相同。大多數(shù)微控制器中的 ADC 精度均可達(dá)到 ±2 或 ±3 個(gè)最低有效位 (LSB)。盡管對(duì)于大多數(shù)應(yīng)用而言這已足夠,但是對(duì)于要求高精度的系統(tǒng),定期校準(zhǔn) ADC 意義重大。
用于校正 24 位數(shù)據(jù)的校準(zhǔn)查找表片段可能如表 1 所示。
傳感器讀數(shù) 傳感器校正值
?。?:
01 AB 24h 00 01 AB 21h
01 AB 25h 00 01 AB 22h
01 AB 26h 00 01 AB 24h
?。?:
表 1:24 位校準(zhǔn)數(shù)據(jù)的數(shù)據(jù)查找表示例片段。原始輸入值是需要進(jìn)行誤差校正的源讀數(shù)。然后,原始值將作為 24 位地址用于查找相應(yīng)的 32 位校正值,其中最高有效字節(jié)始終為 00h。(表數(shù)據(jù)來(lái)源:Digi-Key Electronics)
此例中,原始輸入值是需要進(jìn)行誤差校正的源讀數(shù)。然后,原始值將作為 24 位地址用于查找相應(yīng)的 32 位校正值,其中最高有效字節(jié)始終為 00h。如果查找表不是從地址零開(kāi)始的,則可以為原始輸入值添加偏移。
在決定查找表的存儲(chǔ)位置之前,務(wù)必確定查找表的大小及是否需要重寫(xiě)。這兩點(diǎn)都重要。若永遠(yuǎn)不需要重寫(xiě),則可以將查找表存儲(chǔ)于微控制器的可用片上閃存中。但是如果傳感器需要定期重新校準(zhǔn),那么就要重寫(xiě)內(nèi)部閃存,即要求擦除數(shù)據(jù)表所在的整個(gè)閃存扇區(qū)并重新編程。
如果該閃存扇區(qū)與程序存儲(chǔ)器共用空間,則可能需要重新編譯代碼。即使查找表位于獨(dú)立專(zhuān)用扇區(qū),日后存儲(chǔ)器要求可能會(huì)更改或需要擴(kuò)展,從而導(dǎo)致部分查找表扇區(qū)空間重新調(diào)整用于其他代碼。這使現(xiàn)場(chǎng)傳感器校準(zhǔn)變得復(fù)雜,而且要求通過(guò)網(wǎng)絡(luò)下載重新編譯的代碼,也會(huì)使物聯(lián)網(wǎng)端點(diǎn)無(wú)法獨(dú)立進(jìn)行自校準(zhǔn)。如果涉及多個(gè)傳感器,那么問(wèn)題將進(jìn)一步復(fù)雜化。
對(duì)于片上閃存程序存儲(chǔ)器而言,使用大型查找表(如含 16,777,216 個(gè)條目)進(jìn)行 24 位數(shù)字?jǐn)?shù)據(jù)校準(zhǔn)是不現(xiàn)實(shí)的,甚至無(wú)法實(shí)現(xiàn)。如果隔一個(gè)條目存儲(chǔ)一次,并將缺失條目插入現(xiàn)有的表數(shù)據(jù),則可將查找表大小減半。這種方法帶來(lái)的性能損失較小,精度損失可能為 ±1 LSB。但是,即便是含 8,388,608 個(gè)條目的查找表也不可能存儲(chǔ)在內(nèi)部閃存中。
在基于微控制器的系統(tǒng)中,使用這種大型數(shù)據(jù)查找表的最佳解決方案是使用外部閃存。這為添加數(shù)兆字節(jié)的查找表提供了簡(jiǎn)便方法,而不會(huì)犧牲內(nèi)部閃存程序存儲(chǔ)器。同時(shí),系統(tǒng)也能輕松重寫(xiě)查找表,而不會(huì)影響微控制器的內(nèi)部閃存。
對(duì)于高性能系統(tǒng),添加外部并行閃存來(lái)擴(kuò)展程序和數(shù)據(jù)存儲(chǔ)器是常用方法。但是,這要求微控制器具有外部數(shù)據(jù)總線。額外的地址和數(shù)據(jù)總線以及所需的控制信號(hào)需要占用微控制器 36 個(gè)或更多引腳。這項(xiàng)要求限制了應(yīng)用可用的微控制器。此外,外部總線會(huì)占用更多印刷電路板空間,可能還會(huì)增加系統(tǒng)的電磁干擾 (EMI)。
對(duì)于大多數(shù)系統(tǒng),最佳解決方案是使用外部串行數(shù)據(jù)閃存。這類(lèi)閃存使用串行外設(shè)接口 (SPI) 進(jìn)行數(shù)據(jù)傳輸,只需占用四個(gè)微控制器引腳。
ON Semiconductor 的 LE25S161PCTXG 就是這種閃存器件的典型實(shí)例。這款 16 Mbit 串行閃存器件支持 70 MHz 的 SPI 時(shí)鐘。同時(shí),還支持雙通道 SPI 模式,數(shù)據(jù)傳輸速度最快可達(dá) 140 Mb/s。內(nèi)部狀態(tài)寄存器可用于配置器件的讀、寫(xiě)和低功耗模式。
LE25S161PCTXG 的 SPI 信號(hào)通常用于時(shí)鐘、數(shù)據(jù)和片選(圖1)。它還具有兩個(gè)額外引腳。WP\ 是低電平有效寫(xiě)保護(hù)信號(hào),用于防止寫(xiě)入器件的狀態(tài)寄存器。這可用于防止低優(yōu)先級(jí)固件任務(wù)未經(jīng)授權(quán)重寫(xiě)設(shè)備。HOLD\ 可暫停正在進(jìn)行的數(shù)據(jù)傳輸。如果微控制器在數(shù)據(jù)傳輸過(guò)程中必須執(zhí)行中斷,這一功能將十分有用。數(shù)據(jù)傳輸將暫停直至中斷處理完畢,然后從中斷處繼續(xù)傳輸。

圖 1:ON Semiconductor 的 LE25S161PCTXG 串行閃存采用 8 引腳 UDFN 封裝,具有 3 x 4 mm 的超小尺寸,提供用于時(shí)鐘、數(shù)據(jù)和片選的通常 SPI 信號(hào)。(圖片來(lái)源:ON Semiconductor)
若要讀取存儲(chǔ)于此器件中的簡(jiǎn)單兩列查找表,最簡(jiǎn)單的方法是獲取傳感器讀數(shù),添加存儲(chǔ)器偏移,然后讀取該地址位置對(duì)應(yīng)的存儲(chǔ)器內(nèi)容。該地址對(duì)應(yīng)的存儲(chǔ)器內(nèi)容表示傳感器校正讀數(shù)。
高性能物聯(lián)網(wǎng)端點(diǎn)要求時(shí)鐘速度更快、處理器性能更出色、SPI 更靈活。針對(duì)這些應(yīng)用,STMicroelectronics 推出了 STM32L4 高性能微控制器系列。例如,STM32L496VG 是 STM32L4 產(chǎn)品系列中的一款微控制器,工作頻率為 80 MHz,具有帶浮點(diǎn)單元 (FPU) 的 Arm? Cortex?-M4 內(nèi)核。該器件具有 8 Mbit 的閃存和 320 KB 的 SRAM,支持 1.71 至 3.6 V 的工作電壓,與 ON Semiconductor 的 LE25S161PCTXG 的 1.65 至 1.95 V 工作電壓重疊。
STM32L496VG 帶有全套適合高性能物聯(lián)網(wǎng)端點(diǎn)的外設(shè),包括帶有日歷功能的實(shí)時(shí)時(shí)鐘 (RTC)、三個(gè)采樣率達(dá)每秒 5 MSPS 的 ADC、雙通道數(shù)模轉(zhuǎn)換器 (DAC)、兩個(gè)控制器局域網(wǎng) (CAN) 接口和四個(gè) I2C 接口(圖 2)。此外,還有三個(gè)標(biāo)準(zhǔn) SPI 接口和一個(gè)四通道 SPI 接口。

圖 2:STM32L496 微控制器基于帶 FPU 的 80 MHz Arm Cortex-M4,帶有包括 40 MHz 四通道 SPI 接口在內(nèi)的全套外設(shè)。(圖片來(lái)源:STMicroelectronics)
STM32L496G-DISCO 開(kāi)發(fā)板為 STM32L496VG 的開(kāi)發(fā)提供了有力支持(圖3)。這款物聯(lián)網(wǎng)終端開(kāi)發(fā)板功能全面,包括立體聲微機(jī)電系統(tǒng) (MEMS) 麥克風(fēng)、8 位攝像頭連接器、八個(gè) LED、四向操縱桿和 240 x 240 像素彩色 LCD。連接器引腳可用作 ADC 輸入、四通道 SPI 引腳和大多數(shù) I/O。

圖 3:STM32L496G-DISCO 開(kāi)發(fā)板可為 ST32L496VG 硬件和固件開(kāi)發(fā)提供完善的評(píng)估環(huán)境。(圖片來(lái)源:STMicroelectronics)
STM32L496VG 的四通道 SPI 支持 40 MHz 最大 SPI 時(shí)鐘,同時(shí)也支持標(biāo)準(zhǔn)和存儲(chǔ)器映射 SPI 模式。四通道 SPI 支持雙通道 SPI 模式,最大數(shù)據(jù)傳輸速率為 80 Mb/s。
STMicroelectronics 的四通道 SPI 可與串行數(shù)據(jù)閃存器件快速連接。在標(biāo)準(zhǔn) SPI 模式下,所有操作均使用 SPI 寄存器執(zhí)行。數(shù)據(jù)通過(guò)讀寫(xiě) SPI 數(shù)據(jù)寄存器進(jìn)行傳輸。收到數(shù)據(jù)后會(huì)產(chǎn)生中斷。這與 STM32L496VG 的三種標(biāo)準(zhǔn) SPI 工作模式相同。標(biāo)準(zhǔn) SPI 模式支持單通道、雙通道和四通道數(shù)據(jù)傳輸。ON Semiconductor 的 LE25S161 支持單通道和雙通道 SPI 模式,并且在雙通道 SPI 模式下可與 STM32L496VG 輕松連接(圖 4)。

圖 4:雙通道 SPI 模式下,STMicroelectronics 的 STM32L496VG 四通道 SPI 串口可與 ON Semiconductor 的 LE25S161 連接,SIO0 和 SIO1 可實(shí)現(xiàn)雙向數(shù)據(jù)傳輸,SCLK 可達(dá) 40 MHz,速率為 80 Mb/s。(圖片來(lái)源:Digi-Key Electronics)
若選擇 ON Semiconductor 和 STMicroelectronics 的元器件,實(shí)現(xiàn)數(shù)據(jù)查找表就變得非常簡(jiǎn)單。四通道 SPI 還具有 FIFO,可用于批量數(shù)據(jù)傳輸。但是,如果查找表一次只需訪問(wèn)一個(gè)存儲(chǔ)器位置,則建議禁用 FIFO,原因是不需要這項(xiàng)功能,甚至可能會(huì)造成不必要的延遲。
具有存儲(chǔ)器映射模式的四通道 SPI
四通道 SPI 還支持存儲(chǔ)器映射模式,可將外部串行閃存映射到微控制器的程序或數(shù)據(jù)存儲(chǔ)空間,從而使微控制器固件能夠訪問(wèn)外部 SPI 閃存,幾乎與訪問(wèn)微控制器內(nèi)部存儲(chǔ)器無(wú)異,進(jìn)而使四通道 SPI 操作對(duì)固件是透明的。
如果無(wú)需頻繁訪問(wèn)查找表,則與標(biāo)準(zhǔn) SPI 模式相比,使用存儲(chǔ)器映射模式實(shí)現(xiàn)查找表的優(yōu)勢(shì)可能就完全無(wú)法凸顯,只是簡(jiǎn)化了應(yīng)用固件而已。但是,如需頻繁中斷應(yīng)用,則可能會(huì)反復(fù)暫停 SPI 傳輸以處理中斷。若一個(gè)四通道 SPI 查找操作中斷另一個(gè)查找操作,那么情況可能會(huì)變得相當(dāng)復(fù)雜。
與標(biāo)準(zhǔn) SPI 模式相比,存儲(chǔ)器映射模式能夠更快速有效地應(yīng)對(duì)頻繁訪問(wèn)查找表和高中斷率的應(yīng)用。這種方法簡(jiǎn)化了固件,防止因不同優(yōu)先級(jí)的四通道 SPI 同時(shí)訪問(wèn)而導(dǎo)致的問(wèn)題,以及減少中斷沖突。
然而,實(shí)現(xiàn)存儲(chǔ)器映射查找表有一點(diǎn)不足,即可能會(huì)污染數(shù)據(jù)緩存。雖然 STM32L496 沒(méi)有數(shù)據(jù)緩存,但某些針對(duì)高性能實(shí)時(shí)應(yīng)用的微控制器卻具有這種功能。然而,訪問(wèn)查找表很可能會(huì)導(dǎo)致緩存丟失。因?yàn)閷?duì)于大多數(shù)應(yīng)用而言,鮮少需要在同一個(gè)線程或子例程中兩次訪問(wèn)查找表的同一位置,所以在最初設(shè)計(jì)中查找表數(shù)據(jù)并無(wú)需緩存,并且緩存數(shù)據(jù)可能會(huì)導(dǎo)致重要數(shù)據(jù)從數(shù)據(jù)緩存中移除。盡管只有性能要求極高的應(yīng)用會(huì)出現(xiàn)該問(wèn)題,但也正是這些高性能應(yīng)用在一開(kāi)始就需要數(shù)據(jù)緩存。
針對(duì)查找表數(shù)據(jù)緩存污染的解決方案很少。若硬件允許,可將查找表所在區(qū)域標(biāo)記為不可緩存。另一種解決方案是在訪問(wèn)查找表之前禁用數(shù)據(jù)緩存,然后在訪問(wèn)之后重新啟用。如果緩存切換(啟用/禁用)造成的性能損失尚可接受,那么這種方法也就可以接受了。有些數(shù)據(jù)緩存支持特定架構(gòu)的緩存控制指令,這種方式可以防止緩存污染。為特定應(yīng)用尋求數(shù)據(jù)緩存配置的最佳方法時(shí),務(wù)必對(duì)系統(tǒng)性能進(jìn)行基準(zhǔn)測(cè)試。
串行閃存應(yīng)布置在印刷電路板上,印制線長(zhǎng)度不應(yīng)超過(guò) 120 mm。為避免干擾,SPI 時(shí)鐘信號(hào)路徑應(yīng)至少是印刷電路板印制線寬度的三倍,并且遠(yuǎn)離其他信號(hào)。兩個(gè)雙向數(shù)據(jù)信號(hào)線路間的距離應(yīng)保持在 10 mm 以?xún)?nèi),以避免偏移。
總結(jié)
在物聯(lián)網(wǎng)端點(diǎn)中,外部 SPI 閃存器件是實(shí)現(xiàn)大型數(shù)據(jù)查找表的有效解決方案。這種方法可輕松實(shí)現(xiàn)在系統(tǒng)重新編程和升級(jí),并且最大限度地減少微控制器資源的使用。
評(píng)論