😶🌫️说在最前面
笔者计划使用一块使用到STM32F407控制芯片与DRV8323s驱动芯片的板子,驱动BLDC。了解到需要使用SPI通信来配置DRV8323s驱动芯片,配置过程中涉及DRV8323数据手册中提及的几个寄存器,故写此文做个记录。 另外,DRV8323芯片和DRV8302、DRV8303、DRV8353都有极大的相似之处,可以相互参考借鉴。
研究学习过程中,感觉能找到的资料不多,这里首先感谢一位大佬的帖👉CSDN文章:STM32G4系列通过SPI配置DRV8353S驱动芯片,给了我很大帮助!
🕶 概述
本文主要记录分析各个寄存器 各Bit 的功能含义。
关于寄存器的配置,详见数据手册英文版👉P58 –【8.6.2 Control Registers】👈(中文版PDF位置基本相同)。本文关于寄存器的表格截图均来源于此。
附TI官网数据手册下载链接: drv832x-Eng、drv832x-中文版。
对寄存器操作的基本数据格式:
SPI 输入数据 (SDI) 字有 16-bit,其中 5-bit 命令和 11-bit 数据。 命令位中:读操作(B15) W0 = 1,写操作(B15) W0 = 0;(B14~B11) A3~A0是地址位。
SPI 输出数据 (SDO) 字有 16-bit,其中前 5-bit 是无关位,后 11-bit 是寄存器数据。
地址0x00和0x01为只读寄存器,指示故障状态,此处略。对照表格看即可。
接下来对照表格,梳理一下从地址0x02到0x06寄存器的情况。
🕶 (address = 0x02) Driver Control Register 驱动控制寄存器 8.6.2.1
寄存器类型:R/W,读或写。
🌌 Add02 - Bit10 - Reserved
保留位,必须按要求来。
Bit10 - Reserved = 0b。
🌌 Add02 - Bit9 - DIS_CPUV
设置充电荷泵UVLO故障是否开启。
这里选择默认值Bit9 - DIS_CPUV = 0b,开启。
🌌 Add02 - Bit8 - DIS_GDF
设置栅极驱动故障是否开启。
这里选择默认值Bit8 - DIS_GDF = 0b,开启。
🌌 Add02 - Bit7 - OTW_REP
设置nFAULT或FAULT位上是否报告OTW热警告。
这里选择默认值Bit7 - OTW_REP = 0b,不报告。
🌌 Add02 - Bit6+Bit5 - PWM_MODE
设置PWM控制模式。详见👉P30 -【8.3.1.1 PWM Control Modes】👈。
这里选择默认值Bit6+Bit5 - PWM_MODE = 00b,采用6x PWM Mode。
🌌 Add02 - Bit4 - 1PWM_COM
选择1x PWM模式时是同步整流还是异步整流。
因为没选1x PWM mode,所以就先保留默认值Bit4 - 1PWM_COM = 0b。
🌌 Add02 - Bit3 - 1PWM_DIR
在1x PWM模式下,此位与INHC(DIR)输入进行“或”运算。
因为没选1x PWM mode,所以就先保留默认值Bit3 - 1PWM_DIR = 0b。
🌌 Add02 - Bit2 - COAST
向该位写入1,使所有MOSFET处于Hi-Z状态(high-impedance,高阻抗状态)。
选择默认值Bit2 - COAST = 0b,不进入高阻抗状态。
🌌 Add02 - Bit1 - BRAKE
以在1x PWM模式下,将1写入该位,导通所有三个低侧MOSFET。该位与INLC(BRAKE)输入进行“或”运算。
选择默认值Bit1 - BRAKE = 0b。
🌌 Add02 - Bit0 - CLR_FLT
将1写入该位以清除锁存的故障位。此位在写入后自动复位。
要用到时再写1清除吧,初始时Bit0 - CLR_FLT = 0b。
🕶 (address = 0x03) Gate Drive HS Register 高桥臂栅极控制寄存器 8.6.2.2
寄存器类型:R/W,读或写。
🌌 Add03 - Bit10+Bit9+Bit8 - LOCK
写入110b以通过忽略除0x02地址Bit0-2之外的后续寄存器写入来锁定设置。写入110b以外的任何序列在解锁时都没有效果。
将011b写入该寄存器以解锁所有寄存器。写入011b以外的任何序列在锁定时都没有效果。
选择默认值Bit10+Bit9+Bit8 - LOCK = 011b,解锁所有寄存器,因为可能我们还是想在后续寄存器中进行默认以外的配置(我的理解)。
🌌 Add03 - Bit7+Bit6+Bit5+Bit4 - IDRIVEP_HS (IDRIVE-P-HS)
栅极驱动电流IDRIVE-P的选值是基于外部MOSFET的栅极到漏极电荷以及输出端的目标上升和下降时间来选择的。需要结合自己板子上MOSFET管的数据手册中的参数,计算决定。详见👉P65 -【9.2.1.2.2 IDRIVE Configuration】👈。
P对应rise time,N对应fall time。HS对应高侧,LS对应低侧。
结合求解,这里选择默认值Bit7+Bit6+Bit5+Bit4 - IDRIVEP_HS = 1111b,IDRIVE-P-HS = 1000 mA。
🌌 Add03 - Bit3+Bit2+Bit1+Bit0 - IDRIVEN_HS (IDRIVE-N-HS)
同前,详见👉P65 -【9.2.1.2.2 IDRIVE Configuration】👈。
P对应rise time,N对应fall time。HS对应高侧,LS对应低侧。
结合求解,这里选择默认值Bit3+Bit2+Bit1+Bit0 - IDRIVEN_HS = 1111b,IDRIVE-N-HS = 2000 mA。
🕶 (address = 0x04) Gate Drive LS Register 低桥臂栅极控制寄存器8.6.2.3
寄存器类型:R/W,读或写。
🌌 Add04 - Bit10 - CBC
逐周期运行。在重试OCP_MODE中,对于VDS_OCP和SEN_OCP,当给出PWM输入时,故障会自动清除。
参考默认值,Bit10 - CBC = 1b。
🌌 Add04 - Bit9+Bit8 - TDRIVE (Gate Driver Fault, GDF)
详见👉P49 -【8.3.6.5 Gate Diver Fault (GDF)】👈。
如果tDRIVE 时间后外部MOSFET栅极上的电压没有进行相应的增减变化,则会视为栅极驱动器故障。(个人推测这个没有变化的意思可能是和控制信号结合起来来看的,否则单纯的tDRIVE 时间内不变就故障对PWM的频率要求得太高了点。)
参考默认值,Bit9+Bit8 - TDRIVE = 11b,tDRIVE = 4000ns。
🌌 Add04 - Bit7+Bit6+Bit5+Bit4 - IDRIVEP_LS (IDRIVE-P-LS)
同前一地址寄存器Gate Drive HS说明,详见👉P65 -【9.2.1.2.2 IDRIVE Configuration】👈。
P对应rise time,N对应fall time。HS对应高侧,LS对应低侧。
结合求解,这里选择默认值Bit7+Bit6+Bit5+Bit4 - IDRIVEP_LS = 1111b,IDRIVE-P-LS = 1000 mA。
🌌 Add04 - Bit3+Bit2+Bit1+Bit0 - IDRIVEN_LS (IDRIVE-N-LS)
同前,详见👉P65 -【9.2.1.2.2 IDRIVE Configuration】👈。
P对应rise time,N对应fall time。HS对应高侧,LS对应低侧。
结合求解,这里选择默认值Bit3+Bit2+Bit1+Bit0 - IDRIVEN_LS = 1111b,IDRIVE-N-HS = 2000 mA。
🕶 (address = 0x05) OCP Control Register 过流保护控制寄存器 8.6.2.4
寄存器类型:R/W,读或写。有关于MOS管VDS 过流保护的功能。👉对应数据手册:P48 -【8.3.6.3 MOSFET V_DS Overcurrent Protection (VDS_OCP)】👈。
🌌 Add05 - Bit10 - TRETRY
设置overcurrent retry time过流保护重试时间,经过tRETRY 时间后自动重试。👉对应数据手册:P48 -【8.3.6.3.2 V_DS Automatic Retry】& P49 -【8.3.6.4.2 V_SENSE Automatic Retry】👈。
具体是VDS还是VSENSE模式,取决了下一part地址0x06的CSA控制寄存器中,Bit 10-CSA_FET和8-LS_REF的设置。
这里参考默认值,Bit10 - TRETRY = 0b,使 tRETRY = 4 ms。
🌌 Add05 - Bit9+Bit8 - DEAD_TIME
详见👉 P36 -【8.3.1.4.2】👈。死区时间是外部高侧MOSFET和低侧MOSFET切换之间的一段时间,以确保它们不会交叉导通并导致击穿。
需要结合自己板子上选用的MOSFET管开通和关断的 tdelay-on、tdelay-off、trise、tfall 具体值来选定。
我这里选择 Bit9+Bit8 - DEAD_TIME = 10b,使 tdead = 200 ns。
🌌 Add05 - Bit7+Bit6 - OCP_MODE
详见👉 P48 -【8.3.6.3 MOSFET VDS Overcurrent Protection】 & P49 -【8.3.6.4 VSENSE Overcurrent Protection】👈。选择VSENSE过流保护的几种工作模式。OCP_MODE位可以在四种不同模式下操作:VDS锁存关闭、VDS自动重试、仅VDS报告和VDS禁用。
这里选择默认值,Bit7+Bit6 - OCP_MODE = 01b,自动重试的模式。
🌌 Add05 - Bit5+Bit4 - OCP_DEG
详见👉P48 -【8.3.6.3 MOSFET VDS Overcurrent Protection】 & P49 -【8.3.6.4 VSENSE Overcurrent Protection】👈。设定VDS或VSENSE过流保护的deglitch time 去阈值时间 tOCP_DEG。
栅极驱动器实现可调VDS电压监测器,以检测外部功率MOSFET上的过电流或短路情况。当监测到的电压大于VDS跳闸点(VVDS_OCP)的时间超过去阈值时间(tOCP)时,检测到过电流情况,并根据设备VDS故障模式采取行动。
这里选择默认值,Bit5+Bit4 - OCP_DEG = 01b, tOCP_DEG = 4us。
🌌 Add05 - Bit3+Bit2+Bit1+Bit0 - VDS_LVL (VVDS_OCP)
内容与下一小节,Bit1+Bit0 - SEN_LVL 的设定类似。详见👉P48 -【8.3.6.3 MOSFET VDS Overcurrent Protection】👈和👉P16 - 表格中的VDS overcurrent trip voltage (VDS 过流跳闸电压) 项👈。在SPI设备上,通过VDS_LVL设置VDS过流保护触发电压阈值VDS_OCP。
如果启用的MOSFET两端的电压超过VVDS_OCP阈值的时间长于tOCP_DEG去阈值时间,则识别VDS_OCP事件,并根据OCP_MODE位执行操作。
这里选择默认值,Bit3+Bit2+Bit1+Bit0 - VDS_LVL = 1001b, VVDS_OCP = 0.75V。
🕶 (address = 0x06) CSA Control Register 电流检测放大器控制寄存器8.6.2.5
有关于低侧MOSFET管处电流检测放大器的功能与设置。详见👉P41 -【8.3.4 Low-Side Current Sense Amplifiers】👈。(此处暂留个小小的疑问:为什么是在低侧桥臂测,而不是高侧处?)
🌌 Add06 - Bit10 - CSA_FET (Current Sense Amplifier)
CSA电流检测放大器的模式设置,测流经电阻RSENSE的电流,或测VDS的电流。详见👉P44 -【8.3.4.4 MOSFET VDS Sense Mode】👈。这里截图中对于此Bit 的说明和中文版略有区别,但应该表达意思不变。Bit10 与 Bit8关联。
CSA_FET = 1b,LS = 1b,采用VDS测量模式,如右图所示。
CSA_FET = 0b,LS = 0b,采用RSENSE测量模式,如左图所示。
这里我选择Bit10 - CSA_FET = 0b,Bit8 - LS = 0b,采用RSENSE测量模式。
🌌 Add06 - Bit9 - VREF_DIV
关于是否加入偏执电压VREF / 2的选择。即是说,选择对于Bit10里的RSENSE测量模式,是进行双向电流检测操作,还是进行单向电流检测操作,具体详见👉P41 -【8.3.4.1 Bidirectional Current Sense Operation】&【8.3.4.2 Unidirectional Current Sense Operation】👈。两者区别在电路图左下角。
VREF_DIV = 1b,采用双向电流检测模式。可以测量反向电流。
VREF_DIV = 0b,采用单向电流检测模式。只能测量正向电流。
这里我选择Bit9 - VREF_DIV = 1b,采用双向电流检测模式。
🌌 Add06 - Bit8 - LS_REF
分析同前Bit10 处。
🌌 Add06 - Bit7+Bit6 - CSA_GAIN
选择current sense amplifier gain电流检测放大器增益。前述👉P41 -【8.3.4.1 Bidirectional Current Sense Operation】&【8.3.4.2 Unidirectional Current Sense Operation】👈中,公式里的GCSA的设定。
这里选择默认值Bit7+Bit6 - CSA_GAIN = 10b。
🌌 Add06 - Bit5 - DIS_SEN
感应电流故障是否启用。
这里选择默认值Bit5 - DIS_SEN = 0b,启用感应电流故障。
🌌 Add06 - Bit4 - CSA_CAL_A (Current Sense Amplifier A_Calibration)
选择是否开启自动偏移校准功能,详见👉P44 -【8.3.4.3 Auto Offset Calibration】👈。
为了最大限度地减少DC偏移,DRV8323和DRV8323R设备可以通过SPI寄存器(CSA_CAL_X)或CAL引脚执行自动偏移校准。启用校准后,放大器的输入短路,负载断开,放大器的增益(GCSA)更改为40 V/V设置。然后,放大器执行自动微调程序,以使输入偏移最小化。 启用校准后,自动微调程序需要100µs才能完成。 在此时间之后,如果需要由外部控制器进行进一步的偏移校准,则放大器的输入保持短路,负载保持断开,并且增益保持在40V/V。要完成偏移校准,应将CSA_CAL_X寄存器或CAL引脚调回到低位。
根据描述,想要在程序一开始完成A、B、C引脚的校准,因此先设为1b,至少等100µs校准结束后,再设0b。这里手册里似乎没有明说能不能三个脚同时校准,保险起见可以先后来一波100b、010b、001b、000b来完成,讲道理三个放大器独立,应该可以直接111b、000b一起校准。
如果不用校准,直接选择默认值Bit4 - CSA_CAL_A = 0b,不开自动偏移校准即可。
🌌 Add06 - Bit3 - CSA_CAL_B (Current Sense Amplifier B_Calibration)
同上。如果不用校准,直接选择默认值Bit3 - CSA_CAL_B = 0b。
🌌 Add06 - Bit2 - CSA_CAL_C (Current Sense Amplifier C_Calibration)
同上。如果不用校准,直接选择默认值Bit2 - CSA_CAL_C = 0b。文章来源:https://www.toymoban.com/news/detail-783219.html
🌌 Add06 - Bit1+Bit0 - SEN_LVL
在SPI设备上,通过SEN_LVL设置VSENSE过流保护触发电压阈值VSEN_OCP,具体如表所示。VSENSE过流保护详见👉P49 -【8.3.6.4 VSENSE Overcurrent Protection】👈。
这里选择默认值Bit1+Bit0 - SEN_LVL = 11b,VSEN_OCP = 1V。文章来源地址https://www.toymoban.com/news/detail-783219.html
到了这里,关于【DRV8323】电机驱动芯片寄存器配置指南,通过STM32F407的SPI通信配置的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!