/*
Code name:ADS1220Driver
Date:2019.5.10
Writing by : Borygnay
*/
#include <stdio.h>
#include "stm32f4xx.h"
#include "ADS1220Driver.h"
#include "SPI2.h"
#include "delay.h"
//DRDY ->PB11
//CS ->PB12
//MOSI ->PB15
//MISO ->PB14
//SCL ->PB13
static unsigned char RcvData[8];
long ADS1220RTDGainCorrection;
long ADS1220TCGainCorrection;
/*一般单次转换时候采集时候使用的代码
if(!Read_DRDY){//当检测到数据可读时
ADS1220_Get_Conversion_Data(ADC1220.DigitValue);//启动读取函数
ADS1220_Start();//及时发送一个下一次转换的信号
ADC1220.AllDigit = (ADC1220.DigitValue[1]<<16)+(ADC1220.DigitValue[2]<<8)+ADC1220.DigitValue[3];//合并分开的24位数据
if(ADC1220.DigitValue[1] < 0x80){//正负号判断
ADC1220.AnalogValue = ((ADC1220.AllDigit)*VRef/0x800000);
}
else{
ADC1220.AnalogValue = (-1)*((0xffffff-ADC1220.AllDigit)*VRef/0x800000);
}
*/
/*ADS1220初始化*/
void ADS1220_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;//信号就绪口
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB, ENABLE);//使能GPIOB时钟
//GPIOB11,12初始化设置
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11;//|GPIO_Pin_11;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;//普通输入模式
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;//100M
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;//上拉
GPIO_Init(GPIOB, &GPIO_InitStructure);//初始化
Setup_ADS1220(
ADS1220_MUX_AIN0_AIN1,//输入多路复用器配置
ADS1220_OP_MODE_NORMAL,//工作模式选择
ADS1220_CONVERSION_SINGLE_SHOT,//转换模式
ADS1220_DATA_RATE_45SPS, //数据速率
ADS1220_GAIN_1,// 增益配置
ADS1220_PGA_BYPASS,//禁止/启用可编程增益放大器
ADS1220_IDAC1_DISABLED,//选择IDAC1将路由到的通道
ADS1220_IDAC2_DISABLED, //选择IDAC2将路由到的通道
ADS1220_IDAC_CURRENT_OFF, //IDAC电流设置
ADS1220_VREF_EXT_REF0_PINS,// 基准电压选择
ADS1220_TEMP_SENSOR_OFF);//温度传感器
}
/*ADS1220配置*/
/*输入:
inputMux :输入多路复用器配置(对于AINn=AVSS的设置,PGA必须(PGA_BYPASS=1),并且仅可使用增益1,2,4)
ADS1220_MUX_AIN0_AIN1
ADS1220_MUX_AIN0_AIN2
ADS1220_MUX_AIN0_AIN3
ADS1220_MUX_AIN1_AIN2
ADS1220_MUX_AIN1_AIN3
ADS1220_MUX_AIN2_AIN3
ADS1220_MUX_AIN1_AIN0
ADS1220_MUX_AIN3_AIN2
ADS1220_MUX_AIN0_AVSS
ADS1220_MUX_AIN1_AVSS
ADS1220_MUX_AIN2_AVSS
ADS1220_MUX_AIN3_AVSS
ADS1220_MUX_REFP-REFN
ADS1220_MUX_AVDD-AVSS
ADS1220_MUX_SHORTED
opMode: 工作模式选择
ADS1220_OP_MODE_NORMAL 正常模式(256kHz 调制时钟 默认设置)
ADS1220_OP_MODE_DUTY 占空比模式(内部占空比1:4)
ADS1220_OP_MODE_TURBO Turbo模式 (512kHz调制时钟)
conversionMode: 转换模式
ADS1220_CONVERSION_SINGLE_SHOT 单次
ADS1220_CONVERSION_CONTINUOUS 连续
dateRate:数据速率(详见说明书表18)
ADS1220_DATA_RATE_20SPS
ADS1220_DATA_RATE_45SPS
ADS1220_DATA_RATE_90SPS
ADS1220_DATA_RATE_175SPS
ADS1220_DATA_RATE_330SPS
ADS1220_DATA_RATE_600SPS
ADS1220_DATA_RATE_1000SPS
gainLevel:增益配置(在不使用PGA的情况下,可使用增益1,2,4.在这种情况下,通过开关电容结构获得增益)
ADS1220_GAIN_1
ADS1220_GAIN_2
ADS1220_GAIN_4
ADS1220_GAIN_8
ADS1220_GAIN_16
ADS1220_GAIN_32
ADS1220_GAIN_64
ADS1220_GAIN_128
pgaBypass:禁止/启用可编程增益放大器(PGA)
ADS1220_USE_PGA 启用
ADS1220_PGA_BYPASS 禁用
routeIDAC1:选择IDAC1将路由到的通道
ADS1220_IDAC1_DISABLED
ADS1220_IDAC1_AIN0
ADS1220_IDAC1_AIN1
ADS1220_IDAC1_AIN2
ADS1220_IDAC1_AIN3
ADS1220_IDAC1_REFP
ADS1220_IDAC1_REFN
routeIDAC2:选择IDAC2将路由到的通道
ADS1220_IDAC2_DISABLED
ADS1220_IDAC2_AIN0
ADS1220_IDAC2_AIN1
ADS1220_IDAC2_AIN2
ADS1220_IDAC2_AIN3
ADS1220_IDAC2_REFP
ADS1220_IDAC2_REFN
idacCurrent:IDAC电流设置
ADS1220_IDAC_CURRENT_OFF
ADS1220_IDAC_CURRENT_10_UA
ADS1220_IDAC_CURRENT_50_UA
ADS1220_IDAC_CURRENT_100_UA
ADS1220_IDAC_CURRENT_250_UA
ADS1220_IDAC_CURRENT_500_UA
ADS1220_IDAC_CURRENT_1000_UA
ADS1220_IDAC_CURRENT_1500_UA
selectVref:基准电压选择
ADS1220_VREF_INTERNAL 选择2.048V的内部基准电压(默认)
ADS1220_VREF_EXT_REF0_PINS 使用专用REFP0和REFN0输入选择的外部基准电压
ADS1220_VREF_EXT_REF1_PINS 使用AIN0/REFP1和AIN3/REFN1输入选择的外部基准电压
ADS1220_VREF_AVDD 做基准的模拟电源(AVDD-AVSS)
intTempSensor:温度传感器模式
0:禁用 1:启用
*/
//输出: 无
void Setup_ADS1220 (unsigned char inputMux, unsigned char opMode,
unsigned char conversionMode, unsigned char dataRate, unsigned char gainLevel, unsigned char pgaBypass,
unsigned char routeIDAC1, unsigned char routeIDAC2, unsigned char idacCurrent, unsigned char selectVref, unsigned char intTempSensor)
{
unsigned char config[4];
config[0] = inputMux + gainLevel + pgaBypass;
config[1] = dataRate + opMode + conversionMode + intTempSensor + ADS1220_BURN_OUT_CURRENT_OFF;
config[2] = ADS1220_FIR_50_60 + selectVref + ADS1220_LOW_SIDE_POWER_OPEN + idacCurrent;
config[3] = routeIDAC1 + routeIDAC2 + ADS1220_DRDY_ON_DRDY_ONLY;
ADS1220_Write_Regs(config, ADS1220_CONFIG_0_REG, 4);
}
/*************************************************************************************************************************************************
* ADS1220_Reset
**************************************************************************************************************************************************/
/*!
* @brief Sends a Reset Command to the ADS1220.
*
* This function sends a Reset command to the ADS1220 on the SPI bus.
*
* @return None
*
**************************************************************************************************************************************************/
void ADS1220_Reset (void)
{
unsigned char cmd = ADS1220_RESET_CMD;
SPI_Write (&cmd, RcvData, 1);
}
/*************************************************************************************************************************************************
* ADS1220_Start
**************************************************************************************************************************************************/
/*!
* @brief Sends a Start Conversion Command to the ADS1220.
*
* This function sends a Start Conversion command to the ADS1220 on the SPI bus. Conversions will be completed when the Data Ready interrupt occurs.
*
* @return None
*
**************************************************************************************************************************************************/
void ADS1220_Start (void)
{
unsigned char cmd = ADS1220_START_CMD;
SPI_Write (&cmd, RcvData, 1);
}
/*************************************************************************************************************************************************
* ADS1220_Powerdown
**************************************************************************************************************************************************/
/*!
* @brief Sends a Power Down Data Command to the ADS1220.
*
* This function sends a Power Down command to the ADS1220 on the SPI bus.
*
* @return None
*
* @note A Start Conversion command is required to bring the ADS1220 out of Power Down. Since the Power Down turns off the IDACs, care must be
* taken to allow them sufficient time to settle after waking up from a power down. Depending on the specific system, it is possible that
* initial readings after a power down may not be valid.
*
* @sa ADS1220_Start()
***************************************************************************