找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

帖子
查看: 10225|回復(fù): 10
打印 上一主題 下一主題
收起左側(cè)

STM32F103+PT100+MAX31865+LCD1602+串口 源程序

  [復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:235954 發(fā)表于 2021-1-23 15:17 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
本設(shè)計基于MAX31865設(shè)計了一款上位機實時顯示當(dāng)前溫度的溫控器,溫控器具有報警功能。
下位機采用usb串口供電,供電方式簡單,且可通過串口方式一鍵下載程序,不用使用額外的ST-LINK或者J-link下載。

STM32F103通過 SPI讀取MAX31865采集鉑電阻PT100溫度并通過 串口發(fā)送溫度值的實驗程序。
壓縮包包括:
程序源代碼
MAX31865芯片手冊(pdf格式 中文)

程序使用三線制,內(nèi)通過修改寄存器數(shù)值,改成二線制以及四線制。

高精度設(shè)備滿足誤差預(yù)算:
15位ADC分辨率,標(biāo)稱溫度分辨率為0.03125°C (隨RTD非線性變化);
整個工作條件下,總精度保持在0.5°C (0.05%滿量程);
全差分VREF輸入;
轉(zhuǎn)換時間:21ms (最大值);
集成故障檢測,增加系統(tǒng)穩(wěn)定性:



單片機源程序如下:
  1. #include "max31865.h"
  2. #include "spi.h"
  3. #include "delay.h"

  4. //max chushihua
  5. void MAX31865_Int(void)
  6. {
  7.         
  8.         GPIO_InitTypeDef        GPIO_InitStructure;
  9.                
  10.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);//使能PB端口時鐘
  11. //        MAX31865_DRDY_APBxClkCmd(GPIO_Pin_11, ENABLE);
  12.         
  13.         
  14.         GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12;
  15.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;        //推挽輸出
  16.         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;        //IO口速度為50MHz
  17.         GPIO_Init(GPIOB, &GPIO_InitStructure);                                //初始化GPIB15,14,13
  18.         
  19.         GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11;
  20.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;        //推挽輸出
  21.         GPIO_Init(GPIOB, &GPIO_InitStructure);                                //初始化GPIB15,14,13
  22.         
  23.         SPI2_Init();
  24.         SPI2_SetSpeed(SPI_BaudRatePrescaler_16);
  25. }
  26. /* 向MAX31865發(fā)送數(shù)據(jù) */
  27. void MAX31865_SendData(uint8_t addr , uint8_t data)
  28. {
  29.         SPI_MAX31865_CS_LOW();

  30.         SPI2_ReadWriteByte(addr);

  31.         SPI2_ReadWriteByte(data);

  32.         SPI_MAX31865_CS_HIGH();
  33. }

  34. /* 從MAX31865讀取數(shù)據(jù) */
  35. uint8_t MAX31865_ReceiveData(uint8_t addr)
  36. {
  37.         uint8_t data;

  38.         SPI_MAX31865_CS_LOW();


  39.         SPI2_ReadWriteByte(addr);

  40.         data = SPI2_ReadWriteByte(addr);

  41.         SPI_MAX31865_CS_HIGH();
  42.         return data;
  43. }


  44. //void MAX31855_ReadData()
  45. //{
  46. //        u32 data=0;
  47. //        int i;
  48. //        SPI_MAX31865_CS_LOW();
  49. //        delay_ms(1);
  50. //        for(i=31;i>=0;i--)
  51. //                 GPIOA_MAX31855_SCK_H;
  52. //                        delay_ms(1);
  53. //               

  54. //}
