微波EDA网,见证研发工程师的成长!
首页 > 测试测量 > 测试测量技术文库 > DMM电阻测量分析笔记三~ADS1232驱动程序

DMM电阻测量分析笔记三~ADS1232驱动程序

时间:01-12 来源:互联网 点击:
虽然一开始打算做的是四位半万用表,但是,我们的终极目标是用高档表—— 六位半,向经典表王——安捷伦34401A学习。所以,我思前想后,LT2440无疑是最好的选择,因为其是积分型ADC,温漂够小,但是其价格昂贵,所以我打算在后期六位半中使用,四位半试验阶段就用TI的ADS1232,同是24位ADC,但ADS1232的淘宝价格是12元,与LT2440的几十个大洋想比,还是很便宜的。

下面是ADS1232的STM32驱动程序

#include"stm32f10x.h"

#include"delay.h"

#include"ads1232.h"

extern unsigned char flag;

#define DOUT GPIO_Pin_0

#define SCLK GPIO_Pin_1

#define PDWN GPIO_Pin_2

#define SPEED GPIO_Pin_3

#define GAIN0 GPIO_Pin_4

#define GAIN1 GPIO_Pin_5

#define A0 GPIO_Pin_6

#define ADPORT GPIOB

#define DOUT_H GPIO_SetBits(ADPORT,DOUT)

#define DOUT_L GPIO_ResetBits(ADPORT,DOUT)

#define SCLK_H GPIO_SetBits(ADPORT,SCLK)

#define SCLK_L GPIO_ResetBits(ADPORT,SCLK)

#define SPEED_H GPIO_SetBits(ADPORT,SPEED)

#define SPEED_L GPIO_ResetBits(ADPORT,SPEED)

#define PDWN_H GPIO_SetBits(ADPORT,PDWN)

#define PDWN_L GPIO_ResetBits(ADPORT,PDWN)

#define A0_H GPIO_SetBits(ADPORT,A0) //AIN 2

#define A0_L GPIO_ResetBits(ADPORT,A0) //AIN 1

#define GAIN_1 GPIO_ResetBits(ADPORT,GAIN0|GAIN1);

/****************************************************

*function name: void AD_InitIO(void)

*description : AD GPIO Initialization,PB0-DOUT,PB1-SCLK

*input : null

*output : null

*return ºnull

******************************************************/

void AD_InitIO(void)

{

GPIO_InitTypeDef GPIO_InitStructure;

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);

GPIO_InitStructure.GPIO_Pin=SCLK;

GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;

GPIO_InitStructure.GPIO_Speed=GPIO_Speed_10MHz;

GPIO_Init(ADPORT,&GPIO_InitStructure);

}

/****************************************************

*function name: void DOUT_IN(void)

*description : ADS1232s DOUT PB0 config input

*input : null

*output : null

*return ºnull

******************************************************/

void DOUT_IN(void)

{

GPIO_InitTypeDef GPIO_InitStructure;

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);

GPIO_InitStructure.GPIO_Pin=DOUT;

GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IPU; //ÉÏÀ­ÊäÈë

GPIO_Init(ADPORT,&GPIO_InitStructure);

}

/****************************************************

*function name: void DOUT_OUT(void)

*description : ADS1232s DOUT PB0 config input

*input : null

*output : null

*return ºnull

******************************************************/

void DOUT_OUT(void)

{

GPIO_InitTypeDef GPIO_InitStructure;

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);

GPIO_InitStructure.GPIO_Pin=DOUT;

GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;

GPIO_InitStructure.GPIO_Speed=GPIO_Speed_10MHz;

GPIO_Init(ADPORT,&GPIO_InitStructure);

}

/****************************************************

*function name: unsigned long AD_read(void)

*description : read AD data

*input : null

*output : null

*return ºnull

******************************************************/

unsigned long AD_read(unsigned char channel)

{

int i=0;

unsigned long ad_value=0;

AD_InitIO();

SCLK_L;

PDWN_L;

delay_us(20);

if(channel == 1)

{

A0_L; //AIN1

}

else

{

A0_H; //AIN2

}

GAIN_1;

SPEED_H; //80SPS

PDWN_H;

delay_us(20);

// DOUT_OUT();

// DOUT_H;

// delay_us(1);

DOUT_IN();

while(GPIO_ReadInputDataBit(ADPORT,DOUT)==1);

//delay_ms(200);

flag=1;

for(i=0;i<24;i++)

{

ad_value=ad_value<1;

SCLK_H;

delay_us(2);

if(GPIO_ReadInputDataBit(ADPORT,DOUT)==1)

{

ad_value|=0x00000001; //or ad_value+=1;

}

else

SCLK_L;

delay_us(2);

}

SCLK_H;

delay_us(2);

SCLK_L;

delay_ms(1);

return ad_value;

}

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

网站地图

Top