一、AD7124-8模塊簡介
AD7124-8 是一款高精度、低功耗的 24 位模數(shù)轉(zhuǎn)換器(ADC),內(nèi)置多種模擬前端功能,專為高精度傳感器測量等應(yīng)用設(shè)計。它支持最多 8 路差分輸入,也可配置為最多 16 路偽差分輸入,適用于多通道數(shù)據(jù)采集。
產(chǎn)品特性
- 高精度低噪聲:內(nèi)置 24 位 Σ-Δ(Sigma-Delta)ADC,具備極低的輸入噪聲??芍苯舆B接微弱信號,無需額外前級放大。
- 靈活的功耗模式:提供三種功耗模式(低功耗、普通、全速),可根據(jù)需求權(quán)衡功耗、速度和噪聲性能。
- 豐富的濾波器和采樣配置:支持多種數(shù)字濾波器,包括可同時抑制 50Hz 和 60Hz 工頻干擾。低速采樣時抑制能力可超過 80 dB,適合工業(yè)信號處理。
- 集成度高:
- 多通道處理:內(nèi)置通道掃描功能(最多支持 16 通道),可以自動輪詢采樣多個輸入通道;每個通道都可以分配不同的配置(增益、采樣率、濾波器、參考源等);
- 提供完整診斷功能:循環(huán)冗余校驗(CRC)、信號鏈檢查和串行接口檢查。
二、模塊管腳說明

其中,AVSS與GND相連。8路差分通道分別為AIN0-AIN1,AIN2-AIN3,AIN4-AIN5,AIN6-AIN7,AIN8-AIN9,AIN10-AIN11,AIN12-AIN13,AIN14-AIN15,AINx:x為偶數(shù),則正信號輸入,反之負信號輸入。
三、功能框圖和時序圖

信號轉(zhuǎn)換時序:
信號讀取時序:
四、主要寄存器說明
- ADC_CONTROL寄存器(0x01):用于設(shè)置 ADC 的工作模式(如連續(xù)采樣)、功耗模式、參考電壓源、時鐘源等。其中,DATA_STATUS為狀態(tài)寄存器內(nèi)容傳輸?shù)氖鼓芪???梢詫顟B(tài)寄存器的內(nèi)容附加到AD7124-8的每次轉(zhuǎn)換結(jié)果。使能多個通道時,此功能很有用,因為狀態(tài)寄存器可確定哪一通道與數(shù)據(jù)寄存器值對應(yīng)。每次輸出轉(zhuǎn)換結(jié)果時,都會附加狀態(tài)寄存器的內(nèi)容。DATA_STATUS置1后,狀態(tài)寄存器的內(nèi)容將與每次從數(shù)據(jù)寄存器讀取的數(shù)據(jù)一同傳輸。


- IO_CONTROL_1寄存器(0x03):用于控制 I/O 引腳(如 PSW 開關(guān)、REF 緩沖區(qū)、燒斷電流檢測等)。

- ID寄存器(0x05):讀取設(shè)備ID,SPI寫入命令0x40為讀寄存器,讀ID為0x05,故寫入0x45就可以讀出ID。

- CHANNEL通道寄存器(0x09~0x18):置通道(AINP輸入和AINM輸入),使能或禁用通道,以及選擇設(shè)置。設(shè)置可從用戶定義的8種不同選項中選擇。當ADC轉(zhuǎn)換時,它會自動遍歷所有使能的通道。如果需要,用戶可以在一個序列中對某些通道多次采樣。此位,用戶還可以將診斷功能包括在序列之中。

- CONFIG配置寄存器(0x19~0x20):設(shè)置該通道對應(yīng)的:增益、基準源、輸入緩沖等。


- FILTER濾波器寄存器(0x21~0x28):設(shè)置數(shù)字濾波器類型(SINC3/SINC4等)、采樣速率(輸出數(shù)據(jù)速率)。

- 數(shù)據(jù)寄存器(0x02):用于存儲ADC的轉(zhuǎn)換結(jié)果,采樣結(jié)果在這里輸出。