復(fù)制代碼
  1. #include "stm32f10x.h"
  2. #include "spi.h"
  3. //#include "./usart/bsp_usart_dma.h"
  4. #include "max31865.h"
  5. #include "lcd1602.h"
  6. #include "delay.h"
  7. #include "usart.h"
  8. //uint8_t read_temp_HIGH;
  9. //uint8_t read_temp_LOW;
  10. //uint16_t read_temp;
  11. u8 i;
  12.    u16 s1;
  13.    u16 s2;
  14.          u16 s3=0;
  15.          u32 s4=0;
  16.          u16 s5;
  17.          unsigned long wd=0;
  18. int main(void)
  19. {
  20.                 SystemInit();
  21.                 delay_init();                     //延時函數(shù)初始化         
  22.                 LCD1602_Init();                        //1602初始化
  23.                 SPI2_Init();                        //spi初始化
  24.                 MAX31865_Int();                        //MAX初始化ADC1
  25.                 NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//設(shè)置中斷優(yōu)先級分組為組2:2位搶占優(yōu)先級,2位響應(yīng)優(yōu)先級
  26.                 uart_init(115200);                 //串口初始化為115200
  27.         
  28.         while(1)
  29.         {        
  30.                
  31.                 MAX31865_SendData(MAX31856_CONFIG_3WIRE,0xc1);
  32.                 MAX31865_SendData(MAX31856_CONFIG_REG,0xf2);    //11110010
  33.                 s1=MAX31865_ReceiveData(MAX31856_RTDMSB_REG);
  34.                 s2=MAX31865_ReceiveData(MAX31856_RTDLSB_REG);
  35.                 s3=(s1<<8) | s2;
  36.                 printf("s3:%x",s3);
  37. //                delay_ms(50);
  38.                 s3=s3>>1;
  39. //                s3=s3&0xfffe;
  40.                
  41.                 wd=(s3/32)-256;
  42.                 printf("wd:%d\r\n",wd);
  43.                 LCD1602_Show_Str(0,0,"WD:");
  44. //                LCD1602_Write_Dat(wd/100%10+0x30);
  45.                 LCD1602_Write_Dat(wd/10%10+0x30);
  46. //                LCD1602_Show_Str(5,0,".");
  47.                 LCD1602_Write_Dat(wd%10+0x30);

  48.                 LCD1602_Show_Str(9,0,"^C");

  49.         }
  50. }
復(fù)制代碼


所有資料51hei提供下載:
MAX31865_PT100_源代碼.7z (192.12 KB, 下載次數(shù): 430)
max31865資料.zip (457.42 KB, 下載次數(shù): 192)




評分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏12 分享淘帖 頂 踩
回復(fù)

使用道具 舉報

沙發(fā)
ID:337609 發(fā)表于 2022-3-14 18:41 | 只看該作者
樓主您好,這款測量的溫度范圍是多少?
回復(fù)

使用道具 舉報

板凳
ID:235954 發(fā)表于 2022-4-27 10:43 | 只看該作者
984055 發(fā)表于 2022-3-14 18:41
樓主您好,這款測量的溫度范圍是多少?

測量范圍是根據(jù)PTC的器件參數(shù)決定
回復(fù)

使用道具 舉報

地板
ID:622096 發(fā)表于 2022-6-10 18:46 | 只看該作者
您好,這個精度能達到多少
回復(fù)

使用道具 舉報

5#
ID:493412 發(fā)表于 2022-11-27 19:26 | 只看該作者
感謝樓主分享,模塊收到了測試是否可行
回復(fù)

使用道具 舉報

6#
ID:748535 發(fā)表于 2023-8-14 19:49 | 只看該作者
剛好需要來參考
回復(fù)

使用道具 舉報

7#
ID:62363 發(fā)表于 2023-10-29 18:36 | 只看該作者
程序里用的SPI2,管腳B13/14/15。為什么帖子里面的原理圖畫的PA4/5/6/7呢?本想按圖接呢,發(fā)現(xiàn)對不上
回復(fù)

使用道具 舉報

8#
ID:444215 發(fā)表于 2023-11-6 17:05 | 只看該作者
下載看了下,沒原理圖呢?
回復(fù)

使用道具 舉報

9#
ID:140644 發(fā)表于 2023-12-7 18:58 | 只看該作者
NICE.
回復(fù)

使用道具 舉報

10#
ID:25103 發(fā)表于 2024-10-2 19:18 | 只看該作者
謝謝樓主分享,學(xué)習(xí)學(xué)習(xí)��!
回復(fù)

使用道具 舉報

11#
ID:25103 發(fā)表于 2025-1-1 09:43 | 只看該作者
感謝樓主分享
回復(fù)

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復(fù) 返回頂部 返回列表