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

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

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

雙劍合璧 !看HPM6750 如何賦能 ADS1263 實現(xiàn)32位高精度數(shù)據(jù)處理

先楫半導(dǎo)體HPMicro ? 2022-08-19 10:06 ? 次閱讀

本文摘自先楫開發(fā)者@xiashuang的測評內(nèi)容,分享了先楫HPM6750 如何賦能 ADS1263 實現(xiàn)32位高精度數(shù)據(jù)采集及處理 ,來看看吧

--------------- 以下為測評內(nèi)容---------------

(本期測評開發(fā)板為 HPM6750EVK)


據(jù)官方用戶手冊, TI 的32位ADC:ADS1263 性能很強,最高采樣到38.4k(26us),需要的處理器性能必須要具有很強的運算功能,正好試下HPM6750,于是畫了一塊PCB板,經(jīng)過一周的等待終于到了,焊接了必要的元件就開干!


6ea5e830-1f2e-11ed-9ade-dac502259ad0.jpg

6ec32f12-1f2e-11ed-9ade-dac502259ad0.jpg


為了先驗證板子的情況,先用軟件模擬 SPI 進行實驗,需要 7 根信號線進行連接通訊,定義的GPIO如下:

*RST---------PE25
*DRDY--------PE26
*MISO--------SPI2.MISO  PB25
*MOSI--------SPI2.MOSI  PB22
*SCK---------SPI2.SCK   PB21
*CS----------PF1
*START-------PF4

先初始化IO口,時鐘的開啟已經(jīng)在board_init()中完成,所以指示配置一下寄存器就行

 /*設(shè)置IO口為通用IO*/
  HPM_IOC->PAD[IOC_PAD_PE25].FUNC_CTL = IOC_PE25_FUNC_CTL_GPIO_E_25; 
    HPM_IOC->PAD[IOC_PAD_PE26].FUNC_CTL = IOC_PE26_FUNC_CTL_GPIO_E_26;
    HPM_IOC->PAD[IOC_PAD_PB25].FUNC_CTL = IOC_PB25_FUNC_CTL_GPIO_B_25;
    HPM_IOC->PAD[IOC_PAD_PB22].FUNC_CTL = IOC_PB22_FUNC_CTL_GPIO_B_22;
    HPM_IOC->PAD[IOC_PAD_PB21].FUNC_CTL = IOC_PB21_FUNC_CTL_GPIO_B_21;
    HPM_IOC->PAD[IOC_PAD_PF01].FUNC_CTL = IOC_PF01_FUNC_CTL_GPIO_F_01;
    HPM_IOC->PAD[IOC_PAD_PF04].FUNC_CTL = IOC_PF04_FUNC_CTL_GPIO_F_04;
/*配置輸入輸出*/
    /*ps-上下拉電阻 PE-上下拉開關(guān) SMT-施密特 DS-驅(qū)動強度 OD-開漏  MS-電壓選擇*/
    uint32_t pad_ctl_out = IOC_PAD_PAD_CTL_PE_SET(1) | IOC_PAD_PAD_CTL_PS_SET(1);
    uint32_t pad_ctl_in = IOC_PAD_PAD_CTL_PE_SET(1) | IOC_PAD_PAD_CTL_PS_SET(1)|IOC_PAD_PAD_CTL_SMT_SET(1);
    gpio_set_pin_output_with_initial(HPM_GPIO0, GPIO_DO_GPIOE, 25, 1);
    gpio_set_pin_output_with_initial(HPM_GPIO0, GPIO_DO_GPIOB, 22, 1);
    gpio_set_pin_output_with_initial(HPM_GPIO0, GPIO_DO_GPIOB, 21, 1);
    gpio_set_pin_output_with_initial(HPM_GPIO0, GPIO_DO_GPIOF, 01, 1);
    gpio_set_pin_output_with_initial(HPM_GPIO0, GPIO_DO_GPIOF, 04, 1);
    HPM_IOC->PAD[IOC_PAD_PE25].PAD_CTL = pad_ctl_out;
    HPM_IOC->PAD[IOC_PAD_PB22].PAD_CTL = pad_ctl_out;
    HPM_IOC->PAD[IOC_PAD_PB21].PAD_CTL = pad_ctl_out;
    HPM_IOC->PAD[IOC_PAD_PF01].PAD_CTL = pad_ctl_out;
    HPM_IOC->PAD[IOC_PAD_PF04].PAD_CTL = pad_ctl_out;

    HPM_IOC->PAD[IOC_PAD_PE26].PAD_CTL = pad_ctl_in;
    HPM_IOC->PAD[IOC_PAD_PB25].PAD_CTL = pad_ctl_in;

