電子發燒友網 > 控制/MCU > 正文

通用的ADC數據處理子程序 ---線性插值

2020年02月05日 16:26 ? 次閱讀

雖然這個話題是程序員的基本功,但是,每一次實際使用時都要“重新編程+除錯”折騰一番。
于是,萌發了搞一個“通用的”,目的是,下次用到時,拿過來就用。
大家看看我的方法是不是最佳的,歡迎提出改進方案。

MCUADC讀到的“真實世界”的數據,0~1023對應10bit的ADC,0~4095對應12bit,0~65535對應16bit。通常,這些數據都要通過簡單的數據處理,變換成電壓/電流/溫度/壓力/等等意義明確的數值,用于傳輸或者顯示。

線性插值,就是最最常用的數據處理方法。 直線函數公式:

?


應用實例,某的“電壓—容量”估算結果,大致如下圖所示:

?

由曲線上面可以看出,雖然已經有了10組實測數據,但是只要取其中黃色的4組數據,也就是用3段直線進行線性插值,就可以得到很好的“近似結果”。
下圖,就是用我的“通用線性插值程序”得到的計算結果,看,基本上一樣的。
(注意,ADC數據所對應的電池電壓值,只是測量ADC數據時用可調電源代替電池的外加電壓,它們并不參與運算。?直接由ADC數據插值出電池的剩余電量。)

正弦曲線實例,使用37個X軸等間隔的數據(每10度一個),線性插值出0-360度的范圍一段正弦曲線的結果:
(為了提高轉換精度,合理的做法是在曲線變化劇烈的部分,密集取點;線性好的部分,少量取點。而不是采用等間隔的方式取點。)

?

最后,給出子程序:
含羞草 需要說明的是,筆者對有符號的整數(int)和浮點數(float)有“原始的抵觸”,喜歡使用無符號整數類型(uint)。所以只做出了整數類型的。

下載發燒友APP

打造屬于您的人脈電子圈

關注電子發燒友微信

有趣有料的資訊及技術干貨

關注發燒友課堂

鎖定最新課程活動及技術直播

電子發燒友觀察

一線報道 · 深度觀察 · 最新資訊
收藏 人收藏
分享:

評論

相關推薦

課程介紹:本課程主要針對射頻信號的采集,但是并非傳統意義上的直接利用高采樣率的ADC進行采集。而是根據項目的需求,針對信
發表于 2019-04-29 00:00? 0次閱讀

意法半導體推出STM32H7新產品線,適用于設計...

新MCU功耗保持在低水平,入門級產品采用經濟劃算的64引腳QFP封裝,集成度和實時性能得到提升,可以....
發表于 2020-02-06 13:15? 0次閱讀
意法半導體推出STM32H7新產品線,適用于設計...

數字萬用表雙積分 ADC 的工作原理分析

雙積分 ADC 包括 2 個部分:第一部分是充電和積分電路(圖 1 的上升部分);第二部分是放電部分....
發表于 2020-02-05 15:22? 49次閱讀
數字萬用表雙積分 ADC 的工作原理分析

ST意法半導體與機智云攜手打造的物聯網開源方案D...

MCU設備端基于ST提供的固定嵌入式開發板進行開發,ST提供最新板卡及開發資源,板卡采用雙MCU:S....
發表于 2020-02-04 14:55? 163次閱讀
ST意法半導體與機智云攜手打造的物聯網開源方案D...

Microchip推出經TüV SüD認證的MP...

 經TüV SüD認證的MPLAB XC功能編譯器可滿足ISO 26262汽車安全標準、IEC 61....
發表于 2020-02-03 13:25? 149次閱讀
Microchip推出經TüV SüD認證的MP...

基于MCU的物聯網應用實現數據和設計的安全性

本文將快速查看MCU的主要安全功能,你應該尋找在物聯網為導向的設計。一旦你了解一些常見的功能,可以更....
發表于 2020-02-03 12:36? 152次閱讀
基于MCU的物聯網應用實現數據和設計的安全性

