SDV
软件定义汽车SOFTWARE-DEFINED VEHICLE NOTES
← 返回技术文章
TASGene4,772

HELLA TAS 4+2 GEN4 SENT协议

Hella TAS SENT角度与扭矩计算原理解析

1. 先说结论

这套 TAS(Torque and Angle Sensor,扭矩和角度传感器)实际上同时完成两件事:

  1. 测量扭杆两端的相对扭转量,用于得到转向扭矩;
  2. 测量输入轴的绝对转角,而且要求上电后不转方向盘也能够知道当前方向盘处于第几圈。

因此传感器不是简单地给 ECU 一个“角度值”和一个“扭矩值”,而是通过多路 SENT 输出若干原始/周期性信息,由 ECU 再组合计算。文档明确说明,传感器物理输出端并不直接提供最终的 torqueangle,最终的 torque_outangle_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
SENT5

SENT1A和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 = 37

ECU实现例中则保持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 value

16. 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) / 2

Hella实现里写成:

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则是对同一个扭杆差分角进行冗余测量、方向统一、平均和一致性监控。

这两种“两路组合”的目的其实是不一样的。

ATTACHMENTS

文章附件

20210708-TAS Gen4 SRS Spec_Draft_20201013.pdf登录后可下载 · 6.9 MB
DISCUSSION

评论与回复

0

还没有评论,登录后留下第一条讨论。