搜索
bottom↓
回复: 11

【经验分享】FRDM-KL02改变VDD使用内部温度传感器测温例程

[复制链接]

出0入0汤圆

发表于 2014-4-15 13:25:33 | 显示全部楼层 |阅读模式
本帖最后由 FSL_TICS_Robin 于 2014-7-18 13:57 编辑

FRDM-KL02改变VDD使用内部温度传感器测温例程
Author:FSL_TICS_ZJJ
1,        例程功能描述
本例程旨在使用官方的FRDM_KL02开发板,测试改变芯片VDD电压的时候,利用内部测试传感器测试温度,查看是否能够测准。分享该例程的原因是因为发现还是有部分客户在调试这个功能的时候遇到了一些问题,所以我们飞思卡尔论坛支持小组利用Codewarror的PE生成了一个例程,并编写了这个文档供大家参考。
例程主要是通过ADC读取bandgap的值,计算出当前VDD的值,然后再结合datasheet提供的温度相关参数计算出这些参数在当前VDD值下对应的ADC值,然后最终带入公式计算出实际的温度。

2,        温度计算算法讲解
2.1 温度计算公式雏形
Temp=25-((Vtemp-Vtemp25)/m)
其中,
Temp:当前温度,待计算
Vtemp:当前文档对应的电压,可以通过读取传感器的ADC值结合VDD计算出来。
Vtemp25:25度,VDD=3v时对应的电压,此值由datasheet提供
m:温度相对电压的变化率,这个也是由datasheet提供。
具体的原理,可以参看参考文献[1],第2章。

2.2 变VDD的温度计算公式
如果改变VDD值,那么就不能用以上公式直接计算,需要找到对应当前VDD值的Vtemp25以及m的ADC值去替换掉原来的Vtemp25以及m。下面直接给出计算公式:
(1)        计算当前VDD
VDD=(ADCRvdd*Vbg)/ADCRgb
大家知道,内部的bandgap是固定的,通过datasheet可以知道,这个值的范围为0.97到1.03,典型值为1V。
所以我们利用内部的bandgap值,读取在当前VDD下的ADC值,结合ADC满量程(比如12位为4095),计算出当前VDD的电压值。
公式中,
ADCRvdd:VDD对应的ADC满量程值,由你所选定的ADC位数决定,比如12位,就是2的12次方-1。
Vbg:bandgap值,1V
ADCRgb:ADC读取bandgap的值,实测。
实际计算,会将VDD放大10倍计算,即公式变为:
VDD*10=(ADCRvdd*Vbg)*10/ADCRgb
VDD*10=VDDconv

(2)        计算temp25对应的ADC值ADCtemp25
ADCtemp25=(ADCRvdd*Vtemp25*10)/VDDconv
公式中,
ADCRvdd:VDD对应的ADC满量程值,由你所选定的ADC位数决定,比如12位,就是2的12次方-1。
       Vtemp25:25度,VDD=3v时对应的电压,此值由datasheet提供


(3)        计算温度电压变化率m对应的ADC值ADCR100m
ADCR100m=(ADCRvdd*m*1000)/ VDDconv
      其中,
       m:温度相对电压的变化率,这个也是由datasheet提供。

(4)        最终温度公式
Temp=25-((ADCRt- ADCtemp25)/ ADCR100m)*100
      其中,
ADCRt:为实际测试的ADC值。
      将1-3计算的结果带入到4中就可以计算出当前的温度了。
      更加详细细节,请查看参考文献[1],第5章。
3,        例程硬件配置
  主要是断开J4,然后再J4的2脚接上可以改变的VDD,怎么改变VDD呢?
可以使用一个电位器,将3.3V电压分压,然后接到J4的2脚实现。接线如下:

图1

4,        例程软件配置
软件配置,是用CW的PE生成,具体配置由于项目较多,可以直接参看附件中的例程。
主要分为四个部分,1:CPU配置,2:串口CSIO1模块配置,3:TPM1用于乒乓触发ADC配置,4:ADC模块配置,选择ADC输入通道为温度传感器以及bandgap。
串口配置是用于打印实时的温度值,以及bandgap对应的ADC值,bandgap对应的ADC值可以结合ADC满量程以及bandgap电压计算出vdd的值vdd_cal。更加详细的配置内容讲解,可以参看参考文献[2],[3].
注意,bandgap选择之后,并没有在PMC寄存器中打开bandgap,所以需要在主程序中加上如下代码:  
  PMC_REGSC |= 0X01;  // enable bandgap

