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

news2024/11/24 6:59:11

近几天一直和师兄在配置驱动芯片,目前的进展是可以通过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.coloradmin.cn/o/1043450.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

探索轻量级模型性能上限,基于GhostNet模型开发构建多商品细粒度图像识别系统

商品图像数据的细粒度识别有别于传统的图像识别任务&#xff0c;本身细粒度识别对于模型特征提取计算能力要求就比较高&#xff0c;在我们前面的一些项目中&#xff0c;涉及到的细粒度识别大多是同一物种下不同亚种的识别&#xff0c;比如&#xff1a;鸟类细粒度识别、狗类细粒…

面试打底稿② 专业技能的第二部分

简历原文 抽查部分 比较熟悉Nacos、Feign、SpringCloud Gateway等微服务的使用&#xff0c;有实际上手项目使用的经验&#xff1b;基本掌握Linux常用命令&#xff0c;了解Linux系统管理、网络管理、生产环境等必用服务&#xff0c;了解Docker的使用&#xff0c;在博客中多有关…

基于微信小程序的宠物用品商城设计与实现(源码+lw+部署文档+讲解等)

文章目录 前言系统主要功能&#xff1a;具体实现截图论文参考详细视频演示为什么选择我自己的网站自己的小程序&#xff08;小蔡coding&#xff09;有保障的售后福利 代码参考源码获取 前言 &#x1f497;博主介绍&#xff1a;✌全网粉丝10W,CSDN特邀作者、博客专家、CSDN新星计…

echarts 地图 visualMap 图例点击事件监听

一、切换位置 二、切换监听 // 切换事件监听 this.myChart.off(datarangeselected); // 为了不触发两次 this.myChart.on(datarangeselected,(e) > {// visualMap change });// 配置如下 visualMap: {type: piecewise,showLabel: true,inverse: true,pieces: [{value: 1,…

2023测试开发必知必会:Pytest框架实战!

应用场景&#xff1a; pytest 框架可以解决我们多个测试脚本一起执行的问题。 它提供了测试用例的详细失败信息&#xff0c;使得开发者可以快速准确地改正问题。它兼容最新版本的 Python。它还兼容 unittest、doctest 和 nose&#xff0c;开箱即用。接下来我们详细了解下pyte…

数字孪生在智慧城市应用场景中的五大特点

数字孪生城市提出至今&#xff0c;已从概念、框架走向落地深耕&#xff0c;逐渐演变成为城市变革新动力和城市转型新路径&#xff0c;是智慧城市发展演进的重要方向。 数字孪生城市建设现已加速步入“技术多维集成、场景创新重构、市场成效导向”的落地实施时期。这一时期&…

HTML的学习 Day02(列表、表格、表单)

文章目录 一、列表列表主要分为以下三种类型&#xff1a;1. 无序列表&#xff08;Unordered List&#xff09;&#xff1a;2. 有序列表&#xff08;Ordered List&#xff09;&#xff1a;将有序列表的数字改为字母或自定义内容li.../li 列表项标签中value属性&#xff0c;制定列…

【RabbitMQ实战】06 3分钟部署一个RabbitMQ集群

一、集群的安装部署 我们还是利用docker来安装RabbitMQ集群。3分钟安装一个集群&#xff0c;开始。 前提条件&#xff0c;docker安装了docker-compose。如果没安装的话&#xff0c;参考这里 docker-compose文件参考bitnami官网&#xff1a;https://github.com/bitnami/contai…

JetBrains 产品安装插件(plugins)的两种方式

安装分为在线、离线两种方式&#xff1a; 在线方式&#xff1a; File > Settings > Plugins 搜索插件 Install 即可 离线方式&#xff1a; 官网&#xff1a;https://plugins.jetbrains.com/ 搜索到插件后&#xff0c;点击 "Get"&#xff0c;选择自己安装的…

obsidian加git备份,同时忽略掉自己不想同步的文件夹

最近想用这个语雀进行知识库的分享&#xff0c;但是这个语雀的会员费太贵了&#xff0c;思来想去还是用 git 比较好&#xff0c;因为这个知识库的内容都是自己的笔记&#xff0c;为了能够访问的更加方便我选择了这个 gitte&#xff0c;而不是 github 我的知识库链接 knowledge …