相應(yīng)的IO輸出及輸入讀取如下:

#define ADS1263_RESET_H gpio_write_pin(HPM_GPIO0, GPIO_DO_GPIOE, 25, 1)
#define ADS1263_RESET_L gpio_write_pin(HPM_GPIO0, GPIO_DO_GPIOE, 25, 0)
#define ADS1263_START_H gpio_write_pin(HPM_GPIO0, GPIO_DO_GPIOF, 4, 1)
#define ADS1263_START_L gpio_write_pin(HPM_GPIO0, GPIO_DO_GPIOF, 4, 0)
#define ADS1263_CS_H    gpio_write_pin(HPM_GPIO0, GPIO_DO_GPIOF, 1, 1)
#define ADS1263_CS_L    gpio_write_pin(HPM_GPIO0, GPIO_DO_GPIOF, 1, 0)
#define ADS1263_SCLK_H  gpio_write_pin(HPM_GPIO0, GPIO_DO_GPIOB, 21, 1)
#define ADS1263_SCLK_L  gpio_write_pin(HPM_GPIO0, GPIO_DO_GPIOB, 21, 0)
#define ADS1263_DIN_H   gpio_write_pin(HPM_GPIO0, GPIO_DO_GPIOB, 22, 1)
#define ADS1263_DIN_L   gpio_write_pin(HPM_GPIO0, GPIO_DO_GPIOB, 22, 0)
#define ADS1263_DOUT    gpio_read_pin(HPM_GPIO0, GPIO_DI_GPIOB, 25)
#define ADS1263_DRDY    gpio_read_pin(HPM_GPIO0, GPIO_DI_GPIOE, 26)

初始化ADS1263

int init_ads1263(void)

{
    printf("*************************************************************\r\n");
    printf("*                                                           *\r\n");
    printf("* ADS1263 TEST ^_^                                          *\r\n");
    printf("*                                                           *\r\n");
    printf("*************************************************************\r\n");

    GPIO_Configuration();
    ADS1263_INIT();//ADS1263初始化
    ADS1263_CS_L;
    Delay(0xf);
    ADS1263_WRITE(0x08);//START1 command,當(dāng)START引腳為低電平時,可由此命令啟動ADC1的轉(zhuǎn)換。
    ADS1263_CS_H;
    Delay(0xf);
    return 0;
}
讀取AD值
int read_ads1263(void)
{
    if(ADS1263_DRDY != 1)
    {
        ADS1263_CS_L;
        Delay(0xf);
        ADS1263_WRITE(0x12);//讀取ADC1
        STATUS=ADS1263_READ_REG();
        ADC1_DATA=ADS1263_READ();
        checksum = ADS1263_READ_REG();
        ADS1263_CS_H; 
        count++;
        D[47]++;
        if(D[76] > 0)
        {
            ADC1_DATA = Filter_ch1(ADC1_DATA,D[76],D[77]);
        }
        ADC1_DATA = CELL_ADSOURSE_FILTER(ADC1_DATA,D[78],D[79]);

        mv_Now = ADC1_DATA / 2147483648.0 * 2500 / 32;//mv數(shù)
        //測試重量參數(shù)
        Weight = (mv_Now - mv_Zero)/ 10.0f * mv_Full * mv_Cali;
        INT32toREG(ADC1_DATA,&D[0]);//源碼
        FP32toREG(mv_Now,&D[2]);//mv數(shù)
        FP32toREG(Weight,&D[4]);//重量
        //校秤參數(shù)
        mv_Zero = REGtoFP32(&D[70]);//mv零點
        mv_Full = REGtoFP32(&D[72]);//滿量程
        mv_Cali = REGtoFP32(&D[74]);//校準(zhǔn)系數(shù)    

        return ADC1_DATA;
    }
    else
        return 0;
}

利用上次移植的modbus 裸機例子,在主循環(huán)中不斷查詢AD狀態(tài)讀取。