2.2节对应的计算C代码如下:
  1. float ADC_Calculate(uint16 result_A,uint16 result_B)
  2. {
  3. float Vdd_Cal,ADCR_Temp25,ADCR_100m;
  4. float i;
  5. float Temp;
  6. Vdd_Cal=40950/result_A;
  7. ADCR_Temp25=29320/Vdd_Cal;
  8. ADCR_100m=6633/Vdd_Cal;
  9. Temp=(float)((result_B-ADCR_Temp25)*100/ADCR_100m);
  10. i=(float)(25-Temp);
  11. return (uint16)i;
  12. }
复制代码

5,        测试结果
这里测试主要在datasheet规定的VDD的范围内,挑几个电压然后测试当前的温度,以及VDD的值。

图2

由以上测试结果可以发现,随着VDD的改变,温度基本还是实际温度。
6,参考文献
[1] Donnie Carcia, Rafael Peralez. Temperature sensor for the HCS08 Microcontroller Family. AN3031
http://cache.freescale.com/files ... df?fromsite=zh-Hans
[2] FSL_TICS_ZP. KL25使用乒乓模式采集ADC上篇
具体链接,请查看kinetis的资料大本营,官方例程分享
[3] FSL_TICS_ZP. KL25使用乒乓模式采集ADC下篇
具体链接,请查看kinetis的资料大本营,官方例程分享






PS:本帖可从飞思卡尔版块置顶帖:飞思卡尔Kinetis资料大本营飞思卡尔论坛支持小组【经验分享】帖汇总链接进入。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

 楼主| 发表于 2014-4-15 13:25:55 | 显示全部楼层
希望本文档以及例程能够给大家带来帮助,不足之处欢迎指正。
同时也欢迎大家分享自己的经验文档

出0入0汤圆

发表于 2014-4-15 15:20:17 | 显示全部楼层
好方法,谢谢分享。
的确,使用第一种方法计算温度误差太大了,datasheet中提供的斜率slope和Vtemp25的典型值是有条件的:Typical values assume VDDA = 3.0 V, Temp = 25 °C, fADCK = 2.0 MHz unless otherwise stated.

出0入0汤圆

发表于 2014-4-15 15:38:48 | 显示全部楼层
如果大家对AD采样芯片内部温度传感器有兴趣可以在此下载学习、相互讨论

出0入0汤圆

 楼主| 发表于 2014-4-15 15:57:53 | 显示全部楼层
zhongyb 发表于 2014-4-15 15:20
好方法,谢谢分享。
的确,使用第一种方法计算温度误差太大了,datasheet中提供的斜率slope和Vtemp25的典型 ...

是的,其他的芯片都可以借鉴这种方法的,一般都有内部的bandgap

出0入0汤圆

发表于 2014-4-15 16:02:30 | 显示全部楼层
马克一下,公司采购一块该开发板,还没有测试过,有空试试看

出0入0汤圆

 楼主| 发表于 2014-4-15 16:03:07 | 显示全部楼层
jiespring 发表于 2014-4-15 16:02
马克一下,公司采购一块该开发板,还没有测试过,有空试试看

好的啊,如果调试这个例程遇到问题,可以和我联系啊。

出0入0汤圆

发表于 2014-9-4 19:44:27 | 显示全部楼层
收藏,谢谢分享

出0入0汤圆

发表于 2014-9-4 19:46:05 | 显示全部楼层
感想版主的帖子

出0入0汤圆

发表于 2014-9-17 10:57:36 | 显示全部楼层
需要使用两个ad,一个测供电电压,一个测试温度电压。

出0入0汤圆

 楼主| 发表于 2014-9-17 11:23:51 | 显示全部楼层
quentin2052ck 发表于 2014-9-17 10:57
需要使用两个ad,一个测供电电压,一个测试温度电压。

是的,bandgap是测试VDDA的,但是如果你自己本身VDDA就很准的话,不测问题也不大。

出0入0汤圆

发表于 2018-6-29 08:48:38 | 显示全部楼层
学习了,
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-18 16:18

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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