一.电路连接
原理图中使用了两个通道。
二.相关寄存器
见ADS1120官方手册
三.代码编写顺序实例(官方伪代码)
四.STM32程序
void ADC_1120_AIN1_CONVER()
{
//**********************************************
//ADC初始化
//**********************************************
Delay_N_ms(1);//延时
ADC_CS_LOW;//选中ADC芯片
Delay_N_ms(1);//延时
SPI1_SendByte(0x06);//复位ADC命令
Delay_N_ms(1);//延时
SPI1_SendByte(0x43);//0x43--01000011,写四个寄存器,从00-11开始写
SPI1_SendByte(0x91);//写00寄存器----AIN1为模拟输入管脚,无增益,PGA失能
SPI1_SendByte(0xc4);//写01寄存器----数据传输率1000SPS,单次转换模式
SPI1_SendByte(0x00);//写10寄存器----内部2.048V参考源
SPI1_SendByte(0x00);//写11寄存器----DRAY提示转换结束
//SPI1_SendByte(0x23);//读寄存器,查看是否正确
//Delay_N_ms(1);//延时
//UART2_PutChar(SPI1_ReadByte(0x00));
//UART2_PutChar(SPI1_ReadByte(0x00));
//UART2_PutChar(SPI1_ReadByte(0x00));
//UART2_PutChar(SPI1_ReadByte(0x00));
SPI1_SendByte(0x08);//打开ADC转换使能,开始ADC转换
Delay_N_ms(1);//延时
ADC_CS_HIGN;
//**********************************************
//ADC结果读取并进行数据处理后通过RS485发送至计算机
//**********************************************
u16 ADC_HIGN_DATA=0,ADC_LOW_DATA=0;
unsigned char counter,a,b,c,d,e;
u16 ADC_DATA=0;
u32 ADC_8TIMES_DATA=0;
for(counter=0;counter<8;counter++)
{
while(!(GPIO_ReadOutputDataBit(GPIOB,GPIO_Pin_10) == RESET));//判断DRAY管脚点平是否变低,数据是转换完成准备
ADC_CS_LOW;
Delay_N_ms(1);
ADC_HIGN_DATA=SPI1_ReadByte(0x00);//读取ADC结果高8位
ADC_LOW_DATA=SPI1_ReadByte(0x00);//读取ADC结果低8位
Delay_N_ms(1);
ADC_CS_HIGN;
//UART2_PutChar(ADC_HIGN_DATA);
//UART2_PutChar(ADC_LOW_DATA);
ADC_DATA = ADC_HIGN_DATA*256 + ADC_LOW_DATA;//得到16位AD数据
ADC_8TIMES_DATA += ADC_DATA;//累加八次做滤波处理
ADC_DATA=0;
}
ADC_DATA = ADC_8TIMES_DATA >> 3;//取八次平均值
ADC_8TIMES_DATA=0;//清零累加器
ADC_DATA = (unsigned int)(((unsigned long)ADC_DATA)*2*20480/65536);//电压值*10000,用以下来分离各个数字,取小数点后4位
//ADC_DATA = Real_ADC * 10000;
a = ADC_DATA /10000;
b = ADC_DATA % 10000 / 1000;
c = ADC_DATA % 1000 / 100;
d = ADC_DATA % 100 / 10;
e = ADC_DATA % 10;
UART2_PutChar(0x56);//V
UART2_PutChar(0x4C);//L
UART2_PutChar(0x3D);//=
UART2_PutChar(a+48);
UART2_PutChar(0x2E);//.
UART2_PutChar(b+48);
UART2_PutChar(c+48);
UART2_PutChar(d+48);
UART2_PutChar(e+48);
//UART2_PutChar(0x0D);//回车
//UART2_PutChar(0x0A);//换行
Delay_N_ms(5);
ADC_CS_HIGN;
//**********************************************
//结束后使ADC进行掉电模式
//**********************************************
ADC_CS_LOW;//选中ADC芯片
Delay_N_ms(1);//延时
SPI1_SendByte(0x02);//POWERDOWN掉电命令
Delay_N_ms(1);//延时
}