电动助力转向EPS(二)——理论公式推导及simulink模型

本文详细解析了电动助力转向系统(EPS)的理论公式,包括方向盘动态、扭矩传感器、电机与齿轮齿条模块,并介绍了如何使用Simulink进行系统建模,形成闭环控制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

EPS

本文以转向柱型EPS系统为例,主要介绍下系统的理论公式,并搭建对应的simulink模型。分为如下四个部分
1、方向盘动态公式
2、扭矩传感器模块
3、电机模块
4、齿轮齿条模块
关于EPS具体结构、工作原理,参考之前博客

EPS系统建模

方向盘动态公式

在这里插入图片描述
Td:驾驶员作用在方向盘上的转向力矩
Ts:扭矩传感器的输出值
Jsw:方向盘转动惯量
Csw:方向盘阻尼
Ksw:方向盘刚度
theta_sw:方向盘转角

扭矩传感器模块

在这里插入图片描述
Cs:扭转杆阻尼
Ks:扭转杆刚度
theta_ss:扭矩传感器下端转向柱转角(转动轴转动时形成的夹角)

电机模块

直流电机电磁学方程:
在这里插入图片描述
La:助力电机电感
Ra:助力电机电阻
i:电流
Ke:反电动势系数
theta_m:电机转角
U:电压

电机动力学方程:
在这里插入图片描述
在这里插入图片描述
Jm:电机转动惯量
Cm:电机阻尼系数
Tm:电机电磁转矩
Ta:电机扭矩(经过减速器后的扭矩)
Kt:电机力矩常数

齿轮齿条模块

在这里插入图片描述
Jrp:齿条和小齿轮的惯性
Crp:齿条和小齿轮的阻尼
Cfr:转向齿条上的摩擦力
Mz:轮胎的回正力矩
theta_p:theta_p=theta_m/N;前轮等效到转向轴转角

simulink建模

整体模型如下:
在这里插入图片描述

方向盘动态模块

在这里插入图片描述
输入Ts和Td,驾驶员扭矩和扭矩传感器扭矩,基于方向盘动态公式,通过传递函数法,反推出Theta_sw。

扭矩传感器模型

在这里插入图片描述
扭矩传感器内部模块如下:
在这里插入图片描述

电机模块模型

在这里插入图片描述
通过扭矩传感器得到实际电流,实际电流减去理想的电流做PID控制,通过调节电压的占空比来控制。得到电压减去反电动势,通过电磁学方程得到理想的电流。进一步得到Ta
在这里插入图片描述

齿轮齿条模型

在这里插入图片描述
得到Ta之后,结合Ts和Mz,建立齿轮齿条系统方程,反推theta_p。

总结

通过上述的理论公式及模型,总结如下:
1、基于方向盘动态公式和扭矩传感器模块得到Ts
2、基于电磁学和电机动力学方程,得到理想电流curent,通过PID控制调节电压的占空比来控制电流。
进一步得到电磁转矩Tm和电机转矩Ta
3、基于齿轮齿条动力学方程,得到最终的theta_p,最终形成闭环控制。

eps 函数在 MATLAB 中主要用于处理浮点数的精度问题。它返回的是一个数与其下一个可表示的最大浮点数之间的距离,这个距离越小,表示该数值附近的浮点数精度越高。这种特性对于避免除以零的错误(如在分母中加入 `eps`)或者在数值计算中处理接近零的情况非常有用。 ### 用途 - **防止除以零**:在进行数学运算时,如果分母可能为零,可以在分母上加上 `eps` 来保证不会出现除以零的情况,例如 `y = cos(x) / (x + eps)`。 - **浮点数比较**:由于浮点数是离散且有限的,在某些情况下不能直接用等号来判断两个浮点数是否相等。可以使用 `eps` 来定义一个容差范围,如果两个数的差异小于 `eps` 的某个倍数,则认为它们是“相等”的。 - **了解数值精度**:通过 `eps(N)` 可以知道某个数值 N 的精度,这对于理解数值计算中的舍入误差非常重要。 ### 编程实现 在 MATLAB 中,`eps` 函数的基本使用如下: ```matlab % 默认情况下,eps 返回 1.0 到下一个最大双精度数的距离 default_eps = eps; % 获取特定数值的 epseps_1 = eps(1); % 对于 1.0 eps_0 = eps(0); % 对于 0.0 eps_2 = eps(2); % 对于 2.0 % 获取单精度数值的 eps single_eps = eps('single'); ``` 在其他编程语言中也有类似的机制来处理浮点数的精度问题。比如在 Python 中,可以利用 NumPy 库提供的 `numpy.finfo` 来获取浮点数类型的机器限制: ```python import numpy as np # 获取 float64 类型的机器精度 float64_info = np.finfo(np.float64) print("Machine epsilon for float64:", float64_info.eps) # 获取 float32 类型的机器精度 float32_info = np.finfo(np.float32) print("Machine epsilon for float32:", float32_info.eps) ``` 这些信息可以帮助开发者更好地理解和控制数值计算过程中的精度损失和舍入误差。 ### 注意事项 当处理大数值时,需要注意 `eps(N)` 随着数值大小增加而增大的现象。这意味着在进行涉及较大数值的操作时,较小的增量可能会被忽略,导致所谓的“大数吃小数”现象。因此,在编写需要高精度计算的代码时,应特别小心地设计算法,并考虑使用适当的数值方法来保持精度[^1]。
评论 23
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值