报错 - 找不到模块“@/...“或其相应的类型声明

项目是vue3jsvite&#xff0c;在 vite.config.js 和 jsconfig.json 的配置无误的情况下&#xff0c;报错找不到模块。 解决方法&#xff1a;卸载重新安装 Error Lens 插件 报错没有啦。可能是插件内部错误&#xff1f;

opencv之利用gpu进行编程

很多朋友工作中会遇到需要使用gpu的例子&#xff0c;gpu就是显卡&#xff0c;大部分对gpu有个模糊的概念&#xff0c;即图像渲染会使用到他&#xff0c;但是它是如何生效的&#xff0c;又说不清楚。本篇文章主要介绍opencv下如何使用gpu进行编程。 基本介绍 opencv下存在gpu可…

软件测试:全链路追踪工具 Zipkin导入、安装(Windows版本)

1.0全链路追踪技术出现的原因 公司内部一个功能的实现&#xff0c;底层可能调用多个应用系统 在调用这个功能的同时&#xff0c;可能会出现多种情况&#xff0c;比如访问较慢&#xff0c;出现错误&#xff0c;可能需要进行定位 所以&#xff0c;我们需要快速定位服务错误点 大…

外汇天眼:SEC起诉“现金流之王”播客主持人涉嫌1100万美元庞氏骗局

美国证券交易委员会&#xff08;SEC&#xff09;今天指控了“现金流之王”播客主持人马修莫蒂尔&#xff0c;涉嫌通过一个庞氏骗局欺骗超过50名投资者&#xff0c;非法筹集了约1100万美元&#xff0c;涉及的票据据称由住宅物业支持。 根据SEC的投诉&#xff0c;俄亥俄州北奥尔姆…

openstack中通过主机mac地址查询主机id

问题&#xff1a; 客户给vm配置了子接口&#xff0c;并且接口上的ip可以ping通&#xff0c;客户需要从众多的主机中找到这台主机 解决办法 一 、通过子接口开放的端口让客户自行匹配自己业务进行查找 此处让客户自行查找即可 二 、通过数据库查找 注意&#xff1a;由于子接…

力扣:110. 平衡二叉树(Python3)

题目&#xff1a; 给定一个二叉树&#xff0c;判断它是否是高度平衡的二叉树。 本题中&#xff0c;一棵高度平衡二叉树定义为&#xff1a; 一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1 。 来源&#xff1a;力扣&#xff08;LeetCode&#xff09; 链接&#xff…

课题学习(二)----倾角和方位角的动态测量方法(基于磁场的测量系统)

磁性测量工具安装在非磁性钻铤内&#xff0c;如图1&#xff0c;以避免磁性随钻测量工具测量时受到外部干扰。 测量系统采用三轴加速度计和三轴磁通门&#xff0c;并采用冗余设计&#xff0c;由于井下振动剧烈&#xff0c;陀螺仪的可靠性将大大降低。为了保证整个钻井过程中系统…

XC2028A CC/CV降压车充芯片,12V降5V,24V降5V,2.5A带限流功能的降压IC

XC2028A具有最佳输入电压、降压转换器&#xff0c;可在CV&#xff08;恒定输出电压&#xff09;模式或CC&#xff08;恒定输出电流&#xff09;模式下工作&#xff0c;OCP电流值由电流感应电阻设置。最大输入电压高达32V&#xff0c;MOSFET&#xff0c;什么是建立在50mΩ高侧和…

搭建BP神经网络

1.数据集下载 2.C语言代码 BP.h #ifndef BP_H_INCLUDED #define BP_H_INCLUDED const int INPUT_LAYER 784; //输入层维度 const int HIDDEN_LAYER 40; //隐含层维度 const int OUTPUT_LAYER 10; //输出层维度 const double LEARN_RATE 0.3; //学习率 const int TRAIN_TIM…

Sringcloud:一、微服务介绍+常用技术框架和技术对比+服务拆分demo

微服务介绍 单体架构 简介 将业务所有功能集中在一个项目中开发&#xff0c;打成一个包部署优点 架构简单部署成本低 缺点 耦合度高&#xff0c;不利于后续更新迭代 分布式架构 简介 每个业务模块作为一个独立项目开发&#xff0c;称为一个服务&#xff0c;但通常仍共用一…