玩转X-CTR100 l STM32F4 l 电机正交编码器

我造轮子,你造车,创客一起造起来!塔克创新资讯【塔克社区 www.xtark.cn 】【塔克博客 www.cnblogs.com/xtark/ 】

本文介绍X-CTR100控制器的电机正交编码器,X-CTR100具有2路32位AB项正交编码器和3路16位正交编码器,共5路。
可用于电机转速和角度测量,用于智能车、机械臂、机器人制作。
原理
什么是正交?如果两个信号相位相差90度,则这两个信号称为正交。由于两个信号相差90度,因此可以根据两个信号哪个先哪个后来判断方向。

正交编码器(Quadrature Encoder)是一种用于测量旋转速度和方向的传感器,通过积分(累加)运算后,还可以用来测算距离。最常见的正交编码器有两个输出信号:A相 和 B相,有些编码器会有 Z相 的校准功能(用于消除累计误差)。「正交」一词来源于 AB 两个信号的特征,一般情况下 A相 和 B相 的输出信号总是有 π/2 的相位差。

上图中 A 和 B 分别连接到两个传感器单元上,黑白相间的圆环称之为「栅格」。传感器和栅格的实现方式有很多种:反射式传感器+不同反光率的栅格;对射式传感器+镂空光栅;霍尔传感器+磁极圆环;触点+导电轨道;等等。
例程
初始化编码器,每隔500ms采样一次编码器数值并串口输出显示。
硬件说明
硬件资源:
- 串口UART1
- RA、RB扩展接口(TIM2 32AB正交编码器接口)
- 具有正交编码器电机(需自备)
硬件连接:

软件生态
X-SOFT软件生态,X-API扩展文件如下。
ax_encoder.c——X-CTR100 电机正交编码器源文件
ax_encoder.h——X-CTR100 电机正交编码器头文件
接口函数
|
void AX_ENCODER_TIM2_AB_Init(uint32_t cycle); //编码器AB初始化(32位) uint32_t AX_ENCODER_TIM2_AB_GetCounter(void); //编码器AB获取计数器数值 void AX_ENCODER_TIM2_AB_SetCounter(uint32_t count); //编码器AB设置计数器数值
void AX_ENCODER_TIM5_CD_Init(uint32_t cycle); //编码器CD初始化(32位) uint32_t AX_ENCODER_TIM5_CD_GetCounter(void); //编码器CD获取计数器数值 void AX_ENCODER_TIM5_CD_SetCounter(uint32_t count); //编码器CD设置计数器数值
void AX_ENCODER_TIM3_GH_Init(uint16_t cycle); //编码器GH初始化 uint16_t AX_ENCODER_TIM3_GH_GetCounter(void); //编码器GH获取计数器数值 void AX_ENCODER_TIM3_GH_SetCounter(uint16_t count); //编码器GH设置计数器数值
void AX_ENCODER_TIM4_KL_Init(uint16_t cycle); //编码器KL初始化 uint16_t AX_ENCODER_TIM4_KL_GetCounter(void); //编码器KL获取计数器数值 void AX_ENCODER_TIM4_KL_SetCounter(uint16_t count); //编码器KL设置计数器数值
void AX_ENCODER_TIM1_OP_Init(uint16_t cycle); //编码器OP初始化 uint16_t AX_ENCODER_TIM1_OP_GetCounter(void); //编码器OP获取计数器数值 void AX_ENCODER_TIM1_OP_SetCounter(uint16_t count); //编码器OP设置计数器数值 |
软件说明
函数初始化编码器,设定编码器计数周期为60000,设置当前值为30000,while循环每隔500ms采样编码器一次,主程序代码如下。
|
int main(void) { //X-CTR100初始化 AX_Init(115200); printf("***电机正交编码器例程***\r\n\r\n");
//模块初始化及配置 AX_ENCODER_TIM2_AB_Init(60000); //32位正交编码器初始化,计数周期60000 AX_ENCODER_TIM5_CD_Init(60000); //32位正交编码器初始化,计数周期60000 AX_ENCODER_TIM3_GH_Init(60000); //16位正交编码器初始化,计数周期60000 AX_ENCODER_TIM4_KL_Init(60000); //16位正交编码器初始化,计数周期60000 AX_ENCODER_TIM1_OP_Init(60000); //16位正交编码器初始化,计数周期60000
//设置编码器当前计数值为30000 AX_ENCODER_TIM2_AB_SetCounter(30000); AX_ENCODER_TIM5_CD_SetCounter(30000); AX_ENCODER_TIM3_GH_SetCounter(30000); AX_ENCODER_TIM4_KL_SetCounter(30000); AX_ENCODER_TIM1_OP_SetCounter(30000);
//X-API测试:5路正交编码器测试 printf("*5路正交编码器测试\r\n");
while (1) { printf("*AB:%5d CD:%5d GH:%5d KL:%5d OP:%5d\r\n", AX_ENCODER_TIM2_AB_GetCounter(), AX_ENCODER_TIM5_CD_GetCounter(), AX_ENCODER_TIM3_GH_GetCounter(), AX_ENCODER_TIM4_KL_GetCounter(), AX_ENCODER_TIM1_OP_GetCounter()); AX_Delayms(500); } } |
实现效果
X-CTR100按照编码器接口定义连接编码器,编码器A、B接口线序可更换。手动转动编码器可观察编码器数值变化,一个方向转动编码器数值增加,另一个方向转动编码器数值减小。

