资源简介

AD7793方案 原理图加源码
高精度热电偶采集
带冷端补偿PT100 可以用于其他场合 比如应变片或者高精度采集类

资源截图

代码片段和文件信息

/*代码使用说明
1、基于STM32F10X MCU
2、IO 模拟 SPI接口,非硬件SPI,仅与SPI IO有关。
3、TC_voltage为热电偶热电动势,非温度值。
4、PT100_temp为PT100读取的温度值,用于冷结补偿,通常冷结温度5-10秒读取一次即可。
*/
#include“stm32f10x_conf.h“

#define AD7793_SCLK_H GPIO_SetBits(GPIODGPIO_Pin_3)
#define AD7793_SCLK_L GPIO_ResetBits(GPIODGPIO_Pin_3)
#define AD7793_CS_H GPIO_SetBits(GPIODGPIO_Pin_4)
#define AD7793_CS_L GPIO_ResetBits(GPIODGPIO_Pin_4)
#define AD7793_SDI_H GPIO_SetBits(GPIODGPIO_Pin_2)
#define AD7793_SDI_L GPIO_ResetBits(GPIODGPIO_Pin_2)
#define AD7793_DOUT GPIO_ReadInputDataBit(GPIODGPIO_Pin_0)

float TC_voltage;
float PT100_temp;

void RCC_Configuration(void); 
void GPIO_Configuration(void);
void NVIC_Configuration(void); 
void Delay(vu32 nCount);
void AD7793Reset(void);
void AD7793Write(uint8_t  Data);
uint32_t AD7793Read(void);
uint8_t AD7793Read_Byte(void);
uint8_t Get_AD7793_ID(void);
void AD7793_thermocouple_init(void);//初始化热电偶通道
void AD7793_GetPT100_init(void);//初始化PT100通道
float Get_PT100(void);//读取PT100温度值,返回值为温度值
float Get_thermocouple_Value(void);//读取热电偶通道,返回值为热电势
void AD7793init(void);
float tempsssssssss;
uint32_t TESTSSS;
uint8_t AD7793_ID;
int main(void) 

  RCC_Configuration();
  GPIO_Configuration();
  NVIC_Configuration();
  AD7793init();
  AD7793_ID=Get_AD7793_ID();//Read AD7793 ID(0xXB)
  /*
  while(AD7793_DOUT);
  AD7793Write(0x08);//Mode Register
  AD7793Write(0x40);//进入空闲模式
  AD7793Write(0x4F);//
  AD7793Write(0x38);//写对应通道的满量程寄存器的值
  AD7793Write((0x54a300>>16)&0xFF);
  AD7793Write((0x54a300>>8)&0xFF);
  AD7793Write(0x54a300&0xFF);
  */
  /*
  AD7793Write(0x78);//读满刻度校准寄存器的值
  TESTSSS=AD7793Read();
*/
  while (1) 
  {
    AD7793_CS_L;
    AD7793_thermocouple_init();
    Delay(5000);
    TC_voltage = Get_thermocouple_Value();//读取热电动势
    tempsssssssss=TC_voltage*24937.65586+PT100_temp;
    Delay(5000);
    AD7793_GetPT100_init();
    Delay(5000);
    PT100_temp = Get_PT100();//读取PT100温度
    Delay(5000);
  } 


uint8_t Get_AD7793_ID(void)
{
  uint8_t ID;
  AD7793Write(0x60);//读满刻度校准寄存器的值
  ID=AD7793Read_Byte();
  return ID;
}


float Get_PT100(void)//Return the temp of PT100;
{
  float PT100_TEMP;
  float PT100_R_Value;
  uint32_t DATA_T;
  while(AD7793_DOUT);
  AD7793Write(0x58);
  DATA_T=AD7793Read()-0x800000;
  PT100_TEMP=DATA_T;
  PT100_TEMP/=0x7fffff;
  PT100_R_Value=PT100_TEMP*402;
  PT100_TEMP=(PT100_R_Value-100)/0.385055;//A gruad
  return PT100_TEMP;
}


float Get_thermocouple_Value(void)//Return the Voltage of TC;
{
  float Voltage;
  uint32_t DATA_T;
  int32_t DATA_T1;
  while(AD7793_DOUT);
  AD7793Write(0x58);
  DATA_T=AD7793Read();
  DATA_T^=0xFFFFFF;
  DATA_T&=0xffffff;
  DATA_T1=0x7FFFFF-DATA_T;
  Voltage=DATA_T1*1.17; //Vref=1.17V
  Voltage/=0x7fffff;
  Voltage/=32;//gain = 32
  return Voltage;
}


void AD7793Reset(void)
{
  uint8_t ResetTime;
  ResetTime=50;
  AD7793_SCLK_H;
  AD7793_CS_L;
  AD7793_SDI_H;
  while(ResetTime--)
  {
    AD77

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     文件      162116  2020-03-18 09:35  2020-03-18_093139.png
     文件        7288  2019-03-13 16:42  AD7793.c

评论

共有 条评论