連接好線,接上稱重傳感器開始測試


6ed788cc-1f2e-11ed-9ade-dac502259ad0.jpg

MODBUS上位機畫面,使用50kg C3電阻應(yīng)變橋式稱重傳感器采樣400次精度在±1g,后來降低采樣到60次/s,滑動平均5次,精度在±0.2g 。

6eeff362-1f2e-11ed-9ade-dac502259ad0.png

邏輯分析儀抓取波形圖。采用軟件模擬SPI,速度在3M左右,讀取命令+狀態(tài)+4字節(jié)數(shù)據(jù)+校驗共7個字節(jié)數(shù)據(jù)在20.5us左右

6f18f2bc-1f2e-11ed-9ade-dac502259ad0.png


【實驗總結(jié)】

HPM6750 在配置IO時要注意名稱,因為IO引腳較多,宏定義也比較多,在初始化容易寫錯(這次因為IO編號寫錯導(dǎo)致兩個IO口沒有輸出,查了1個多小時)??磥韴D形化代碼工具還是很有必要的(*悄咪咪告訴你們,先楫圖形化代碼工具已經(jīng)上線使用中啦);

HPM6750 的驅(qū)動強度和施密特單獨出來和I.MX RT系列比較像增加了IO控制的靈活性,PCB上高速信號的抗信號反射電阻和驅(qū)動限流電阻都可以省去了,等以后試下芯片的施密特能否代替外部輸入上的 74HC14;

HPM6750 運算速度很快,等以后試試高階FIR看看;

ADS1263 的高速采樣及其以來模擬電源的紋波,對內(nèi)部DCDC電源還是要增加濾波器,采樣60HZ對50-hz和60hz紋波抑制后精度一下就上來了;

--------------- 以上為全部測評內(nèi)容---------------


本期的測評分享就到這里,若想獲取更多關(guān)于HPM6750的精彩內(nèi)容,可點擊下面 “ 閱讀原文 ”了解詳情哦~


聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 開發(fā)板
    +關(guān)注

    關(guān)注

    25

    文章

    4896

    瀏覽量

    97058
