0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

使用MM32L0130和HYS1254的電子秤方案驗(yàn)證

冬至子 ? 來源:安德魯?shù)脑O(shè)計(jì)筆記本 ? 作者:安德魯蘇 ? 2023-10-17 17:16 ? 次閱讀

引言

NPI提了需求,需要驗(yàn)證使用友商SDADC芯片MM32L0130微控制器集成的一個(gè)系統(tǒng)應(yīng)用方案。

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

只是比較遺憾,最終驗(yàn)證方案性能未達(dá)預(yù)期,有點(diǎn)小小的翻車。。。

電路設(shè)計(jì)

設(shè)計(jì)電子秤方案系統(tǒng),使用了搭載MM32L0136C7P微控制器的EVB-L0136開發(fā)板,使用HYS1254 SDADC構(gòu)成的采樣電路采集來自壓力傳感器輸出的電信號,實(shí)現(xiàn)測量壓力的功能,以演示高精度ADC的分辨率。如圖x所示。試想,能不能測量風(fēng)吹過的感覺呢?

image.png

figure-system-arch-diagram
圖x 電子秤原型系統(tǒng)框圖

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

image.png

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

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

image.png

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

最終搭建電路系統(tǒng)實(shí)物

軟件設(shè)計(jì)

采集HYS1254數(shù)據(jù)

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

image.png

figure-hys1254-signal-timing-seq
圖x HYS1254讀數(shù)信號時(shí)序圖

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

使用GPIO模擬時(shí)序,實(shí)現(xiàn)讀取一次采樣值代碼如下:

/* 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;  
}

這里根據(jù)HYS1254數(shù)據(jù)輸出的時(shí)序特征,使用外部中斷下降沿觸發(fā)的方式讀取HYS1254輸出的數(shù)據(jù)讀取,實(shí)現(xiàn)代碼如下:

/* 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[]作為窗口緩沖區(qū),緩存最近若干個(gè)(由HYS1254_ADC_RAW_FIFO_LEN指定)ADC的原始采樣結(jié)果。

軟件濾波算法

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

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采樣值

實(shí)驗(yàn)中使用了HX711壓力傳感器套裝的壓力傳感器模塊。

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

image.png

figure-hx711-pressure-sensor-spec
圖x 壓力傳感器參數(shù)指標(biāo)清單

image.png

在軟件中,將HYS1254的采集值與最終的稱重值成正比,在實(shí)際轉(zhuǎn)換為稱重值時(shí),需要HYS1254采樣值除以一個(gè)系數(shù),而該系數(shù)將由試湊法,通過用標(biāo)準(zhǔn)砝碼進(jìn)行校驗(yàn)(俗稱“去皮”),也可通過理論值進(jìn)行計(jì)算。在應(yīng)用工程中,已經(jīng)設(shè)計(jì)了轉(zhuǎn)換代碼。

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變量即為可調(diào)整的比例系數(shù),app_weight_base為“去皮”的基準(zhǔn)采樣值。

實(shí)驗(yàn)過程

數(shù)據(jù)可視化

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

image.png

figure-sdadc-data-visualization-with-freemaster
圖x 對采樣數(shù)據(jù)進(jìn)行可視化

通過實(shí)驗(yàn)發(fā)現(xiàn),壓力傳感器相對靜止的狀態(tài)下,在同一狀態(tài)下連續(xù)一段時(shí)間內(nèi),觀察采集得到的各個(gè)24位采樣值之間的后13位一直在不斷波動,每次得到的采樣結(jié)果波動過大,無法精確實(shí)現(xiàn)克單位級別細(xì)粒度的測量。

優(yōu)化電路

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

按照上述條件,進(jìn)行對比實(shí)驗(yàn),數(shù)據(jù)波動有明顯改善。但是,數(shù)據(jù)波動仍然明顯。

使用軟件濾波

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

image.png

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

降低ADC的采樣速率

閱讀SDADC的數(shù)據(jù)手冊發(fā)現(xiàn),降低ADC采樣頻率至低速,有助于提高ADC轉(zhuǎn)換結(jié)果的準(zhǔn)確度。故在本實(shí)驗(yàn)中調(diào)整SDADC芯片的工作頻率,進(jìn)而降低ADC轉(zhuǎn)換的頻率。

在向HYS1254提供1MHz的時(shí)鐘源,獲得2.604kHz的采樣率后的采樣結(jié)果:

image.png

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

使用獨(dú)立的供電電源

進(jìn)一步分析系統(tǒng)噪聲可能來自于電源,因此分別使用DCDC充電器和電池作為整個(gè)系統(tǒng)的電源,驗(yàn)證電源對應(yīng)用系統(tǒng)中ADC采樣精度的影響。

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

image.png

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

image.png

按照上述條件,進(jìn)行了對比實(shí)驗(yàn),可以發(fā)現(xiàn)數(shù)據(jù)波動改善不明顯。

再次調(diào)整濾波算法

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

image.png

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

驗(yàn)證總結(jié)

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

本文對此次驗(yàn)證過程的梳理記錄總結(jié),為接下來進(jìn)一步的分析實(shí)驗(yàn)和定位問題提供參考。

后續(xù)可能有一些新思路繼續(xù)改善靜態(tài)采樣數(shù)據(jù)波動問題:

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

    關(guān)注

    48

    文章

    7396

    瀏覽量

    150652
  • 驅(qū)動器
    +關(guān)注

    關(guān)注

    52

    文章

    8063

    瀏覽量

    145635
  • 壓力傳感器
    +關(guān)注

    關(guān)注

    35

    文章

    2138

    瀏覽量

    163176
  • ADC采樣
    +關(guān)注

    關(guān)注

    0

    文章

    134

    瀏覽量

    12808
  • MCU芯片
    +關(guān)注

    關(guān)注

    3

    文章

    245

    瀏覽量

    11318
收藏 人收藏

    評論

    相關(guān)推薦

    無線吊,無線傳輸?shù)?b class='flag-5'>電子秤解決方案

        無線吊,無線傳輸?shù)?b class='flag-5'>電子秤解決方案 在無線吊或無線傳輸?shù)?b class='flag-5'>電子秤上,被稱物品重量經(jīng)壓力傳感器轉(zhuǎn)變成模擬
    發(fā)表于 01-14 10:14

    使用MM32L0130 IRM實(shí)現(xiàn)紅外發(fā)碼

    1、使用MM32L0130 IRM實(shí)現(xiàn)紅外發(fā)碼  紅外遙控是一種無線、非接觸控制技術(shù),具有抗干擾能力強(qiáng),信息傳輸可靠,功耗低,成本低,易于實(shí)現(xiàn)等顯著優(yōu)點(diǎn),被諸多電子設(shè)備包括消費(fèi)電子、家用電器、安防
    發(fā)表于 10-21 14:22

    基于MM32L0130的低功耗電子時(shí)鐘設(shè)計(jì)方案相關(guān)資料分享

    1、基于MM32L0130的低功耗電子時(shí)鐘設(shè)計(jì)  MM32L0130作為靈動微電子推出的一款低功耗芯片,內(nèi)置多種省電工作模式保證低功耗應(yīng)用的要求。前面章節(jié)分別對
    發(fā)表于 11-09 16:00

    請問有人使用IAR進(jìn)行過MM32L0130的開發(fā)嗎?

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

    電子秤

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

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

    全新MM32L0130系列是靈動微電子針對低功耗應(yīng)用推出的新一代MCU產(chǎn)品,其搭載了Arm?Cortex?-M0+內(nèi)核,采用了先進(jìn)的低功耗架構(gòu)設(shè)計(jì)和技術(shù)手段,實(shí)現(xiàn)了最低700nA的RTC運(yùn)行功耗,最低250nA的待機(jī)功耗和低于100nA的最低功耗表現(xiàn)。
    發(fā)表于 04-28 16:18 ?688次閱讀

    使用MM32L0130片上IRM模塊實(shí)現(xiàn)紅外發(fā)碼

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

    MM32L0130 RTC日歷和鬧鐘

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

    基于MM32L0130的低功耗電子時(shí)鐘設(shè)計(jì)

    MM32L0130作為靈動微電子推出的一款低功耗芯片,內(nèi)置多種省電工作模式保證低功耗應(yīng)用的要求。前面章節(jié)分別對MM32L0130片上外設(shè)SLCD和RTC做了相關(guān)描述,并列舉對應(yīng)程序?qū)崿F(xiàn)SLCD驅(qū)動
    的頭像 發(fā)表于 11-04 10:12 ?1535次閱讀

    靈動微電子低功耗單片機(jī)MM32L0130開發(fā)板申請

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

    MM32L0130 產(chǎn)品手冊(中文版)

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

    MM32L0130 產(chǎn)品手冊(英文版)

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

    MM32L0130 用戶手冊(中文版)

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

    MM32L0130 用戶手冊(英文版)

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

    電子秤方案——口袋方案芯片技術(shù)

    電子秤方案——口袋方案芯片技術(shù)
    的頭像 發(fā)表于 12-08 15:47 ?536次閱讀