米爾T153開發板AD7616高速ADC采集系統詳解
1.項目概述
1.1技術背景
米爾MYD-YT153開發板搭載全志T153處理器,提供LocalBus(LBC)并行總線接口,適合連接高速外設。AD7616是ADI公司推出的16位高精度并行ADC,具有16通道差分輸入,廣泛應用于工業數據采集、儀器儀表等領域。
1.2項目目標
● 驗證米爾MYD-YT153 LocalBus與AD7616的硬件兼容性
● 提供完整的軟件驅動實現方案
● 評估系統在實際應用中的性能表現

圖 米爾基于全志T153核心板及開發板
2.硬件平臺架構
2.1核心硬件組件
組件 | 規格 | 備注 |
主控板 | MYD-YT153MX-512N512D | T153處理器,512MB RAM |
ADC模塊 | AD7616 16位并行ADC | 16通道差分輸入 |
接口 | J23 LocalBus接口 | 1對1連接 |
調試接口 | Type-C轉USB | 串口調試 |
網絡接口 | RJ45 | 可選,與LBC沖突 |

圖 MYD-YT153開發板和localbus接口
2.2硬件連接要點
● 引腳一一對應:AD7616模塊通過J23接口直連開發板
● 電源連接:需外接5V電源至模塊供電引腳
● 信號完整性:并行總線長度應盡量短,避免信號衰減

圖 J23 localbus接口定義

圖 MYD-YT153接入AD7616模塊
2.3引腳沖突注意
T153處理器的LocalBus與RGMII2網絡接口存在引腳復用沖突:
● 必須選擇編譯支持LocalBus的鏡像(LVDS或DSI顯示配置)
● 同一時間只能使用一種功能

圖 Localbus與RGMII2沖突
3.軟件環境配置
3.1鏡像選擇
根據存儲介質選擇相應鏡像:
存儲介質 | 顯示接口 | 鏡像文件 |
EMMC | MIPI-DSI | myd_yt153_emmc_dsi.img |
EMMC | LVDS | myd_yt153_emmc_lvds.img |
NAND | MIPI-DSI | myd_yt153_nand_dsi.img |
NAND | LVDS | myd_yt153_nand_lvds.img |
SD卡 | MIPI-DSI | myd_yt153_sdcard_dsi.img |
SD卡 | LVDS | myd_yt153_sdcard_lvds.img |
注:所有鏡像均支持LocalBus功能。
3.2驅動架構
// 驅動層次
應用層:platformallwinnerindustrylocalbuslbc_ad7616_testlbc_ad7616_test.c (用戶空間測試程序)
驅動層:bsp/drivers/lbc/sunxi_lbc_v2_drv.c(內核驅動)
硬件層:LocalBus控制器(T153內置)
4.AD7616工作模式解析
4.1測試代碼是否能正常工作
直接運行代碼,看下是什么現象

圖 Lbc_ad7616_test程序運行結果
可以看到一共分三部分
模式設置,設置了SEL[0-2]以及CS0片選,做了寄存器映射。
寄存器設置,針對0x02,0x04…0x27先寫后度。
獲取結果,讀取每路通路結果,小數點后兩位。
4.2AD7616模塊分析
結合芯片手冊《ad7616.pdf》和軟件源碼 lbc_ad7616_test.c

圖 程序運行流程圖
init_gpio 設置了GPIO_CH_SEL0 , GPIO_CH_SEL1,GPIO_CH_SEL2 都為0,結合手冊可以看到這是通路選擇管腳,當軟件模式時需要設置為0x000。

圖 CHSEL寄存器
AD7616_Set_Range(Range_0_V) 里面設置RANGE_SEL0 和 RANGE_SEL1 為0,結合手冊,發現時設置的軟件模式.

圖 RNGSEL模式寄存器
map_shared_reg_region 和 map_chip_region 都是為了讀寫寄存器做內存映射。
run_ad7616_test 測試代碼關鍵,它一共分兩部分,初始化寄存器和讀數據。

圖 adc寫寄存器和獲取結果流程
通過查詢寄存器可以得到如下信息
adc_cmd_write_readback(ctx, i, 0x2, 0x60);
同樣方式,進行總結
寫入寄存器值 | 設置值說明 | 含義說明 |
0x2, 0x60 | bursten=1 seqen=1 | 使能Burst 模式 使能Sequencer 模式 |
0x4, 0xaa | [7:6]V3A=0x10 | V3A~V0A電壓范圍設置成+-5V |
0x5, 0xaa | [7:6]V7A=0x10 | V7A~V4A電壓范圍設置成+-5V |
0x6, 0xaa | [7:6]V3B=0x10 | V3B~V0B電壓范圍設置成+-5V |
0x7, 0xaa | [7:6]V7A=0x10 | V7B~V4B電壓范圍設置成+-5V |
0x20, 0x00 | [8]SSREN=0 | 表示在完成V0A/V0B通道對的轉換后,ADC 會繼續前進到序列堆棧的下一層。 |
0x21, 0x11 | N/A | |
0x22, 0x22 | N/A | |
0x23, 0x33 | N/A | |
0x24, 0x44 | N/A | |
0x25, 0x55 | N/A | |
0x26, 0x66 | N/A | |
0x27, (0x77 | 1 << 8) | N/A |
總結一下就是設置burst模式和啟用Sequencer模式,±5V量程。
好了,接著看測試邏輯 發送一次 CMD_SET_CONVST_IO 后,開始讀取每個通道的值
這個邏輯就比較清晰了,16個通道輪詢方式讀取,然后判斷最高位是否是1還是0做區別,最后做一個5V量程轉換后輸出小數點后2位。
結合上面寄存器分析,量程處理代碼比較隨意,應該要把2.5V,5V,10V 用宏控制,并和量產轉換形成對于關系。
那么它的實際精度是多少,作為一個16bitADC,理論精度是?32768 ~ +32767
當 sample_range = 5(±5V)時:
滿量程:10 V
碼值范圍:65536 個碼
1 LSB = 10V / 65536 ≈ 0.0001526 V
也就是:
≈ 152.6 μV / LSB
那釋放一下它的精度,不在控制輸出,把%6.2f改成%f即可。
printf("tsa: %p ch: %2d, data:0x%04x, voltage: %fn", tsa, ch, data[ch], voltage_data);
接下來就涉及另一個問題,采樣率到底是多少,其實就統計一下每秒這個讀取測試次數就知曉
最后統計出來每秒15幀,那肯定不是真實水平,清空所有打印再試試
此時可以看到每秒有接近9000次,由于每次采樣通道16,9000x16 = 144,000 samples / second,相當于單通道 144kSPS水平。
5.總結
通過本次測試,得出以下結論:
1.精度驗證:AD7616在±5V量程下實際分辨率達到152.6 μV,滿足16位ADC標稱性能。
2.速率驗證:系統實際采樣率達到144 kSPS(單通道等效),雖未達到理論極限250 kSPS,但已滿足大多數應用需求。
3.優化效果:通過減少軟件開銷,性能提升顯著,證明系統瓶頸主要在軟件層面。
4.實用價值:MYD-YT153 + AD7616組合為嵌入式高速數據采集提供了經濟高效的解決方案,適合工業自動化、測試測量等應用。














評論