参考
https://zhuanlan.zhihu.com/p/20268680
玩转X-CTR100 l STM32F4 l 电机正交编码器的更多相关文章
- 玩转X-CTR100 l STM32F4 l 舵机控制
我造轮子,你造车,创客一起造起来!塔克创新资讯[塔克社区 www.xtark.cn ][塔克博客 www.cnblogs.com/xtark/ ] 本文介绍X-CTR100控制器的舵机控制,X-CTR ...
- 玩转X-CTR100 l STM32F4 l ADC 模拟数字转换
我造轮子,你造车,创客一起造起来!塔克创新资讯[塔克社区 www.xtark.cn ][塔克博客 www.cnblogs.com/xtark/ ] 本文介绍X-CTR100控制器 AD转换接 ...
- 玩转X-CTR100 l STM32F4 l DRV8825 A4988 步进电机控制
我造轮子,你造车,创客一起造起来!塔克创新资讯[塔克社区 www.xtark.cn ][塔克博客 www.cnblogs.com/xtark/ ] 本文介绍X-CTR100控制器控制步进电机 ...
- 玩转X-CTR100 l STM32F4 l MPU6050加速度陀螺仪传感器
我造轮子,你造车,创客一起造起来!塔克创新资讯[塔克社区 www.xtark.cn ][塔克博客 www.cnblogs.com/xtark/ ] 本文介绍X-CTR100控制器 板载加速度 ...
- 玩转X-CTR100 l STM32F4 l DSP指令集性能测试
我造轮子,你造车,创客一起造起来!塔克创新资讯[塔克社区 www.xtark.cn ][塔克博客 www.cnblogs.com/xtark/ ] 本文介绍X-CTR100控制器 DSP库的 ...
- 玩转X-CTR100 l STM32F4 l X-CTR100与树莓派搭建机器人平台
我造轮子,你造车,创客一起造起来!塔克创新资讯[塔克社区 www.xtark.cn ][塔克博客 www.cnblogs.com/xtark/ ] 本文介绍X-CTR100控制器与树莓派Linux系统 ...
- 玩转X-CTR100 l STM32F4 l 基础例程printf、LED、蜂鸣器、拨码开关、位带操作
我造轮子,你造车,创客一起造起来!塔克创新资讯[塔克社区 www.xtark.cn ][塔克博客 www.cnblogs.com/xtark/ ] 本文介绍X-CTR100控制器基础板载资源 ...
- 玩转X-CTR100 l STM32F4 l PS2无线手柄
我造轮子,你造车,创客一起造起来!塔克创新资讯[塔克社区 www.xtark.cn ][塔克博客 www.cnblogs.com/xtark/ ] SONY的PS2无线手柄是索尼游戏机的遥控手柄,控制 ...
- 玩转X-CTR100 l STM32F4 l FPU单精度浮点性能测试
我造轮子,你造车,创客一起造起来!塔克创新资讯[塔克社区 www.xtark.cn ][塔克博客 www.cnblogs.com/xtark/ ] 本文介绍X-CTR100控制器如何开启ST ...
随机推荐
- Visio 画图去掉页边距(图形四周的空白区域)的解决办法
步骤如下: 1.打开Visio对象后在[文件]菜单[选项]菜单项上单击,然后单击[自定义功能区]. 2.在[自定义功能区]的主选项卡中找到[开发工具]复选框,打上勾,单击确定. 3.在Visio对象的 ...
- AtCoder 杂题训练
前言: 因为要普及了,今年没一等就可以退役去学文化课了,所以暑假把历年noip普及组都刷了一遍,离noip还有50+天,想弄点强化训练什么的. 想了想,就这些天学文化课之余有空就把AtCoder之前那 ...
- 初始 DQN 程序 所遇到的问题
初始 DQN 程序 所遇到的问题 最近在看 DQN,但是想试试别人放出来的 code,但是发现,额,各种问题,在此记录,以备不时之需! 问题1. wangxiao@GTX980:~/Documents ...
- python如何安装第三方库
1.python集成开发环境pycharm如何安装第三方库 http://blog.csdn.net/qiannianguji01/article/details/50397046 有的时候安装不上第 ...
- Spring生态顶级项目说明
1.Spring IO platform 说明:用于系统部署,是可集成的,构建现代化应用的版本平台 2.Spring Boot 说明:旨在简化创建产品级的 Spring 应用和服务,简化了配置文件,使 ...
- js 几个重要的特性
背景: 语法借鉴 java 函数借鉴 scheme 原型继承借鉴 self 正则表达式借鉴 Perl 1.动态语言 函数的定义和调用 形参与实参不需要一致 形参可由 argu ...
- Codeforces 834C - The Meaningless Game
834C - The Meaningless Game 数学. 思路1:判断a•b能不能化成v3且a%v==0且b%v==0.v可以直接用pow求(或者用cbrt),也可以二分求:还可以用map映射预 ...
- ScriptableObjec 的简单使用
1.ScriptableObject的创建(一): using System.Collections; using System.Collections.Generic; using UnityEng ...
- ehcache入门基础示例
一:目录 EhCache 简介 Hello World 示例 Spring 整合 二: 简介 1. 基本介绍 EhCache 是一个纯Java的进程内缓存框架,具有快速.精干等特点,是Hibernat ...
- 配置rsync 同步数据 rpm包安装rsync及配置
[root@Hammer home]# rpm -qa |grep rsync #检查系统是否安装了rsync软件包rsync-2.6.8-3.1[root@Hammer CentOS]# rpm - ...