项目进展(二)-配置MCT8316ZR芯片,主要学习如何根据数据手册配置外设等

news/2024/6/17 12:02:47 标签: 学习, BLDC, 驱动芯片

近几天一直和师兄在配置驱动芯片,目前的进展是可以通过SPI配置、读取寄存器等,但是电机一直未被驱动起来(这个问题困扰了我们一两天了,希望有大佬可以帮忙解决一下)。
配置SPI要先根据数据手册的说明,确认好SPI如何配置,下图是数据手册中关于SPI的相关内容:
在这里插入图片描述
在这里插入图片描述
根据上面的格式就可以配置SPI,下面是使用cubeMX配置的SPI:
在这里插入图片描述
在本项目中,SPI的CS引脚为通过普通的GPIO口,所以将SPI_NSS设置为GPIO_Output,NSS Singal Type设置为Software。
在这里插入图片描述

下面是cubeMX生成的初始化代码:

/* SPI1 init function */
void MX_SPI1_Init(void)
{

  /* USER CODE BEGIN SPI1_Init 0 */

  /* USER CODE END SPI1_Init 0 */

  /* USER CODE BEGIN SPI1_Init 1 */

  /* USER CODE END SPI1_Init 1 */
  hspi1.Instance = SPI1;
  hspi1.Init.Mode = SPI_MODE_MASTER;
  hspi1.Init.Direction = SPI_DIRECTION_2LINES;
  hspi1.Init.DataSize = SPI_DATASIZE_16BIT;
  hspi1.Init.CLKPolarity = SPI_POLARITY_LOW;
  hspi1.Init.CLKPhase = SPI_PHASE_2EDGE;
  hspi1.Init.NSS = SPI_NSS_SOFT;
  hspi1.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_256;
  hspi1.Init.FirstBit = SPI_FIRSTBIT_MSB;
  hspi1.Init.TIMode = SPI_TIMODE_DISABLE;
  hspi1.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE;
  hspi1.Init.CRCPolynomial = 7;
  hspi1.Init.CRCLength = SPI_CRC_LENGTH_DATASIZE;
  hspi1.Init.NSSPMode = SPI_NSS_PULSE_DISABLE;
  if (HAL_SPI_Init(&hspi1) != HAL_OK)
  {
    Error_Handler();
  }
  /* USER CODE BEGIN SPI1_Init 2 */

  /* USER CODE END SPI1_Init 2 */

}

下面是SPI写寄存器的代码,以MCT8316的控制寄存器1为例:

	// 地址为为6位,所以先将寄存器地址左移1位
	addr = (Control_Register_1<<1)&0X7F;
	// 要写入寄存器的值,根据数据手册有关寄存器的介绍 
	dat = 0x03; 
	// 将地址和数据的奇偶校验异或(相同为0,相异为1),最后再将地址与最终的奇偶校验位“|”一下
	addr |= ParityCheck(addr)^ParityCheck(dat); 
	// 写寄存器,函数的参数为地址(已经加入奇偶校验位)和数据 
	MCT8316_write_reg(addr,dat);
	// 延时
	HAL_Delay(10);

MCT8316_write_reg():

uint8_t MCT8316_write_reg(uint8_t reg,uint8_t val)
{
 	// CS引脚拉低
	HAL_GPIO_WritePin(GPIOA,CS_Pin,0);
	// 写寄存器是MSB为0,将reg(地址)"&0x7F",确保MSB为0
	tx = reg & 0x7F; 
	// 将tx左移八位并"|"上要写入寄存器的值,得到十六位数据形式
	tx = (tx<<8)|val;
	// 通过HAL库的函数将数据发送出去
  	HAL_SPI_TransmitReceive(&hspi1, (uint8_t *)&tx, (uint8_t *)&rx, 1, 55);
  	// CS引脚拉高
	HAL_GPIO_WritePin(GPIOA,CS_Pin,1);

	return 0;
}

下面是示波器观察的CLK和CS引脚的波形图(非常可惜的是CLK和MOSI引脚的波形图忘记拍照了,只能粗略的形容一下就是:非常完美!!!):
在这里插入图片描述
上面就是基本配置和调试SPI的过程了,下面是MCT8316芯片寄存器的部分介绍(主要介绍踩坑的寄存器):
1、IC_Status_Register Register (Read Only)
在这里插入图片描述
2、Control_Register_1 Register
在这里插入图片描述

3、Control_Register_2A Register
在这里插入图片描述
4、Control_Register_7 Register
在这里插入图片描述

