1. 项目概述与核心价值
如果你正在为你的嵌入式设备寻找一种能提供细腻、精准触觉反馈的解决方案,那么德州仪器(TI)的DRV2605触觉驱动器绝对是一个绕不开的经典选择。我接触过不少触觉驱动芯片,从简单的马达驱动到复杂的多通道方案,DRV2605以其高度集成、易于使用和效果出众的特点,在消费电子和工业HMI领域占据了重要地位。它不仅仅是一个马达驱动器,更是一个内置了智能波形引擎和丰富效果库的“触觉协处理器”。
简单来说,DRV2605的核心价值在于它把复杂的触觉波形生成和电机控制算法都封装在了一颗小小的芯片里。开发者无需从零开始设计PWM波形去模拟“点击”、“双击”或“震动”的感觉,而是直接调用芯片内部ROM中预存的123种高质量效果,或者通过实时接口(RTP)流式传输自定义波形。更重要的是,它支持闭环反馈控制,无论是对于传统的ERM(偏心转子马达)还是更先进的LRA(线性谐振执行器),都能自动补偿因电压波动、温度变化或执行器老化带来的性能差异,确保每一次触觉反馈的力度和质感都保持一致。这种一致性,对于提升产品的整体用户体验至关重要。
2. DRV2605核心工作模式深度解析
DRV2605提供了多种工作模式以适应不同的应用场景和信号源。理解这些模式是进行有效编程和寄存器配置的基础。芯片通过配置寄存器0x01的MODE[2:0]位来选择模式,每种模式都对应着不同的信号输入和处理逻辑。
2.1 内部触发与波形序列器模式(MODE=0)
这是最常用、也是最“傻瓜式”的模式。在此模式下,你需要预先将想要播放的波形效果编号(1-123)写入波形序列器寄存器(0x04至0x0B)。每个寄存器可以存放一个波形ID或一个延时指令。配置完成后,你只需要向GO寄存器(0x0C)的GO位写1,芯片就会自动按顺序播放序列器中的效果。
为什么选择这个模式?它的优势在于极低的MCU开销。你可以在系统初始化时,就将复杂的触觉效果(例如“短震-停顿-长震-强震”这样的组合)一次性编排好存入序列器。在需要触发时,MCU仅需进行一次I2C写操作(设置GO位),剩下的播放、时序控制全部由DRV2605独立完成,MCU可以进入休眠或处理其他任务,非常节能。这对于电池供电的物联网设备或需要快速响应的交互场景特别有用。
2.2 外部触发模式(MODE=1 边沿, MODE=2 电平)
这两种模式将触发的控制权交给了硬件引脚IN/TRIG。在边沿模式下(MODE=1),IN/TRIG引脚上的一个上升沿会触发GO位,开始播放波形序列;如果在播放完成前出现第二个上升沿,则会取消当前播放。在电平模式下(MODE=2),GO位会跟随IN/TRIG引脚的电平,高电平播放,低电平停止。
应用场景与选择考量:外部触发模式通常用于简化系统设计,或者当主控MCU没有富余的I2C接口时。例如,你可以用一个GPIO引脚直接连接到DRV2605的IN/TRIG,用简单的数字逻辑或另一个低速处理器来触发复杂的触觉效果。选择边沿还是电平模式,取决于你的控制逻辑。边沿模式适合脉冲触发,而电平模式则允许你通过拉高/拉低引脚来随时开始/停止效果,提供了更灵活的手动控制。
2.3 实时播放模式(RTP, MODE=5)
RTP模式是DRV2605最强大的功能之一。在此模式下,芯片不再播放预存的效果库,而是实时地将你通过I2C总线写入RTP_INPUT寄存器(0x02)的8位数值,直接转换为驱动执行器的模拟信号。
运作机制与优势:你可以把它想象成一个“触觉DAC”。通过I2C持续地、高速地更新RTP_INPUT的值(例如,发送一个正弦波或自定义包络的数据流),就能生成任意形状的触觉波形。这为你实现完全自定义的、动态变化的触觉效果打开了大门,比如模拟水流、粗糙表面纹理或随音频节奏变化的震动。
注意:RTP模式对I2C总线速率和MCU的实时性有较高要求。为了获得平滑的触感,通常需要以至少1kHz的频率更新数据。如果总线负载较重或MCU忙于其他任务,可能会导致触觉效果出现卡顿或阶梯感。
2.4 PWM与模拟输入模式(MODE=3)
当MODE[2:0]设置为3时,IN/TRIG引脚被激活为信号输入引脚。具体是解析为PWM信号还是模拟电压信号,则由N_PWM_ANALOG位(寄存器0x1D的Bit 1)决定。
- PWM输入(N_PWM_ANALOG=0):芯片测量输入PWM波的占空比,并将其映射为输出驱动强度。0%占空比对应最小驱动(或刹车,取决于
BIDIR_INPUT设置),100%占空比对应最大驱动。 - 模拟输入(N_PWM_ANALOG=1):芯片测量
IN/TRIG引脚上的直流电压(0-1.8V),并将其线性映射为输出驱动强度。1.8V对应100%驱动。此时,通常需要将AC_COUPLE位(寄存器0x1B的Bit 5)设为0,除非你使用了交流耦合电容。
模式选择逻辑:这个模式非常适合已有PWM或模拟信号源的系统集成。例如,你可以用一个低分辨率DAC的输出直接连接到DRV2605,用模拟电压来控制震动强度;或者用一个硬件PWM发生器来驱动,减轻MCU的负担。
2.5 音频转振动模式(MODE=4)
这是一个非常有趣的功能模式。在此模式下,IN/TRIG引脚接受一个AC耦合的音频信号(建议串联1μF电容)。DRV2605内部会对音频信号进行峰值检测和滤波,然后将其幅度映射为驱动强度,从而将声音的节奏和强度实时转化为触觉震动。
关键配置:除了设置MODE=4,还必须同时设置AC_COUPLE=1和N_PWM_ANALOG=1。你还可以通过ATH_FILTER(设置低通滤波频率,滤除高频噪声)和ATH_PEAK_TIME(设置峰值保持时间,影响震动反应的“粘滞感”)等寄存器来微调转换效果。ATH_MIN_INPUT和ATH_MAX_INPUT寄存器则用于设置输入音频信号的动态范围,避免背景噪声引起误触发或信号过载。
实际应用心得:这个模式在游戏手柄(将爆炸声、撞击声转化为震动)和多媒体设备中很有用。但要注意,简单的音频转振动可能产生粗糙的“嗡嗡”感。为了获得更好的体验,通常需要对源音频信号进行预处理,例如加强低频、压缩动态范围,或者结合RTP模式播放一个基础震动波形,再用音频信号来调制其强度。
3. 寄存器配置详解与实战指南
仅仅知道模式还不够,精细化的寄存器配置才是发挥DRV2605全部潜力的关键。下面我将对几个核心寄存器组进行拆解,并分享实际配置中的经验和坑点。
3.1 执行器类型与基础配置(寄存器 0x1A, 0x16, 0x17)
在开始任何操作前,必须正确告知芯片你连接的是哪种执行器。
N_ERM_LRA(Reg 0x1A, Bit 7):这是最重要的设置之一。0代表ERM(直流马达),1代表LRA(线性谐振器)。设置错误会导致驱动波形完全不对,甚至可能损坏LRA。RATED_VOLTAGE(Reg 0x16):设定执行器的额定电压。对于闭环模式,这是计算驱动增益的基准。其值通过公式计算:值 = (Vrated * 255) / 5.3。例如,一个额定电压为3.0V的ERM,计算值为(3.0 * 255) / 5.3 ≈ 144,转换为十六进制0x90。OD_CLAMP(Reg 0x17):过驱动钳位电压。在闭环模式下,为了快速启动执行器,内部算法可能会施加超过RATED_VOLTAGE的电压。此寄存器限制了这个过冲电压的最大值,保护执行器。计算公式与RATED_VOLTAGE相同,通常设置为比额定电压高20%-50%。对于开环模式,此寄存器直接决定了输出的最大电压幅值。
配置流程建议:上电初始化后,第一步就是配置这三个寄存器,然后立即执行自动校准。校准过程会基于你设定的额定电压和实际连接的执行器,自动测算出最优的补偿参数并写入A_CAL_COMP和A_CAL_BEMF寄存器。跳过校准直接使用,触觉效果会大打折扣。
3.2 波形序列器的编程艺术(寄存器 0x04 - 0x0B)
波形序列器是编排复杂触觉效果的核心。每个寄存器(0x04-0x0B)的8位数据有两种解读方式,由最高位(Bit 7)决定:
- Bit 7 = 0:低7位(Bit 6-0)代表波形库中的效果ID,范围是1-123。0是一个特殊值,代表序列结束。
- Bit 7 = 1:低7位代表一个延时,延时时间 =
WAV_FRM_SEQ[6:0]的值 × 10ms。这允许你在两个效果之间插入精确的停顿。
编排示例:假设你想实现“强震一下(效果#12),等待50ms,然后连续两次短促点击(效果#1)”。
- 寄存器
0x04: 写入0x0C(效果#12)。 - 寄存器
0x05: 写入0x85(Bit7=1表示延时,低7位0x05=5, 5*10ms=50ms)。 - 寄存器
0x06: 写入0x01(效果#1)。 - 寄存器
0x07: 写入0x01(效果#1)。 - 寄存器
0x08: 写入0x00(序列结束)。
实操技巧:你可以预先定义多个常用的效果序列在MCU的内存中,根据不同交互事件(如按键、通知、警报)快速通过I2C写入序列器寄存器组。注意,写入后需要触发GO位(0x0C)的上升沿才能开始播放。在播放过程中,你仍然可以修改后续尚未播放的序列寄存器,实现动态效果流。
3.3 反馈控制与环路优化(寄存器 0x1A, 0x1B, 0x1C)
对于闭环模式,这几个寄存器控制着驱动算法的“性格”,直接影响触觉的锐利度、稳定性和力度感。
FB_BRAKE_FACTOR[2:0](Reg 0x1A, Bit 6-4):刹车增益因子。当算法检测到需要刹车(快速停止马达)时,会施加一个反向电压。这个参数决定了刹车力度相对于正常驱动力的倍数。默认值4(4x)适用于大多数情况。增大它可以让刹车更“急停”,感觉更干脆,但过大可能导致不稳定(马达异响);减小它则刹车柔和。LOOP_GAIN[1:0](Reg 0x1A, Bit 3-2):环路增益。决定了控制系统纠正执行器速度(跟随目标波形)的快慢。高增益响应快,但容易过冲和振荡;低增益稳定,但响应迟钝,可能导致效果“绵软”。经验之谈:对于ERM,从默认的“中(01)”开始调整;对于LRA,如果感觉启动慢或力度不足,可以尝试调到“高(10)”,但需密切注意是否产生噪音。DRIVE_TIME[4:0](Reg 0x1B, Bit 4-0):这个参数对ERM和LRA意义不同。- 对LRA:它设置了对LRA共振频率的初始猜测周期。公式为
驱动时间(ms) = DRIVE_TIME[4:0] × 0.1 ms + 0.5 ms。理想值约为LRA共振周期的一半。例如,一个175Hz的LRA,周期约5.7ms,一半是2.85ms,代入公式反推DRIVE_TIME约为24。设置不准确会影响启动速度。 - 对ERM:它设置了反电动势(BEMF)的采样率。更短的驱动时间意味着更高的采样率和更快的响应,但需要更高的电源电压余量。通常使用默认值即可,除非你在低压下追求极致性能。
- 对LRA:它设置了对LRA共振频率的初始猜测周期。公式为
3.4 高级控制与输入配置(寄存器 0x1D)
这个寄存器包含了几个影响输入信号处理和驱动模式的关键位。
NG_THRESH[1:0](Bit 7-6):噪声门阈值。在PWM和模拟输入模式下,当输入信号幅度低于此阈值时,驱动器会将其视为噪声并关闭输出。这能有效防止因信号干扰导致的马达微小嗡鸣。如果你的信号很干净,可以禁用(00);如果有底噪,2%或4%是常用设置。DATA_FORMAT_RTP(Bit 3):RTP模式数据格式。0为有符号格式(-128~127),此时输入值0对应0输出,正负值对应不同方向的驱动;1为无符号格式(0~255),此时输入值被线性映射到输出强度。绝大多数应用场景下,使用无符号格式(设为1)更为直观和方便。LRA_DRIVE_MODE(Bit 2):LRA驱动模式。0为每周期更新一次驱动信号,输出波形对称;1为每周期更新两次,控制更精确。通常默认值0即可,除非你对LRA的制动相位有极高要求。LRA_OPEN_LOOP(Bit 0):LRA开环模式。通常应保持为0(自动谐振模式),让芯片自动跟踪并驱动在LRA的共振频率上,以获得最佳效率和力度。仅在需要强制以特定频率驱动LRA(且该频率非共振点)的特殊情况下,才设置为1,此时你需要通过PWM输入提供128倍于目标驱动频率的信号。
4. 完整驱动流程与代码实战
理论说再多,不如一行代码。下面我将以一个典型的STM32 MCU通过I2C驱动DRV2605连接LRA执行器的流程为例,展示关键步骤和代码片段(以HAL库为例)。
4.1 初始化与自动校准流程
这是确保DRV2605正常工作的最关键一步,顺序不能错。
- 硬件初始化:确保I2C通信正常,
IN/TRIG引脚根据模式配置为输入或输出,执行器正确连接到OUTP和OUTN引脚。 - 软件复位与唤醒:向模式寄存器(
0x01)写入0x80,触发设备复位(DEV_RESET位)。短暂延时后,写入0x00清除STANDBY位,使芯片进入待命状态。 - 配置执行器基础参数:
// 假设使用一个额定电压2.0V的LRA #define DRV2605_ADDR 0x5A // I2C地址 uint8_t data[2]; // 1. 设置为LRA模式 data[0] = 0x1A; // 寄存器地址 data[1] = 0xA0; // Bit7=1 (LRA), 其他位默认 (FB_BRAKE_FACTOR=4, LOOP_GAIN=中, BEMF_GAIN=20x) HAL_I2C_Master_Transmit(&hi2c1, DRV2605_ADDR, data, 2, HAL_MAX_DELAY); // 2. 设置额定电压 (2.0V)。计算: (2.0 * 255) / 5.3 ≈ 96 -> 0x60 data[0] = 0x16; data[1] = 0x60; HAL_I2C_Master_Transmit(&hi2c1, DRV2605_ADDR, data, 2, HAL_MAX_DELAY); // 3. 设置过驱动钳位电压,例如设为2.8V。(2.8*255)/5.3≈135 -> 0x87 data[0] = 0x17; data[1] = 0x87; HAL_I2C_Master_Transmit(&hi2c1, DRV2605_ADDR, data, 2, HAL_MAX_DELAY); // 4. 设置LRA驱动周期初始值。假设LRA共振频率为175Hz (周期5.7ms)。 // 驱动时间 ≈ 0.5 * 5.7ms = 2.85ms。 // 根据公式: Drive time (ms) = DRIVE_TIME[4:0] × 0.1 ms + 0.5 ms // 反推: DRIVE_TIME = (2.85 - 0.5) / 0.1 = 23.5 ≈ 24 (0x18) data[0] = 0x1B; data[1] = 0x93; // STARTUP_BOOST=1, AC_COUPLE=0, DRIVE_TIME=0x18 HAL_I2C_Master_Transmit(&hi2c1, DRV2605_ADDR, data, 2, HAL_MAX_DELAY); - 执行自动校准:
// 1. 设置模式寄存器为自动校准模式 (MODE=7) data[0] = 0x01; data[1] = 0x07; // MODE[2:0]=111b HAL_I2C_Master_Transmit(&hi2c1, DRV2605_ADDR, data, 2, HAL_MAX_DELAY); // 2. 触发GO位开始校准 data[0] = 0x0C; data[1] = 0x01; // GO=1 HAL_I2C_Master_Transmit(&hi2c1, DRV2605_ADDR, data, 2, HAL_MAX_DELAY); // 3. 等待校准完成 (GO位自动清零) uint8_t go_status = 0x01; while(go_status & 0x01) { HAL_I2C_Mem_Read(&hi2c1, DRV2605_ADDR, 0x0C, I2C_MEMADD_SIZE_8BIT, &go_status, 1, HAL_MAX_DELAY); HAL_Delay(1); // 短暂延时,避免频繁I2C查询 } // 4. 检查校准结果 (读取状态寄存器0x00的DIAG_RESULT位) uint8_t status; HAL_I2C_Mem_Read(&hi2c1, DRV2605_ADDR, 0x00, I2C_MEMADD_SIZE_8BIT, &status, 1, HAL_MAX_DELAY); if ((status & 0x08) == 0) { // DIAG_RESULT位为0表示成功 // 校准成功,可以读取A_CAL_COMP和A_CAL_BEMF寄存器查看结果(可选) } else { // 校准失败!检查硬件连接(执行器、电源)、额定电压设置是否正确。 } - 设置工作模式:校准成功后,将模式设置为所需的工作模式,例如内部触发模式(
MODE=0)。data[0] = 0x01; data[1] = 0x00; // MODE=0,内部触发模式 HAL_I2C_Master_Transmit(&hi2c1, DRV2605_ADDR, data, 2, HAL_MAX_DELAY);
4.2 播放预存波形效果
初始化完成后,播放效果就非常简单了。
void DRV2605_PlayEffectSequence(uint8_t *seq, uint8_t len) { // seq: 波形序列数组,每个元素为波形ID或带延时的指令 // len: 序列长度,最大为8 uint8_t data[2]; for (int i = 0; i < len && i < 8; i++) { data[0] = 0x04 + i; // 从序列器寄存器0x04开始 data[1] = seq[i]; HAL_I2C_Master_Transmit(&hi2c1, DRV2605_ADDR, data, 2, HAL_MAX_DELAY); } // 触发播放 data[0] = 0x0C; data[1] = 0x01; HAL_I2C_Master_Transmit(&hi2c1, DRV2605_ADDR, data, 2, HAL_MAX_DELAY); } // 使用示例:播放一个“强震-等待-短击”序列 uint8_t mySequence[] = {12, 0x85, 1}; // 效果12,延时50ms,效果1 DRV2605_PlayEffectSequence(mySequence, 3);4.3 RTP模式实时波形生成
在RTP模式下,你需要创建一个任务或定时器中断,以稳定的频率更新RTP_INPUT寄存器。
// 在系统初始化中切换到RTP模式 data[0] = 0x01; data[1] = 0x05; // MODE=5, RTP模式 HAL_I2C_Master_Transmit(&hi2c1, DRV2605_ADDR, data, 2, HAL_MAX_DELAY); data[0] = 0x1D; data[1] = 0x08; // 设置DATA_FORMAT_RTP=1 (无符号格式),其他位默认 HAL_I2C_Master_Transmit(&hi2c1, DRV2605_ADDR, data, 2, HAL_MAX_DELAY); // 定时器中断服务函数中 (例如1kHz) void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim) { if (htim == &htim2) { // 假设TIM2用于1kHz RTP更新 static uint8_t rtp_value = 0; static int8_t direction = 1; // 生成一个简单的三角波 rtp_value += direction; if (rtp_value >= 255 || rtp_value <= 0) { direction = -direction; } uint8_t data[2] = {0x02, rtp_value}; // 寄存器0x02: RTP_INPUT HAL_I2C_Master_Transmit(&hi2c1, DRV2605_ADDR, data, 2, 1); // 使用短超时 } }5. 常见问题排查与调试心得
即使按照手册操作,在实际项目中依然会遇到各种问题。下面是我总结的一些常见坑点和解决方法。
5.1 执行器完全不振动或振动微弱
这是最常见的问题,排查思路如下:
- 电源与硬件连接:
- 测量电压:首先用万用表确认
VDD引脚电压是否在推荐范围(2.5V-5.5V),并且有足够的电流供应能力(瞬间电流可能超过300mA)。电源纹波过大会导致驱动异常。 - 检查执行器:断开执行器,直接用可调电源或电池(在额定电压内)测试执行器本身是否完好。
- 确认接线:
OUTP和OUTN是否接反?对于LRA,极性通常不重要,但最好按数据手册连接。
- 测量电压:首先用万用表确认
- I2C通信:用逻辑分析仪抓取I2C总线波形,确认:
- 设备地址是否正确(通常是
0x5A或0x5B,取决于ADDR引脚电平)。 - 读写时序是否正确,是否有ACK应答。
- 尝试读取设备ID寄存器(
0x00),应返回0x60(DRV2605)或0xE0(DRV2605L)。
- 设备地址是否正确(通常是
- 模式与触发:
- 确认
MODE寄存器是否已正确设置(例如,想用内部触发却设成了外部触发模式)。 - 确认是否已清除
STANDBY位(0x01寄存器Bit 6为0)。 - 如果使用内部触发,写入序列器后,是否成功触发了GO位(
0x0C寄存器Bit 0)?
- 确认
- 自动校准失败:
- 校准前必须正确设置
N_ERM_LRA、RATED_VOLTAGE和OD_CLAMP。 - 校准过程中,执行器必须处于自由状态,不能有任何物理阻挡。
- 校准失败(
DIAG_RESULT=1)通常意味着执行器连接有问题、阻抗异常,或者设定的额定电压与实际严重不符。
- 校准前必须正确设置
5.2 振动效果异常(噪音、拖尾、力度不足)
- “滋滋”噪音或异常鸣叫:
- LRA特有:这通常是驱动频率没有准确锁定在LRA的共振点上。检查
LRA_OPEN_LOOP位是否为0(自动谐振模式)。确保LRA_PERIOD寄存器(0x22)在自动校准后已被正确写入(校准过程会测量并写入此寄存器)。如果问题依旧,尝试微调DRIVE_TIME寄存器。 - ERM/LRA均有:可能是环路不稳定。尝试降低
LOOP_GAIN或FB_BRAKE_FACTOR。检查电源电压是否充足,在大力度输出时是否被拉低。
- LRA特有:这通常是驱动频率没有准确锁定在LRA的共振点上。检查
- 刹车拖尾(停止缓慢):
- 增大
FB_BRAKE_FACTOR可以增强刹车力度。 - 检查
BIDIR_INPUT位(0x1CBit 7)。在闭环模式下,建议设置为1(双向输入模式),刹车由反馈控制,更智能。
- 增大
- 力度不足:
- 检查
RATED_VOLTAGE和OD_CLAMP设置是否过低。对于ERM,尝试切换到开环模式(ERM_OPEN_LOOP=1)并直接使用过驱动电压驱动,但要注意发热。 - 对于LRA,确保工作在自动谐振模式,这是效率最高的状态。
- 在RTP或PWM/模拟模式下,确认输入信号是否达到了满量程(255或100%占空比/1.8V)。
- 检查
5.3 功耗与发热问题
- 静态电流大:确认在不需要振动时,是否将芯片置入了待机模式(设置
STANDBY=1)。在待机模式下,电流可降至微安级。 - 工作时发热严重:
- 检查执行器的直流电阻是否在芯片驱动能力范围内(参考数据手册)。
- 过高的
OD_CLAMP电压或过长的持续驱动时间会导致芯片内部功耗增加。确保有良好的PCB散热设计,电源走线足够宽。 - 对于连续、高强度的振动场景,需要考虑芯片的 thermal shutdown 功能,并设计适当的占空比或热管理策略。
5.4 寄存器配置速查表
下表汇总了关键寄存器配置不当可能引发的现象及对策:
| 问题现象 | 可能相关的寄存器 | 检查与调整建议 |
|---|---|---|
| 完全无振动 | 0x01(MODE, STANDBY),0x0C(GO) | 确认模式正确,STANDBY=0,并成功触发GO。 |
| 振动非常弱 | 0x16(RATED_VOLTAGE),0x17(OD_CLAMP),0x1A(N_ERM_LRA) | 检查额定电压设置是否正确,执行器类型是否选对。 |
| LRA有“滋滋”声 | 0x1D(LRA_OPEN_LOOP),0x1B(DRIVE_TIME),0x22(LRA_PERIOD) | 确保LRA_OPEN_LOOP=0,检查校准后LRA_PERIOD值,微调DRIVE_TIME。 |
| 刹车慢,有拖尾感 | 0x1A(FB_BRAKE_FACTOR),0x1C(BIDIR_INPUT) | 适当增大FB_BRAKE_FACTOR,确保BIDIR_INPUT=1(闭环时)。 |
| 振动生硬,有撞击感 | 0x1A(LOOP_GAIN, FB_BRAKE_FACTOR) | 尝试降低LOOP_GAIN和FB_BRAKE_FACTOR。 |
| RTP模式效果不平滑 | I2C通信速率,更新频率 | 提高I2C时钟频率(如400kHz),确保RTP数据更新速率(>500Hz)。 |
| 音频输入模式无反应 | 0x01(MODE),0x1B(AC_COUPLE),0x1D(N_PWM_ANALOG) | 确认MODE=4,AC_COUPLE=1,N_PWM_ANALOG=1,且输入有AC耦合电容。 |
调试DRV2605,逻辑分析仪和示波器是你的好朋友。用逻辑分析仪看I2C通信序列,用示波器测量OUTP/OUTN之间的电压波形以及IN/TRIG引脚的输入信号,可以直观地定位绝大多数问题。最后,耐心阅读数据手册,理解每个参数背后的物理意义,是玩转这颗芯片的不二法门。