你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

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

[复制链接]
STMCU小助手 发布时间:2023-2-24 23:34
DRV8353S电机驱动芯片基本介绍
DRV835x系列设备是高度集成的三相无刷直流(BLDC)电机应用门驱动器。这些应用包括面向现场控制(FOC),正弦电流控制,和无刷直流电动机梯形电流控制。设备变体提供可选的集成电流分流放大器,以支持不同的电机控制方案和降压调节器,为门驱动器或外部控制器供电。

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

fafb49afdafd4c5e835b534660216af8.png
IUJCPESQT@8IW5O[[PMLBJJ.png

一、硬件分析

49b9e9dffa564dd9a98fdbd2f380880b.png
a6425bf5dde647d5ba5af3e0e95c3df1.png

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配置
片选信号配置默认为高电平,

1de7ea0782e7439f9c87ef1410759fbf.png

2.SPI配置
16位,CPOL配置为low ,CPHA配置为2Edge(8位也可以),SCK MISO MOSI信号配置默认低电平。

f648eb48be03466f826d4276d838d8c0.png

bfc00e0fca664f85940667153483c186.png

三、寄存器部分说明和配置
1.基本数据格式
SDI输入数据字长16位,格式如下:•1读写位,W (B15位)•4地址位,A (B14 ~ B11位)•11数据位,D (B11 ~ B0位)设置写命令的读写位(W0, B15)为0b。设置读命令的读写位(W0, B15)为1b

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

b88790113e344d578aecfddc5dc569e7.png

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

4fd17883de1e46568004e95bf688ab91.png

0x02 需配置BIT10为三个半桥(三相) 数据为"10000000000
前五位数据为00010 因为第一位0代表写入寄存器,后四位代表寄存器地址0x02
总的传输数据为0001 0100 0000 0000
HEX表示为0x1400


2.2地址0x03

fba01c1b67e84963be06ab7e43a9dd43.png

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

2.3地址0x04

990eefbe272f45c2b7251964b0185d05.png

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

912a393dd10f457f877bbede6d0075aa.png

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

355d42b0ea774cdbaa30e2e7733a16a6.png

0x06
需配置BIT9为 1 感测放大器参考电压为VREF除以2
需配置BIT 7-6为 10 20V-V增益
前五位数据为00110因为第一位0代表写入寄存器,后四位代表寄存器地址0x06
总的传输数据为0011 0010 1000 0000
HEX表示为0x3266


三、读取代码

代码顺序
1发使能
2配置对应寄存器
3发送pwm波给驱动芯片

发送函数
  1. uint16_t SPI_SendHalfWord(uint16_t HalfWord)
  2. {
  3.   
  4.   SPITimeout = SPIT_LONG_TIMEOUT;
  5.   /* Loop while DR register in not emplty */
  6.   while (__HAL_SPI_GET_FLAG( &hspi1,  SPI_FLAG_TXE ) == RESET)
  7.   {
  8.     if((SPITimeout--) == 0) return 0;
  9.   }
  10.   /* Send Half Word through the SPIx peripheral */
  11.   WRITE_REG(hspi1.Instance->DR, HalfWord);

  12.   SPITimeout = SPIT_LONG_TIMEOUT;
  13.   /* Wait to receive a Half Word */
  14.   while (__HAL_SPI_GET_FLAG( &hspi1, SPI_FLAG_RXNE ) == RESET)
  15.    {
  16.     if((SPITimeout--) == 0) return 0;
  17.    }
  18.   /* Return the Half Word read from the SPI bus */
  19.   return READ_REG(hspi1.Instance->DR);
  20.   
  21. }
复制代码

8353写入函数
  1. void SPI_WRITE_DRV8353(uint16_t WRITE_MOTOR_DATA)
  2. {

  3.   /* Select the MOTOR: Chip Select low */
  4.   SPI_MOTOR_CSN_LOW();
  5.   /* Write a halfword to the DRV8353 */  
  6.   SPI_SendHalfWord(WRITE_MOTOR_DATA);  
  7.   /* Deselect the MOTOR: Chip Select high */
  8.   SPI_MOTOR_CSN_HIGH();
  9.    Delay(1000);
  10.   
  11. }
复制代码

8353读取函数
  1. uint16_t SPI_Read_DRV8353(uint16_t READ_MOTOR_ADDR)
  2. {

  3.   uint16_t DRV8353_Temp = 0;
  4.   /* Select the MOTOR: Chip Select low */
  5.   SPI_MOTOR_CSN_LOW();  
  6. //  SPI_ABS_CSN_LOW();   
  7.   /* Read a halfword from the DRV8353 */
  8.   SPI_SendHalfWord(READ_MOTOR_ADDR);
  9.   DRV8353_Temp = SPI_SendHalfWord(READ_MOTOR_ADDR);
  10.        
  11.         //TIMP2=HAL_SPI_Receive(&hspi1, spi_rx_data1, 1, SPI_TIMEOUT_VALUE);        //DRV8353的数据传输
  12.   /* Deselect the MOTOR: Chip Select high */
  13.   SPI_MOTOR_CSN_HIGH();
  14.     Delay(1000);
  15.   return DRV8353_Temp;
  16.   
  17. }
复制代码

使能加配置芯片
  1.   MOTOR_ENABLE();//使能DRV高电平输出
  2.   Delay(200000);
  3.   SPI_WRITE_DRV8353(0x1400);
  4.   SPI_WRITE_DRV8353(0x1b22);
  5.   SPI_WRITE_DRV8353(0x2722);
  6.   SPI_WRITE_DRV8353(0x2b66);
  7.   SPI_WRITE_DRV8353(0x3280);
  8.   Delay(100);
复制代码

读取芯片返回值
  1. SPI_Read_DRV8353(0x9400);
  2. TIMP1=hspi1.Instance->DR;//取地址0x02
  3. SPI_Read_DRV8353(0x9800);
  4. TIMP2=hspi1.Instance->DR;//取地址0x03
  5. SPI_Read_DRV8353(0xA000);
  6. TIMP3=hspi1.Instance->DR;//取地址0x04
  7. SPI_Read_DRV8353(0xA800);
  8. TIMP4=hspi1.Instance->DR;//取地址0x05
  9. SPI_Read_DRV8353(0xB000);
  10. TIMP5=hspi1.Instance->DR;//取地址0x06


复制代码

将返回值与寄存器表进行对应查看是否写入寄存器

7e5e620cc24841da91d5846070af6cbb.png

————————————————
版权声明:超级馒头神


收藏 评论0 发布时间:2023-2-24 23:34

举报

0个回答

所属标签

相似分享

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版