精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

使用MM32L0130和HYS1254的電子秤方案驗證

冬至子 ? 來源:安德魯的設計筆記本 ? 作者:安德魯蘇 ? 2023-10-17 17:16 ? 次閱讀

引言

NPI提了需求,需要驗證使用友商SDADC芯片MM32L0130微控制器集成的一個系統應用方案。

本文參考 CN-0216 Precision Weigh Scale Design 方案對使用MM32L0130和HYS1254的應用方案進行驗證,使用靈動微電子MM32L0130微控制器、健芯半導體HYS1254高精度24位分辨率的Sigma Delta ADC,以及圣邦微電子SGM8967-1運放前端,實現了高精度電子秤的方案,記錄了嘗試使用各種方法消除采樣值抖動問題,總結了目前驗證過程中遇到的問題。

只是比較遺憾,最終驗證方案性能未達預期,有點小小的翻車。。。

電路設計

設計電子秤方案系統,使用了搭載MM32L0136C7P微控制器的EVB-L0136開發板,使用HYS1254 SDADC構成的采樣電路采集來自壓力傳感器輸出的電信號,實現測量壓力的功能,以演示高精度ADC的分辨率。如圖x所示。試想,能不能測量風吹過的感覺呢?

image.png

figure-system-arch-diagram
圖x 電子秤原型系統框圖

設計稱重信號采集電路,如圖x電路,使用了HYS1254 SDADC和SGM8967-1運放前端兩個主要的分立元件搭建而成。

image.png

figure-hys1254-schmatic
圖x HYS1254及采樣電路

根據HYS1254手冊中的建議,在采樣電路中使用OPA350UA/2K5HYS1254提供4.096V的參考電壓ADC_VERF,如圖x所示:

image.png

figure-OPA350UA-schmatic
圖x 使用OPA350UA/2K5的參考電壓源電路

最終搭建電路系統實物

軟件設計

采集HYS1254數據

根據HYS1254數據手冊中對傳輸ADC采樣值的數字通信信號時序描述,如圖x所示。

image.png

figure-hys1254-signal-timing-seq
圖x HYS1254讀數信號時序圖

這里特別注意,MCU每次使用引腳中斷捕獲到DRDY的下降沿(一次ADC轉換完成)后,需要等一段時間,才能由MCU驅動SCLK時鐘,從DOUT引腳串行捕獲ADC采樣結果的值。

使用GPIO模擬時序,實現讀取一次采樣值代碼如下:

/* read a sample value from hys1254. */  
int32_t app_hys1254_read_adc_value_raw(void)  
{  
    int32_t adc_val = 0;  
  
    /* wait to enter hys1254 data cycle. */  
    for (uint32_t delay = (CLOCK_SYS_FREQ / APP_ADC_CLK_FREQ)*2; delay > 0; delay--)  
    {  
        __NOP();  
    }  
  
    /* read data. */  
    for (uint32_t i = 24; i; i--)  
    {  
        adc_val < <= 1;  
        adc_val |= (GPIOB- >IDR & BOARD_ADC_SDA_PIN) != 0;  
        BOARD_ADC_SCK_PORT- >BSRR = BOARD_ADC_SCK_PIN;  
        __NOP();  
        BOARD_ADC_SCK_PORT- >BRR = BOARD_ADC_SCK_PIN;  
        __NOP();  
    }  
  
    if (0u != (adc_val & 0x800000))  
    {  
        adc_val |= 0xFF000000;   
    }  
  
    return adc_val;  
}

這里根據HYS1254數據輸出的時序特征,使用外部中斷下降沿觸發的方式讀取HYS1254輸出的數據讀取,實現代碼如下:

/* prepare to read the hys1254. */  
void app_hys1254_init(void)  
{  
    /* init MCO to provide clock. */  
    CLOCK_MCO_1MHz();  
  
    /* init exti to get data. */  
    SYSCFG_SetExtIntMux(BOARD_SYSCFG_EXTIPORT, BOARD_SYSCFG_EXTI_LINE);  
    EXTI_EnableLineInterrupt(BOARD_EXTI_PORT, BOARD_EXTI_LINE, true);  
    EXTI_SetTriggerIn(BOARD_EXTI_PORT, BOARD_EXTI_LINE, EXTI_TriggerIn_FallingEdge);  
    NVIC_EnableIRQ(EXTI15_4_IRQn);  
}  
  
