FOC系列(二)----继续学习DRV8301芯片

本文详细解读了DRV8301芯片的程序框图,包括BUCK电路、SPI通信、MOSFET驱动、电流采样等,重点介绍了三相栅极驱动器的功能、保护机制、SPI通信规范以及寄存器设置。文章还讨论了上电顺序和设备功能模式,以及典型应用电路和前文FOC系列的关联。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、 程序框图

   跟随上篇博客咱们继续往下看,下面是芯片内部的程序框图:

1.1 BUCK电路在这里插入图片描述

1.2 内部各电源

在这里插入图片描述

1.3 SPI通信、栅极驱动器和时序控制器

在这里插入图片描述

1.4 MOSFET驱动电路

在这里插入图片描述

1.5 电流采样放大电路

在这里插入图片描述

   数据手册只是给出了这一部分框图,但是没有更加详细的介绍,不过没关系,咱继续往下看,会逐渐补齐该部分的功能。

二、 功能描述

2.1 三相栅极驱动器

   每个半桥被配置为驱动两个n沟道MOSFET,一个用于高侧,一个用于低侧。半桥驱动器可以组合使用来驱动三相电机,也可以单独使用来驱动各种其他负载。
  峰值栅极驱动电流和内部死区时间可调,以适应各种外部MOSFET和应用。 峰值栅极驱动电流通过寄存器设置设置,死区时间通过DTC引脚上的外部电阻调整。将DTC引脚短接到地将提供最小死区时间(50ns)。在开关转换期间,高侧和低侧mosfet之间存在内部手抖,以防止电流穿过。
三相栅极驱动器可以提供高达30mA的平均栅极驱动电流。
  每个MOSFET栅极驱动器都有一个VDS感测电路,用于过流保护。当使能MOSFET时,感测电路测量从漏极(D)到外部MOSFET源极(S)的电压 V D S V_{DS} VDS。将 V D S V_{DS} VDS与程序设定的跳闸点进行比较,以确定是否发生过流事件。高侧感测位于PVDD1和SH_X引脚之间。低侧感测位于SH_X和SL_X引脚之间。
   DRV8301允许通过 寄存器设置进行6-PWM和3-PWM控制:
在这里插入图片描述
   下面是官方给出的外部MOSFET山及驱动电路各元器件的推荐值:
在这里插入图片描述

2.2 电流放大器

   DRV8301的电流放大器有四个可编程的增益设置通过SPI寄存器。这是10,20,40,80V/V。偏置设置为参考引脚(REF)上电压的一半。为了最小化直流偏置和漂移过温,通过DC_CAL引脚或SPI寄存器提供了一种校准方法。
   电流并联放大器的输出可计算为: V O = V R E F 2 − G × ( S N X − S P X ) V_O=\frac{V_{REF}}{2}-G×(SN_X-SP_X) VO=2VREFG×(SNXSPX)
   • V R E F V_{REF} VREF是参考电压(REF引脚)
   •G是放大器的增益(10,20,40或80V/V)
   • S N X SN_X SNX S P X SP_X SPX是通道x的输入,SPX应连接到检测电阻的接地侧,以获得最佳的共模抑制。
   在此处请注意哈(这个地方我对数据手册出现了一个疑惑),一般来说,N表示 N e g a t i v e Negative Negative,P表示 P o s i t i v e Positive Positive,所以感觉上面的公式应该是 V O = V R E F 2 − G × ( S P X − S N X ) V_O=\frac{V_{REF}}{2}-G×(SP_X-SN_X) VO=2VREFG×(SPXSNX),但是看完数据手册发现,人家就是这样定义的,咱们把N当成正就好,当然这个问题不大:
在这里插入图片描述
在这里插入图片描述

2.3 保护功能

   这一部分主要是介绍一下过流、过压保护之累的功能,我们只看一些比较关键的点即可:
   当电压超过电压阈值时触发过流保护功能。电压阈值通过SPI寄存器编程: V D S = I D S × R D S ( o n ) V_{DS} = I_{DS} × R_{DS(on)} VDS=IDS×RDS(on)
   这里需要配合寄存器那边来看:
在这里插入图片描述
   如果你把控制寄存器2的OC_ADJ_SET 6到10位通过SPI设置为12,根据表可以看出 V d s ( V ) = 0.250 V_{ds(V)}=0.250 Vds(V)=0.250,这时再看你选择的MOSFET的 R D S ( o n ) R_{DS(on)} RDS(on)(即导通电阻,一般很小),假设为0.25Ω,那么根据 V D S = I D S × R D S ( o n ) V_{DS} = I_{DS} × R_{DS(on)} VDS=IDS×RDS(on)式,得出 I D S = 1 A I_{DS}=1A IDS=1A
   通过SPI寄存器可以设置四种不同的过流模式(OC_MODE):
     1. 电流限制模式在电流限制模式下, 设备在过流事件期间使用电流限制而不是设备关闭。在这种模式下,设备通过nOCTW引脚报告过流事件。nOCTW引脚将保持低电平。
   在电流限制模式下有两个电流控制设置。这些是由SPI寄存器中的一位设置的。默认模式为CBC (cycle by cycle)。
      ①CBC (Cycle by Cycle)模式:在CBC模式下, 检测到过电流的MOSFET将关闭,直到下一个PWM周期。
     ②Off-Time控制模式:在Off-Time模式下,检测到过流的MOSFET将在64µs的时间内关闭(由内部定时器设置)。如果在另一个MOSFET中检测到过流,计时器将复位另一个64µs周期,两个MOSFET将在持续时间内禁用。在此期间,可以通过相应的PWM周期恢复特定MOSFET的正常工作。
    2.OC闩锁关闭模式,当过流事件发生时,高侧和低侧mosfet将在相应的半桥中禁用。nFAULT引脚和nFAULT状态位将与检测到过电流的MOSFET的相关状态位一起断言。OC状态位将锁存,直到下一个SPI读取命令。nFAULT引脚和nFAULT状态位将锁存,直到通过GATE_RESET位或快速EN_GATE复位脉冲接收到复位。
      3和4模式分别为仅报告和禁用 ,这两个比较好理解,个人推荐限流模式的CRC模式。
   剩余的就是一些过压保护之类的,这里不再详细介绍了。

2.4 上电和关闭顺序

   在上电期间,所有栅极驱动输出都保持低电平 。栅极驱动器和电流放大器的正常工作可以通过将EN_GATE从低状态切换到高状态来启动。如果没有错误,DRV8301准备接受PWM输入。只要PVDD在功能区内,即使在栅极禁用模式下,栅极驱动器也始终具有对功率场效应管的控制。
   从SDO到VDD_SPI有一个内部二极管,所以VDD_SPI需要一直被供电到与其他SPI设备相同的功率水平(如果有来自其他设备的SDO信号)。在SDO引脚上出现任何信号之前,VDD_SPI电源应首先上电,并在SDO引脚上完成所有通信后关闭电源。
   该部分还是比较重要的,本人的芯片就是目前出现了一点问题,我怀疑和这个上电顺序可能有关,或者是出现了什么错误之类的。

三、设备功能模式

3.1 EN_GATE

   EN_GATE 低电平将使栅极驱动器、电荷泵、电流分流放大器和内部稳压块置于低功耗模式,以节省能源。在此状态期间不支持SPI通信,SPI寄存器将在完全EN_GATE重置后恢复到其默认设置。只要PVDD仍然存在,该器件将把MOSFET输出级置于高阻抗模式。
   当EN_GATE引脚从低到高时,它将经历一个上电序列,使能栅极驱动器、电流放大器、电荷泵、内部调节器等,并复位与栅极驱动器块相关的所有锁存故障。EN_GATE也将重置SPI表中的状态寄存器。当错误事件发生后EN_GATE被切换时,所有锁定的错误都可以被重置,除非错误仍然存在。
   当EN_GATE由高转低时,立即关断栅极驱动模块,因此栅极输出可以使外部场效应管处于高阻抗模式。然后,它将等待10µs,然后完全关闭其余块。通过切换EN_GATE引脚非常短的时间(小于10µs),可以实现快速故障复位模式。这将防止设备关闭其他功能块,如电荷泵和内部调节器,并带来更快和简单的故障恢复。
   EN_GATE引脚复位脉冲(高→低→高)不能只维持10到20µs。DRV8301具有从快速复位模式到完全复位模式的过渡区域,可以导致设备对外部输入无响应,直到满功率循环。如果期望在EN_GATE引脚上出现此周期的复位脉冲,则可以在引脚外部添加RC滤波器。
   重置所有故障的另一种方法是使用SPI命令(RESET_GATE),它只会重置门驱动程序块和所有SPI状态寄存器,而不会关闭其他功能块。

3.2 DTC

   死区时间可通过DTC引脚编程。从DTC到地应接一个电阻来控制死区时间。死区时间控制范围为50ns ~ 500ns。短的DTC引脚接地将提供最小的死区时间(50ns)。电阻范围为0至150 kΩ。死区时间在此电阻范围内线性设置。

3.3 VDD_SPI

   VDD_SPI是为SDO引脚供电的电源。它必须连接到MCU用于其SPI操作的相同电源(3.3 V或5 V)。
   在上电或下电瞬态过程中,VDD_SPI引脚可能在短时间内为零电压。在此期间,来自系统中任何其他设备的SDO引脚不应出现SDO信号 ,因为它会导致DRV8301中的寄生二极管从SDO传导到VDD_SPI引脚作为短路。在系统电源顺序设计中应考虑并避免这一问题。

四、SPI通信

