stm32-绝对值编码器BRITER

一、绝对值编码器

        绝对值编码器可以认为是与增量式编码器相对的一种编码器,与使用增量式编码器读取脉冲值不同,绝对值编码器可以直接读取编码器所处的角度值。根据量程,绝对值编码器也可以分为单圈编码器和多圈编码器。实际上根据每个厂家设计的编码器的通讯方式也可以再细分,这里我不再赘述。实验室使用绝对值编码器的目的是能够利用正交两个绝对值编码器,设计一个准确度高的里程计,借此机会学习一下绝对值编码器。

         本文所使用的绝对值编码器是BRITER的1024分度CAN总线绝对值编码器,其官方文档如下:

CAN说明书通信协议+单圈V2.2.pdficon-default.png?t=N7T8https://www.briter.net/web/images/upload/download/89/img/003%20CAN%E8%AF%B4%E6%98%8E%E4%B9%A6%E9%80%9A%E4%BF%A1%E5%8D%8F%E8%AE%AE+%E5%8D%95%E5%9C%88V2.2.pdf

         根据官方文档提供的方法可以轻松写出一个编码器读取的示例,我这里为了便于移植,直接写成库的形式,仅供参考。

二、软件编写

  1.STM32CubeMX配置

          这里我们需要使用CAN通信,需打开CAN的RX中断,波特率配置参考官方文档,默认波特率为500KHz(可以更改)

 

  我这里打开USART1便于与PC通信,同样需打开中断,用于printf的重定向 

  2.使用BTR_Encoder库

  我参考了已有的CAN库和优快云上少有的资料,写了一套库程序,供各位食用

  BTR_Encoder.h:编码器外设库头文件

#ifndef BTR_ENCODER__H
#define BTR_ENCODER__H

#include "stm32f4xx_hal.h"
#include "stm32f4xx_hal_can.h"

extern CAN_HandleTypeDef hcan1;
#define Encoder_CAN hcan1  //定义用于编码器的CAN句柄

#define Encoder_Baud_500K ((uint8_t)0x00)
#define Encoder_Baud_1M   ((uint8_t)0x01)
#define Encoder_Baud_250K ((uint8_t)0x02)
#define Encoder_Baud_125K ((uint8_t)0x03)
#define Encoder_Baud_100K ((u
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值