打印
[新品上市]

【APM32F107VC-MINI开发板测评】-02-SPI+MAX31865 +PT100测试

[复制链接]
2051|28
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
前段时间一直在做一个MAX31865+PT100的测试,在淘宝买了一个模块,调试了很久,一直没有调试通,昨天晚上在家的时候一直在找问题,终于在今天晚上完成了调试,所以写个分享和大家说一下进度。
淘宝上的模块有点坑,本来是可以选择焊接的,但是说巧不巧,调试的时候通过错误状态寄存器发现了提示RTD+短路到GND,导致数据一直读取不出来来,而错误位一直提示错误,导致读取到的数据一直为0,经过排查,是网上后买的模块本生存在短路导致的,用小刀隔开之后就正常了,下面先上个图。由于一直在调试这个SPI,所以其他的都还没有做测试,这里就直接放仿真的图来。

好了,下面放一部分代码上来,以及自己搜集的资料。希望能够给大家一些帮助。






#include "MAX_31865.h"
#include "DRV_SPI.h"





void LEDIO_Init(void)
{
        GPIO_Config_T  configStruct;
        RCM_EnableAPB2PeriphClock(RCM_APB2_PERIPH_GPIOE);
        configStruct.pin =GPIO_PIN_6;
        configStruct.mode = GPIO_MODE_OUT_PP;
        configStruct.speed = GPIO_SPEED_50MHz;
        GPIO_Config(GPIOE, &configStruct);
}       


void LED_Flash(void)
{
        GPIO_ResetBit(GPIOE,GPIO_PIN_6);
        Delay(500);
        GPIO_SetBit(GPIOE,GPIO_PIN_6);
        Delay(500);
}


        float DataTemp=0;
unsigned char REG_ADD0=0,FaultStatus=0;


int main(void)
{


                LEDIO_Init();
                Delay(10);
          MAX_31865_Init(MAX31865_3WIRE);
                Delay(10);
    while (1)
    {
                        DataTemp=MAX_31865_Test();
                        LED_Flash();
                        FaultStatus=ReadFaultREG();

    }
}



#include "DRV_SPI.h"

/*
=====================================
SPI_CS---->PB12
SPI_SCLK-->PB13
SPI_MISO-->PB14
SPI_MOSI-->PB15
=====================================
*/
void SPI_FullDuplex_Init(void)
{
    GPIO_Config_T gpioConfig;
    SPI_Config_T spiConfig;
    /* Enable related Clock */
    RCM_EnableAPB1PeriphClock(RCM_APB1_PERIPH_SPI2);
       
    RCM_EnableAPB2PeriphClock(RCM_APB2_PERIPH_GPIOB);

    /* config PIN_6  MISO */
    gpioConfig.pin =  GPIO_PIN_14 ;
    gpioConfig.mode = GPIO_MODE_IN_FLOATING;
    gpioConfig.speed = GPIO_SPEED_50MHz;
    GPIO_Config(GPIOB, &gpioConfig);

    /* config PIN_5->SCK , PIN_7->MOSI */
    gpioConfig.pin = GPIO_PIN_13 | GPIO_PIN_15;
    gpioConfig.mode = GPIO_MODE_AF_PP;
    gpioConfig.speed = GPIO_SPEED_50MHz;
    GPIO_Config(GPIOB, &gpioConfig);
            /* config PIN_6  cs */
    gpioConfig.pin =  GPIO_PIN_12 ;
    gpioConfig.mode = GPIO_MODE_OUT_PP;
    gpioConfig.speed = GPIO_SPEED_50MHz;
    GPIO_Config(GPIOB, &gpioConfig);
               
               
       
    SPI_ConfigStructInit(&spiConfig);
    spiConfig.length = SPI_DATA_LENGTH_8B;
    spiConfig.baudrateDiv = SPI_BAUDRATE_DIV_64;
    /* 2 line full duplex */
    spiConfig.direction = SPI_DIRECTION_2LINES_FULLDUPLEX;
    /* LSB first */
    spiConfig.firstBit = SPI_FIRSTBIT_MSB;
    /* Slave mode */
    spiConfig.mode = SPI_MODE_MASTER;
    /* Polarity is low */
    spiConfig.polarity = SPI_CLKPOL_LOW;
    /*  Software select slave enable  */
    spiConfig.nss = SPI_NSS_SOFT;
    /* Phase is 1 edge */
    spiConfig.phase = SPI_CLKPHA_2EDGE;
    /* SPI config */
    SPI_Config(SPI2, &spiConfig);
    SPI_ConfigDataSize(SPI2, SPI_DATA_LENGTH_8B);

    SPI_Enable(SPI2);
                SPI_CS_HIGH();
               
}



void SPI_WriteByte(unsigned char  Data)
{
         while (SPI_I2S_ReadStatusFlag(SPI2, SPI_FLAG_BSY) != RESET){};
          SPI_I2S_TxData(SPI2, Data);
}

unsigned char SPI_ReadByte(void)
{
        unsigned char Data=0;

        Data = SPI_I2S_RxData(SPI2);
         while (SPI_I2S_ReadStatusFlag(SPI2, SPI_FLAG_RXBNE) != RESET);
        return Data;
}


