ADS1256


ADS1256簡介
ADS1256是TI推出的一款微功耗、高精度、8 通道、24 位高性能模數轉換器。該芯片還帶有4個可編程的I/O口、輸入緩沖器和可編程增益放大器等,芯片本身可以測量0-5v的信號,高電壓采集可以通過把信號分壓成0-5v的范圍內再給模塊輸入,所以ADS1256可以采集市面上大多數的標準電壓信號。
芯片特點
- 8通道輸入
- 可采集單端信號與差分信號
- 最高30KSPS的采樣率
- 4個可編程I/O
- 0-5V信號輸入
引腳說明
這個引腳說明關聯本文開頭的圖片里的兩個模塊
| 引腳名稱 | 引腳說明 |
|---|---|
| VIN/5V | 模塊供電正極 |
| GND | 模塊供電負極 |
| D0 | 數字IO口0,時鐘輸出 |
| D1-D3 | 數字IO口1-3 |
| SCLK | SPI時鐘輸入 |
| DIN | SPI數據輸入 |
| DOUT | SPI數據輸出 |
| DRDY | 數據輸出就緒 |
| CS | 片選 |
| RESET | 復位 |
| SYNC/PDWN | 同步/關閉電源 |
| AIN0-AIN7 | 信號輸入,(8路單端/4路差分) |
模塊相關寄存器與命令
ADS1256一共有11個寄存器,可以通過配置相應的寄存器實現數據輸出位的順序、是否自校準、是適用緩沖器、單端/差分、采樣率等的配置。每一個寄存器具體的作用這里不展開詳細說明,可自行參考ADS1256的數據手冊
命令表,其中包含了讀/寫數據、校準、復位等指令。
芯片的SPI通訊時序可參考這個這個時序圖和下面的時序特性說明。注意通信時, CS 必須保持為低電平。

相關程序
初始化
SPI初始化
void SPI2_Init(void)
{
SPI_InitTypeDef SPI_InitStructure;
GPIO_InitTypeDef GPIO_InitStructure;
/****Initial SPI2******************/
/* Enable SPI2 and GPIOB clocks */
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
RCC_APB1PeriphClockCmd(RCC_APB1Periph_SPI2, ENABLE);
/* Configure SPI2 pins: NSS, SCK, MISO and MOSI */
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13 | GPIO_Pin_14 | GPIO_Pin_15;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_Init(GPIOB, &GPIO_InitStructure);
/* SPI2 configuration */
SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex; //SPI1設置為兩線全雙工
SPI_InitStructure.SPI_Mode = SPI_Mode_Master; //設置SPI2為主模式
SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b; //SPI發送接收8位幀結構
SPI_InitStructure.SPI_CPOL = SPI_CPOL_Low; //串行時鐘在不操作時,時鐘為低電平
SPI_InitStructure.SPI_CPHA = SPI_CPHA_2Edge; //第一個時鐘沿開始采樣數據
SPI_InitStructure.SPI_NSS = SPI_NSS_Soft; //NSS信號由軟件(使用SSI位)管理
SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_256; //定義波特率預分頻的值:波特率預分頻值為8
SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB; //數據傳輸從MSB位開始
SPI_InitStructure.SPI_CRCPolynomial = 7; //CRC值計算的多項式
SPI_Init(SPI2, &SPI_InitStructure);
/* Enable SPI2 */
SPI_Cmd(SPI2, ENABLE);
}
ADS1256初始化,給芯片做自校準并且設置芯片的參數(采樣率、數據位順序、放大倍數等)
void ADS1256_Init(void)
{
ADS1256WREG(ADS1256_STATUS,0x06); // 高位在前、使用緩沖
ADS1256WREG(ADS1256_ADCON,ADS1256_GAIN_1); // 放大倍數1
ADS1256WREG(ADS1256_DRATE,ADS1256_DRATE_10SPS); // 數據10sps
ADS1256WREG(ADS1256_IO,0x00);
//**自校準**//
while(ADS1256_DRDY);
CS_0();
SPI_WriteByte(ADS1256_CMD_SELFCAL);
while(ADS1256_DRDY);
CS_1();
}
讀取某個通道的AD值
signed int ADS1256ReadData(unsigned char channel)
{
unsigned int sum=0;
while(ADS1256_DRDY);//當ADS1256_DRDY為低時才能寫寄存器
ADS1256WREG(ADS1256_MUX,channel); //設置通道
CS_0();
SPI_WriteByte(ADS1256_CMD_SYNC);
SPI_WriteByte(ADS1256_CMD_WAKEUP);
SPI_WriteByte(ADS1256_CMD_RDATA);
sum |= (SPI_WriteByte(0xff) < < 16);
sum |= (SPI_WriteByte(0xff) < < 8);
sum |= SPI_WriteByte(0xff);
CS_1();
if (sum >0x7FFFFF)
{
sum -= 0x1000000;
}
return sum;
}
主函數,單端輸入,讀取每一個通道的AD值并且轉換后從串口打印輸出
int main(void)
{
u8 i=0;
int Adc;
float Volts;
SystemConfiguration(); //系統初始化
USART_Config(USART1,115200); //串口1初始化,波特率 115200
Init_ADS1256_GPIO(); //初始化ADS1256 GPIO管腳
Delay_ms(50);
ADS1256_Init();
while(1)
{
for(i = 0;i < 8;i++)
{
Adc = ADS1256ReadData( (i < < 4) | ADS1256_MUXN_AINCOM);
Volts = Adc*0.000000598;
printf(" %.4fV ",Volts);
}
printf("rn");
}
}
實驗效果
接線
| STM32 | ADS1256 |
|---|---|
| 5V | VIN/5V |
| GND | GND |
| SCLK | PB13 |
| DIN | PB15 |
| DOUT | PB14 |
| DRDY | PB11 |
| CS | PB12 |
實驗現象