收藏 人收藏

    評論

    相關(guān)推薦

    HPM6750 Bootloader設(shè)計

    我正在做一個hpm6750evk2的bootloader。設(shè)計很簡單,boot工程代碼只做跳轉(zhuǎn)到1M后的APP工程代碼處,APP工程就是做的一個點燈的程序而已,boot、APP工程都是跑
    發(fā)表于 10-23 18:59

    替換ADS1283/ADS1284,國產(chǎn)ADC用于低速高精度精密測量

    替換ADS1283/ADS1284,國產(chǎn)ADC用于低速高精度精密測量
    的頭像 發(fā)表于 09-13 10:07 ?343次閱讀
    替換<b class='flag-5'>ADS</b>1283/<b class='flag-5'>ADS</b>1284,國產(chǎn)ADC用于低速<b class='flag-5'>高精度</b>精密測量

    國產(chǎn)AFE可兼容ADS1248助力工業(yè)實現(xiàn)高精度的模擬性能

    國產(chǎn)AFE可兼容ADS1248助力工業(yè)實現(xiàn)高精度的模擬性能
    的頭像 發(fā)表于 08-15 09:50 ?317次閱讀
    國產(chǎn)AFE可兼容<b class='flag-5'>ADS</b>1248助力工業(yè)<b class='flag-5'>實現(xiàn)</b>超<b class='flag-5'>高精度</b>的模擬性能

    THS4131單端轉(zhuǎn)差分接ADS1263采集信號有額外低頻干擾怎么解決?

    想用ADS1263采集+-10V范圍的單獨按信號 設(shè)計采用THS4131單端轉(zhuǎn)差分電路配合GAIN=0.5,com=2.5V設(shè)計 將單獨按信號調(diào)理成差分信號,并用ADS1263采集,THS4131
    發(fā)表于 08-13 07:50

    OPT4001 高速高精度數(shù)字環(huán)境光傳感器數(shù)據(jù)

    電子發(fā)燒友網(wǎng)站提供《OPT4001 高速高精度數(shù)字環(huán)境光傳感器數(shù)據(jù)表.pdf》資料免費下載
    發(fā)表于 08-12 10:40 ?13次下載
    OPT4001 高速<b class='flag-5'>高精度數(shù)</b>字環(huán)境光傳感器<b class='flag-5'>數(shù)據(jù)</b>表

    ADS1625和ADS1626高速、高精度、模數(shù)轉(zhuǎn)換器(ADC)數(shù)據(jù)

    電子發(fā)燒友網(wǎng)站提供《ADS1625和ADS1626高速、高精度、模數(shù)轉(zhuǎn)換器(ADC)數(shù)據(jù)表.pdf》資料免費下載
    發(fā)表于 07-30 11:21 ?0次下載
    <b class='flag-5'>ADS</b>1625和<b class='flag-5'>ADS</b>1626高速、<b class='flag-5'>高精度</b>、模數(shù)轉(zhuǎn)換器(ADC)<b class='flag-5'>數(shù)據(jù)</b>表

    ADS1605和ADS1606高精度、模數(shù)轉(zhuǎn)換器(ADC)數(shù)據(jù)

    電子發(fā)燒友網(wǎng)站提供《ADS1605和ADS1606高精度、模數(shù)轉(zhuǎn)換器(ADC)數(shù)據(jù)表.pdf》資料免費下載
    發(fā)表于 07-24 10:16 ?0次下載
    <b class='flag-5'>ADS</b>1605和<b class='flag-5'>ADS</b>1606<b class='flag-5'>高精度</b>、模數(shù)轉(zhuǎn)換器(ADC)<b class='flag-5'>數(shù)據(jù)</b>表

    TPL1401 256抽頭高精度數(shù)字電位器數(shù)據(jù)

    電子發(fā)燒友網(wǎng)站提供《TPL1401 256抽頭高精度數(shù)字電位器數(shù)據(jù)表.pdf》資料免費下載
    發(fā)表于 07-16 09:44 ?0次下載
    TPL1401 256抽頭<b class='flag-5'>高精度數(shù)</b>字電位器<b class='flag-5'>數(shù)據(jù)</b>表

    HPM6750體驗ADC

    330/* 參考電壓 3.3V,數(shù)據(jù)精度乘以100保留2小數(shù)*/ #define CONVERT_BITS(1 << 16)/* 轉(zhuǎn)換位數(shù)為16 */ 5、添加任務(wù)
    發(fā)表于 02-17 16:00

    解決HPM6750EVK2jlink下載

    拿到HPM6750EVK2,使用jlink下載時,我原來用買jlink配的20轉(zhuǎn)10轉(zhuǎn)接板進行連接,下載程序里一直報不能連接到開發(fā)板。經(jīng)過查找用手冊后,找到了問題。 我的jlink的引腳圖與之不對
    發(fā)表于 02-16 10:30

    【先楫HPM5361EVK開發(fā)板試用體驗】HPM5361性能初測

    1、HPM5361性能簡介 HPM5361數(shù)據(jù)手冊中描述為32RISC-V處理器,支持RV32-IMAFDCPB指令集,支持SIMD和DS
    發(fā)表于 12-21 15:07

    Linux 下編譯HPM_Math 工程報錯

    /hpm/hpm_sdk/soc/HPM6750/toolchains/gcc/flash_xip.ld -- Segger device name: HPM6750xVMx -- S
    發(fā)表于 12-20 12:54

    AD7175-2適合做高精度數(shù)據(jù)采集嗎?

    我想用AD7175-2做高精度數(shù)據(jù)采集,采集要求達(dá)到六半萬用表的采集精度,請問AD7175-2適合嗎?另外我現(xiàn)在有AD7175-2的評估板和EVAL-SDP-CB1Z評估板,我直接采集直流電
    發(fā)表于 12-18 08:29

    【先楫HPM5361EVK開發(fā)板試用體驗】03 - HPM5361性能初測

    1、HPM5361性能簡介 HPM5361數(shù)據(jù)手冊中描述為32RISC-V處理器,支持RV32-IMAFDCPB指令集,支持SIMD和DS
    發(fā)表于 12-12 20:10

    RT_thread studio中如何配置先輯的hpm_math數(shù)學(xué)庫?

    hpm6750不知道如何在RTThread studio中使用hpm_math中的數(shù)學(xué)庫,想要使用libdspf.a,但是不知道如何配置
    發(fā)表于 12-06 18:32