4.1 DRV8301的SPI

   DRV8301 SPI作为 S l a v e Slave Slave工作。SPI输入(SDI)数据格式由一个16位的字、1个读写位、4个地址位和11个数据位组成。SPI输出(SDO)数据格式由一个1个帧故障位、4个地址位和11个数据位组成。当帧无效时,帧故障位设为1,剩余位移出为0。
   一个有效的帧必须满足以下条件:
    •当nSCS变低时,时钟必须为低。
    •应该有16个完整时钟周期。
    •当nSCS高时,时钟必须低

4.2 数据格式

   咱们废话少说,直接看数据格式:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
   “对于发送给SDI的READ命令(第n个周期),SDO将在下一个周期中使用指定地址的数据进行响应。(N+1)对于发送给SDI的WRITE命令(第N个周期),SDO将在下一个周期(N+1)中响应状态寄存器1 (0x00)中的数据。”
   上面的话通俗来说,你这时候给寄存器写一个值,他会在下个周期把这个寄存器的值返回给你。
   SDI输入字(W0)的MSB位是一个读写位。当W0 = 0时,输入字为写命令。当W0 = 1时,输入字为读命令。

4.3 寄存器

   下图为四个寄存器的地址:
在这里插入图片描述

4.3.1 状态寄存器

在这里插入图片描述

4.3.2 控制寄存器

在这里插入图片描述
   注:数字上(1)的都是默认值。
在这里插入图片描述
   过流保护的阈值设置前面已经详细介绍过了,下面是寄存器设置的值:
在这里插入图片描述
   如果IC预期在6-V至8-V范围内工作,请勿使用设置28、29、30、31。

五、典型应用电路

在这里插入图片描述
在这里插入图片描述

六、往期回顾

FOC系列(一)----DRV8301芯片的学习

03-26
### 关于 DRV8301 的数据表、原理图及应用电路 DRV8301 是一款专为三相电机驱动设计的栅极驱动器集成电路 (IC),其功能类似于 DRV8303 和其他同类产品。以下是有关 DRV8301 的详细信息: #### 数据表概述 DRV8301 提供了全面的数据表支持,其中包含了电气特性、工作条件、封装尺寸以及其他重要参数的信息。这些文档通常由制造商发布,并且可以在线获取。通过查阅数据表,用户可以获得以下关键信息: - **输入电压范围**:DRV8301 支持较宽的工作电压范围,适合多种电源环境下的操作[^3]。 - **最大输出电流能力**:该器件能够提供足够的驱动电流来控制大功率 MOSFET 或 IGBT。 - **保护机制**:内置短路保护和热关断等功能提高了系统的可靠性。 #### 原理图说明 DRV8301 的典型应用电路包括但不限于以下几个方面: - 集成了三个独立的半桥驱动通道,每一个都可以分别配置成高边或低边驱动模式以适应不同的负载情况。 - 输入信号兼容标准逻辑电平,便于微控制器或其他数字设备直接连接并发送PWM波形给定子绕组通断指令。 下面展示了一个简化版的应用实例代码片段用于演示如何初始化一个基于C语言平台上的定时器产生周期性的脉冲宽度调制(PWM)信号: ```c #include <stm32f4xx_hal.h> TIM_HandleTypeDef htim; void MX_TIM_Init(void){ __HAL_RCC_TIM2_CLK_ENABLE(); TIM_MasterConfigTypeDef sMasterConfig; TIM_OC_InitTypeDef sConfigOC; htim.Instance = TIM2; htim.Init.Prescaler = 8399; // Set prescale value according to system clock frequency. htim.Init.CounterMode = TIM_COUNTERMODE_UP; htim.Init.Period = 999; // Define duty cycle period here as needed. HAL_TIM_PWM_Init(&htim); sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET; sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE; HAL_TIMEx_ConfigCommutationEvent(&htim, &sMasterConfig); sConfigOC.OCMode = TIM_OCMODE_PWM1; sConfigOC.Pulse = 500; // Adjust pulse width accordingly based on desired load behavior. sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH; sConfigOC.OCFastMode = TIM_OCFAST_DISABLE; HAL_TIM_PWM_ConfigChannel(&htim,&sConfigOC,TIM_CHANNEL_1); } int main(){ HAL_Init(); SystemClock_Config(); MX_GPIO_Init(); MX_TIM_Init(); HAL_TIM_PWM_Start(&htim,TIM_CHANNEL_1); while(1){}; } ``` 此段程序实现了利用STM32系列单片机生成特定频率与占空比的PWM信号的功能,这正是为了配合像DRV8301这样的马达驱动芯片而编写的基础框架之一。 #### 应用电路详解 实际部署时,除了基本的门级驱动外还需要考虑额外的因素比如隔离措施防止干扰影响到敏感元件正常运作;另外也要注意散热管理因为持续运行可能会导致温度上升从而降低整体效能甚至损坏硬件组件。因此,在构建具体实施方案之前应当仔细阅读官方推荐的设计指南并与现有项目需求相结合做出适当调整。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

致虚守静~归根复命

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值