目录
1. 引言
本篇主要侧重代码编写和功能实现,对于一些电气特性并未深入提及,可自行查看手册。
在调试过程中,由于硬件电路不方便测量和VM引脚接24V等诸多因素的影响,对于这款芯片给我的整体体验并不太好,尤其是芯片手册没有目录!(
这让博主查找时来回划滚轮),不过作为草案手册情有可原。吐槽是为了更好地进步,希望我们的国产芯片在不停地迭代中越来越好。
2. 芯片概述
NSD8308是一种多通道半桥驱动器,适用于汽车应用,包括暖通空调风门直流电机、侧视镜调节/折叠电机、通用继电器或其他LED。
芯片包括8个内部可配置的PWM发生器,使用SPI控制所有输出,可将多个设备同时挂载到一路SPI总线上,通过片选分别进行通信;NSD8308提供了诊断信息,包括正常操作、POR(Power On Reset 上电复位)、VM欠压/过压、过电流、过温保护和开路负载状态。
当EN输入为低或VDD低于POR阈值时,该设备具有低静态电流的睡眠模式。
引脚定义如下:
3. 功能描述
3.1 VM
VM为电源电压,给芯片提供了输出的最大电压,范围从4.5v到36v,典型情况下为13.5v电源。
- 当VM电源引脚电压下降到低于欠压阈值(Vuv)超过10us时,半桥输出OUTx关断。当VM上升到欠压阈值以上时,设备自动恢复运行。
- 当VM电源引脚电压上升超过过电压阈值(Vov)超过10us时,半桥输出OUTx关断。当VM在下降到低于Vov时,设备自动恢复运行。
GEN_CTRL_0寄存器的OVP_H位可以设置两个不同的VM输入过电压阈值,如下图:
3.2 VDD
VDD引脚可接受从3v到最大5.5v的宽电源范围,可与3.3v和5v系统电源兼容。
- 当VDD降至 (POR high threshold,2.3V~2.8V) 以下时,内部块、SPI接口和数字块将处于非活动状态,因此包括电荷泵和所有半桥驱动器都将关闭。
- 一旦VDD升高至 (POR high threshold , 2.5V~3V) 以上,内部数字将被重置,状态寄存器NPOR位被设置为0,并可通过SPI读出(如果RD_CLR_EN=1)或CLR_FLT=1命令清除为1。
3.3 EN
EN芯片使能引脚信号适用于所有输出通道。当它被驱动为低电平时,内部逻辑/寄存器被重置,电荷泵/所有输出被禁用,设备进入睡眠模式。
在VDD>V VDD_POR_H时,EN从低电平转换到高电平后,设备在完成内部POR和NPOR=0时进入睡眠模式。一旦设备从睡眠状态转移到正常操作状态,应等待一个TWAKE(150us)时间使电荷泵达到调节电压。
3.4 半桥输出
半桥驱动器可用于驱动直流电机或LED等通用电感/电阻负载,功率级输出(OUT1~OUT8)可以并联,以支持更高的负载电流。在NSD8308中,共有两种控制操作模式:
- SPI ON/OFF模式:不可调占空比的全电压输出模式(取决于VM电压,可理解为I/O)
- PWM模式:支持脉冲宽度调制的模式
注:对于并行使用输出口,建议在同一寄存器中选择半桥通道,即HB1、HB2、HB3、HB4 的HS/LS控制位都在HB_CTRL_1寄存器中,而HB5、HB6、HB7、HB8在HB_CTRL_2中;特别是对于pwm控制,为了确保HS(高边)或LS(低边)同时激活,必须将PWM激活置于PWM模式控制寄存器设置的最后一步。
3.5 SPI接口
关于NSD8308的SPI接口如下表:
参数 | 描述 |
---|---|
单帧长度 | 16 位,2个字节,MSB高位优先 |
帧保护 | 帧长度校验 |
支持最快频率 | 5MHz |
CPOL | 0 |
CPHA | 1 |
主/从配置 | 从机 |
通过上表可以了解到,芯片可最高支持5MHz的SPI通信,通信模式为模式1,即CPOL = 0(时钟在空闲时为0),CPHA = 1(在时钟信号SCK的第二个跳变沿采样)。
3.5.1 帧长度校验
对于接收到的每个命令,SPI设备将检查SCK引脚处的时钟边沿数量。如果边缘的总数不是16的倍数,则丢弃帧内容,并且在下一次迭代时返回SPI_ERR位。
3.5.2 错误帧
发生错误时,SPI_ERR诊断位将在下一次通信时迭代返回:
- 帧长度错误
- 无效地址
3.5.3 帧结构
每个MOSI输入帧都应遵循以下结构:
- 2个操作命令为C1/C0,'0/0'时为写命令,'0/1'时为读命令
- 6位的地址位
- 8位的数据位
寄存器帧MISO响应所选择的地址并寄存器内容位值,它具有以下结构:
- 2位的保留位,默认为‘1’
- 6位的标志位,OT(过温)、OL(空/开负载)、OC(过电流)、UV(欠压)、OV(过压)、NPOR(上电复位情况反应)
- 8位的数据位
注:对于SPI写命令,数据位返回写入值;对于SPI读命令,数据位返回寄存器当前值
3.5.4 并联和菊花链
主机和从机间的SPI通信可支持并联或菊花链操作:
- 并联:从机可将除CS(片选)外的引脚,即SCK、MOSI、MISO,挂载到同一路SPI总线上;在使用时,通过CS的拉低来选择目标设备即可
- 菊花链:多个设备通过共享的一个CS和SCK连接,而每个设备MOSI和MISO都是数据链连接方式
3.6 错误诊断及保护
3.6.1 过电流 Overcurrent
集成过电流保护功能提供半桥高侧防止对地短路或半桥低侧防止对蓄电池短路,当电流通过半桥高侧(VM->高侧->OUTx)或流入半桥低侧(OUTx->低侧->GND)时,一旦超过过电流阈值,过电流抑制滤波器启动,内部电路将电流限制在限制电流。
当过电流状态持续到过电流时间截止(toc)时,特定的半桥(包括高侧和低侧)将被禁用。OC状态位应报告触发OC的相应HS或LS,如果OC_MASK_FLT设置为“0”,则nFAULT引脚也断言为低。
官方的手册中做了举例说明:
- 例如,如果只有HB1_LS对电源短路并被检测到,则OC_STA_1寄存器HB1_LS_OC位被断言,而HB1_HS_OC位不受影响,对于输出级,HB1 HS和LS都被禁用。
- 为了恢复正常驱动,除了过电流条件消失外,还需要通过SPI读取(RD_CLR_EN=1)或写入CLR_FLT位“1”来清除OC状态位,以触发清除故障命令。
- 无论如何,如果过电流条件短于toc deglitch滤波器,则未确认OC事件,HB驱动器保持正常状态。
可以看一下下图,可以帮助大家理解:
要注意:
- 即使半桥输出由于过电流保护机制而被禁用,HBx_HS_EN或HBx_LS_EN位仍保持先前状态,除非用户通过SPI更改值。
- 当器件在高达36v的高电压下工作时,建议短toc(OPL_OC_CTRL3寄存器中的OC_Filter位)。
3.6.2 开启状态下的开负载
在每个激活的OUTx输出中,都对负载电流进行监测来判断是否开负载;如果负载电流低于开路负载检测阈值(Iol)至少2ms,则会在对应输出的状态寄存器内设置开负载位。
- 对于运行电流较小的电子元器件(如LED灯),提供了Iol_low的HBx_OPL_TH选择位和对应的滤波器时间tol_low。
- 此外,OPL_OC_CTRL_2寄存器中的OPL_HB_ACT位和OPL_mask_FLT位这两个位可以配置用于开路负载故障反应。
- OPL_HB_ACT位确定半桥输出状态是否受到ON状态开路负载故障的影响:默认值“0”将禁用故障半桥HS和LS,而将位值设置为“1”只能选择打开负载作为信息标志,半桥控制/操作不受影响。
- OPL_mask_FLT位确定nFail输出引脚状态是否受到ON状态开路负载故障的影响。默认值“0”在检测到打开负载时取消掩蔽并生成nFault,而更改为“1”将掩蔽打开负载故障,并且不报告nFault输出。
- 用户可以通过SPI读取(RD_CLR_EN=1)或写入CLR_FLT位“1”来清除OL状态位,以触发清除故障命令,从而确定开路负载是否仍然存在或消失。
3.6.3 断开状态
每个半桥OUTx集成了内部上拉电流/下拉电流和比较器,用于断开状态诊断。
- 上拉电流或下拉电流由寄存器OPL_CTRL_5和OPL_CTRL_6的位设置值单独控制为启用/禁用。
- OUTx引脚电压与VSTA_HB进行比较,以实时确定其关断状态逻辑状态(HIGH或LOW),并在HB_STA1寄存器中报告。
- 注意:半桥/H桥应用程序连接与HS或LS的使用不同。建议遵循以下断开状态诊断步骤,即通过微控制器进行上拉/下拉电流启用/禁用和OUTx状态判断。
3.6.4 过温 Overtemperature
为了防止功率级过热,在每个半桥功率级附近放置专用的热传感器,如果温度升高到OTwarn(过温警告温度)以上,则在SPI STA_0寄存器中设置温度警告标志,半桥输出操作不受影响。一旦感测到的温度超过第二OTSD(热停止温度)阈值,则设置相应的OTSD标志,并且自动禁用功率MOSFET沟道。
- nFAULT引脚可在OTW_MASK_FLT位设置时配置用于OTwarn事件报告。无论如何,OTSD将始终断言nFAULT为低。
- OTwarn和OTSD标志位被锁存。温度降至TSD-THYS以下时,应通过SPI命令清除热关闭OTSD位。
3.6.5 错误汇总
4. 初始化配置
4.1 SPI ON/OFF 模式
这个模式类似I/O输出,输出的电压为VM的电压值,配置起来较为简单,以下为初始化配置:
- 关闭所有通道开负载检测:仅在空载测试时,寄存器OPL_CTRL_1配置为0xFF
- 拉高VM电压阈值:由于博主硬件电路接入24V到VM,这里对寄存器GEN_CTRL0的OVP_H位进行配置
- 失能pwm模式允许位:寄存器HB_PWM_CTRL1和FW_PWM_CTRL_2中的HBx_PWM_EN位配置为“0”
- 设置OUTx为高边或低边驱动:寄存器HB_CTRL1、HB_CTRL2、CTRL3中的HBx_HS_EN或HBx_LS_EN位配置为“1/0”或“0/1”,这里注意,不要将HS和LS同时配置为“1”(桥臂的同时开通将会导致短路),OUTx将会呈现高阻态
同样,以一个表格的形式举例该模式下的配置及输出可能性:
4.2 PWM 模式
对于PWM模式设计的寄存器,下面进行依次说明,初始化配置循序在最下面:
- 续流模式控制
- 当选择特定的半桥通道使用PWM时,也可以通过HBx_FW控制位为半桥通道选择主动或被动续流选项。
- 续流仅在PWM模式下生效,对于SPI ON/OFF模式将忽略
- PWM频率/占空比/映射控制
- PWM_FREQ_CTRL1/PWM_FREQ_CTRL2寄存器中的PWMx_FREQ位:总共8个PWM发生器,每个PWM频率的2位配置为(80Hz\/100Hz\/200Hz\/2000Hz)
- PWM_DC_CTRL1~PWM_DC_CTRL8寄存器中的PWMx_DUTY_CYCLE位:PWMx的占空比定义为:100%*寄存器值/255
- PWM_MAP_CTRL1~PWM_MAP_CTRL6寄存器中的HBx_PWM_MAP位:每个半桥3位,可从PWM1~PWM8进行独立选择
- 用于PWM的半桥驱动器设置
- HB_PWM_CTRL1、FW_PWM_CTRL2寄存器中的HBx_PWM_EN位 :HBx_PWM_EN位更改为“1”将通过映射PWM启用选定的半桥操作控制
- HB_CTRL1~HB_CTRL3寄存器中的HBx_HS_EN/HBx_LS_EN ,控制高边和低边的开断
这里博主给出自己的基础配置,不是最优解,仅供参考:
- 关闭所有通道开负载检测:仅在空载测试时,寄存器OPL_CTRL_1配置为0xFF
- 拉高VM电压阈值:由于博主硬件电路接入24V到VM,这里对寄存器GEN_CTRL0的OVP_H位进行配置
- 禁止PWM开启:将所选PWM通道的PWMx_DIS位配置为“1”
- 设置主动/被动续流:在FW_CTRL寄存器中配置主动或被动续流
- 分配PWM通道:在PWM_MAP_CTRL寄存器中选定的半桥输出通道,这里博主采取一一对应的配置方法(即OUT1->PWM1以此类推),便于差错
- 配置PWM频率:在PWM_FREQ_CTRL寄存器中,选择80Hz/100Hz/200Hz/2KHz
- 配置PWM占空比:在PWM_DC_CTRL寄存器中配置占空比 ,博主这里上电初始化为0
- 使能PWM通道:通过设置HB_PWM_CTRL寄存器中的HBx_PWM_EN位
- 高边/低边驱动:通过HB_CTRL寄存器中HBx_HS_EN和HBx_LS_EN来选择
- 使能PWM:通过将PWMx_DIS位置“0”激活并启动PWM