void EXTI15_4_IRQHandler(void)  
{  
    uint32_t flags = EXTI_GetLineStatus(EXTI);  
    if ( 0u != ( flags & BOARD_EXTI_LINE ) ) /* interrupts. */  
    {  
        hys1254_adc_raw_fifo_buff[hys1254_adc_raw_fifo_index] = app_hys1254_read_adc_value_raw();  
        hys1254_adc_raw_fifo_index = (hys1254_adc_raw_fifo_index+1) % HYS1254_ADC_RAW_FIFO_LEN;  
    }  
    EXTI_ClearLineStatus(EXTI, flags);  
}

其中,使用hys1254_adc_raw_fifo_buff[]作為窗口緩沖區,緩存最近若干個(由HYS1254_ADC_RAW_FIFO_LEN指定)ADC的原始采樣結果。

軟件濾波算法

在直接使用采樣原始值作為結果輸出時,發現壓力傳感器在未稱重物的情況下,持續一段時間內,采集采樣電路輸出的ADC數值偏差過大,這里使用了滑動窗口+中段數據均值濾波法來嘗試消除采樣值的抖動問題,實現原理為每采樣128次值后對這128次采樣值進行升序排序,然后舍去前段和后段的數據,取剩余的中間段的數據求平均值作為一次采樣結果。有代碼如下所示:

int32_t app_hys1254_get_adc_value_filted(int32_t * out_buff)  
{  
    /* sequencilize. */  
    app_bubble_sort(out_buff, HYS1254_ADC_RAW_FIFO_LEN);  
      
    /* scoll the data into the filter window. */  
    int64_t sum_64 = 0;  
    for (uint32_t i = HYS1254_ADC_RAW_FIFO_LEN/4u; i < HYS1254_ADC_RAW_FIFO_LEN-(HYS1254_ADC_RAW_FIFO_LEN/4); i++)  
    {  
        sum_64 += out_buff[i];  
    }  
    sum_64 /= (HYS1254_ADC_RAW_FIFO_LEN/2u);  
      
    return (int32_t)sum_64;  
}

換算壓力為ADC采樣值

實驗中使用了HX711壓力傳感器套裝的壓力傳感器模塊。

關于壓力傳感器模塊,需要關注技術指標為:量程、接線方式、供電電壓、輸出靈敏度。實驗中,使用的是5kg量程傳感器,靈敏度1.0mV/V,供電電壓5V,對應滿量程輸出電壓(輸出最大電壓值)= 靈敏度 * 供電電壓 = 5mV,即在傳感器托盤上放置5kg的重物對應輸出5mV。傳感器的參數清單,如圖x所示。

image.png

figure-hx711-pressure-sensor-spec
圖x 壓力傳感器參數指標清單

image.png

在軟件中,將HYS1254的采集值與最終的稱重值成正比,在實際轉換為稱重值時,需要HYS1254采樣值除以一個系數,而該系數將由試湊法,通過用標準砝碼進行校驗(俗稱“去皮”),也可通過理論值進行計算。在應用工程中,已經設計了轉換代碼。

volatile int32_t app_weight_base = 0;  
volatile int32_t app_weight_current = 0;  
volatile float adc_factor = 740;  
  
int main(void)  
{  
    ...  
    while (1)  
    {  
        ...  
        app_slcd_display((float)(app_weight_current- app_weight_base)/adc_factor);  
    }  
}

其中,adc_factor變量即為可調整的比例系數,app_weight_base為“去皮”的基準采樣值。

實驗過程

數據可視化

為直觀的分析和觀察實時采集到的HYS1254輸出的數據,這里使用了FreeMaster軟件觀察MCU中記錄濾波前的全局變量app_hys1254_adc_raw_fifo_current[0]和濾波后全局變量 app_hys1254_value_filted,如圖x所示。

image.png

figure-sdadc-data-visualization-with-freemaster
圖x 對采樣數據進行可視化

通過實驗發現,壓力傳感器相對靜止的狀態下,在同一狀態下連續一段時間內,觀察采集得到的各個24位采樣值之間的后13位一直在不斷波動,每次得到的采樣結果波動過大,無法精確實現克單位級別細粒度的測量。

優化電路

在分析ADC采樣值不穩定的原因時,意外碰到ADC模塊之間的物理連接線,發現數據可視化的界面受到了很明顯的影響,波形抖動幅度甚至達到了5g砝碼對傳感器產生的影響。由此可判定電路之間的連接線對模擬信號影響頗大。在實驗中采取的應對措施是,縮短ADC采集電路與壓力傳感器之間的連線,將之前由杜邦線連接改為將壓力傳感器引出的線直接焊接在ADC采集電路板中,如圖x所示。

按照上述條件,進行對比實驗,數據波動有明顯改善。但是,數據波動仍然明顯。

使用軟件濾波

實驗中,使用MCU在向HYS1254提供8MHz的時鐘源,獲得20.833kHz的采樣率,未使用濾波,和使用滑動窗口+中段數據均值濾波后,有采樣波形,如圖x所示。