采集信號流程的簡要流程:1,2,3寄存器為初始化階段,配置ADC工作模式,4,5,6寄存器配置輸入通道階段,7寄存器讀取數(shù)據(jù)階段。
五、模擬信號輸入說明
根據(jù)數(shù)據(jù)手冊描述,模擬輸入信號范圍是由基準電壓源和增益決定。如2.5V內(nèi)部基準電壓源,設(shè)置增益為1,則差分輸入信號范圍為±2.5V。其中,又因為AINx輸入范圍要在[AVSS,AVDD]之間,板子是單電源輸入且看原理圖,AVDD接了3.3V,AVSS接了GND,即[AVSS,AVDD]=[0,3.3V],即AINx輸入信號要輸入正信號。
所以由模擬輸入信號范圍和AINx輸入信號范圍來決定AINx具體輸入電壓信號范圍。如差分輸入信號范圍為±2.5V,那么AINx輸入電壓信號要在[0V,2.5V]之間。測量最大正差分值+2.5V,則AIN0接2.5V,AIN1接0V,最大負差分值-2.5V,則AIN0接0V,AIN1接2.5V。
六、STM32F103驅(qū)動AD7124采集信號
1. 準備工作
STM32F103C8T6開發(fā)板、AD7124采集模塊、USB轉(zhuǎn)TTL、輸入信號源。
2. 引腳接線
| STM32F103C8T6 | AD7124采集模塊 |
|---|---|
| 3.3V | VIN |
| GND | GND |
| PA0 | CS |
| PA1 | SCLK |
| PA2 | DIN |
| PA4 | DOUT |
| PA9 | USB轉(zhuǎn)TTL-Rx |
| PA10 | USB轉(zhuǎn)TTL-Tx |
AD7124-8 模塊程序說明
- 讀取 AD7124-8 ID 結(jié)果為 0x1x,x 為硅版本,例如:0x12、0x14。新批次ID號為0x17。
- SYNC 為同步輸入,低電平有效,模塊單獨工作時,應(yīng)確保 SYNC 為高電平或懸空。
- 寄存器操作邏輯描述:首先寫入通信寄存器,指示讀取或?qū)懭?、所操作寄存器地址,隨后讀取或?qū)懭?1Byte 或 3Byte 數(shù)據(jù)。
- void LED_TEST(void)函數(shù)控制 AD7124-8 PSW 引腳連接的 LED,可用戶通信調(diào)試。使用該函數(shù)需要把通道初始化注釋掉。
- 參考程序基于 STM32F103X,時鐘為 72MHz。
3. 代碼示例
AD7124.c
#include "ad7124.h"
void RCC_Configuration(void)
{
ErrorStatus HSEStartUpStatus;
RCC_DeInit();
RCC_HSEConfig(RCC_HSE_ON);
HSEStartUpStatus = RCC_WaitForHSEStartUp();
if(HSEStartUpStatus == SUCCESS)
{
FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);
FLASH_SetLatency(FLASH_Latency_2);
RCC_HCLKConfig(RCC_SYSCLK_Div1);
RCC_PCLK2Config(RCC_HCLK_Div1);
RCC_PCLK1Config(RCC_HCLK_Div2);
RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_9);
RCC_PLLCmd(ENABLE);
while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET) { }
RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);
while(RCC_GetSYSCLKSource() != 0x08) { }
}
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO |RCC_APB2Periph_GPIOA, ENABLE);
}
void GPIO_Configuration(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2|GPIO_Pin_1|GPIO_Pin_0;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_Init(GPIOA, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
GPIO_Init(GPIOA, &GPIO_InitStructure);
}
void NVIC_Configuration(void)
{
#ifdef VECT_TAB_RAM
NVIC_SetVectorTable(NVIC_VectTab_RAM, 0x0);
#else
NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x0);
#endif
}
void Delay(vu32 nCount)
{
for(; nCount != 0; nCount--);
}
#ifdef DEBUG
void assert_failed(u8* file, u32 line)
{
while (1) { }
}
#endif
void AD7124_8_Reset(void)
{
AD7124_8_CS_L;
AD7124_8_DIN_H;
for(uint8_t a=0;a< 65;a++)//提供大于64個寫操作,復(fù)位AD7124-8
{
AD7124_8_SCLK_L;
Delay(10);
AD7124_8_SCLK_H;
Delay(10);
}
AD7124_8_CS_H;
}
void LED_TEST(void)//AD7124_8的 PSW 上連接的LED,控制LED閃爍
{
AD7124_8_CS_L;
Delay(10);
AD7124_8_Write(0x03);//寫入 IO_CONTROL_1寄存器,復(fù)位值為0x000000
AD7124_8_Write(0x00);//寫入3字節(jié) IO_CONTROL_1寄存器值
AD7124_8_Write(0x80);
AD7124_8_Write(0x00);
AD7124_8_CS_H;
Delay(1000000);//約0.5S延時
AD7124_8_CS_L;
Delay(10);
AD7124_8_Write(0x03);
AD7124_8_Write(0x00);
AD7124_8_Write(0x00);
AD7124_8_Write(0x00);
AD7124_8_CS_H;
Delay(1000000);
}
void AD7124_8_INIT(void)//單通道配置
{
AD7124_8_CS_L;
Delay(100);
AD7124_8_Write(0x09);//寫入通道寄存器0 CHANNEL_0 (datasheet Page 86)
AD7124_8_Write(0x80);//使能通道,當有多個通道被使能時,自動按順序轉(zhuǎn)換;使用CONFIG_0配置當前通道。ADC鏈接與AIN0與AIN1
AD7124_8_Write(0x01);
AD7124_8_Write(0x19);//寫入配置寄存器0 CONFIG_0;(datasheet Page 88)
AD7124_8_Write(0x09);//選擇雙極型模式、關(guān)閉檢測電流源、使能REF BUF與AIN BUF,選擇內(nèi)部基準源,增益配置為+-2.5V;
AD7124_8_Write(0xf0);
AD7124_8_Write(0x21);//寫入濾波寄存器寄存器,F(xiàn)ILTER_0 (datasheet Page 89)
AD7124_8_Write(0x06);//使用SINC4 濾波器
AD7124_8_Write(0x00);
AD7124_8_Write(0x80);//FS=128,因此數(shù)據(jù)輸出速率 = 614.4K/(32*128)= 150Hz
AD7124_8_Write(0x01);//寫入ADC控制寄存器,ADC_CONTROL (datasheet Page 78)
AD7124_8_Write(0x09);//使能連續(xù)讀取,使能內(nèi)部基準,全功率模式,使用內(nèi)部614.4kHz時鐘源,連續(xù)工作模式。
AD7124_8_Write(0xC0);
}
void AD7124_8_INIT1(void)//多通道配置
{
AD7124_8_CS_L;
Delay(100);
AD7124_8_Write(0x09);//寫入通道寄存器0 CHANNEL_0 (datasheet Page 86)
AD7124_8_Write(0x80);//使能通道,當有多個通道被使能時,自動按順序轉(zhuǎn)換;使用CONFIG_0配置當前通道。ADC鏈接與AIN0與AIN1
AD7124_8_Write(0x01);
AD7124_8_Write(0x0A);//寫入通道寄存器1 CHANNEL_1
AD7124_8_Write(0x80);//使能通道,當有多個通道被使能時,自動按順序轉(zhuǎn)換;使用CONFIG_1配置當前通道。ADC鏈接與AIN2與AIN3
AD7124_8_Write(0x43);
AD7124_8_Write(0x0B);//寫入通道寄存器2 CHANNEL_2
AD7124_8_Write(0x80);//使能通道,當有多個通道被使能時,自動按順序轉(zhuǎn)換;使用CONFIG_2配置當前通道。ADC鏈接與AIN4與AIN5
AD7124_8_Write(0x85);
AD7124_8_Write(0x0C);//寫入通道寄存器3 CHANNEL_3
AD7124_8_Write(0x80);//使能通道,當有多個通道被使能時,自動按順序轉(zhuǎn)換;使用CONFIG_3配置當前通道。ADC鏈接與AIN6與AIN7
AD7124_8_Write(0xC7);
AD7124_8_Write(0x0D);//寫入通道寄存器4 CHANNEL_4
AD7124_8_Write(0x81);//使能通道,當有多個通道被使能時,自動按順序轉(zhuǎn)換;使用CONFIG_4配置當前通道。ADC鏈接與AIN8與AIN9
AD7124_8_Write(0x09);
AD7124_8_Write(0x0E);//寫入通道寄存器5 CHANNEL_5
AD7124_8_Write(0x81);//使能通道,當有多個通道被使能時,自動按順序轉(zhuǎn)換;使用CONFIG_5配置當前通道。ADC鏈接與AIN10與AIN11
AD7124_8_Write(0x4B);
AD7124_8_Write(0x0F);//寫入通道寄存器6 CHANNEL_6
AD7124_8_Write(0x81);//使能通道,當有多個通道被使能時,自動按順序轉(zhuǎn)換;使用CONFIG_6配置當前通道。ADC鏈接與AIN12與AIN13
AD7124_8_Write(0x8D);
AD7124_8_Write(0x10);//寫入通道寄存器7 CHANNEL_7
AD7124_8_Write(0x81);//使能通道,當有多個通道被使能時,自動按順序轉(zhuǎn)換;使用CONFIG_7配置當前通道。ADC鏈接與AIN14與AIN15
AD7124_8_Write(0xCF);
//注:在通道寄存器中可指定所使用的配置寄存器(或稱設(shè)置寄存器),配置寄存器與濾波寄存器對應(yīng)關(guān)聯(lián)。
AD7124_8_Write(0x19);//寫入配置寄存器0 CONFIG_0;(datasheet Page 88)
AD7124_8_Write(0x09);//選擇雙極型模式、關(guān)閉檢測電流源、使能REF BUF與AIN BUF,選擇內(nèi)部基準源,增益配置為+-2.5V;
AD7124_8_Write(0xf0);
AD7124_8_Write(0x21);//寫入濾波寄存器寄存器,F(xiàn)ILTER_0 (datasheet Page 89)
AD7124_8_Write(0x06);
AD7124_8_Write(0x00);
AD7124_8_Write(0x80);//FS=128,使用多通道序列器時,轉(zhuǎn)換時間為建立時間的總和,建立時間大于轉(zhuǎn)換時間。
AD7124_8_Write(0x01);//寫入ADC控制寄存器,ADC_CONTROL (datasheet Page 78)
AD7124_8_Write(0x0D);//使能連續(xù)讀取,使能內(nèi)部基準,全功率模式,使用內(nèi)部614.4kHz時鐘源,連續(xù)工作模式,使能 DATA_STATUS以輸出狀態(tài)寄存器,用于分辨通道數(shù)據(jù)
AD7124_8_Write(0xC0);
}
void AD7124_8_Write(uint8_t Data)
{
uint8_t data;
data=Data;
for(uint8_t i=0;i< 8;i++)
{
AD7124_8_SCLK_L;
if(data&0x80)
AD7124_8_DIN_H;
else
AD7124_8_DIN_L;
Delay(100);
AD7124_8_SCLK_H;
Delay(100);
data< <=1;
}
}
uint32_t AD7124_8_Read(void)
{
uint32_t DATA;
DATA=0;
for(uint8_t i=0;i< 24;i++)
{
DATA< <=1;
AD7124_8_SCLK_L;
Delay(50);
if(AD7124_8_DOUT)
DATA++;
AD7124_8_SCLK_H;
Delay(50);
}
Delay(100);
return DATA;
}
uint8_t AD7124_8_Read_Byte(void)
{
uint8_t DATA;
DATA=0;
for(uint8_t i=0;i< 8;i++)
{
DATA< <=1;
AD7124_8_SCLK_L;
Delay(100);
if(AD7124_8_DOUT)
DATA++;
AD7124_8_SCLK_H;
Delay(100);
}
Delay(100);
return DATA;
}
main.c
#include "stm32f10x.h" // Device header
#include "Delay.h"
#include "Serial.h"
#include "ad7124.h"
uint8_t AD7124_8_ID;
uint32_t Data;
float data_temp,Vol;
float VolM[8];
uint8_t DATA_STATUS;
int main(void)
{
Serial_Init();
RCC_Configuration();
GPIO_Configuration();
NVIC_Configuration();
AD7124_8_Reset();//復(fù)位AD7190數(shù)字接口
Delay(100);
AD7124_8_CS_L;
Delay(10);
AD7124_8_Write(0x45);//讀取ID寄存器
AD7124_8_ID=AD7124_8_Read_Byte();//讀取AD7124-8 ID
AD7124_8_CS_H;
printf("AD7124_8_ID = 0x%xrn", AD7124_8_ID);
// AD7124_8_INIT(); //單通道讀取
AD7124_8_INIT1();
while (1)
{
//LED_TEST(); //使用該函數(shù)需要把通道初始化注釋掉
while(AD7124_8_DOUT);//低電平時數(shù)據(jù)就緒
Data=AD7124_8_Read();//Data采集結(jié)果
data_temp=Data;
// Vol=(data_temp-0x800000)/0x800000*2.5; //單通道讀取
// printf("Vol=%.3fVrn", Vol);
DATA_STATUS=AD7124_8_Read_Byte()&0x0F;
VolM[DATA_STATUS]=(data_temp-0x800000)/0x800000*2.5;
printf("CH%u: Volt = %.3fVrn", DATA_STATUS, VolM[DATA_STATUS]);
Delay_ms(1000);
}
}
4. 效果展示