基于單片機的閉環控制系統的設計解決方案

控制回路是許多基于MCU的設計所執行的最基本的任務之一。通常這些設計中未充分利用的關鍵特征和外圍設備....
發表于 2020-02-03 11:50? 81次閱讀
基于單片機的閉環控制系統的設計解決方案

基于單片機實現對單相無刷電機的控制系統設計

對于小功率電機應用,成本比復雜性更為重要,并且對轉矩的平順性要求較低,因此單相無刷直流(BLDC)電....
發表于 2020-02-03 07:48? 52次閱讀
基于單片機實現對單相無刷電機的控制系統設計

SimpleLink MCU平臺構建安全已連接的...

作為SimpleLink MCU平臺的一部分,您可使用各類硬件工具,包括TI SimpleLink ....
發表于 2020-01-24 17:40? 216次閱讀
SimpleLink MCU平臺構建安全已連接的...

真空潔凈機器人

隨著世界變得越來越自動化,使用常規立式吸塵器清潔房屋感覺苦不堪言。自2002年首臺真空機器人上市以來....
發表于 2020-01-23 17:48? 269次閱讀
真空潔凈機器人

通過利用UART與若干器件進行連接解決通信問題

在各種外圍的設備中,使用了通用的異步接收和發送(UART)接口。例如,一個基于微控制的系統有四個這樣....
發表于 2020-01-20 17:17? 334次閱讀
通過利用UART與若干器件進行連接解決通信問題

操縱MCU SPI接口以訪問非標準SPI ADC

ADI公司 Steven Xie,產品應用工程師 問題:能否用MCU訪問非標準SPI接口? 答案:可....
發表于 2020-01-17 16:34? 761次閱讀
操縱MCU SPI接口以訪問非標準SPI ADC

電機控制優化之PSoC4平臺上實現FOC脈寬調制...

矢量控制(FOC)是空間矢量脈寬調制最重要的應用之一。矢量控制,又名磁場定向控制,其特點是通過坐標變....
發表于 2020-01-16 10:30? 218次閱讀
電機控制優化之PSoC4平臺上實現FOC脈寬調制...

關于8位MCU產品十大誤解

關于8位MCU產品的十大誤解
發表于 2020-01-15 16:26? 409次閱讀
關于8位MCU產品十大誤解

TouchGFX中增加了新功能 方便開發吸引眼球...

意法半導體在STM32微控制器(MCU)軟件框架TouchGFX中增加了新功能,方便設備廠商為家用電....
發表于 2020-01-15 14:19? 380次閱讀
TouchGFX中增加了新功能 方便開發吸引眼球...

Qt for MCUs 1.0正式發布誰會成為最...

Qt for MCUs 1.0正式發布,GUI熱潮之后,誰會成為最后的王者?
發表于 2020-01-13 15:09? 368次閱讀
Qt for MCUs 1.0正式發布誰會成為最...

同步關鍵的分布式系統時,新型Σ-Δ ADC架構可...

