STM32G4系列通过SPI配置DRV8353S驱动芯片
DRV835x系列设备是高度集成的三相无刷直流(BLDC)电机应用门驱动器。这些应用包括面向现场控制(FOC),正弦电流控制,和无刷直流电动机梯形电流控制。设备变体提供可选的集成电流分流放大器,以支持不同的电机控制方案和降压调节器,为门驱动器或外部控制器供电。
DRV835x采用智能门驱动(SGD)体系结构,以减少MOSFET转率控制和保护电路所需的外部组件数量。SGD架构还优化了死区时间,以防止通射条件,通过MOSFET转速率控制提供了减少电磁干扰(EMI)的灵活性,并通过VGS监视器防止门短路条件。强大的门拉下电路有助于防止不必要的dV/dt寄生门打开事件的各种PWM控制模式(6x, 3x, 1x和独立)支持简单的接口到外部控制器。这些模式可以减少控制器对电机驱动PWM控制信号的输出数量。该系列设备还包括1x PWM模式,通过使用内部块换向表对无刷直流电动机进行简单的传感器梯形控制。
参数 | 指标 |
---|---|
基本特性 | 三相半桥门驱动器 |
智能门驱动架构 | 50ma至1-A峰值源电流 |
集成门驱动电源 | 100% PWM占空比控制的高倍数电荷泵 |
驱动电压 | 6-95V |
输出能力 | 350mA |
可调增益 | 5,10,20,40V |
PWM模式 | 6路,3路,1路 |
传感器 | 支持120度检测 |
接口 | SPI或者硬件接口 |
保护 | 综合保护(6项) |
驱动芯片供电部分
6路pwm波加使能信号ENABLE,ENABLE使能信号有效时(高有效)才会控制电机旋转
4路pwm波,SPI模式需配置为模式1 即CPOL 0 CPHA 1
可直接连接对应AD采样口,注意电流方向
接6个MOSFET管,组成逆变器电路
产生故障后输出保护信号
16位,CPOL配置为low ,CPHA配置为2Edge(8位也可以),SCK MISO MOSI信号配置默认低电平。
SDI输入数据字长16位,格式如下:•1读写位,W (B15位)•4地址位,A (B14 ~ B11位)•11数据位,D (B11 ~ B0位)设置写命令的读写位(W0, B15)为0b。设置读命令的读写位(W0, B15)为1b
SDO输出数据字长16位,前5位为“不在乎”位。响应字是当前正在访问的寄存器中的数据。整体后续配置基本按照默认配置。
0x02 需配置BIT10为三个半桥(三相) 数据为"10000000000
前五位数据为00010 因为第一位0代表写入寄存器,后四位代表寄存器地址0x02
总的传输数据为0001 0100 0000 0000
HEX表示为0x1400
0x03 需配置BIT 7-4为 1111 1000mA
需配置BIT 3-0为 1111 2000mA 默认值即可以
前五位数据为00011 因为第一位0代表写入寄存器,后四位代表寄存器地址0x03
总的传输数据为0001 1011 0010 0010
HEX表示为0x1b22
0x04
需配置BIT10为 1 当给出新pwm输出后故障清除
需配置BIT 9-8为 11 4000ns的门电流驱动时间
需配置BIT 7-4为 1111 1000mA
需配置BIT 3-0为 1111 2000mA
前五位数据为00100因为第一位0代表写入寄存器,后四位代表寄存器地址0x04
总的传输数据为0010 0111 0010 0010
HEX表示为0x2722
0x05
需配置BIT9-8为 11 400ns死区时间
需配置BIT 9-8为 11 4000ns的门电流驱动时间
需配置BIT 7-6为 11 过流自动重试故障
需配置BIT 3-0为 0110 0.3V VDS_LVL电压
前五位数据为00101因为第一位0代表写入寄存器,后四位代表寄存器地址0x05
总的传输数据为0010 1011 0110 0110
HEX表示为0x2b66
需配置BIT9为 1 感测放大器参考电压为VREF除以2
需配置BIT 7-6为 10 20V-V增益
前五位数据为00110因为第一位0代表写入寄存器,后四位代表寄存器地址0x06
总的传输数据为0011 0010 1000 0000
HEX表示为0x3266
代码顺序
1发使能
2配置对应寄存器
3发送pwm波给驱动芯片
发送函数
uint16_t SPI_SendHalfWord(uint16_t HalfWord)
{
SPITimeout = SPIT_LONG_TIMEOUT;
/* Loop while DR register in not emplty */
while (__HAL_SPI_GET_FLAG( &hspi1, SPI_FLAG_TXE ) == RESET)
{
if((SPITimeout--) == 0) return 0;
}
/* Send Half Word through the SPIx peripheral */
WRITE_REG(hspi1.Instance->DR, HalfWord);
SPITimeout = SPIT_LONG_TIMEOUT;
/* Wait to receive a Half Word */
while (__HAL_SPI_GET_FLAG( &hspi1, SPI_FLAG_RXNE ) == RESET)
{
if((SPITimeout--) == 0) return 0;
}
/* Return the Half Word read from the SPI bus */
return READ_REG(hspi1.Instance->DR);
}
8353写入函数
void SPI_WRITE_DRV8353(uint16_t WRITE_MOTOR_DATA)
{
/* Select the MOTOR: Chip Select low */
SPI_MOTOR_CSN_LOW();
/* Write a halfword to the DRV8353 */
SPI_SendHalfWord(WRITE_MOTOR_DATA);
/* Deselect the MOTOR: Chip Select high */
SPI_MOTOR_CSN_HIGH();
Delay(1000);
}
8353读取函数
uint16_t SPI_Read_DRV8353(uint16_t READ_MOTOR_ADDR)
{
uint16_t DRV8353_Temp = 0;
/* Select the MOTOR: Chip Select low */
SPI_MOTOR_CSN_LOW();
// SPI_ABS_CSN_LOW();
/* Read a halfword from the DRV8353 */
SPI_SendHalfWord(READ_MOTOR_ADDR);
DRV8353_Temp = SPI_SendHalfWord(READ_MOTOR_ADDR);
//TIMP2=HAL_SPI_Receive(&hspi1, spi_rx_data1, 1, SPI_TIMEOUT_VALUE); //DRV8353的数据传输
/* Deselect the MOTOR: Chip Select high */
SPI_MOTOR_CSN_HIGH();
Delay(1000);
return DRV8353_Temp;
}
使能加配置芯片
MOTOR_ENABLE();//使能DRV高电平输出
Delay(200000);
SPI_WRITE_DRV8353(0x1400);
SPI_WRITE_DRV8353(0x1b22);
SPI_WRITE_DRV8353(0x2722);
SPI_WRITE_DRV8353(0x2b66);
SPI_WRITE_DRV8353(0x3280);
Delay(100);
读取芯片返回值
SPI_Read_DRV8353(0x9400);
TIMP1=hspi1.Instance->DR;//取地址0x02
SPI_Read_DRV8353(0x9800);
TIMP2=hspi1.Instance->DR;//取地址0x03
SPI_Read_DRV8353(0xA000);
TIMP3=hspi1.Instance->DR;//取地址0x04
SPI_Read_DRV8353(0xA800);
TIMP4=hspi1.Instance->DR;//取地址0x05
SPI_Read_DRV8353(0xB000);
TIMP5=hspi1.Instance->DR;//取地址0x06
希望对配置DRV8355的人有所帮助