43-基于stm32单片机MAX31865铂电阻PT100温度测量程序源码原理图元器件清单

功能介绍:采用stm32单片机作为主控MCU,采用MAX31865模块采集PT100温度数据,并且通过SPI协议将数据传送到单片机,stm32单片机收到数据将温度显示到OLED显示屏上,MAX31865是简单易用的热敏电阻至数字输出转换器,优化用于铂电阻温度检测器(RTD)。外部电阻设置RTD灵敏度,高精度Δ- Σ ADC将RTD电阻与基准电阻之比转换为数字输出。MAX31865输入具有高达±45V的过压保护,提供可配置的RTD及电缆开路、短路条件检测。全部资料都经过实物验证,程序有中文注释,新手容易看懂,资料分享下载链接:设计资料合集

43-基于stm32单片机MAX31865铂电阻PT100温度测量(程序+原理图+元器件清单全套资料)

 下面是部分程序展示,程序中文注释,新手容易看懂

//初始化SPI max31865 的IO口
void SPI1_MAX31865_Init(void)
{
	SPI1_Init();		   		                //初始化SPI1
	SPI1_SetSpeed(SPI_BaudRatePrescaler_64);	//设置为 72/64 = 1.125 M时钟
	writeRegister8_1(0x00, 0x00);                 //清除配置寄存器
	enableBias_1(1);                              //使能偏置电压
	delay_ms(10);                               //等待10ms使得RTDIN的滤波电容充电
	setWires_1(MAX31865_3WIRE);                   //使能PT100 三线工作模式
	clearFault_1();                               //清除故障检测位
	
}  

//RTD接线模式设置


void setWires_1(max31865_numwires_t wires)
{
  uint8_t t = readRegister8_1(MAX31856_CONFIG_REG);
  if (wires == MAX31865_3WIRE) {
    t |= MAX31856_CONFIG_3WIRE;
  } else {
    // 2 or 4 wire
    t &= ~MAX31856_CONFIG_3WIRE;
  }
  writeRegister8_1(MAX31856_CONFIG_REG, t);
}

//设置自动转换模式
void autoConvert_1(bool b)  
{
  uint8_t t = readRegister8_1(MAX31856_CONFIG_REG);
  if (b) {
   	  t |= MAX31856_CONFIG_MODEAUTO;       // enable autoconvert
  } else {
    t &= ~MAX31856_CONFIG_MODEAUTO;       // disable autoconvert
  }
  writeRegister8_1(MAX31856_CONFIG_REG, t);
}

 //使能偏执电压
void enableBias_1(bool b) 
{
  uint8_t t = readRegister8_1(MAX31856_CONFIG_REG);
  if (b) {
    t |= MAX31856_CONFIG_BIAS;       // enable bias
  } else {
    t &= ~MAX31856_CONFIG_BIAS;       // disable bias
  }
  writeRegister8_1(MAX31856_CONFIG_REG, t);
}	

//读寄存器,8位
u8  readRegister8_1(u8 addr) 
{
  uint8_t ret = 0;
  addr &= 0x7F;                      // make sure top bit is set to 1
  SPI1_FLASH_CS=0; 
  delay_us(100);
  SPI1_ReadWriteByte(addr);  //发送写取状态寄存器命令    
  ret = SPI1_ReadWriteByte(0xff);   //写入一个字节  
  delay_us(100);
  SPI1_FLASH_CS=1;                   //取消片选      
  return ret;
}

//读两个寄存器,16位
u16 readRegister16_1(u8 addr)  
{
  uint8_t buffer[2] = {0, 0};
  uint16_t ret = 0;
  readRegisterN_1(addr, buffer, 2);

  ret = buffer[0];
  ret <<= 8;
  ret |=  buffer[1];
  
  return ret;
}

 //读N个寄存器
void readRegisterN_1(u8 addr, u8 buffer[], u8 n)         
{
  addr &= 0x7F;                             // make sure top bit is 0
  SPI1_FLASH_CS=0; 
  delay_us(100);
  SPI1_ReadWriteByte(addr);                  //发送读取状态寄存器命令    
  while (n--) {
    buffer[0] = SPI1_ReadWriteByte(0Xff);
    buffer++;
  }
  delay_us(100);
  SPI1_FLASH_CS=1;                            //取消片选  
}

//指定寄存器写8位数据
void  writeRegister8_1(u8 addr, u8 data)  
{ 
  addr |= 0x80;                              // make sure top bit is set to 1
  SPI1_FLASH_CS=0;
  delay_us(100);
  SPI1_ReadWriteByte(addr);                  //发送读取状态寄存器命令    
  SPI1_ReadWriteByte(data);                  //写入一个字节 
  delay_us(100);
  SPI1_FLASH_CS=1;                            //取消片选                 
}	

下面是原理图,采用AD绘制:

