STM32驱动MAX6675读取温度

2016-10-05来源: eefocus关键字:STM32  驱动MAX6675  读取温度
MAX6675是带冷端补偿的K型热电偶转换芯片,SO-8封装,精度12位,分辨率0.25℃,测量最高温度1023.75℃。也就是1024/(2的12次方)=0.25℃。

 

                                        STM32驱动MAX6675读取温度 - 指点江山 - 老菜鸟STM32学习专栏

VCC-GND接3~5.5V电压;

T+,T-分别接K型热电偶正负极;

CS为片选,低电平有效;

SCK为串行时钟,需要由STM32提供;

SO为数据串行输出;

接线方式:

              STM32驱动MAX6675读取温度 - 指点江山 - 老菜鸟STM32学习专栏

     MAX6675的输出方式是单片机输入时钟脉冲,MAX6675在时钟的下跳沿在SO管脚上输出数据。在数据手册第5页有时序说明,在6页有时序图,时序说明和时序图有差别。本人在读取数据过程中,发现按照时需说明操作,是正确的;而按时序图操作读取的数据有错误。MAX6675每次输出一共是16位数据,第一位也就是D15,是虚拟位;D14-D3,是12位的温度MSB-LSB,也就是高位在前地位在后;D2是一个标志,正常为0,一旦热电偶开路,则为1;D1是ID,通常为0,不懂啥意思,反正我不管怎样读都为0;D0是三态输出。

    Force  CS low  to  output  the  first  bit  on  the  SO  pin.  Acomplete serial interface read requires 16 clock cycles.Read the 16 output bits on the falling edge of the clock.The  first  bit,  D15,  is  a  dummy  sign  bit  and  is  alwayszero. Bits D14–D3 contain the converted temperature inthe  order  of  MSB  to  LSB.  Bit  D2  is  normally  low  andgoes high when the thermocouple input is open. D1 islow to provide a device ID for the MAX6675 and bit D0 is three-state.

    以上是时序说明,说的是在CS=0时,第一位就输出了,可以直接读取,不需要时钟,也就是读取16位数据只需要15个时钟;

STM32驱动MAX6675读取温度 - 指点江山 - 老菜鸟STM32学习专栏
    而时序图说的是CS=0之后,需要在第一个时钟下降沿读取第一位数据,也就是16位数据16个时钟;
    据我的实验,第一个数据不需要时钟,如果输出时钟,则所有数据左移一位。我的实验过程是这样的:
    首先我按照时序图给出脉冲,结果输出的16位数据范围是1314,1330,1346,1362,1378,1394,1410,所有数据的最低四位都是0010;而我将热电偶开路,返回值为65530,最低四位1010,根据手册,热电偶开路D2应为1。而对1314,1330,1346,1362,1378,1394,1410这一系列数据进行处理之后读取出来的温度为40℃左右,室温大概为20℃左右,所以我猜想可能是采样数据比实际数据左移了一位。这时我想起来D0是三态输出,我之前配置STM32接SO的管脚为上拉输入,所以输入的D0应为1,如果我将STM32与SO连接的管脚设为下拉输入,D0应该为0。不出我所料,果然,采集回来的数据变成1312,1296,1328,1280,正好是尾数变成了0000,也就验证了我的想法,整体数据比实际数据左移了一位,这样,我就修改程序,按照时序说明来写入,这次所有数据都满足要求,D2在正常时=0,热电偶开路时=1,STM32管脚设为上拉输入时D0=1,下拉输入是D0=0;并且读取回来的温度大概是20℃左右。下面是我写的读取16位数据的程序:
.......................宏定义部分
#define Cs_L  GPIOA->BRR=GPIO_Pin_5
#define Cs_H GPIOA->BSRR=GPIO_Pin_5
#define Clk_L GPIOA->BRR=GPIO_Pin_6
#define Clk_H GPIOA->BSRR=GPIO_Pin_6
#define So_H GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_4)
...................................读取数据函数
u16 Read_TC(void)
{
 /**************定义变量****************/
 u16 Dat_Out=0;
 u8 Cyc=0;
 /****************程序******************/
 Cs_L;
 for(Cyc=0;Cyc<16;Cyc++)
 {
  /*第1位在CS被拉低之后产生,不需要时钟,
  故在第1位将时钟屏蔽
  */
  if(Cyc!=0)
  {
   Clk_H;
   Clk_L;  
  }
  if(So_H)
  {
   Dat_Out++;
  }
  /*第15个时钟之后不再移位*/
  if(Cyc!=15)
  {
   Dat_Out<<=1; 
  }
 }
 Cs_H;
 return Dat_Out;
}
 
 
 

读取的数据处理:

 

 

 u16 Tem_Handle(u16 TC_Num)
{
 u16 Temp;
 if(TC_Num&4)
 {
  LcdString(3,3,"TC Open");//液晶显示错误
  while(Read_TC()&4)
  {
   Delay(1000);
  }
  LcdString(3,3,"       ");  //如果热电偶恢复闭合,程序继续运行
 }
 else
 {
  Temp=((TC_Num&0x7fff)>>3)*25;//提取D14-D3,12位数据
 }
 return Temp;
}