在獨立設計中,使用的本地時鐘或振蕩器本身就會進行同步。但是,當獨立設計需要集成到更廣泛的系統(我們稱....
發表于 2020-01-13 11:07? 1145次閱讀
同步關鍵的分布式系統時,新型Σ-Δ ADC架構可...

德州儀器正式推出了新一代低功耗高性能的新型Jac...

高度集成化的處理器包含專用的加速器和功能安全特性的芯片以及統一的軟件平臺,能夠滿足整車的計算需求 德....
發表于 2020-01-13 10:25? 893次閱讀
德州儀器正式推出了新一代低功耗高性能的新型Jac...

兆易創新GigaDevice正式發布了GD32E...

業界領先的半導體供應商兆易創新GigaDevice(股票代碼 603986)正式發布基于ArmCor....
發表于 2020-01-13 10:21? 1047次閱讀
兆易創新GigaDevice正式發布了GD32E...

ETC井噴式爆發后,2020年該何去何從?

2019年,在政策的引導、銀行、支付機構,以及各廠商等各路人馬的推波助瀾下,ETC在2019年下半年....
發表于 2020-01-10 09:07? 4837次閱讀
ETC井噴式爆發后,2020年該何去何從?

兆易創新推出GD32E232系列MCU 適用于需...

業界領先的半導體供應商兆易創新GigaDevice正式發布基于Arm? Cortex?-M23內核M....
發表于 2020-01-09 15:01? 277次閱讀
兆易創新推出GD32E232系列MCU 適用于需...

ST用新品拓深拓展MCU市場,未來將在三大方向重...

ST的MCU產品非常豐富,共有兩大產品線,即STM8和STM32,其中STM8是使用的是自有內核。對....
發表于 2020-01-09 14:13? 745次閱讀
ST用新品拓深拓展MCU市場,未來將在三大方向重...

首創通用32位MCU跑分大戰-中國芯超越stm3...

衡量MCU處理器的一個重要指標就是性能,另外一個重要指標便是功耗。本期我們先從性能開始,跑分大賽。本....
發表于 2020-01-09 09:03? 1147次閱讀
首創通用32位MCU跑分大戰-中國芯超越stm3...

IC:     MS8003                MS8...
發表于 2020-01-08 09:40? 482次閱讀

汽車網關和TCU的架構正在迅速變化 能夠高效地處...

在半自動化的趨勢下,汽車架構正在快速演進,車輛的完全自動駕駛最終會得以實現。汽車制造商還引入了多種功....
發表于 2020-01-07 15:02? 539次閱讀
汽車網關和TCU的架構正在迅速變化 能夠高效地處...

真正無晶振設計的MCU 提高了整體性能并降低了成...

從醫療領域的血糖、血壓和血氧飽和度監控器,到樓宇自動化中使用的溫度和煙霧探測器,再到樓宇安全中使用的....
發表于 2020-01-07 14:47? 172次閱讀
真正無晶振設計的MCU 提高了整體性能并降低了成...

Holtek退出全新鋰電池保護SoC MCU 可...

Holtek針對鋰電池保護應用領域,全新推出HT45F8550/60鋰電池保護SoC MCU。相較于....
發表于 2020-01-07 14:22? 182次閱讀
Holtek退出全新鋰電池保護SoC MCU 可...

Microchip dsPIC33F主要特性及P...

Microchip公司的dsPIC33FJ06GS101 / X02和dsPIC33FJ16GSX0....
發表于 2020-01-06 17:14? 1006次閱讀
Microchip dsPIC33F主要特性及P...

  Si522是一款應用于13.56MHz RFID 系統的非接觸式讀寫卡芯片,支持ISO/IEC 14443 Type A 標...
發表于 2020-01-04 10:10? 419次閱讀

MCU也需要AI 能夠突破嵌入式應用可能的極限

微型微控制器與強大的人工智能(AI)世界有什么關系,畢竟,AI設計主要參與方都是功能強大的CPU,G....
發表于 2020-01-03 16:17? 354次閱讀
MCU也需要AI 能夠突破嵌入式應用可能的極限

伺服控制MCU與現有的MCU相比 具備以下特點

對于角旋轉位置反饋的伺服電機來說,一般都是通過施加脈沖寬度調制(PWM)信號,以精確控制運動。工程師....
發表于 2020-01-03 15:36? 242次閱讀
伺服控制MCU與現有的MCU相比 具備以下特點

貿澤電子推出NXP S32K MCU,支持下一代...

ISELED協議避免了昂貴的外部處理,并通過更嚴格的校準和對RGB LED更出色的處理控制,確保了光....
發表于 2020-01-02 15:21? 419次閱讀
貿澤電子推出NXP S32K MCU,支持下一代...

操縱MCU SPI接口以訪問非標準SPI ADC

當前許多精密模數轉換器(ADC)具有串行外設接口(SPI)或某種串行接口,用以與包括微控制器單元(M....
發表于 2020-01-02 11:46? 1092次閱讀
操縱MCU SPI接口以訪問非標準SPI ADC

艾派克:全球MCU銷量下滑,但國產IC正在發力

2019年上半年全球MCU銷售額較2018年上半年下降約13%,出貨量下降約14%。IC insig....
發表于 2019-12-31 17:26? 798次閱讀
艾派克:全球MCU銷量下滑,但國產IC正在發力

兆易創新:三大業務優化戰略布局 5G技術商用落地...

兆易創新代理總經理何衛表示,2019年中國半導體市場逆勢增長,在全球不景氣的外部條件下,依然取得了增....
發表于 2019-12-31 16:08? 2848次閱讀
兆易創新:三大業務優化戰略布局 5G技術商用落地...

采用32位ARM Cortex-M3處理器內核確...

物聯網(IoT)基礎設施可能會在多個方面受到影響。首先,在安裝之前,物聯網節點可能在交貨或運輸過程中....
發表于 2019-12-31 15:35? 1463次閱讀
采用32位ARM Cortex-M3處理器內核確...

請教各位大佬,12c5a單片機怎么同時采集兩個電位器的值用串口發送到PC端?有沒有類似這樣的程序參考一下,感激不盡!...
發表于 2019-12-29 18:26? 382次閱讀

32位MCU勢頭強勁 本土廠商加速追趕

MCU是電子產品的心臟,2023年全球銷售額預計達到213億美元,目前,8位仍是主力,32位需求強勁....
發表于 2019-12-29 00:01? 3108次閱讀
32位MCU勢頭強勁  本土廠商加速追趕

MCU的出貨需求旺盛,未來要關注創新能力

集微網消息,據ICInsights預測,隨著物聯網的持續火熱,MCU的出貨量將持續上升,全球MCU銷....
發表于 2019-12-28 11:09? 1205次閱讀
MCU的出貨需求旺盛,未來要關注創新能力

嵌入式工程師對8位MCU有哪一些誤解

32位處理器的處理更加以軟件為中心,可以做更多的代碼復用。而8位處理器更多地利用硬件外設來完成任務。....
發表于 2019-12-27 16:51? 389次閱讀
嵌入式工程師對8位MCU有哪一些誤解

首款基于KungFu內核架構的32位MCU 提高...

日前,在深圳國際電子展上,芯旺微電子推出首款基于KungFu(功夫)內核架構的32位MCU,將高端芯....
發表于 2019-12-26 16:06? 350次閱讀
首款基于KungFu內核架構的32位MCU 提高...

當今許多應用都要求高速采樣模數轉換器(ADC)具有12位或以上的分辨率,以便用戶能夠進行更精確的系統測量。 然而,...
發表于 2019-12-25 18:03? 1853次閱讀

請問S32K14X Cache的ram是否有對應的ECC功能? ...
發表于 2019-12-24 10:06? 311次閱讀

NodeMCU APIi說明(中文)
發表于 2019-12-23 17:36? 751次閱讀

作品說明:        該作品最初是為某機器人項目而設計,機器人采用解耦結構,各個部分有著不同...
發表于 2019-12-17 22:25? 883次閱讀

在太空中,高能粒子會對器件造成單粒子翻轉效應。因此,在太空中使用的ADC、DAC、PLL這些器件,除了在工藝方...
發表于 2019-12-17 11:00? 406次閱讀

一個Layout工程師的成長經歷通常是這個樣子的: 畫一個簡單的板子,比如電源板 畫一個帶MCU的板子,通常包含一個...
發表于 2019-12-16 15:54? 701次閱讀

,所謂的校準或者標定是使目標產品的MCU DAC輸出精準的電壓嗎?或者是加載ADC通道上的電壓更精準?校準或者標...
發表于 2019-12-14 10:46? 522次閱讀
'+data.username+'
';*/ var login_content = ' 寫文章
' + data.username + '
'; $('#login_area').html(login_content); var win_width = $(window).width(); if (win_width > 1000) { $("#mine").mouseDelay(200).hover(function () { $("#mymenu").show(); }, function () { $("#mymenu").hide(); }); } } else { var content = '登錄'; $('#login_area').html(content); $(".special-login").click(function (e) { $.tActivityLogin(); return false; }); } }); } (function () { /* * 插入單點登錄JS */ var setHost = 'https://passport.elecfans.com'; //設置域名 var script = document.createElement('script'); script.type = 'text/javascript'; script.src = setHost + '/public/pc/js/t.passport.js'; script.setAttribute("id", "sso_script"); script.setAttribute("data-ssoSite", setHost); script.setAttribute("data-ssoReferer", encodeURIComponent(location.href)); script.setAttribute("data-ssoSiteid", "11"); var body = document.getElementsByTagName("body").item(0); body.appendChild(script); })() /* * 推薦文章無圖時樣式修改 * */ $(".article .thumb").each(function () { if ($(this).find('img').attr('src') == "") { $(this).find('img').remove(); $(this).parent().css('padding-left', '0px'); } }); /*百度分享*/ window._bd_share_config = { common: { bdText: '',//自定義分享內容 bdDesc: '',//自定義分享摘要 bdUrl: window.location.href,//自定義分享url地址 bdPic: '' }, share: [{ "bdSize": 60 }] } with (document)0[(getElementsByTagName('head')[0] || body).appendChild(createElement('script')).src = 'http://bdimg.share.baidu.com/static/api/js/share.js?cdnversion=' + ~(-new Date() / 36e5)]; var add_url = '/d/article/write/'; // var check_allow = "{:U('Api/iscantalk')}"; var check_allow = "/d/api/iscantalk"; var click_items_length = $('.art_click_count').length; if (click_items_length > 0) { var id_str = ''; $('.art_click_count').each(function () { id_str += $(this).attr('data-id') + ','; }) // var url = "{:U('Api/getclickbyids')}"; var url = "/d/api/getclickbyids"; var id_data = 'id_str=' + id_str; $.ajax({ url: url, data: id_data, type: 'post', dataType: 'json', success: function (re) { if (re.list.length >= 1) { var list = re.list; for (var i in list) { var temp_id = list[i]['id']; var temp_span = $(".art_click_count[data-id=" + temp_id + "]") temp_span.html(list[i]['click']); } } } }) } $("#comContent").click(function () { if (now_uid == '') { $.tActivityLogin(); return false; } }); $("#comSubmit").click(function () { if (now_uid == '') { $.tActivityLogin(); return false; } }); $(function () { var follow_wrap = $(".author-collect"); var now_uid = "{$_super['uid']}"; var face_src = "{$_super['uface']}"; var getFollowNum = $(".followNum strong").html(); //關注 $(window).on('click', '.author-collect', function () { if (now_uid == '') { $.tActivityLogin(); return false; } if ($(this).attr('id') == 'follow') { $.post('/d/user/follow', { tuid: article_user_id }, function (data) { //返回的數據格式: if (data.status == "successed") { $(".followNum strong").html(++getFollowNum); follow_wrap.html('已關注').attr('id', 'cancelFollow').css('background', '#999'); var follow_user = ''; $('#follow_list').append(follow_user); } if (data.status == "failed") { alert(data.msg); } } ); } else { //取消關注 if ($(this).attr('id') == 'cancelFollow') { $.post('/d/user/cancelFollow', { tuid: article_user_id }, function (data) { //返回的數據格式: if (data.status == "successed") { follow_wrap.html('關注').attr('id', 'follow').css('background', '#f90'); $(".followNum strong").html(--getFollowNum); $('#follow_list .face').each(function () { var target_uid = $(this).attr('data-uid'); if (target_uid == now_uid) { $(this).remove(); } }) } if (data.status == "failed") { alert(data.msg); } } ); return false; } } }); });