stm32单片机最小系统讲解:
电源
电就是MCU要吃的饭,不吃饭,stm32芯片肯定不能工作。
stm32最小系统板需要5v和3.3v两种电压,一般可以直接通过USB提供5v电压,也可以用电源适配器提供5V电压。而3.3v电压可以通过稳压芯片如ASM1117-3.3v等,把5v电压降为3.3v输出。


USB接口,提供的5v电压经过ASM1117-3.3v后降为3v3,(10*10^4pF=0.1u)用于电源滤波,高频滤波用小电容,低频滤波用大电容。D3是一个led用以指示电源工况,其上的510R即510.0Ω用以限流,防止led灯烧坏。
USB接口,提供5v电压,同时它也是一个模拟串口,其D-和D+引脚与ch340相应引脚连接构成一个串口设备。
stm32吃的是3v3将其VDD和VSS引脚分别连接到3v3和GND,就解决了stm32的吃饭问题。

注意:VBAT是stm32芯片的备用3.3v电源输入端,当没有备用电源是也需要将VBAT接到VDD上去。
VDDA和VSSA是模拟电源输入口,用以给stm32芯片内部ADC,复位电路供电因此必须分别接到VDD和VSS上。

复位电路
人工作久了容易自闭、精神恍惚,这时需要睡一觉就以重新焕发活力。stm32工作久了也容易“精神恍惚”————程序跑飞,也需要复位。


stm32的NRST引脚是复位信号接收引脚与RESET相连,芯片低电平复位。如上图所示,当芯片刚上电时,电容充电导通,此时RESET=0,芯片复位;当按下复位按钮时,RESET接地,芯片复位。

晶振电路
晶振是芯片的心跳,每一次脉冲激励芯片执行一条指令,因此晶振的重要性不言而喻。


stm32的晶振电路,8M无源晶振,其中(1M)用于稳定晶振的脉冲波形,(20P)和(20P)一方面构成晶振起振的必要回路,另一方面匹配电容,同时还具有调节晶振电路频率的作用。

注意:OSC32IN是外部32.768K晶振输入口,可以直接接时钟信号,也可以不洁作IO用。OSCIN是外部系统时钟输入信号,可以接时钟信号,也可以不接做IO口用,此时stm32用芯片内部的RC电路起振产生时钟信号。

  • 2
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 0到5伏AD采集模块原理是一种电子电路设计,用于将0到5伏的模拟信号转换成数字信号。该原理主要包括以下几个组成部分: 1. 输入端:用于接收0到5伏的模拟信号,并将其引导至下一级的信号处理部分。 2. 模拟输入电路:包括输入保护电路、滤波电路和放大电路。输入保护电路可以保护模块免受输入信号的过压或过流等不良影响。滤波电路用于去除输入信号中的高频噪声,以确保准确的采样。放大电路则将输入信号增大到适合ADC(模数转换器)的输入范围。 3. ADC:模数转换器将模拟信号转换成数字信号。它将连续变化的模拟信号按照一定的精度进行采样,然后将每个采样值转换为对应的数字值。一般来说,ADC的精度越高,转换的数字信号越准确。 4. 数字输出:将数字信号输出至处理器、微控制器或其他数字电路进行处理和分析。这些数字信号可以通过串行接口(如SPI或I2C)发送给其他设备,也可以用于控制其他电子元件的工作。 通过以上的原理设计,0到5伏AD采集模块可以将模拟信号转换成数字信号,进行后续的数据处理和分析。它具有广泛的应用,例如温度、压力、光强等模拟信号的采集和测量。 ### 回答2: 0到5伏AD采集模块是一种电路模块,用于将0到5伏的模拟信号转换为数字信号。这种模块一般包括输入接口、运算放大器、模数转换器和输出接口等多个组成部分。 首先,输入接口接收0到5伏的模拟信号,例如声音、温度等变化。这个接口通常包括一个电阻网络,用于调整信号的增益和偏置。 接下来,模拟信号被发送到运算放大器。运算放大器可以增强信号的幅度,并可以进行一些数学运算,如滤波、放大和线性化等。这样可以确保信号的准确性和可靠性。 然后,被处理过的信号进一步传递到模数转换器。模数转换器将连续的模拟信号转换为离散的数字信号。这个过程基于采样定理和量化技术,将模拟信号分割成多个等间隔的时间片段,并将每个时间片段的幅度映射为一个数字值。 最后,输出接口将数字信号发送给外部设备或处理器,使其能够进一步处理或分析这些信号。输出接口通常是基于串行通信协议,如UART或SPI,以确保数据的可靠传输。 综上所述,0到5伏AD采集模块通过输入接口接收模拟信号,通过运算放大器增强信号的幅度和质量,通过模数转换器将模拟信号转换为数字信号,并通过输出接口将数字信号发送给外部设备或处理器。这种模块在许多领域中被广泛应用,如工业自动化、传感器网络和科学研究等。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值