image.png

觀察數據發現,使用軟件濾波算法前后所得到的數據,通過比較采樣期間得到的最大最小值之間的差值可以發現數據波動雖有改善但仍然有較大的波動,對最終的獲得精確稱重效果無明顯改善,即24位采樣值中,在電子秤保持靜止狀態下,數值波動最大最小值在經過濾波后的波動差在 5689 ,即至少24位的采樣值其中的后13位(8192)在波動,未實現克單位級別的測量。

降低ADC的采樣速率

閱讀SDADC的數據手冊發現,降低ADC采樣頻率至低速,有助于提高ADC轉換結果的準確度。故在本實驗中調整SDADC芯片的工作頻率,進而降低ADC轉換的頻率。

在向HYS1254提供1MHz的時鐘源,獲得2.604kHz的采樣率后的采樣結果:

image.png

使用1MHz的時鐘源獲得2.604kHz的采樣率,相對于之前的實驗結果可以看到,降低采樣率是可以在一定程度上減小波動,但采集出來的數據波動仍然過大,未滿足穩定測量1克單位級別細粒度的要求。

使用獨立的供電電源

進一步分析系統噪聲可能來自于電源,因此分別使用DCDC充電器和電池作為整個系統的電源,驗證電源對應用系統中ADC采樣精度的影響。

  • 使用使用手機電源適配器(MDY-08-ES,5V3A)供電。在向HYS1254提供1MHz的時鐘源,獲得2.604kHz的采樣率后的采樣結果:

image.png

  • 使用干電池供電(3節南孚5號電池,4.5V供電),在向HYS1254提供1MHz的時鐘源,獲得2.604kHz的采樣率后的采樣結果:

image.png

按照上述條件,進行了對比實驗,可以發現數據波動改善不明顯。

再次調整濾波算法

在向HYS1254提供1MHz的時鐘源,獲得2.604kHz的采樣率。由每組采集128次增加到每組采集256次再進行濾波,有采樣結果,如圖x所示。

image.png

由上述數據可知,增大每組的采樣次數到256次,再進行中段數據均值濾波后,數值波動最大最小值在經過濾波后的波動差在5689 ,即至少24位的采樣值其中的后12位(4096)仍在波動,未能實現克單位級別的測量,未實現預期結果。

驗證總結

本次驗證實驗,發現使用以HYS1254為主要器件的分立元件構成的SDADC采樣方案結果波動過大,暫未實現1克細粒度的壓力測量,即在壓力傳感器相對靜止的狀態下連續一段時間采樣得到的各個24位采樣值之間相互的后13位一直在不斷波動的,通過使用縮短模擬信號連接導線、使用軟件濾波、降低采樣率,以及使用獨立電源供電的方法嘗試優化,均未明顯改善的測量結果。

本文對此次驗證過程的梳理記錄總結,為接下來進一步的分析實驗和定位問題提供參考。

后續可能有一些新思路繼續改善靜態采樣數據波動問題:

  • 進一步使用理想信號源,搞不好本方案中用到的大路貨壓力傳感器也不是很靈敏。
  • 優化采樣電路設計。SDADC和分立的運放前端配合,中間的模擬信號通路容易受到外界干擾。市面上常規的設計方案,絕大多數是將SDADC和AFE合并在一起。甚至可以將MCU和SDADC采樣電路合封在一起,最大化縮短信號鏈的物理傳輸路徑。另外,很多集成SDADC的SoC中同時也集成了硬件SINC濾波器模塊。
  • 在軟件算法方面,考慮到MM32L0130的片上資源和算力有限,尚未進行更多的數據濾波算法實現,后期可設計通過二階或多階濾波,也可通過進一步降低采樣率到kHzHz級別,并將每組的采樣個數進一步地增大,如增大到512或者是1024個采樣值作為一組值求平均,來嘗試獲取穩定的數據。
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 微控制器
    +關注

    關注

    48

    文章

    7496

    瀏覽量

    151085
  • 驅動器
    +關注

    關注

    52

    文章

    8168

    瀏覽量

    146052
  • 壓力傳感器
    +關注

    關注

    35

    文章

    2161

    瀏覽量

    163326
  • ADC采樣
    +關注

    關注

    0

    文章

    134

    瀏覽量

    12832
  • MCU芯片
    +關注

    關注

    3

    文章

    248

    瀏覽量

    11394