关键字:STM32  驱动MAX6675  读取温度

编辑:什么鱼 引用地址:http://news.eeworld.com.cn/mcu/article_2016100530037.html
本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。

上一篇:STM32 驱动无线NRF24L01 完成串口数据传输
下一篇:STM32 GPIO 配置

关注eeworld公众号 快捷获取更多信息
关注eeworld公众号
快捷获取更多信息
关注eeworld服务号 享受更多官方福利
关注eeworld服务号
享受更多官方福利

推荐阅读

STM32解决:st-link连接下载程序的问题

STM32解决:Error: Flash Download failed - "Cortex-M3"本人由于使用普中科技的stm32 的开发板的 USB的下载的地方坏了,所以不得不使用arm仿真器 st-link 进行下载。鼓捣了半天下面总结一下几个问题:1、st-link的驱动下载首先你插上st-link的时候,电脑的设备管理器这个地方是有感叹号的,说明还没有装好驱动,所以我就在网上找啊找。终于根据:win8【笔者没这个系统,无法测试,请大家测试后报告】:http://pan.baidu.com/s/1sjJQxZn(转载来自:https://blog.csdn.net/imxiangzi/article
发表于 2019-07-19
STM32解决:st-link连接下载程序的问题

解决stm32f103通过stlink不能烧录程序问题

问题:   stm32(stm32f103c8T6)开发板只能通过串口烧录程序,而st—link居然不行描述:解决:st-link固件升级用stm32cubemx快速开发时没有配置好调试模式重新生成代码就可以了如果还是不行的话,就得升级一下stlink固件了,具体升级方法可百度
发表于 2019-07-19
解决stm32f103通过stlink不能烧录程序问题

STM32下载不成功问题汇总

在某宝上买了五个最小系统核心板是STM32F103C8T6的芯片,刚拿到手准备下载程序调试,上电后板子自带LED闪烁,这是商家自己下载的示例程序,说明芯片工作着,用KEIL4进行下载自己程序,把自己编译好的程序下载。用的JLINK的四线下载调试下载口,SW的调试接口,点击下载后发现擦除成功,下载失败,提示:Load "..\Output\STM32-DEMO.axf" Set JLink Project File to "F:文件RFID程序电机USERJLinkSettings.ini"* JLink Info: Device "STM32
发表于 2019-07-19
STM32下载不成功问题汇总

STM32高级开发(11)-使用GDB调试你的工程

/scripts/target/stm32f4x_stlink.cfg在执行完此条指令后该终端就会一直执行OpenOCD的程序了,不要关闭它,我们再打开一个终端界面,进入我们的工程目录,比如我这里进入的就是我的libopencm3样例工程下的blink子工程目录。$ cd '/home/yangliu/workspace/libopencm3-my-example/blink'然后我们使用指令输入调试文件并打开GDB程序。$ arm-none-eabi-gdb blink.elf 然后我们在GDB的指令界面中,输入连接指令,连接本地的3333端口。(gdb)target remote localhost:3333此时
发表于 2019-07-19
STM32高级开发(11)-使用GDB调试你的工程

STM32F4标准外设库模板工程建立与使用

SW4STM32安装其实固件库安装过程很简单,在第一次新建工程时会提示选择使用Stdperiph 驱动还是Cube HAL,由于Stm32官方大力推行Cube HAL固件库,所以Cube HAL的固件库直接可以从网上直接一键下载安装。然而对于老的StdPeriph固件库不能一键式下载安装,会提示出错。所以,我们需要自己下载一个.zip固件包,放在C:UsersLYAppDataRoamingAc6SW4STM32firmwares文件夹下,其中的LY就是计算机的用户名。然后新建工程时在选择Stdperiph固件时会自动解压缩,这样就能使用该库进行编译了。界面如下所示:工程配置器件与时钟或者,修改晶振与时钟,根据注释可以算得
发表于 2019-07-19
STM32F4标准外设库模板工程建立与使用

基于STM32的外设的GPIO外设设置总结

1、背景外设驱动的寄存器设置对于外设功能正常运行异常重要。现在对GPIO的配置进行总结。2、GPIO的配置总结复用GPIO配置GPIO设置为输出或者是复用模式时,需要设置输出速度;而无论设置为什么模式,都要对GPIO的内部上下拉进行设置。注意:在输入模式(普通输入/模拟输入)下,OTYPE和OSPEED参数无效!!
发表于 2019-07-19
基于STM32的外设的GPIO外设设置总结

小广播

何立民专栏

单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号 电信业务审批[2006]字第258号函 京公海网安备110108001534 Copyright © 2005-2019 EEWORLD.com.cn, Inc. All rights reserved