5、Control_Register_8 Register
在这里插入图片描述
目前我们寄存器都已经配置完成,不过电机还是无法驱动。目前遇到的问题是:使用的数字霍尔,但是必须要将霍尔上拉才会有波形输出,但是此时上电nFAULT引脚会频繁的拉低(nFAULT高电平时才表示无故障)。
在看数据手册时,介绍说要在VM(电机的电压)上电之前,要先将nFAULT引脚拉高至2.2V以上,所以我们通过飞线直接将nFAULT引脚上拉到3.3V(之前是上拉到AVDD,当然也是3.3V,不过AVDD是MCT8316芯片上电之后才有输出的,跟TI推荐的方法不一样,所以这样连接,避免进入内部测试模式,不用nFAULT引脚也要将其拉高)。
同时为了在刚上电时,保证MCT8316芯片不工作,所以先配置nSLEEP引脚为低电平,使芯片进入睡眠模式,延时100ms之后再配置为高电平,退出睡眠模式,这样也保证nFAULT引脚在驱动芯片上电之前电压大于2.2V。
在这里插入图片描述
在这里插入图片描述
上面就基本上这两天的工作的总结了,今天一天找了很多资料配置寄存器(疯狂尝试各种寄存器配置),但是电机还是不会转起来,人已经麻了。。。不过好在还是有点小收获的,至少以后用一些芯片时可以自己配置了,不再全网找别人的代码了(安慰自己一下)。


http://www.niftyadmin.cn/n/5052919.html

相关文章

机器人过程自动化(RPA)入门 3. 顺序、流程图和控制流程

到目前为止&#xff0c;我们已经了解了RPA是什么&#xff0c;并且我们已经看到了通过记录任务的活动并运行它来训练UiPath机器人是多么简单。使用记录器的UiPath可以很容易地自动化日常任务。在我们开始自动化复杂的任务之前&#xff0c;让我们学习如何控制从一个到另一个的活动…

国内大语言模型的相对比较:ChatGLM2-6B、BAICHUAN2-7B、通义千问-6B、ChatGPT3.5

一、 前言 国产大模型有很多&#xff0c;比如文心一言、通义千问、星火、MOSS 和 ChatGLM 等等&#xff0c;但现在明确可以部署在本地并且开放 api 的只有 MOOS 和 ChatGLM。MOOS 由于需要的 GPU 显存过大&#xff08;不量化的情况下需要80GB&#xff0c;多轮对话还是会爆显存…

Java 接口多实现动态调用

简单定义一个接口,做数据插入 public interface ImportingData<T> {AjaxResult addData(T t); }目前本文使用的是根据泛型类实现动态调用,在引入时必须明确是那个实体类, 还有种方法就是给每一个实现类定义业务类型的枚举,这时候子啊接口里面就得多写一个返回枚举的实现…

基于VR元宇宙技术搭建林业生态模拟仿真教学系统

随着科技的飞速发展&#xff0c;教学方式也正在经历着巨大的变革。林业经济学元宇宙虚拟教学系统作为一种新兴的教学方式&#xff0c;为学生和教师提供了一个全新的、沉浸式的学习和教学环境。 森林管理和监测 元宇宙技术可以用于森林管理和监测。通过无人机、传感器和虚拟现实…

如何在前端项目中管理依赖关系?

聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ 使用包管理工具⭐ 使用版本控制系统⭐ 使用依赖管理工具⭐ 使用CDN⭐ 写在最后 ⭐ 专栏简介 前端入门之旅&#xff1a;探索Web开发的奇妙世界 欢迎来到前端入门之旅&#xff01;感兴趣的可以订阅本专栏哦&#xff01;这个专栏是为那些对W…

TCP/UDP

TCP&#xff1a;可靠的有序传输 TCP是一种面向连接的协议&#xff0c;旨在提供可靠、有序的数据传输。它通过以下方式实现这一目标&#xff1a; 1. 连接建立和维护 在使用TCP传输数据之前&#xff0c;必须先建立连接。这个过程包括三次握手&#xff0c;即客户端和服务器之间…

信息学奥赛一本通 2075:【21CSPJ普及组】插入排序(sort) | 洛谷 P7910 [CSP-J 2021] 插入排序

【题目链接】 ybt 2075&#xff1a;【21CSPJ普及组】插入排序&#xff08;sort&#xff09; 洛谷 P7910 [CSP-J 2021] 插入排序 【题目考点】 1. 排序&#xff1a; 插入排序 插入排序示例&#xff1a; #include <bits/stdc.h> using namespace std; int main() {int…

Rust 围炉札记

文章目录 一、安装 一、安装 Rust in Visual Studio Code Rust 官网 windows系统下Rust环境搭建以及vscode调试环境配置 123