HELLA TAS 4+2 GEN4 SENT协议
Hella TAS SENT角度与扭矩计算原理解析
1. 先说结论
这套 TAS(Torque and Angle Sensor,扭矩和角度传感器)实际上同时完成两件事:
- 测量扭杆两端的相对扭转量,用于得到转向扭矩;
- 测量输入轴的绝对转角,而且要求上电后不转方向盘也能够知道当前方向盘处于第几圈。
因此传感器不是简单地给 ECU 一个“角度值”和一个“扭矩值”,而是通过多路 SENT 输出若干原始/周期性信息,由 ECU 再组合计算。文档明确说明,传感器物理输出端并不直接提供最终的 torque 和 angle,最终的 torque_out、angle_IS_out 必须由 ECU 软件计算。
整个逻辑可以先简化理解为:
扭矩:
SENT1B + SENT2B → 一组差分角 → torque_out1
SENT3B + SENT4B → 第二组差分角 → torque_out2
↓
冗余/同步校验
绝对角度:
SENT1A、SENT2A → 40°精细周期角 ┐
├→ Vernier算法 → 0~1480°绝对角
SENT5 → 296°粗角 ┘
另一套冗余:
SENT3A、SENT4A + SENT6 → 第二套绝对角计算所以你看到的“两路 TxA + SENT5 一起算一个角度”不是重复计算,而是:
- 两个 TxA 首先合成一个高精度的 40°周期角;
- SENT5 提供一个 296°周期的粗位置;
- 40°和296°两种不同周期的信号通过 Vernier 原理组合,才能确定 ±738°范围内的唯一绝对角度。
而扭矩的逻辑有所不同:
- TxB 本身就是与扭杆差分角相关的信息;
- 两路 B 信号采用相反斜率;
- ECU先把它们方向统一,再求平均;
- 得到一个高可靠的差分角/“torque”输出。
需要特别注意:
本文档计算出来的`torque_out`实际单位仍然是“差分角 °”,并不是 Nm。
文档也明确说明,Hella实际测量的是 differential angle,后文为了方便才把它称作 torque。
如果EPS软件最终需要 Nm,还必须再利用扭杆刚度或标定曲线:
Torque[Nm] = Ktorsion[Nm/°] × diff_angle[°]或者通过查表实现非线性修正。
这部分 Nm 转换参数在当前这份 SRS 的计算算法章节中没有给出,因此不能从本文件直接得到 Nm 换算系数。
2. 为什么需要“细分角 + 粗分角”
这是理解整套角度算法最关键的地方。
2.1 40°信号是“细分角”
CIPOS角度通道的周期是:
40°也就是说它可以非常精确地告诉你:
当前在某一个40°区间内部的哪个位置。例如它可能告诉你:
FineAngle = 12°但是它并不知道这是:
12°
52°
92°
132°
172°
...中的哪一个。
因为:
12 mod 40 = 12
52 mod 40 = 12
92 mod 40 = 12
...所以单独使用40°信号时存在严重的周期重复。
它的优点是:
精度高
分辨率高
动态响应快缺点是:
不知道当前在哪一圈、哪个40°周期。因此可以把它理解成:
Fine Track / Primary Track / 精细角轨道。
3. SENT5为什么叫“粗分角”
TAS又增加了一个磁角度传感器和齿轮机构。
磁角传感器本身测量360°,但是通过机械齿轮比折算到输入轴后,对应输入轴的周期为:
296°文档明确说明,该磁角模块通过齿轮连接输入轴,折算到输入轴后其测量范围表现为296°。
因此SENT5可以认为提供:
angle_coarse = angle_IS mod 296°它的周期远大于40°。
例如:
绝对角 = 532°
40°轨:
532 mod 40 = 12°
296°轨:
532 mod 296 = 236°于是:
Fine = 12°
Coarse = 236°两者组合之后,532°的位置就能够唯一确定。
所以SENT5并不是拿来提升40°信号精度的。
它的真正作用是:
帮助ECU判断40°细分角到底属于第几个40°周期。
4. 为什么40°和296°刚好可以确定绝对角度
这是典型的 Vernier 原理。
两个周期分别为:
40°
296°它们的最小公倍数为:
LCM(40,296) = 1480°因此只有轴旋转1480°以后,这两个传感器的组合状态才会完全重复。
所以理论唯一角度范围为:
1480°如果以中心位置作为0°:
-740° ~ +740°考虑机械和传感器误差,实际规格限制为:
-738° ~ +738°文档明确给出的理论范围是±740°,机械有效范围限制为±738°。
Vernier算法中的几个数字:
VDP = 37
VDS = 5
VM = 22其中最容易理解的是:
1480 / 40 = 37
1480 / 296 = 5所以:
完整1480°量程内:
40°细轨重复37次;
296°粗轨重复5次。这正是Vernier算法能够区分37个40°区间的基础。文档在算法中明确给出 VDP=37、VDS=5、VM=22。
5. 为什么不是一个TxA + SENT5,而是“两路TxA + SENT5”
这是非常关键的一点。
假设一组是:
SENT1A
SENT2A
SENT5SENT1A和SENT2A并不是两个粗细角。
SENT1A和SENT2A都是40°高精度周期信号。
但是两路的输出特性/方向不同。
ECU不会简单选其中一路,而是先把两路做:
范围转换
方向统一
roll-over修正
平均最终得到:
mean_OS2IS这个 mean_OS2IS 才是后续 Vernier 算法真正使用的40° Primary Track。
文档明确说明,Vernier算法的Primary输入是一个周期为40°的角度信息 mean_OS2IS,它由A通道以及差分角计算结果准备得到;Secondary输入则来自SENT5/SENT6预处理后的磁角通道。
所以真实结构是:
SENT1A ─┐
├→ 信号调理 → mean_OS2IS → Primary Track
SENT2A ─┘
SENT5 → 信号调理 → ch_MT_module → Secondary Track
Primary Track
+
Secondary Track
↓
Vernier算法
↓
Absolute Steering Angle而不是:
SENT1A = Fine
SENT2A = Coarse
SENT5 = 第三路这个理解很重要。
6. 两路A信号具体怎么合成40°角
先对A通道进行预处理。
以SENT1A为例,文档给出:
A1_pc = (SENT1A - 1) × 2经过处理以后:
A1_pc:
范围:0 ~ 8184 digits
比例:204.6 digits/°
角度:0 ~ 40°即:
Angle_A1 = A1_pc / 204.6文档的预处理过程明确把A1转换为0~40°的标准化40°角。
SENT2A由于原始输出斜率相反,因此还需要进行反向:
A2_pc = SENT2A - 4093
A2_pc = A2_pc × 2
A2_pc = -A2_pc最终同样变成:
0 ~ 8184
=
0 ~ 40°也就是说经过预处理以后:
A1_pc ↑
A2_pc ↑两路方向已经统一。
7. 为什么还不能直接平均A1和A2
因为这是一个0~40°循环信号。
例如真实位置非常接近40°边界:
A1 = 39.9°
A2 = 0.1°直接平均:
(39.9 + 0.1)/2 = 20°显然完全错误。
因此文档先计算:
diffA = A2_pc - A1_pc如果:
diffA > 20°说明发生了一个方向的40° rollover。
对A2做:
A2_temp = A2 - 40°如果:
diffA < -20°则:
A2_temp = A2 + 40°这样再平均就不会跨周期出错。
文档对应数字是:
20° = 4092 digits
40° = 8184 digits然后计算:
mean_OS = A1_pc + tmp_A2_pc注意这里文档采用了改变数字量尺度的方法,因此没有直接 /2,而是通过新的 digits/° 尺度来表示平均结果。
最后再将结果 wrap 到:
0 ~ 40°形成:
mean_OS2IS文档的Primary Signal Conditioning完整描述了A1/A2差值判断、±40°rollover修正和最终0~40°范围适配。
因此可以把这一步简单理解为:
A1 ─────────────┐
├→ 周期边界修正 → 平均 → FineAngle
A2 ─────────────┘所以“两路A”的主要目的包括:
提高鲁棒性
减少单通道误差
解决冗余问题
支持同步/一致性诊断8. SENT5粗角如何处理
SENT5经过SENT协议检查后得到:
SENT5A_pc文档规定:
1 ≤ SENT5A_pc ≤ 4088然后:
ch_MT_module = SENT5A_pc - 1得到:
0 ~ 4087 digits对应:
0 ~ 296°比例约为:
13.8 digits/°所以可以粗略理解:
CoarseAngle ≈ ch_MT_module / 13.8文档给出了SENT5/SENT6处理范围以及 ch_MT-module = SENT5A_pc - 1。
9. 细角和粗角真正怎样计算绝对角度
现在已经得到:
Fine track:
mean_OS2IS
周期 = 40°
Coarse track:
ch_MT_module
周期 = 296°第一步不是直接相加。
而是先把两者转换成相同的“梯度/尺度”。
文档的数学表示是:
ptrack_norm =
(mean_OS2IS / 16368) × VDS
strack_norm =
(ch_MT_module / 4088) × VDP其中:
VDS = 5
VDP = 37ECU实现例中则保持Primary Track分辨率不降低,令:
ptrack = mean_OS2IS
strack =
(ch_MT_module × 7585) / 256这样两条轨道变成相同角度斜率。
10. Vernier Difference到底干什么
接下来计算:
vd = ptrack - strack这个 vd 非常重要。
它不是最终角度。
它实际上用于判断:
当前这个40° Fine Angle属于1480°范围内的第几个40°区间。
因为完整范围:
1480 / 40 = 37所以最终要识别:
Range 0
Range 1
Range 2
...
Range 36一共37个区间。
文档称其为:
Vernier Range
vr最终通过Vernier Difference得到 vr,也就是“Fine角当前属于哪个40°区间”。
11. 最终角度公式其实非常直观
一旦知道:
FineAngle以及:
当前是第N个40°区间最终绝对角本质上就是:
AbsoluteAngle =
N × 40° + FineAngle这就是整个算法最核心的物理含义。
Hella代码的数字量实现为:
vernier_angle =
ptrack + vr_sort × 16368因为:
16368 digits = 40°所以它其实就是:
绝对角 =
细分角 + 40° × 粗区间号文档最终连续角度计算正是:
vernier_angle = ptrack + vr_sort × 16368输出范围:
0 ~ 1480°然后根据车辆零位进一步做offset:
angle_IS =
vernier_angle - offs_angle_IS文档示例采用:
740°中心偏移:
0 ~1480°
↓ -740°
-740° ~ +740°实际机械有效范围:
±738°文档给出的示例实现为 vernier_angle_out = vernier_angle - 302808,其中302808 digits对应740°。
12. 用一个简化例子理解“细分角+粗分角”
假设实际方向盘角:
θ = 532°那么40°Fine Track看到:
532 mod 40 = 12°296°Coarse Track看到:
532 mod 296 = 236°所以ECU收到近似:
Fine = 12°
Coarse = 236°Fine自己无法判断:
12°
52°
92°
132°
...
492°
532°
...到底是哪一个。
但是结合Coarse=236°以后,Vernier算法可以确定:
当前属于第13个40°区间于是:
Absolute Angle
= 13 × 40 + 12
= 532°这就是SENT5存在的核心意义。
因此:
40°信号回答:
“我在当前小格子里的什么位置?”
296°信号回答:
“你大概处在整个多圈范围的哪个位置?”
Vernier算法回答:
“综合两者,你实际上处于第几个40°格子。”13. 为什么角度要两个TxA,而扭矩也要两个TxB
两者虽然都是“两路组合”,目的并不完全一样。
角度A通道
例如:
SENT1A
SENT2A两者共同构造:
一个高精度40° Primary Track之后再结合:
SENT5的296° Secondary Track得到多圈绝对角。
所以:
A1 + A2
↓
高精度Fine Angle
+
SENT5 Coarse Angle
↓
Absolute Angle扭矩B通道
B通道已经直接描述扭杆差分角。
例如:
SENT1B
SENT2B分别得到:
T1_pc
T2_pc二者方向相反,归一化以后再求平均:
T1 + T2
↓
diff / torque_out因此:
A通道是为了形成角度轨道;B通道是为了形成差分角/扭矩信息。
14. 扭矩究竟是怎么测出来的
机械结构是:
方向盘
│
Input Shaft / IS
│
[扭杆]
│
Output Shaft / OS
│
EPS机构驾驶员施加扭矩以后,扭杆产生扭转。
因此:
θdiff = θIS - θOS对于弹性范围内的扭杆:
T ≈ Ktorsion × θdiff因此传感器实际上并不是“直接测力”。
而是:
测角度差
↓
得到扭杆扭转角
↓
根据扭杆刚度
↓
得到扭矩文档明确说明,扭矩是通过测量扭杆两端IS和OS的角度来间接得到的,二者的差值代表 differential angle,并与施加扭矩成正比。
15. SENT1B如何变成第一路差分角
文档规定SENT1B原始正常范围约为:
8 ~ 4087首先:
T1_pc = SENT1B × 2再移动零点:
T1_pc = T1_pc - 4095最终得到:
-4079 ~ +4079对应:
-6° ~ +6°比例:
679.834 digits/°也就是说:
diff1 ≈ T1_pc / 679.834这就是第一路扭杆差分角。
文档把它称为:
First normalized torque value16. SENT2B为什么要反向
第二路SENT2B采用相反的输出斜率。
首先:
T2_pc = SENT2B × 2然后:
T2_pc = 4095 - T2_pc这样就把第二路的方向翻转成和第一路一致。
最终同样得到:
-6° ~ +6°于是:
T1_pc ↑ torque
T2_pc ↑ torque两者变化方向统一。文档明确把SENT2B步骤描述为“Invert and shift the zero point to its target”。
为什么原始设计要一增一减?
这是很常见的安全冗余设计。
例如真实扭矩增大时:
B1 ↑
B2 ↓如果电源漂移、线路故障、ASIC异常等导致:
B1 ↑
B2也↑就很容易通过一致性检查发现。
所以它不仅是测量,也是诊断手段。
17. 最终扭矩怎样由两路得到
得到:
T1_pc
T2_pc以后,理论上就是:
diff_out =
(T1_pc + T2_pc) / 2Hella实现里写成:
torque_out =
T1_pc + T2_pc并不是漏掉了 /2。
原因是文档改变了最终变量的:
digits/°即从:
679.834 digits/°变成:
1359.668 digits/°所以数学意义仍然相当于:
(T1 + T2)/2只是这样可以避免整数除2造成分辨率损失。
文档明确说明:“mean通常是(x+y)/2,这里的除2通过改变变量dimension实现,以避免分辨率损失。”
因此物理意义就是:
diff1 ─┐
├→ average → Differential Angle
diff2 ─┘18. 为什么扭矩需要两个B信号而不是只用一个
主要有三个原因。
第一:
提高测量可靠性两个独立测量可以平均。
第二:
降低单通道误差影响比如:
T1 = 1.01°
T2 = 0.99°
平均 = 1.00°第三,也是功能安全上最重要的:
可以进行同步性检查。文档计算:
sync_diff =
T1_pc - T2_pc然后:
sync_diff = ABS(sync_diff)如果:
sync_diff > sync_diff_limit则设置:
Differential angle synchronicity error所以两个B通道并不是简单为了“多测一次”。
更重要的是:
两个独立通道互相监督。
19. 为什么实际上还有两套扭矩
传感器不是只有:
SENT1
SENT2还有:
SENT3
SENT4因此实际上可以形成:
第一组:
SENT1B + SENT2B
↓
torque_out1
第二组:
SENT3B + SENT4B
↓
torque_out2文档前面的性能定义也给出:
diff_out1 = (diff1 + diff2)/2
diff_out2 = (diff3 + diff4)/2这就形成更高一级的冗余。
而传感器结构本身包含多个独立ASIC、激励线圈和接收线圈,用于让ECU进行crosscheck/synchronicity check。
20. 角度为什么也有SENT5和SENT6两套
原理相同:
角度通道组1:
SENT1A + SENT2A
↓
40° Primary
+
SENT5
296°
↓
Absolute Angle 1另一组:
SENT3A + SENT4A
↓
40° Primary
+
SENT6
296°
↓
Absolute Angle 2这样可以对绝对角进行冗余和一致性检查。
文档也指出,SENT5和SENT6彼此不同步,而且也不与SENT1~SENT4同步,因此ECU进行Vernier计算时还必须考虑各信号的时间戳/Signal Age。
这也是为什么实际量产软件不能只把“最新的一帧A”和“最新的一帧SENT5”直接拿来算。
必须考虑:
SENT采样时刻
ASIC计算延迟
SENT传输延迟
ECU接收时刻
方向盘转速尤其高速转向时,时间不同步本身就会表现成角度差。
文档专门要求Vernier计算尽可能使用来自同一时间点的Primary和Secondary数据,必要时选取最匹配的历史数据甚至插值。
21. Vernier Reserve为什么很重要
Vernier算法有一个特殊风险。
如果:
Fine Angle错误
+
Coarse Angle错误累计足够大,就可能把:
第13个40°区间误判成:
第12个
或者
第14个这时候错误不是:
0.5°
1°而是可能直接:
±40°所以Hella又计算:
Vernier Reserve
vres它衡量当前Fine/Coarse组合距离Vernier判定边界有多远。
文档明确说明:
两通道合计误差超过约4°
可能导致错误的Vernier输出;而离散实现中约3.9°就可能发生,因此必须结合Vernier Reserve诊断。
文档规定:
vres < 25%则:
Vres_FD = 1此时Vernier输出不应该继续使用。
22. 最后用一张逻辑图总结角度算法
┌──────── SENT1A
│
│ 0~4095
↓
预处理
↓
A1_pc
│
│
├──────────────┐
│ │
│ rollover
│ │
SENT2A → 预处理 → A2_pc ──────────┘
│
↓
两路40°角融合
↓
mean_OS2IS
↓
PRIMARY TRACK
周期 = 40°
│
│
│
│ SENT5
│ ↓
│ SENT检查
│ ↓
│ ch_MT_module
│ ↓
│ SECONDARY TRACK
│ 周期 = 296°
│ │
└────┬────┘
↓
Normalization
↓
vd = primary-secondary
↓
判断属于哪个40°区间
↓
Vernier Range
N=0~36
↓
Absolute = N×40° + FineAngle
↓
0~1480°
↓
Offset
↓
-740~+740°
↓
实际有效约±738°23. 扭矩算法总结图
扭杆
IS ───────── OS
θIS-θOS
│
↓
Differential Angle
SENT1B
│
↓
×2
↓
-4095
↓
T1_pc
-6~+6°
│
│
├─────────────────┐
│ │
│ ↓
│ 一致性检查
│ ↑
│ │
SENT2B │
│ │
↓ │
×2 │
↓ │
4095-x │
↓ │
T2_pc ──────────────┘
-6~+6°
│
↓
(T1+T2)/2
↓
Differential Angle
↓
torque_out
↓
扭杆刚度/标定
↓
Torque [Nm]24. 最核心的一句话
如果把整套算法压缩成最容易记忆的一句话:
角度
两路TxA
→ 得到高精度的40°细分角;
SENT5
→ 得到296°粗分角;
40° + 296°
→ Vernier判断当前属于第几个40°周期;
最终:
Absolute Angle
= 区间号 × 40° + 细分角。扭矩
两路TxB
→ 分别得到同一个扭杆差分角的两个冗余测量;
将反向通道翻转后:
diff = (T1 + T2)/2;
再根据扭杆刚度/标定关系:
Torque = f(diff)。所以:
“两路TxA + SENT5”里,TxA解决的是“精确到哪里”,SENT5解决的是“到底在哪个周期”;两路TxB则是对同一个扭杆差分角进行冗余测量、方向统一、平均和一致性监控。
这两种“两路组合”的目的其实是不一样的。
还没有评论,登录后留下第一条讨论。