这个闭环驱动系统中,充当闭环反馈的是磁编码器MT6816,它的作用是告诉主控现在电机的转动位置。

一般来说磁编码器和光编码器相比,精度、分辨率和响应时间都要差一些,但优势是对环境要求较低,粉尘、油污、液体等等对磁编码器没有什么影响,不像光码需要清洁和透明,而且近来磁编码器的精度和分辨率都有显著提高,加入了无电池多圈技术,从而解决了多圈无法反馈的老问题,使得磁编码器成为闭环电机系统很好的选择。

MT6816是一款国产磁编码器,和项目相关的主要参数如下:

- 14bit绝对角度数据
- 提供4线SPI接口通信14bit的绝对值数据,也提供增量ABZ输出来替代光电编码器
- 支持最高电机转速为25K rpm

下面这张图将磁铁安装和芯片的相对位置描述得很易懂,MT6816的几何中心必须和电机转动轴中心一致,而且磁铁离芯片的距离尽量小(1-3mm为宜)。这就决定了这个驱动器必须安装在步进电机的尾端,且PCB布板的时候也要注意芯片的放置位置。

我们按照datasheet的4线SPI参考电路来接线,如下图所示
研究下4线SPI是怎么读取磁编码器的角度数据的



这里其实不用管0x05的数据了,一般步进电机的应用中超速的概率不大

从图17和图19可以得到读取0x03和0x04数据的指令为10000011和10000100,即0x83和0x84,由于DI7到DI0为0(没有要写入到芯片的数据),所以在库函数HAL_SPI_TransimitReceive()来读取寄存器的数据时,发送指令为0x8300和0x8400,从而接收到14bit的角度数据Angle[13:0]

uint16_t ReadAngledata(uint16_t _dataTx)
{uint16_t dataRx;GPIOA->BRR = GPIO_PIN_15; // 拉低CSN,准备通信HAL_SPI_TransmitReceive(&hspi1, (uint8_t*) &_dataTx, (uint8_t*) &dataRx, 1, HAL_MAX_DELAY);GPIOA->BSRR = GPIO_PIN_15; //拉高CSN,结束通信return dataRx;
}

完整的读取数据的代码如下(有很详细的注释,应该都能看懂)

void MT6816_SPI_Get_AngleData(void)
{uint16_t data_t[2];  //SPI发送数据uint16_t data_r[2];  //SPI接收数据,即角度数据uint8_t h_count;  //奇偶校验计数用data_t[0] = 0x8300;  //根据MT6816 Datasheet, 0x8300读取0x03寄存器数据data_t[1] = 0x8400;  //同上for(uint8_t i=0; i<3; i++){MT6816_SPI_CS_L();HAL_SPI_TransmitReceive(&hspi1, (uint8_t *)&data_t[0], (uint8_t *)&data_r[0], 1, HAL_MAX_DELAY);MT6816_SPI_CS_H();MT6816_SPI_CS_L();HAL_SPI_TransmitReceive(&hspi1, (uint8_t *)&data_t[1], (uint8_t *)&data_r[1], 1, HAL_MAX_DELAY);MT6816_SPI_CS_H();mt6816_spi.sample_data = ((data_r[0] & 0xFF) << 8 | (data_r[1]) & 0xFF);  //16bits SPI接收数据//以下为奇偶校验h_count = 0;for(uint8_t j=0; j<16; j++){if(mt6816_spi.sample_data & (0x0001 << j))h_count++;}if(h_count & 0x01){mt6816_spi.pc_flag = false;}else{mt6816_spi.pc_flag = true;break;  //奇偶校验结束}}if(mt6816_spi.pc_flag){mt6816_spi.angle = mt6816_spi.sample_data >> 2;  //前14bits 角度数据mt6816_spi.no_mag_flag = (bool) (mt6816_spi.sample_data & 0x0010);  //弱磁标志位,根据datasheet}
}

有了电机的旋转角度数据,就可以进行下一步的闭环计算等工作了。

未完待续

