【FOC控制】英飞凌TC264无刷驱动方案simplefoc移植(5)-磁编码器移植AS5600 软件IIC

【FOC控制】英飞凌TC264无刷驱动方案simplefoc移植(5)-磁编码器移植

经过测试发现霍尔编码器的效果不太行,因为霍尔编码器读到的角度是离散的,导致由角度算得的速度也是离散的,二使用simplefoc最关键的数据就是角度和速度,所以我决定使用磁编码器完成下面的操作。

【FOC控制】英飞凌TC264无刷驱动方案simplefoc移植(5)-磁编码器移植AS5600 软件IIC

关于霍尔编码器的移植可以参考我之前的文章

一、【FOC控制】英飞凌TC264无刷驱动方案simplefoc移植(1)-霍尔编码器移植
二、 逐飞科技TC264开源库

; 一、编码器选择

这里选用的一款常见的磁编码器,这款编码器在simplefoc的库中,arduino中比较常见。

【FOC控制】英飞凌TC264无刷驱动方案simplefoc移植(5)-磁编码器移植AS5600 软件IIC

【FOC控制】英飞凌TC264无刷驱动方案simplefoc移植(5)-磁编码器移植AS5600 软件IIC
【FOC控制】英飞凌TC264无刷驱动方案simplefoc移植(5)-磁编码器移植AS5600 软件IIC

二、通讯方式 I²C接口

AS5600支持双线快速模式加I²C-slave

AS5600始终作为I²C总线上的从设备运行。通过开路漏极I/O连接到总线SDA和输入SC

主机MCU(主)启动数据传输,AS5600的地址是0x36(二进制的,0110110)。

【FOC控制】英飞凌TC264无刷驱动方案simplefoc移植(5)-磁编码器移植AS5600 软件IIC

; 三、TC264测试全部程序

3-1初始化定义

宏定义数据:
包括设备的地址,磁编码器的线数,角度寄存器的高位,角度寄存器的低位。
全局变量:
调用所需的函数:


#define Slave_Addr       0x36
#define  AS5600_CPR      4096
#define  RAW_Angle_Hi    0x0C
#define  RAW_Angle_Lo    0x0D

extern long  cpr;
extern float full_rotation_offset;
extern long  _angle_data_prev;
extern unsigned long velocity_calc_timestamp;
extern float _angle_prev;

void AS5600_Init ( void );
float as5600_getAngle(void);
float as5600_getVelocity(void);

3-2初始化函数

iic总线初始化,这里使用的软件iic初始化,软件iic的程序在展示。
清除圈数和角度数据

void AS5600_Init ( void )
{
    IIC_Init();
    _angle_data_prev = 0;
    full_rotation_offset = 0;
    velocity_calc_timestamp=0;
    cpr=AS5600_CPR;
}

3-3 as5600原始数据读取

读取原始数据的时候,直接读取从设备中寄存器中的数据,寄存器的地址 RAW_Angle_Hi 0x0C RAW_Angle_Low 0x0D

因为iic总线一次读的数据是八位的,而实际的角度数据是一个十六位的数据,所以我们只需要读取两次iic总线的数据,然后通过移位加或的操作(dh<

Original: https://blog.csdn.net/weixin_45829708/article/details/126452939
Author: Mount.W
Title: 【FOC控制】英飞凌TC264无刷驱动方案simplefoc移植(5)-磁编码器移植AS5600 软件IIC

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/813385/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球