收藏 人收藏

    評論

    相關推薦

    無線吊,無線傳輸的電子秤解決方案

        無線吊,無線傳輸的電子秤解決方案 在無線吊或無線傳輸的電子秤上,被稱物品重量經壓力傳感器轉變成模擬
    發表于 01-14 10:14

    使用MM32L0130 IRM實現紅外發碼

    1、使用MM32L0130 IRM實現紅外發碼  紅外遙控是一種無線、非接觸控制技術,具有抗干擾能力強,信息傳輸可靠,功耗低,成本低,易于實現等顯著優點,被諸多電子設備包括消費電子、家用電器、安防
    發表于 10-21 14:22

    基于MM32L0130的低功耗電子時鐘設計方案相關資料分享

    1、基于MM32L0130的低功耗電子時鐘設計  MM32L0130作為靈動微電子推出的一款低功耗芯片,內置多種省電工作模式保證低功耗應用的要求。前面章節分別對
    發表于 11-09 16:00

    請問有人使用IAR進行過MM32L0130的開發嗎?

    我在使用IAR8.30進行MM32L0130開發板試用時遇到了一個棘手的問題,其例程能夠下載到開發板(至少在IAR中任何報錯,也可以在線調試),可是就是一直開在時鐘配置階段,一直沒有配置成功,有人遇到過這樣的問題嗎?或者在調試其他單片機時是否有類似現象?麻煩指導一下解決辦法
    發表于 12-18 21:48

    電子秤

    電子秤 電子秤
    發表于 09-23 15:12 ?2529次閱讀
    <b class='flag-5'>電子秤</b>

    靈動微MM32L0130系列32位微控制器的詳細介紹

    全新MM32L0130系列是靈動微電子針對低功耗應用推出的新一代MCU產品,其搭載了Arm?Cortex?-M0+內核,采用了先進的低功耗架構設計和技術手段,實現了最低700nA的RTC運行功耗,最低250nA的待機功耗和低于100nA的最低功耗表現。
    發表于 04-28 16:18 ?727次閱讀

    使用MM32L0130片上IRM模塊實現紅外發碼

    靈動股份推出的MM32L0130系列MCU具有片上IRM紅外調制器,該模塊使用片上的定時器和串口,實現數據的 FSK/ASK 調制,以滿足紅外發碼的需求。
    的頭像 發表于 10-13 17:03 ?1213次閱讀

    MM32L0130 RTC日歷和鬧鐘

    RTC 模塊是用于提供時間(時、分、秒、亞秒)和日期(年、月、日)功能的定時計數器,日歷以 BCD碼的格式顯示。內部包含周期性的喚醒單元,用于喚醒低功耗模式。支持夏令時補償,支持數字校準補償晶振精度的偏差。靈動微電子推出的MM32L0130系列MCU片上RTC外設具有以下
    的頭像 發表于 10-28 10:37 ?1277次閱讀

    基于MM32L0130的低功耗電子時鐘設計

    MM32L0130作為靈動微電子推出的一款低功耗芯片,內置多種省電工作模式保證低功耗應用的要求。前面章節分別對MM32L0130片上外設SLCD和RTC做了相關描述,并列舉對應程序實現SLCD驅動
    的頭像 發表于 11-04 10:12 ?1587次閱讀

    靈動微電子低功耗單片機MM32L0130開發板申請

    碼,支持COM和SEG引腳重映射,占空比、偏壓、幀率和對比度等靈活可調,內置電荷泵可實現在電壓下降時依然保持液晶屏清晰,提供LQFP64和LQFP48封裝。 ? 靈動微電子MM32L0130系列MCU
    的頭像 發表于 11-21 17:15 ?771次閱讀
    靈動微<b class='flag-5'>電子</b>低功耗單片機<b class='flag-5'>MM32L0130</b>開發板申請

    MM32L0130 產品手冊(中文版)

    MM32L0130 產品手冊(中文版)
    發表于 02-27 18:24 ?0次下載
    <b class='flag-5'>MM32L0130</b> 產品手冊(中文版)

    MM32L0130 產品手冊(英文版)

    MM32L0130 產品手冊(英文版)
    發表于 02-27 18:25 ?0次下載
    <b class='flag-5'>MM32L0130</b> 產品手冊(英文版)

    MM32L0130 用戶手冊(中文版)

    MM32L0130 用戶手冊(中文版)
    發表于 02-27 18:26 ?0次下載
    <b class='flag-5'>MM32L0130</b> 用戶手冊(中文版)

    MM32L0130 用戶手冊(英文版)

    MM32L0130 用戶手冊(英文版)
    發表于 02-27 18:26 ?0次下載
    <b class='flag-5'>MM32L0130</b> 用戶手冊(英文版)

    電子秤方案——口袋方案芯片技術

    電子秤方案——口袋方案芯片技術
    的頭像 發表于 12-08 15:47 ?596次閱讀