微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > STM32驱动16位精度A/D转换芯片ADS1120

STM32驱动16位精度A/D转换芯片ADS1120

时间:11-27 来源:互联网 点击:
一.电路连接



原理图中使用了两个通道。

二.相关寄存器

见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);//延时

}


Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top