STM32G4系列通过SPI配置DRV8353S驱动芯片

STM32G4系列通过SPI配置DRV8353S驱动芯片

STM32G4系列通过SPI配置DRV8353S驱动芯片

  • DRV8353S电机驱动芯片基本介绍
  • 一、硬件分析
    • 1.电源部分
    • 2.pwm驱动部分
    • 3.SPI寄存器配置部分
    • 4.电流反馈部分
    • 5.输出部分
    • 6.故障检测部分
  • 二、cubemx IO配置和SPI配置
    • 1.IO配置
    • 2.SPI配置
  • 三、寄存器部分说明和配置
    • 1.基本数据格式
    • 2.寄存器发送具体数据分析(地址0x02至0x06)
        • 2.1地址0x02
        • 2.2地址0x03
        • 2.3地址0x04
        • 2.4地址0x05
        • 2.5地址0x06
  • 三、读取代码
  • 总结


DRV8353S电机驱动芯片基本介绍

DRV835x系列设备是高度集成的三相无刷直流(BLDC)电机应用门驱动器。这些应用包括面向现场控制(FOC),正弦电流控制,和无刷直流电动机梯形电流控制。设备变体提供可选的集成电流分流放大器,以支持不同的电机控制方案和降压调节器,为门驱动器或外部控制器供电。

DRV835x采用智能门驱动(SGD)体系结构,以减少MOSFET转率控制和保护电路所需的外部组件数量。SGD架构还优化了死区时间,以防止通射条件,通过MOSFET转速率控制提供了减少电磁干扰(EMI)的灵活性,并通过VGS监视器防止门短路条件。强大的门拉下电路有助于防止不必要的dV/dt寄生门打开事件的各种PWM控制模式(6x, 3x, 1x和独立)支持简单的接口到外部控制器。这些模式可以减少控制器对电机驱动PWM控制信号的输出数量。该系列设备还包括1x PWM模式,通过使用内部块换向表对无刷直流电动机进行简单的传感器梯形控制。
STM32G4系列通过SPI配置DRV8353S驱动芯片_第1张图片

参数 指标
基本特性 三相半桥门驱动器
智能门驱动架构 50ma至1-A峰值源电流
集成门驱动电源 100% PWM占空比控制的高倍数电荷泵
驱动电压 6-95V
输出能力 350mA
可调增益 5,10,20,40V
PWM模式 6路,3路,1路
传感器 支持120度检测
接口 SPI或者硬件接口
保护 综合保护(6项)

一、硬件分析

STM32G4系列通过SPI配置DRV8353S驱动芯片_第2张图片
STM32G4系列通过SPI配置DRV8353S驱动芯片_第3张图片

1.电源部分

驱动芯片供电部分

2.pwm驱动部分

6路pwm波加使能信号ENABLE,ENABLE使能信号有效时(高有效)才会控制电机旋转

3.SPI寄存器配置部分

4路pwm波,SPI模式需配置为模式1 即CPOL 0 CPHA 1

4.电流反馈部分

可直接连接对应AD采样口,注意电流方向

5.输出部分

接6个MOSFET管,组成逆变器电路

6.故障检测部分

产生故障后输出保护信号

二、cubemx IO配置和SPI配置

1.IO配置

片选信号配置默认为高电平,
STM32G4系列通过SPI配置DRV8353S驱动芯片_第4张图片

2.SPI配置

16位,CPOL配置为low ,CPHA配置为2Edge(8位也可以),SCK MISO MOSI信号配置默认低电平。
STM32G4系列通过SPI配置DRV8353S驱动芯片_第5张图片
STM32G4系列通过SPI配置DRV8353S驱动芯片_第6张图片

三、寄存器部分说明和配置

1.基本数据格式

SDI输入数据字长16位,格式如下:•1读写位,W (B15位)•4地址位,A (B14 ~ B11位)•11数据位,D (B11 ~ B0位)设置写命令的读写位(W0, B15)为0b。设置读命令的读写位(W0, B15)为1b

SDO输出数据字长16位,前5位为“不在乎”位。响应字是当前正在访问的寄存器中的数据。整体后续配置基本按照默认配置。

STM32G4系列通过SPI配置DRV8353S驱动芯片_第7张图片

2.寄存器发送具体数据分析(地址0x02至0x06)

2.1地址0x02

STM32G4系列通过SPI配置DRV8353S驱动芯片_第8张图片
0x02 需配置BIT10为三个半桥(三相) 数据为"10000000000
前五位数据为00010 因为第一位0代表写入寄存器,后四位代表寄存器地址0x02
总的传输数据为0001 0100 0000 0000
HEX表示为0x1400

2.2地址0x03

STM32G4系列通过SPI配置DRV8353S驱动芯片_第9张图片

0x03 需配置BIT 7-4为 1111 1000mA
需配置BIT 3-0为 1111 2000mA 默认值即可以
前五位数据为00011 因为第一位0代表写入寄存器,后四位代表寄存器地址0x03
总的传输数据为0001 1011 0010 0010
HEX表示为0x1b22

2.3地址0x04

STM32G4系列通过SPI配置DRV8353S驱动芯片_第10张图片
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

2.4地址0x05

STM32G4系列通过SPI配置DRV8353S驱动芯片_第11张图片
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

2.5地址0x06

STM32G4系列通过SPI配置DRV8353S驱动芯片_第12张图片

需配置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的人有所帮助

你可能感兴趣的:(stm32,单片机,arm,c语言,嵌入式硬件)