unsigned char  SPI_Read_Write(unsigned char Data)
{
        unsigned char RTNData=0;
         while (SPI_I2S_ReadStatusFlag(SPI2, SPI_FLAG_TXBE) == RESET){};
          SPI_I2S_TxData(SPI2, Data);
                 while(SPI_I2S_ReadStatusFlag(SPI2, SPI_FLAG_RXBNE) == RESET){};
                RTNData = SPI_I2S_RxData(SPI2);

        return RTNData;

}






float MAX31865_ReadTemp(float RTDnominal, float RefResistor)
{

  float Z1, Z2, Z3, Z4, Rt, temp;
  float rpoly = Rt;
  Rt = MAX31865_ReadRTD();
  Rt /= 32768.0;
  Rt *= RefResistor;
       
  Z1 = -RTD_A;
  Z2 = RTD_A * RTD_A - (4.0 * RTD_B);
  Z3 = (4.0 * RTD_B) / RTDnominal;
  Z4 = 2.0 * RTD_B;

  temp = Z2 + (Z3 * Rt);
  temp = (sqrt(temp) + Z1) / Z4;

  if (temp >= 0)
    return temp;

  // ugh.
  Rt /= RTDnominal;
  Rt *= 100.0; // normalize to 100 ohm



  temp = -242.02;
  temp += 2.2228 * rpoly;
  rpoly *= Rt; // square
  temp += 2.5859e-3 * rpoly;
  rpoly *= Rt; // ^3
  temp -= 4.8260e-6 * rpoly;
  rpoly *= Rt; // ^4
  temp -= 2.8183e-8 * rpoly;
  rpoly *= Rt; // ^5
  temp += 1.5243e-10 * rpoly;
  return temp;
}


float MAX_31865_Test(void)
{
                float TempData=0.0;
    TempData=MAX31865_ReadTemp(RTD_NNUM,REG_REF);
                Delay(10);
                return TempData;
}



max31865.rar (7.55 MB)

使用特权

评论回复
沙发
shenxiaolin|  楼主 | 2023-4-11 11:30 | 只看该作者
自己过来看看。

使用特权

评论回复
板凳
saservice| | 2023-4-15 19:53 | 只看该作者
PT100能测温范围是-200℃到420℃

使用特权

评论回复
地板
abotomson| | 2023-4-15 20:03 | 只看该作者
温度传感器pt100精度是多少?

使用特权

评论回复
5
uiint| | 2023-4-15 20:10 | 只看该作者
这个测量的精度怎么样              

使用特权

评论回复
评论
shenxiaolin 2023-4-16 17:40 回复TA
感觉还行,我用的水银的温度计做了一下对比,差不多差0.4度左右, 
6
gygp| | 2023-4-16 21:49 | 只看该作者
MAX31865输出是数字信号,需要通过串口读取数值。

使用特权

评论回复
7
pmp| | 2023-4-16 22:01 | 只看该作者
max31865怎么接pt100

使用特权

评论回复
评论
shenxiaolin 2023-4-17 09:45 回复TA
分2线3线和四线,接法不一样 
8
qiufengsd| | 2023-4-16 22:07 | 只看该作者
采用MAX31865芯片采集PT100?

使用特权

评论回复
9
geraldbetty| | 2023-4-16 22:23 | 只看该作者
MAX31865的相关资料较少

使用特权

评论回复
10
burgessmaggie| | 2023-4-16 22:29 | 只看该作者
三芯PT100温度传感器怎么接线

使用特权

评论回复
11
linfelix| | 2023-4-16 22:36 | 只看该作者
max31865是一个SPI芯片 吧  

使用特权

评论回复
12
belindagraham| | 2023-4-16 22:53 | 只看该作者
四线是最准确的,因为单独的力和感测引线消除了线电阻的影响。

使用特权

评论回复
13
louliana| | 2023-4-16 23:02 | 只看该作者
MAX31865为每种配置提供专用的 RTD 信号调理电路,分辨率为 15 位,并提供加速 PT100 和 PT1000 RTD 设计的解决方案 热电偶 热电偶是最常用的温度传感器类型。

使用特权

评论回复
评论
shenxiaolin 2023-4-17 09:47 回复TA
的确是这样的,而且数字量还是比较准确的 
14
shenxiaolin|  楼主 | 2023-4-17 09:46 | 只看该作者
qiufengsd 发表于 2023-4-16 22:07
采用MAX31865芯片采集PT100?

是的,直接读取的

使用特权

评论回复
15
chenci2013| | 2023-4-17 18:11 | 只看该作者
如何校准PT100的温度数据              

使用特权

评论回复
16
louliana| | 2023-4-18 11:37 | 只看该作者
通过MAX31865读取PT100电阻值,转换为温度的。

使用特权

评论回复
17
louliana| | 2023-5-5 20:33 | 只看该作者
温度传感器pt100精度是多少?

使用特权

评论回复
18
wangdezhi| | 2023-5-5 20:41 | 只看该作者
PT100最高能达到多少精度?

使用特权

评论回复
19
xiaoyaodz| | 2023-5-5 21:06 | 只看该作者

pt100精度的A级和B级是什么意思

使用特权

评论回复
20
jackcat| | 2023-5-5 21:17 | 只看该作者
将PT100温度传感器连接到MAX31865芯片的RTD+和RTD-引脚上,并将MAX31865的其他引脚连接到微控制器或单片机上。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

认证:运达电气-产品经理
简介:毕业于西南科技大学,从事MCU、MPU开发工作近8年,熟悉嵌入式软硬件开发流程,产品管理以及现场项目管理。

90

主题

1128

帖子

6

粉丝