ADS1256
ADS1256簡(jiǎn)介
ADS1256是TI推出的一款微功耗、高精度、8 通道、24 位高性能模數(shù)轉(zhuǎn)換器。該芯片還帶有4個(gè)可編程的I/O口、輸入緩沖器和可編程增益放大器等,芯片本身可以測(cè)量0-5v的信號(hào),高電壓采集可以通過(guò)把信號(hào)分壓成0-5v的范圍內(nèi)再給模塊輸入,所以ADS1256可以采集市面上大多數(shù)的標(biāo)準(zhǔn)電壓信號(hào)。
芯片特點(diǎn)
- 8通道輸入
- 可采集單端信號(hào)與差分信號(hào)
- 最高30KSPS的采樣率
- 4個(gè)可編程I/O
- 0-5V信號(hào)輸入
引腳說(shuō)明
這個(gè)引腳說(shuō)明關(guān)聯(lián)本文開(kāi)頭的圖片里的兩個(gè)模塊
引腳名稱(chēng) | 引腳說(shuō)明 |
---|---|
VIN/5V | 模塊供電正極 |
GND | 模塊供電負(fù)極 |
D0 | 數(shù)字IO口0,時(shí)鐘輸出 |
D1-D3 | 數(shù)字IO口1-3 |
SCLK | SPI時(shí)鐘輸入 |
DIN | SPI數(shù)據(jù)輸入 |
DOUT | SPI數(shù)據(jù)輸出 |
DRDY | 數(shù)據(jù)輸出就緒 |
CS | 片選 |
RESET | 復(fù)位 |
SYNC/PDWN | 同步/關(guān)閉電源 |
AIN0-AIN7 | 信號(hào)輸入,(8路單端/4路差分) |
模塊相關(guān)寄存器與命令
ADS1256一共有11個(gè)寄存器,可以通過(guò)配置相應(yīng)的寄存器實(shí)現(xiàn)數(shù)據(jù)輸出位的順序、是否自校準(zhǔn)、是適用緩沖器、單端/差分、采樣率等的配置。每一個(gè)寄存器具體的作用這里不展開(kāi)詳細(xì)說(shuō)明,可自行參考ADS1256的數(shù)據(jù)手冊(cè)
命令表,其中包含了讀/寫(xiě)數(shù)據(jù)、校準(zhǔn)、復(fù)位等指令。
芯片的SPI通訊時(shí)序可參考這個(gè)這個(gè)時(shí)序圖和下面的時(shí)序特性說(shuō)明。注意通信時(shí), CS 必須保持為低電平。
相關(guān)程序
初始化
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設(shè)置為兩線全雙工
SPI_InitStructure.SPI_Mode = SPI_Mode_Master; //設(shè)置SPI2為主模式
SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b; //SPI發(fā)送接收8位幀結(jié)構(gòu)
SPI_InitStructure.SPI_CPOL = SPI_CPOL_Low; //串行時(shí)鐘在不操作時(shí),時(shí)鐘為低電平
SPI_InitStructure.SPI_CPHA = SPI_CPHA_2Edge; //第一個(gè)時(shí)鐘沿開(kāi)始采樣數(shù)據(jù)
SPI_InitStructure.SPI_NSS = SPI_NSS_Soft; //NSS信號(hào)由軟件(使用SSI位)管理
SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_256; //定義波特率預(yù)分頻的值:波特率預(yù)分頻值為8
SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB; //數(shù)據(jù)傳輸從MSB位開(kāi)始
SPI_InitStructure.SPI_CRCPolynomial = 7; //CRC值計(jì)算的多項(xiàng)式
SPI_Init(SPI2, &SPI_InitStructure);
/* Enable SPI2 */
SPI_Cmd(SPI2, ENABLE);
}
ADS1256初始化,給芯片做自校準(zhǔn)并且設(shè)置芯片的參數(shù)(采樣率、數(shù)據(jù)位順序、放大倍數(shù)等)
void ADS1256_Init(void)
{
ADS1256WREG(ADS1256_STATUS,0x06); // 高位在前、使用緩沖
ADS1256WREG(ADS1256_ADCON,ADS1256_GAIN_1); // 放大倍數(shù)1
ADS1256WREG(ADS1256_DRATE,ADS1256_DRATE_10SPS); // 數(shù)據(jù)10sps
ADS1256WREG(ADS1256_IO,0x00);
//**自校準(zhǔn)**//
while(ADS1256_DRDY);
CS_0();
SPI_WriteByte(ADS1256_CMD_SELFCAL);
while(ADS1256_DRDY);
CS_1();
}
讀取某個(gè)通道的AD值
signed int ADS1256ReadData(unsigned char channel)
{
unsigned int sum=0;
while(ADS1256_DRDY);//當(dāng)ADS1256_DRDY為低時(shí)才能寫(xiě)寄存器
ADS1256WREG(ADS1256_MUX,channel); //設(shè)置通道
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;
}
主函數(shù),單端輸入,讀取每一個(gè)通道的AD值并且轉(zhuǎn)換后從串口打印輸出
int main(void)
{
u8 i=0;
int Adc;
float Volts;
SystemConfiguration(); //系統(tǒng)初始化
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");
}
}
實(shí)驗(yàn)效果
接線
STM32 | ADS1256 |
---|---|
5V | VIN/5V |
GND | GND |
SCLK | PB13 |
DIN | PB15 |
DOUT | PB14 |
DRDY | PB11 |
CS | PB12 |
實(shí)驗(yàn)現(xiàn)象
AIN0通道接到GND,輸出讀數(shù)為0.0012V,其他通道懸空,輸出的是浮空電壓。
AIN0通道接入單片機(jī)的3.3V,串口輸出顯示AIN0的讀數(shù)為3.3185V
審核編輯 黃宇
-
adc
+關(guān)注
關(guān)注
99文章
6689瀏覽量
549121 -
STM32
+關(guān)注
關(guān)注
2293文章
11031瀏覽量
364585 -
ADS1
+關(guān)注
關(guān)注
0文章
27瀏覽量
11771
發(fā)布評(píng)論請(qǐng)先 登錄
請(qǐng)問(wèn)ADS1256通道上是否可接放大器?
ADS1256無(wú)法采集2mV以下的信號(hào)嗎?
使用stm32的spi讀取ads1256數(shù)據(jù),ads1256正常輸出數(shù)據(jù)一段時(shí)間后總會(huì)出現(xiàn)異常默認(rèn)設(shè)置,為什么?
ADS1256為什么讀取不了電壓的數(shù)據(jù)?
請(qǐng)問(wèn)ADS1256如何才能實(shí)現(xiàn)定時(shí)轉(zhuǎn)換呢?
請(qǐng)問(wèn)ADS1256能像ADS1271那樣級(jí)聯(lián)嗎?
ADS1256支持菊花鏈連接嗎?
ADS1256芯片用SPI控制,這個(gè)SPI的時(shí)鐘要怎么設(shè)置?
如何通過(guò)總線來(lái)初始化ADS1256的寄存器?
使用ads1256差分測(cè)量回路中電流時(shí),是否可以在12V高端串入檢測(cè)電阻,讓ADS1256的A0A1接在這個(gè)電阻上測(cè)量?
STM32F103模擬SPI驅(qū)動(dòng)ADS1256,沒(méi)有成功的原因?
ADS1256的輸出電路是怎樣設(shè)計(jì)的呢?
ADS1282是否能沿用ADS1256的引腳連接方式?
ADS1255和ADS1256極低噪聲、24位模數(shù)轉(zhuǎn)換器數(shù)據(jù)表

評(píng)論