FOC系列(四)----重新绘制DRV8301驱动板

   声明:本人水平有限,博客可能存在部分错误的地方,请广大读者谅解并向本人反馈错误。

一、前言

  由于之前DRV8301的驱动板出现了问题,而且在结构上也出现了部分问题,所以最近又重新绘制了一版,不过还是存在一些小问题,后面我还会重新绘制一版,并且修改控制板和驱动板“上-下”的结构,采用平行线的结构进行连接,修改后的DRV8301原理图如下:
FOC系列(四)----重新绘制DRV8301驱动板_第1张图片
   PCB如下:
FOC系列(四)----重新绘制DRV8301驱动板_第2张图片
FOC系列(四)----重新绘制DRV8301驱动板_第3张图片
  实物如下:

  由于改版还不是最后一版,所以有些地方使用了比较便宜的元器件,不过测试都正常:
  GVDD:12V
  AVDD:6.8V
  DVDD:3.3V
  下图是C相上下两个MOS管栅极的信号(蓝色为上管的栅极驱动信号为24V;黄色为下管的栅极驱动信号,为12V):
FOC系列(四)----重新绘制DRV8301驱动板_第4张图片
  DRV8301代码:

#include "DRV8301.h"
#include "spi.h"
#include "math.h"

uint16_t tx, rx=10;
static uint8_t tx_buff[14];

// uint8_t status[10] = {100,100,100,100,100,100,100,100,100,100};
uint8_t addr,dat;


uint8_t MCT8316_read_buffer(uint8_t const regAddr, uint8_t *pData, uint8_t len)
{
  CS_LOW;
  tx = regAddr | 0x80;
  tx_buff[0] = tx;
  HAL_SPI_TransmitReceive(&hspi1, (uint8_t *)&tx, (uint8_t *)&rx, 1, 55);
  HAL_SPI_TransmitReceive(&hspi1, tx_buff, pData, len, 55);
  CS_HIGH;
  return 0;
}
 
 
uint16_t DRV8301_read_reg(uint8_t *pData, uint8_t len)
{
	CS_LOW;
	HAL_SPI_Receive(&hspi1, pData, len,55);
	CS_HIGH;//源代码发送的是ff
	
	return rx&0xFFFF;
}

uint8_t MCT8316_write_reg(uint16_t reg)
{
	CS_LOW;
  HAL_SPI_Transmit(&hspi1, (uint8_t *)&reg, 1,55);
	CS_HIGH;
 
	return 0;
}

uint8_t MCT8316_read(uint16_t reg)
{
	uint8_t result;
	MCT8316_write_reg(READ | reg << 11);
	DRV8301_read_reg((uint8_t *)&result,1);
	return  result;
}

void DRV8301_Init(void)
{
	uint8_t dat1,dat2;
	dat1 = 0x03; // B10~B8
	dat2 = 0xF1; // B7~B0
	tx = WRITE | Control_Register_1<<11 | ((dat1<<6| dat2)&0x07FF);
//	tx = 0x13F1;
	MCT8316_write_reg(tx);
	HAL_Delay(10);
	
	dat1 = 0x00;
	dat2 = 0x0F;
	tx = WRITE | (Control_Register_2<<11)|((dat1<<6|dat2)&0x07FF);
//	tx = 0x180F;
	MCT8316_write_reg(tx);
	HAL_Delay(10);
}

二、下版需要修改之处

  1. 修改MR30和XT60尺寸
  2. DRV8301的封装需要注意一下
  3. 驱动板、控制板修改连接线
  4. 使用STM32F405RGT6重新绘制控制板

三、往期回顾

FOC系列(一)----DRV8301芯片的学习
FOC系列(二)----继续学习DRV8301芯片
FOC系列(三)----AS5600磁编码器

你可能感兴趣的:(FOC系列学习,DRV8301,FOC)