4、触觉反馈设计:线性马达与转子马达的区别,振动波形(Click、Tick、Buzz)的应用场景

触觉反馈,说白了就是让屏幕「会说话」。不是用耳朵听,而是用手指去「感觉」。在车机上,这一点尤其重要——你想想看,开车的时候眼睛得盯着路,耳朵得听着导航,唯一能腾出来的就是手指。

我做了这么多年车载HMI,最深的体会就是:好的触觉反馈,能让用户觉得这车机「有灵魂」。而这一切的基础,就是马达的选择和波形的设计。

4.1 线性马达 vs 转子马达:一个天一个地

先说说硬件层面的区别。我刚开始做车机那会儿,大部分方案用的还是转子马达。后来换了线性马达,那感觉,真的是回不去了。

对比项 转子马达(ERM) 线性马达(LRA)
工作原理 偏心转子旋转产生离心力 弹簧-质量块系统直线振动
响应速度 慢(启动/停止需50-100ms) 快(启动/停止约5-10ms)
振动精度 低,无法精确控制 高,可精确控制波形
功耗 较高 较低
寿命 机械磨损,寿命短 无机械接触,寿命长
成本

为什么会这样?转子马达就像一台老式风扇,你按开关,它得慢慢转起来才能有风。线性马达则像一根弹簧,你拨一下它立马就弹回来。这个响应速度的差异,在车机上就是「有没有质感」的分水岭。

我的经验:在车机项目中,如果预算允许,一定要上线性马达。转子马达那种「嗡嗡嗡」的拖尾感,在驾驶场景下很容易让用户觉得廉价,甚至产生烦躁情绪。

4.2 振动波形三剑客:Click、Tick、Buzz

选好了马达,接下来就是怎么「弹」的问题了。振动波形,就是马达振动的「节奏」和「力度」。我一般把它们分成三类:Click、Tick、Buzz。

4.2.1 Click:干脆利落的「咔哒」

Click 是最常用的波形。它模拟的是物理按键按下去那一瞬间的「咔哒」感。波形特点是:快速上升,快速衰减,整个时长控制在 10-20ms 以内。

我在项目中遇到过一个问题:用户反馈说「按了没感觉」。后来一查,是 Click 的波形峰值设得太低了。线性马达的驱动电压不够,导致振动幅度太小。嗯,这里要注意,Click 的峰值至少要达到马达额定电压的 80% 以上,才能产生清晰的触感。

// Click 波形示例(伪代码)
// 时长:15ms,峰值:100%
// 快速上升,快速衰减
click_waveform = {
    duration: 15,      // 毫秒
    amplitude: [0, 100, 80, 40, 10, 0],  // 百分比
    timestamps: [0, 2, 5, 8, 12, 15]     // 毫秒
}

应用场景:按钮点击、菜单选择、确认操作。说白了,任何需要「确认感」的地方,都用 Click。

4.2.2 Tick:轻柔的「点触」

Tick 比 Click 更轻、更短。它模拟的是「轻轻碰了一下」的感觉。波形特点是:幅度小,时长更短,通常在 5-10ms 以内。

你想想看,在车机上滑动列表的时候,如果每滑过一个项目都来一个 Click,那感觉就像在敲鼓,太吵了。Tick 就刚刚好——轻点一下,告诉你「嗯,滑到这里了」,但不打扰你。

// Tick 波形示例(伪代码)
// 时长:8ms,峰值:50%
// 轻柔、短促
tick_waveform = {
    duration: 8,
    amplitude: [0, 50, 30, 10, 0],
    timestamps: [0, 1, 3, 5, 8]
}

我的习惯:在列表滚动、滑块拖动、音量调节这些连续操作中,我全部用 Tick。用户不会觉得「震手」,但又能感知到每一步的反馈。

4.2.3 Buzz:持续的「嗡鸣」

Buzz 是持续性的振动,模拟的是「警告」或「持续状态」。波形特点是:幅度稳定,时长较长,通常在 100ms 以上,甚至可以持续几秒。

我曾经犯过一个错误:在倒车雷达报警时用了 Click。结果用户说「根本感觉不到」。后来改成 Buzz,配合距离变化调整振动强度,效果立竿见影。说白了,Buzz 是用来「提醒」的,不是用来「确认」的

// Buzz 波形示例(伪代码)
// 时长:500ms,峰值:70%
// 持续振动,可叠加强度变化
buzz_waveform = {
    duration: 500,
    amplitude: [0, 70, 70, 70, 70, 0],  // 中间保持恒定
    timestamps: [0, 10, 100, 400, 490, 500],
    // 可叠加强度变化:距离越近,振幅越大
    intensity_modulation: "distance_based"
}

避坑指南:我曾经在某个项目中,把 Buzz 用在了通知提醒上。结果用户觉得「太吵了」,因为 Buzz 的持续振动在驾驶过程中会让人分心。后来我改成了「短 Buzz + 声音提示」的组合方案。记住:Buzz 不要滥用,只在真正需要「持续提醒」的场景下使用,比如偏离车道、碰撞预警、倒车雷达。

4.3 三种波形的选择矩阵

为了方便你快速决策,我整理了一个选择矩阵。说白了,就是什么场景用什么波形,一目了然。

交互场景 推荐波形 说明
按钮点击 Click 确认操作已完成
列表滑动 Tick 轻触提示位置变化
滑块拖动 Tick 每步一轻触,不打扰
倒车雷达 Buzz(强度渐变) 距离越近,振动越强
车道偏离 Buzz(脉冲式) 短促重复,引起注意
通知提醒 Click + 声音 避免持续振动干扰
错误操作 Click(双次) 两次快速 Click 表示「不行」

一个小技巧:在车机开发中,我习惯把 Click、Tick、Buzz 做成三个基础 API。上层业务逻辑只需要调用「playClick()」「playTick()」「playBuzz()」就行。底层驱动负责具体的波形参数。这样解耦后,后期调参非常方便。

4.4 总结一下

触觉反馈设计,说白了就是两件事:选对马达,用对波形。线性马达是基础,没有它,再好的波形也出不来效果。Click、Tick、Buzz 是工具,用对了地方,用户会觉得「这车机真顺手」;用错了,用户只会觉得「这车机真烦人」。

我个人习惯在项目初期就定好触觉反馈的「设计语言」——什么操作对应什么波形,什么场景用什么强度。这样后期开发的时候,团队不会乱。你想想看,如果每个工程师都按自己的感觉来,那用户体验就变成「开盲盒」了。

嗯,这一章就到这里。下一章我们聊聊「视觉反馈与触觉反馈的协同设计」,说白了就是怎么让屏幕上的动画和手指的振动「对上节奏」。