找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 8069|回复: 18
收起左侧

MAX6675+STM32与51单片机用K型热电偶的温度控制源码与资料下载

  [复制链接]
ID:319028 发表于 2018-4-29 17:27 | 显示全部楼层 |阅读模式
包含MAX6675资料
0.png

stm32单片机源程序如下:
  1. /*********************************************************************************
  2. * 文件名  :main.c
  3. * 描述    :通过stm32的spi1读取max6675的温度值,并通过uart1发送出来
  4. *         
  5. * 实验平台:STM32开发板
  6. * 库版本  :ST3.0.0
  7. * 硬件连接: ------------------------------------
  8. *           |PA6-SPI1-MISO:MAX6675-SO          |
  9. *           |PA7-SPI1-MOSI:MAX6675-SI          |
  10. *           |PA5-SPI1-SCK :MAX6675-SCK         |
  11. *           |PA4-SPI1-NSS :MAX6675-CS          |
  12. *            ------------------------------------
  13. **********************************************************************************/
  14. #include "stm32f10x.h"
  15. #include "usart1.h"

  16. #define         MAX6675_CS                         GPIO_Pin_4
  17. #define         MAX6675_CSL()                GPIOA->BRR = MAX6675_CS;
  18. #define         MAX6675_CSH()                GPIOA->BSRR = MAX6675_CS;

  19. /*
  20. * 函数名:SPI1_Init
  21. * 描述 MAX6675 接口初始化
  22. * 输入  :无
  23. * 输出  :无
  24. * 返回  :无
  25. */                                                                                                                                                                                  
  26. void SPI_MAX6675_Init(void)
  27. {
  28.         GPIO_InitTypeDef GPIO_InitStructure;
  29.         SPI_InitTypeDef  SPI_InitStructure;       
  30.        
  31.         /* 使能 SPI1 时钟 */                        
  32.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_SPI1, ENABLE);

  33.         /* ---------通信I/O初始化----------------
  34.          * PA5-SPI1-SCK :MAX6675_SCK
  35.          * PA6-SPI1-MISO:MAX6675_SO
  36.          * PA7-SPI1-MOSI:MAX6675_SI         
  37.          */
  38.         GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7;
  39.         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz;
  40.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;                        // 复用输出
  41.         GPIO_Init(GPIOA, &GPIO_InitStructure);

  42.         /* ---------控制I/O初始化----------------*/
  43.         /* PA4-SPI1-NSS:MAX6675_CS */                                                        // 片选
  44.         GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4;
  45.         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz;
  46.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;                // 推免输出
  47.         GPIO_Init(GPIOA, &GPIO_InitStructure);                                                  
  48.         GPIO_SetBits(GPIOA, GPIO_Pin_4);                                                // 先把片选拉高,真正用的时候再拉低


  49.         /* SPI1 配置 */
  50.         SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex;
  51.         SPI_InitStructure.SPI_Mode = SPI_Mode_Master;
  52.         SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b;
  53.         SPI_InitStructure.SPI_CPOL = SPI_CPOL_Low;
  54.         SPI_InitStructure.SPI_CPHA = SPI_CPHA_1Edge;
  55.         SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;
  56.         SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_8;
  57.         SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB;
  58.         SPI_InitStructure.SPI_CRCPolynomial = 7;
  59.         SPI_Init(SPI1, &SPI_InitStructure);
  60.        
  61.        
  62.         /* 使能 SPI1  */
  63.         SPI_Cmd(SPI1, ENABLE);
  64. }

  65. /*
  66. *
  67. *
  68. *
  69. */
  70. unsigned char MAX6675_ReadByte(void)
  71. {
  72.        
  73.         /* Loop while DR register in not emplty */
  74.         while(SPI_I2S_GetFlagStatus(SPI1,SPI_I2S_FLAG_TXE) == RESET);
  75.        
  76.         /* Send byte through the SPI1 peripheral */
  77.         SPI_I2S_SendData(SPI1, 0xff);
  78.        
  79.         /* Wait to receive a byte */
  80.         while(SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_RXNE) == RESET);
  81.        
  82.         /* Return the byte read from the SPI bus */
  83.         return SPI_I2S_ReceiveData(SPI1);
  84. }
  85. /*
  86. * 函数名:main
  87. * 描述  :主函数
  88. * 输入  :无
  89. * 输出  :无       
  90. */
  91. main (void)
  92. {
  93.         unsigned int t,i;
  94.         unsigned char c;
  95.         unsigned char flag;
  96.         float temprature;
  97.         /* 配置系统时钟为72M */
  98.         SystemInit();
  99.   
  100.         /* MAX6675 SPI 接口初始化 */
  101.         SPI_MAX6675_Init();
  102.         USART1_Config();
  103.        
  104.         while(1)
  105.         {
  106.        
  107.                 MAX6675_CSL();
  108.                 c = MAX6675_ReadByte();
  109.                 i = c;
  110.                 i = i<<8;
  111.                 c = MAX6675_ReadByte();
  112.                 MAX6675_CSH();
  113.                
  114.                 i = i|((unsigned int)c);                        //i是读出来的原始数据
  115.                 flag = i&0x04;                                                //flag保存了热电偶的连接状态
  116.                 t = i<<1;
  117.                 t = t>>4;
  118.                 temprature = t*0.25;
  119.                 if(i!=0)                                                        //max6675有数据返回
  120.                 {
  121.                         if(flag==0)                                                //热电偶已连接
  122.                         {
  123.                                 printf("原始数据是:%04X,  当前温度是:%4.2f。\r\n",i,temprature);
  124.                         }       
  125.                         else                                                        //热电偶掉线
  126.                         {
  127.                                 printf("未检测到热电偶,请检查。\r\n");
  128.                         }
  129.                
  130.                 }
  131.                 else                                                                //max6675没有数据返回
  132.                 {
  133.                         printf("max6675没有数据返回,请检查max6675连接。\r\n");
  134.                 }
  135.                 for(i=0;i<0x2fffff;i++);                        //max6675的转换时间是0.2秒左右,所以两次转换间隔不要太近
  136. ……………………

  137. …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码
MAX6675_51例程\
MAX6675_STM32例程\
K型热电偶和MAX6675简介.doc
MAX6675.pdf
MAX6675的原理及应用.pdf
一种简易的高精度测温系统研制.pdf
关于MAX6675应用的实验.doc
利用热电偶转换器的单片机温度测控系统_max6675[2页].pdf
单片K型热电偶放大与数字转换器MAX6675.pdf
基于89C51的温度控制器设计_文献检索[1].doc
基于K型热电偶与MAX6675多路温度采集系统.pdf
基于MAX6675的分布式高精度温度采集系统(1).pdf
基于MAX6675的温度采集系统的设计(1).pdf
基于_MAX6675的温度控制器设计.pdf
基于单片机的发动机尾气参数采集系统的设计.pdf
基于单片机的注塑机温度采集系统的设计.pdf
基于单片机的电阻炉温度控制系统设计.pdf
热电偶温度表测量电路的设计.doc
电阻加热炉温度控制系统.doc

所有资料51hei提供下载:
MAX6675.zip (6.71 MB, 下载次数: 476)
回复

使用道具 举报

ID:228186 发表于 2018-5-2 17:20 | 显示全部楼层
谢谢楼主的无私奉献
回复

使用道具 举报

ID:191165 发表于 2018-5-7 11:33 | 显示全部楼层
太好了
回复

使用道具 举报

ID:345352 发表于 2018-12-15 22:51 来自手机 | 显示全部楼层
谢谢分享
回复

使用道具 举报

ID:161033 发表于 2018-12-20 11:51 | 显示全部楼层
感谢分享。
回复

使用道具 举报

ID:508509 发表于 2019-4-19 17:19 | 显示全部楼层
先看一下
回复

使用道具 举报

ID:416341 发表于 2019-4-20 07:17 | 显示全部楼层
谢谢楼主的无私奉献
回复

使用道具 举报

ID:128391 发表于 2019-10-2 18:31 | 显示全部楼层
感谢分享。
回复

使用道具 举报

ID:63317 发表于 2019-10-3 04:52 | 显示全部楼层
谢谢分享资料
回复

使用道具 举报

ID:323384 发表于 2019-10-3 08:39 | 显示全部楼层
非常感谢你的分享!谢谢,对我非常有帮助!
回复

使用道具 举报

ID:472390 发表于 2019-10-31 13:16 | 显示全部楼层
谢谢楼主分享
回复

使用道具 举报

ID:649784 发表于 2019-11-26 18:45 | 显示全部楼层
谢谢楼主分享
回复

使用道具 举报

ID:411550 发表于 2020-4-12 22:27 | 显示全部楼层
感谢感谢,现在正需要温度控制的相关资料
回复

使用道具 举报

ID:749225 发表于 2020-5-11 17:07 | 显示全部楼层
请教楼主,我用了PA456脚,PA7没用,用了你的代码,读出来的还是乱七八糟的,硬件我检查了,应该不存在问题,有什么建议吗?
回复

使用道具 举报

ID:695384 发表于 2020-6-22 15:42 | 显示全部楼层
fenkella 发表于 2020-5-11 17:07
请教楼主,我用了PA456脚,PA7没用,用了你的代码,读出来的还是乱七八糟的,硬件我检查了,应该不存在问题 ...

spi 没调试好
回复

使用道具 举报

ID:100749 发表于 2021-5-10 17:05 | 显示全部楼层

非常感谢你的分享!谢谢,对我非常有帮助!
回复

使用道具 举报

ID:427869 发表于 2021-6-25 22:07 来自手机 | 显示全部楼层
非常的资料,下载学习学习。
回复

使用道具 举报

ID:196311 发表于 2021-6-25 23:07 | 显示全部楼层
谢谢分享,做温度检测不难,还没吃透pid控制,下载参考一下
回复

使用道具 举报

ID:504613 发表于 2023-9-12 22:59 | 显示全部楼层
6675有3个IO口,程序定义了4个IO口,为什么?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表