AIN0通道接到GND,輸出讀數為0.0012V,其他通道懸空,輸出的是浮空電壓。

AIN0通道接入單片機的3.3V,串口輸出顯示AIN0的讀數為3.3185V

審核編輯 黃宇
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。
舉報投訴
-
adc
+關注
關注
100文章
7846瀏覽量
556690 -
STM32
+關注
關注
2312文章
11182瀏覽量
374245 -
ADS1
+關注
關注
0文章
27瀏覽量
11921
發布評論請先 登錄
相關推薦
熱點推薦
STM32驅動串口屏,STM32F103C8T6串口發送指令控制HMI串口屏
僅是一部分常用的基礎指令,更多更仔細的指令或者函數可以訪問陶晶馳資料官網。 硬件和接線 硬件需要一塊STM32F103C8T6的開發板,杜邦線諾干,2.4寸串口屏一塊 接線 串口屏 STM32
串口調試步驟(適合免驅動的232串口設備)
密碼切換到root超級管理下 apt update 更新插件 apt-get install cutecom 安裝系統自帶的串口調試工具 cutecom 輸入串口測試的指令會彈出一個圖形界面如下圖 32串口協議測試需要將第2和第
深入剖析ADS1255/6:24位低噪聲ADC的卓越性能與應用
? 在電子設計領域,高精度模擬到數字的轉換至關重要。德州儀器(TI)的ADS1255和ADS1256作為24位超低噪聲模數轉換器(ADC),為眾多對精度要求極高的應用提供了完整的高分辨
深度剖析ADS1255/6:24位高精度ADC的卓越之選
? 在電子設計領域,高精度模擬 - 數字轉換器(ADC)是實現精確測量和數據采集的關鍵組件。ADS1255和ADS1256作為德州儀器(TI)推出的極低噪聲、24位ADC,為眾多對精度要求極高
NucleiStudio_IDE_201909串口打印浮點型數據時無數據輸出,軟件該如何配置串口才能打印浮點型數據?
NucleiStudio_IDE_201909串口打印浮點型數據時無數據輸出,軟件該如何配置串口才能打印浮點型數據?
發表于 11-07 07:57
關于stm32f4zgt6和mspm0g3507串口通信問題
本人在使用stm32f4zgt6和mspm0g3507串口通信時出現問題,情況如下:
m0芯片使用軟件超時解析進行數據接收,使用標準庫的transmit函數進行數據發送。
stm32使用DMA+空閑
發表于 09-01 11:11
STM32串口發送數據,USART_FLAG_TC無法置位怎么解決?
STM32串口發送數據,在經過一段時間的數據發送,大概200ms發送一下,一次發送大概二三十個字節的數據,有可能會發生USART_FLAG_TC不置位的情況,如何解決或者避免?輪詢發送,后卡在了
發表于 07-29 11:44
串口轉網口網關有哪些功能應用
在工業物聯網與智能設備管理領域,串口轉網口網關已成為連接傳統設備與現代網絡的核心樞紐。這類設備通過將RS-232、RS-485等串口協議轉換為TCP/IP、MQTT等網絡協議,解決了各
6軸步進電機驅動+STM32F767+485+CAN+網口+12輸入輸出原理圖
6軸步進電機驅動+STM32F767+485+CAN+網口+12路輸入輸出 原理圖?步進電機驅動方案TMC5160
發表于 06-27 16:18
?0次下載
ADS1256多通道輪詢切換
?
void ADS1256_SetDiffChannal(uint8_t _ch,uint8_t SPIx)
{
if (_ch == 0)
{
ADS1256_WriteReg(REG_MUX
發表于 05-15 16:57
STM32驅動ADS1256串口輸出-AD轉換
評論