通过热敏电阻计算温度(二)---ODrive实现分析

2023-10-23 21:01

本文主要是介绍通过热敏电阻计算温度(二)---ODrive实现分析,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

  • 通过热敏电阻计算温度(二)---ODrive实现分析
    • 测量原理图
    • 计算分析
      • 计算拟合的多项式系数
      • 根据多项式方程计算温度的函数
      • 温度计算调用函数

通过热敏电阻计算温度(二)—ODrive实现分析

ODrive计算热敏电阻的温度采用的时B值的方式计算的。首先根据公式计算出一系列的温度和测量点电压比例的点,然后通过多项式拟合曲线,得到三阶多项式的系数。后面便可以通过此三阶多项式来求解温度数据

测量原理图

请添加图片描述
ODrive板卡上使用的热敏电阻的型号为NCP15XH103F03RC,10KΩ,25-80℃的B值为3428

计算分析

计算拟合的多项式系数

在tools->odrive->utils.py文件中有如下计算多项式系数的函数:

def calculate_thermistor_coeffs(degree, Rload, R_25, Beta, Tmin, Tmax, thermistor_bottom = False, plot = False):import numpy as npT_25 = 25 + 273.15 #Kelvintemps = np.linspace(Tmin, Tmax, 1000)tempsK = temps + 273.15# https://en.wikipedia.org/wiki/Thermistor#B_or_%CE%B2_parameter_equationr_inf = R_25 * np.exp(-Beta/T_25)R_temps = r_inf * np.exp(Beta/tempsK)if thermistor_bottom:V = R_temps / (Rload + R_temps)else:V = Rload / (Rload + R_temps)fit = np.polyfit(V, temps, degree)p1 = np.poly1d(fit)fit_temps = p1(V)if plot:import matplotlib.pyplot as pltprint(fit)plt.plot(V, temps, label='actual')plt.plot(V, fit_temps, label='fit')plt.xlabel('normalized voltage')plt.ylabel('Temp [C]')plt.legend(loc=0)plt.show()return p1

np.linspace(start, stop, num)函数用于以均匀间隔创建对应num数的数值序列。
np.polyfit(x,y,deg)函数用于对一组数据采用最小二乘法进行多项式拟合,返回值为多项式系数,deg表示多项式的阶数
np.poly1d(c)c表示多项式系数,用于根据多项式系数生成多项式(这里介绍的是仅有一个参数的情况)

根据多项式方程计算温度的函数

在MotorControl->utils.hpp文件中根据多项式系数计算温度的函数

// Evaluate polynomials in an efficient way
// coeffs[0] is highest order, as per numpy.polyfit
// p(x) = coeffs[0] * x^deg + ... + coeffs[deg], for some degree "deg"
inline float horner_poly_eval(float x, const float *coeffs, size_t count) {float result = 0.0f;for (size_t idx = 0; idx < count; ++idx)result = (result * x) + coeffs[idx];return result;
}

数组coeffs[4]存储了多项式的系数,coeffs[0]表示最高阶的系数。

温度计算调用函数

void ThermistorCurrentLimiter::update() {const float normalized_voltage = get_adc_relative_voltage_ch(adc_channel_);float raw_temperature_ = horner_poly_eval(normalized_voltage, coefficients_, num_coeffs_);constexpr float tau = 0.1f; // [sec]float k = current_meas_period / tau;float val = raw_temperature_;for (float& lpf_val : lpf_vals_) {lpf_val += k * (val - lpf_val);val = lpf_val;}if (is_nan(val)) {lpf_vals_.fill(0.0f);}temperature_ = lpf_vals_.back();
}

normalized_voltage为根据adc的值转化过来的0-1之间的值。代入horner_poly_eval()函数可以的得到原始的温度数据。后面的部分是对温度数据的低通滤波处理。

这篇关于通过热敏电阻计算温度(二)---ODrive实现分析的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/270424

相关文章

Python实现终端清屏的几种方式详解