STM32自学笔记15-步进电机驱动项目-磁编码器MT6816驱动相关推荐

  1. 小辣记【野火stm32自学笔记】点灯仪式

    前记 置位:|= 清零:&=~ 使用寄存器点亮LED灯 让绿灯亮PB0 PB0连接3.3V 低电平亮 端口输出寄存器ODR APB2中的GPIO端口B的基地址为0x40010C00 地址偏移为 ...

  2. STM32自学笔记-6-RS485串口通信

    RS232的通信逻辑"1"的电平为-5V~-15 V,逻辑"0"的电平为+5 V-+15 V.这样高的电平和TTL不兼容,而且容易烧坏接口电路芯片,共地的方式也 ...

  3. stm32应用笔记:如何给项目选取合适的ROM和RAM参数

    如何选取合适的存储器参数 1.单片机的存储器原理: 1.1stm32单片机和PC机在程序加载方面的不同: **不同于和PC机器把硬盘中的程序加载到内存之中,单片机在运行的过程中指令和数据是分开在两个存 ...

  4. STM32自学笔记-4-SPI和Flash芯片

    I2C中曾经说过其实目前基本用Flash而不用E2PROM,E2PROM最大的特点是按字节操作,Flash则是按扇区操作.目前STM32单片机教程里基本上都是用W25Q128这款SPI Flash芯片 ...

  5. STM32自学笔记-7-CAN总线通信

    STM32F103有1个CAN控制器,可以配合逻辑分析仪来测试CAN和PC的通信.在此之前先学习一下CAN的基础知识. CAN 控制器根据两根线上的电位差来判断总线电平.总线电平分为显性电平(0),C ...

  6. STM32自学笔记ADC多通道扫描

    STM cubemx STM32F1 ADC多通道采集(非DMA) ADC模式介绍: 扫描模式: 多通道采集必须开启,这一项CUBE已经默认设置好了.这个模式就是自动扫描你开启的所有通道进行转换,直至 ...

  7. python自学笔记15之实例之绘图、dataframe操作、读写csv,excle

    用Python绘图,借助强大的numpy和matplotlib import numpy as np import matplotlib.pyplot as plt import pandas as ...

  8. STM32入门笔记(02):定时器之定时器中断、输入捕获和PWM输出(SPL库函数版)

    目录 定时器 8个定时器 定时器功能 定时器中断 常用通用定时器的寄存器 定时器中断实验目的: 定时器库函数及步骤 实验程序讲解 PWM 简介 STM32 PWM工作过程 PWM模式1 与 PWM模式 ...

  9. STM32控制步进电机:基于HAL库定时器中断的闭环步进电机驱动+精准控制脉冲数

    STM32控制步进电机:基于HAL库定时器中断的闭环步进电机驱动+精准控制脉冲数 一.步进电机闭环驱动器 二.CubeMx配置 1.Clock Configuration 2.脉冲端 定时器配置 3. ...

最新文章

  1. 压缩网络模型,或者是融合多个神经网络
  2. 【译】Spring 官方教程:Spring Security 架构
  3. 新手站长们如何利用10分钟的时间内多写高质量的原创量?
  4. MySql 数据库 - 重置数据库、重置初始密码方法,数据库初始化方法,长时间不用忘记密码暴力解决方法
  5. java 6 26_WebSphere7.0 Java6.26安装
  6. Qt QObject::connect: Parentheses expected错误原因
  7. python编程第四版_清华编程教授强力推荐《Python编程》,指导你如何学习python
  8. WifiManager的getScanResults()返回列表为0
  9. 张志华:机器学习的发展历程及启示
  10. Python爬虫入门之使用Redis+Flask维护动态代理池
  11. 催眠与大脑的信息处理
  12. 遗传算法实例解析(python)
  13. css黄金色渐变值,金色的rgb值是多少
  14. java 学生学籍管理系统_JAVA测验—学生学籍管理系统
  15. html混淆压缩,JavaScript的压缩和混淆
  16. Centos7 -- 用三种方法设置代理服务器上网
  17. 狄利克雷分布公式_Dirichlet Distribution(狄利克雷分布)与Dirichlet Process(狄利克雷过程)...
  18. IT从业人员面试经典70问答
  19. 【黎乙丙】几种ps调色工具及使用方式
  20. html 增加选项,添加标签——给定标签选项

热门文章

  1. 感谢同济子豪兄的分享-关于RCNN论文的学习(二)
  2. 程序员的英语学习!对于像进一步提升自己的人来说,很重要哟!
  3. yum安装报错:“Could not resolve host: mirrors.aliyun.com; Unknown error“--:-- ETA Trying
  4. 基于FPGA的Bubble 游戏开发
  5. sql怎么实现线性排序_如何在SQL中实现排序间接
  6. win7无法连接打印机拒绝访问_win7共享打印机无法连接怎么办?win7连不上共享打印机解决方法...
  7. java.nio.channels.UnresolvedAddressException
  8. 使用Matlab画出复杂网络博弈中热图(三维图)(学术论文)
  9. Spinach和发牌姬
  10. IntelliJ IDEA 2018.2.4 x64破解