Simulink查表法实现NTC温度计算模型

目录

前言

把NTC数据导入到excel

把excel数据导入Matlab

拟合NTC温度曲线

查表实现温度计算

总结


前言

 在实际项目中需要对NTC对某些区域进行温度采样和做一些系统层面的保护等等,比如过温降载,过温保护,这时就需要对NTC或者其他的温度传感器进行采样,计算实时温度。而NTC的数据表提供的温度和阻值的对应关系点数太少,计算的温度误差比较大。这里记录下所使用的方法,方便日后回顾。

把NTC数据导入到excel

如下图是开发板上的一个NTC电路。MCU采样NTC_Temp的AD值并进行温度的计算

 以下是NTC的阻值和温度的对应关系,这里选用的是10KR的型号

 把数据手册上的数据导入到excel,如下是电阻和温度的对应关系,再根据电路结构很容易就算出了电压,AD值的对应关系。

 如下是引脚电压和ADC对应当前的温度数据,再把数据生成曲线

 

图1横坐标是AD值12位,纵坐标是对应的温度,图2是横坐标是电阻值,纵坐标是温度

 

可以看到,曲线的点是比较少的,如果直接用这些数据进行查表,那得到的温度值精度也不高。 

把excel数据导入Matlab

从Matlab里双击打开刚刚的表格,把表格数据导入到Workspace,如下

 再把导入到Workspace里的数据给到两个数组,求个转转置就可以把列变成行了。

 

拟合NTC温度曲线

输入以下代码


Coef1=polyfit(ADC_Table_T,Tem_Table_T,5);
z1=polyval(Coef1,ADC_Table_T);
plot(ADC_Table_T,Tem_Table_T,'r*',ADC_Table_T,z1,'b')

 第一句的意思是把ADC数组作为输入,把温度作为输出,拟合成一个5次多项式的形式,并获取其系数。

第二句就是把ADC数组作为输入,用拟合得到的系数方程计算得到温度Z1

第三句就是比较拟合出来的曲线和数组曲线作对比

可以适当调节项数提高精度,如 Coef1=polyfit(ADC_Table_T,Tem_Table_T,5);这里采用的是五次项。

 可以看到,系数在Command Window里面精度是不够的,需要在Workspace里双击。选择上面的系数,最后再把系数构建成多项式,那ADC和温度的关系就可以计算出来,后面根据需要的精度进行调整即可。

查表实现温度计算

把计算公式输入到excel里,和之前的数据做对比,这里设置了从-40-125度一共191个点。可根据实际需要进行适当调整,精度越高占用空间越多,合理选择就可以。

 再把数据导入到脚本里

 比较NTC数据手册提供的点,再比较拟合出来的191个点的曲线。

 得到数据后直接用Simulink查表就可以完成ADC转换成温度值的计算了。

 

 如下是模块内部配置

 

 AD值改变,温度也会变化,仿真和预期一样,1-D LookupTable 这个模块可以直接生成代码。

 

总结

 没啥好总结的!灵活使用各种方法和工具就行,这种方法也可以用在其他复杂的公式里面,如一些曲线过于复杂不好拟合的,还可以分段拟合多项式等等,不同的情况选择合适的方法最重要。

### 如何在Comsol和Simulink中使用查表进行仿真或建模 #### Comsol中的查表应用 在Comsol Multiphysics 中,可以通过定义插值函数来实现查表功能。这允许基于实验数据或其他来源的数据创建复杂的材料属性或边界条件。 - **定义插值函数** 插值函数可以用来表示随位置、时间变化的物理量。通过导入CSV文件或者其他格式的数据集,可以在求解过程中动态调用这些预先计算好的数值[^1]。 ```matlab % 创建一个新的插值函数对象并设置其名称为 'int1' f = comsol.model.create('interp', 'int1'); % 导入外部数据作为输入给定路径下的csv文件 comsol.util.importFile('/path/to/data.csv', f); ``` - **利用表格数据设定材料特性** 对于某些特定的应用场景,比如热传导分析或者电化学过程模拟时,可以直接将温度依赖性的导热系数等参数设为上述建立起来的插值表达式形式,在几何结构上指定相应区域内的材质属性即可完成配置工作。 #### Simulink中的查表应用 对于Matlab/Simulink环境而言,则提供了多种内置模块支持不同维度上的查找操作: - **一维/二维Lookup Table Blocks** 这些基础组件能够方便快捷地处理简单映射关系的任务;用户只需准备好相应的xy坐标对数组,并将其传递至对应端口便能顺利运行程序逻辑。 ```matlab % 构造一个简单的2D Lookup table实例 [x,y,z]=peaks(50); % 随机生成测试数据 lut=griddedInterpolant(x,y,z,'linear'); % 建立网格化插值器 simOut=sim('model_with_lut','StopTime','10'); % 启动含有此LUT单元格的模型仿真实验 ``` - **n-Dimensional Lookup Tables (n-D LUTs)** 当面对更高阶次的空间变换需求时,多维查询表就显得尤为重要了——它不仅限定了输入变量的数量范围,还进一步优化了算效率以及内存占用情况等方面的表现水平。 综上所述,在两个平台上都可以有效地运用到所谓的“查表”技巧来进行高效精准的工程设计与科学研究活动当中去。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

卡洛斯伊

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值