《Python实现终端清屏的几种方式详解》在使用Python进行终端交互式编程时,我们经常需要清空当前终端屏幕的内容,本文为大家整理了几种常见的实现方法,有需要的小伙伴可以参考下... 目录方法一:使用 `os` 模块调用系统命令方法二:使用 `subprocess` 模块执行命令方法三:打印多个换行符模拟

SpringBoot+EasyPOI轻松实现Excel和Word导出PDF

《SpringBoot+EasyPOI轻松实现Excel和Word导出PDF》在企业级开发中,将Excel和Word文档导出为PDF是常见需求,本文将结合​​EasyPOI和​​Aspose系列工具实... 目录一、环境准备与依赖配置1.1 方案选型1.2 依赖配置(商业库方案)二、Excel 导出 PDF

Python实现MQTT通信的示例代码

《Python实现MQTT通信的示例代码》本文主要介绍了Python实现MQTT通信的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一... 目录1. 安装paho-mqtt库‌2. 搭建MQTT代理服务器(Broker)‌‌3. pytho

使用zip4j实现Java中的ZIP文件加密压缩的操作方法

《使用zip4j实现Java中的ZIP文件加密压缩的操作方法》本文介绍如何通过Maven集成zip4j1.3.2库创建带密码保护的ZIP文件,涵盖依赖配置、代码示例及加密原理,确保数据安全性,感兴趣的... 目录1. zip4j库介绍和版本1.1 zip4j库概述1.2 zip4j的版本演变1.3 zip4

SpringBoot中六种批量更新Mysql的方式效率对比分析

《SpringBoot中六种批量更新Mysql的方式效率对比分析》文章比较了MySQL大数据量批量更新的多种方法,指出REPLACEINTO和ONDUPLICATEKEY效率最高但存在数据风险,MyB... 目录效率比较测试结构数据库初始化测试数据批量修改方案第一种 for第二种 case when第三种

python生成随机唯一id的几种实现方法

《python生成随机唯一id的几种实现方法》在Python中生成随机唯一ID有多种方法,根据不同的需求场景可以选择最适合的方案,文中通过示例代码介绍的非常详细,需要的朋友们下面随着小编来一起学习学习... 目录方法 1:使用 UUID 模块(推荐)方法 2:使用 Secrets 模块(安全敏感场景)方法

解决1093 - You can‘t specify target table报错问题及原因分析

《解决1093-Youcan‘tspecifytargettable报错问题及原因分析》MySQL1093错误因UPDATE/DELETE语句的FROM子句直接引用目标表或嵌套子查询导致,... 目录报js错原因分析具体原因解决办法方法一:使用临时表方法二:使用JOIN方法三:使用EXISTS示例总结报错原

Spring StateMachine实现状态机使用示例详解

《SpringStateMachine实现状态机使用示例详解》本文介绍SpringStateMachine实现状态机的步骤,包括依赖导入、枚举定义、状态转移规则配置、上下文管理及服务调用示例,重点解... 目录什么是状态机使用示例什么是状态机状态机是计算机科学中的​​核心建模工具​​,用于描述对象在其生命

Spring Boot 结合 WxJava 实现文章上传微信公众号草稿箱与群发

《SpringBoot结合WxJava实现文章上传微信公众号草稿箱与群发》本文将详细介绍如何使用SpringBoot框架结合WxJava开发工具包,实现文章上传到微信公众号草稿箱以及群发功能,... 目录一、项目环境准备1.1 开发环境1.2 微信公众号准备二、Spring Boot 项目搭建2.1 创建

IntelliJ IDEA2025创建SpringBoot项目的实现步骤

《IntelliJIDEA2025创建SpringBoot项目的实现步骤》本文主要介绍了IntelliJIDEA2025创建SpringBoot项目的实现步骤,文中通过示例代码介绍的非常详细,对大家... 目录一、创建 Spring Boot 项目1. 新建项目2. 基础配置3. 选择依赖4. 生成项目5.