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