采集2,3,4差分通道[AIN4:1.2V,AIN5:GND];[AIN6:GND,AIN7:1.5V];[AIN8:1.8V,AIN9:1.2V]。注意:AD7124 多通道采集時返回的數(shù)據(jù)的通道順序不是嚴格按通道編號順序返回的,而是由內(nèi)部通道序列器輪詢觸發(fā)、哪個通道先轉(zhuǎn)換完成就先輸出哪個通道的數(shù)據(jù)。
總結(jié)
AD7124-8 是一款高度集成的高性能 ADC,不僅具備出色的精度和靈活配置,還集成了豐富的診斷功能,特別適合用于:工業(yè)自動化;儀器儀表;傳感器采集系統(tǒng)(如溫度、壓力、應(yīng)變等);低功耗便攜設(shè)備中的高精度數(shù)據(jù)采集等應(yīng)用場景。
審核編輯 黃宇
-
數(shù)據(jù)采集
+關(guān)注
關(guān)注
41文章
8046瀏覽量
120942 -
STM32F103
+關(guān)注
關(guān)注
34文章
495瀏覽量
67741 -
ADC
+關(guān)注
關(guān)注
0文章
226瀏覽量
16845
發(fā)布評論請先 登錄
高速采集卡丨AD 采集丨 多通道數(shù)據(jù)采集卡丨高速數(shù)據(jù)采集系統(tǒng)丨青翼科技FMC 子卡
多通道綜合數(shù)據(jù)采集儀:振弦、溫度與模擬信號一體采集 邊坡、隧道、橋梁與鐵路監(jiān)測
基于STM32F103驅(qū)動ADS8688模塊 8通道SAR/ADC數(shù)據(jù)采集信號
坤馳科技——雙通道3GS/s高速數(shù)據(jù)采集卡
AD7124-8集成PGA和基準電壓源的8通道、 低噪聲、低功耗24位Σ-Δ型ADC數(shù)據(jù)手冊
【BPI-CanMV-K230D-Zero開發(fā)板體驗】+ADC數(shù)據(jù)采集及尋找引腳的問題
STM32F103驅(qū)動LD3320語音識別模塊
基于STM32F103驅(qū)動AD7124-8 24Bit 多通道ADC數(shù)據(jù)采集模塊采集信號
評論