完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
电子发烧友论坛|
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脚实现。接线如下: 下载附件 [color=rgb(153, 153, 153) !important]2014-4-15 13:20 上传 图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代码如下: float ADC_Calculate(uint16 result_A,uint16 result_B) { float Vdd_Cal,ADCR_Temp25,ADCR_100m; float i; float Temp; Vdd_Cal=40950/result_A; ADCR_Temp25=29320/Vdd_Cal; ADCR_100m=6633/Vdd_Cal; Temp=(float)((result_B-ADCR_Temp25)*100/ADCR_100m); i=(float)(25-Temp); return (uint16)i; } |
|
|
|
|
|
|
|
|
5,测试结果
这里测试主要在datasheet规定的VDD的范围内,挑几个电压然后测试当前的温度,以及VDD的值。 下载附件 [color=rgb(153, 153, 153) !important]2014-4-15 13:19 上传 图2 由以上测试结果可以发现,随着VDD的改变,温度基本还是实际温度。 |
|
|
|
|
|
|
|
|
6,参考文献
[1] Donnie Carcia, Rafael Peralez. Temperature sensor for the HCS08 Microcontroller Family. AN3031 http://cache.freescale.com/files/microcontrollers/doc/app_note/AN3031.pdf?fromsite=zh-Hans [2] FSL_TICS_ZP. KL25使用乒乓模式采集ADC上篇 具体链接,请查看kinetis的资料大本营,官方例程分享 [3] FSL_TICS_ZP. KL25使用乒乓模式采集ADC下篇 具体链接,请查看kinetis的资料大本营,官方例程分享 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
float ADC_Calculate(uint16 result_A,uint16 result_B)
result_B能猜到是当前温度传感器的ADC值(12bit),但是result_A不知道是对应哪个参数,求大神告知。 |
|
|
|
|
|
|
|
只有小组成员才能发言,加入小组>>
2135个成员聚集在这个小组
加入小组我的项目我做主,使用GN+Ninja来完成构建系统(VSCode开发RT106X)
37376 浏览 0 评论
NXP IMX8应用处理器快速入门必备:技巧、使用、设计指南
6776 浏览 1 评论
7794 浏览 1 评论
7642 浏览 0 评论
NXP i.MX6UL开发板(linux系统烧录+规格+硬件+模块移植)使用手册
5071 浏览 0 评论
1557浏览 2评论
关于NINA-W132 Wi-Fi模块SPI通信遇到的疑问求解
1210浏览 2评论
如何在MPC PowerPC MCU上首次刷写后禁用BDM?
749浏览 1评论
将HFREFR和LFREFR寄存器值设置为错误的值来将故障注入CMU,但CMU_ISR值始终为零,为什么?
736浏览 1评论
将SPSDK for FRDM-MCX-W71 SDK与VS一起安装时出现hidapi构建错误怎么解决?
679浏览 1评论
/9
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-12-2 15:36 , Processed in 1.291017 second(s), Total 110, Slave 90 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191

淘帖