这是”四轮车驱动控制”系列,分多个小节来介绍:

1. 八.四轮车驱动开发之一:正/逆向运动学分析

2. 九.四轮车驱动开发之二: 配置PWM驱动直流电机

3. 十.四轮车驱动开发之三: 巧用编码器获取电机转速信息

4. 十一.四轮车驱动开发之四: 理解直流电机PID控制器

5. 十二.四轮车驱动开发之五: 由浅至深理解6轴陀螺仪姿态解算算法

一.编码器简介

编码器是一种安装在直流电机同心轴上的将电机转子的角位移或者角速度转换成一连串数字脉冲的旋转式传感器. 因为编码器输出的是标准的方波, 我们可以使用MCU,单片机等直接读取.

从编码器输出数据类型上分, 可以分为增量式编码器和绝对式编码器。

从编码器检测原理上来分, 还可以分为光学式、 磁式、 感应式、 电容式。 常见的是光电编码器(光学式) 和霍尔编码器(磁式) 。为判断转动转向, 一般输出两组存在一定相位差的方波信号.

下图为光电编码器和MCU连接使用示意图:

二. 编码器脉冲信号读取

如图所示: 编码器除正负电源连接线外,还有A,B两路数字脉冲输出信号, 把这两路信号线对接MCU的两个GPIO输入引脚上.

对于编码器脉冲信号读取,主要包括电机旋转方向电机转速.

一般使用 M 法测速确定电机的转速, 即通过测量单位时间内 A 相输出的脉冲数来得到速度信息。而对于B相的输入信号测不用处理.

1.对于不带编码计数器功能的单片机或使用STM32但timer不够用的情况

对于两个驱动电机的情况,我们可以通过配置外部GPIO中断读取, 比如把左轮的编码器 A 相输出接到处理器的外部中断输入口, 并通过跳变沿触发中断;把右轮的编码器 A 相输出接到处理器的另一外部中断输入口, 并通过跳变沿触发中断 (注左右轮的B相不用配置中断,仅配置GPIO输入模式即可) . 然后分别在左右轮分A相对应的外部中断服务函数里面, 通过读取 B 相引脚的电平来确定正反转。 如当 A 相来一个跳变沿的时候, 如果 B 相是高电平就认为是正转, 低电平就认为是反转。 并依靠正反转信息对编码器脉冲次数进行累加统计,进而按照一定周期读取此编码器脉冲次数统计值,按照周期时间计算出左右轮的瞬时速度.

一个大致的代码如下(相关寄存器的配置代码略):

extern uint8_t volatile LeftEncoderCount;
extern int32_t volatile LeftEncoderTotal;
extern int8_t  volatile LeftEncoderDirection;
extern uint8_t volatile  RightEncoderCount;
extern int32_t volatile RightEncoderTotal;
extern int8_t volatile   RightEncoderDirection;//左轮编码器A相信号中断处理程序, 右轮类似
void EXTIx_IRQHandler(void)  //EXTIx表某中断, 用以处理左轮电机A相脉冲信号
{//统计左轮周期内转速,单位周期内读取完毕后务必清0.    右轮类似LeftEncoderCount++;//读取左轮编码器B相相位电平值if( GPIOD->IDR & GPIO_Pin_x ){ //若为高电平.   GPIO_Pin_x表某引脚LeftEncoderDirection = -1; //标记当前为反向转动,周期性读取后务必清0LeftEncoderTotal--;//总编码器个数减1}else{LeftEncoderDirection = 1; //标记当前为正向转动,周期性读取后务必清0LeftEncoderTotal++;//总编码器个数加1}EXTI_ClearITPendingBit(EXTI_Linex);//EXTI_Linex表某中断引脚
}

 2. 对于自带编码器计数接口或利用Timer可实现计数的MCU,如STM32

对于自带编码器计数接口的MCU,可以直接使用硬件计数器,对编码器脉冲信号进行计数,根据需要确定是否再读取完毕后对计数器进行清0。

例如下面一个例子,就是对一个Timer进行配置,使其对左轮的编码器A相脉冲方波信号进行计数.(同样因为寄存器差别过大,相关寄存器的配置代码略):

//单位周期内读取编码器计数值. 参数指定读取哪个轮的转速,与定时器一一对应
int Read_Encoder(u8 timerX)
{int EncoderCount;    switch(timerX){case 2:  EncoderCount = (short)TIM2 -> CNT;  //对应左轮编码器计数器值,正负代表旋转方向TIM3 -> CNT=0; //因为是统计转速,也为了避免计数器溢出,读取完毕立即清0break;  case 3:  EncoderCount = (short)TIM3 -> CNT;  //对应又轮编码器计数器值,正负代表旋转方向TIM4 -> CNT=0;  //同上,读取完毕立即清0break;  default:  EncoderCount = 0;}return EncoderCount;
}

由于一般MCU的Timer计数寄存器都有长度限制,比如16位,最大计数值为65535,超过会自动清零重装. 所以一般不要使用计数器累计求总编码器值.

综上,有了左右轮的转动方向,编码器脉冲瞬时计数个数,或累计编码器总脉冲个数,还要根据小车的物理结构,做编码器脉冲个数(单位:个)和实际小车位移(单位:m)之间的换算,以及编码器脉冲计数速度(个/秒)和车速(米/秒)之间的换算.  到此, 我们就可以把目标车速和编码器读取值传给PID控制器,对小车的驱动轮进行精准的速度和位移控制.

十.四轮车驱动开发之三: 巧用编码器获取电机转速信息相关推荐

  1. 十二.四轮车驱动开发之五: 由浅至深理解6轴陀螺仪姿态解算算法<上>

    这是"四轮车驱动控制"系列,分多个小节来介绍: 1. 八.四轮车驱动开发之一:正/逆向运动学分析 2. 九.四轮车驱动开发之二: 配置PWM驱动直流电机 3. 十.四轮车驱动开发之 ...

  2. 十一.四轮车驱动开发之四:理解直流电机PID控制器

    这是"四轮车驱动控制"系列,分多个小节来介绍: 1. 八.四轮车驱动开发之一:正/逆向运动学分析 2. 九.四轮车驱动开发之二: 配置PWM驱动直流电机 3. 十.四轮车驱动开发之 ...

  3. 十四. 四轮车驱动开发之五: 由浅至深理解6轴陀螺仪姿态解算算法<下>

    十二.四轮车驱动开发之五: 由浅至深理解6轴陀螺仪姿态解算算法(上) 十三.四轮车驱动开发之五: 由浅至深理解6轴陀螺仪姿态解算算法(中) 十四.四轮车驱动开发之五: 由浅至深理解6轴陀螺仪姿态解算算 ...

  4. 十三. 四轮车驱动开发之五: 由浅至深理解6轴陀螺仪姿态解算算法<中>

    十二.四轮车驱动开发之五: 由浅至深理解6轴陀螺仪姿态解算算法(上) 十三.四轮车驱动开发之五: 由浅至深理解6轴陀螺仪姿态解算算法(中) 十四.四轮车驱动开发之五: 由浅至深理解6轴陀螺仪姿态解算算 ...

  5. shopify api php 开发,Shopify插件开发基础篇-获取店铺信息

    今天我们讲一下 Shopify 插件应用开发最基础的部分获取店铺信息. 第一步,在开始撸码之前,我们先要获取应用的 API 秘钥  第二步,撸码这件事我一贯的原则是不重复造轮子,工具在无明显缺陷情况 ...

  6. SharePoint 2013 APP 开发示例 (二)获取用户信息

    这个示例里,我们将演示如何获取用户信息: 1. 打开 Visual Studio 2012. 2. 创建一个新的  SharePoint 2013 app: UserProfileTest. 3. 选 ...

  7. 公众号h5获取手机号权限_微信公众号开发之网页授权(获取用户信息)

    这次暑假留在学校参与工作室的项目,对微信公众号比较感兴趣,所以参与这方面的学习研究. 昨天完成了关于网页授权,获取用户信息方面的功能,所以乘热打铁,写上一篇.实现本篇涉及的 功能,还需要完成一些基础. ...

  8. 驱动开发之注册表:获取注册表HKEY_CURRENT_USER对应路径(SID)

    在内核中hook注册表必须要使用转换后的路径,例如HKEY_LOCAL_MACHINE的路径对应的是"\Registry\Machine",但是HKEY_CURRENT_USER相 ...

  9. 微信公众号开发之订阅号如何获取用户信息(一)

    最近在做微信的公众号的开发.之前是在一个认证过的微信服务号上开发一些相应的功能. 比如说 对认证过的微信服务好进行 自定义菜单的开发,模板消息的回复以及关键词回复的功能. 但是目前新接了这样一个需求: ...

最新文章

  1. 7 OC 中class 类的结构
  2. 常用 CSS 选择器
  3. 适合小团队协作、任务管理和进度跟踪的项目管理工具
  4. python搜索列表内_使用Python在另一个List中搜索列表的值
  5. 支持向量机实现鸢尾花数据集分类matlab
  6. RenderSection
  7. matplotlib条形图
  8. oracle官网下载plsql,Oracle、OracleClient、PLSQL下载安装配置(64位)
  9. mysql创建表代码_MySQL------代码建表
  10. cisp软考书籍【注册信息安全专业人员培训教材】
  11. 0130更新:完美wine QQ2011正式版(5074)
  12. SSM毕设项目音乐鉴赏网站前端开发sl86x(java+VUE+Mybatis+Maven+Mysql)
  13. 图文并茂:超可爱的12星座猫
  14. 人从哪里来又到哪里去
  15. Kafka生产者是如何发送消息的?
  16. Ubuntu14.04解决关机不断电问题
  17. 慎用!!! rm -rf 潜藏着巨大的危险!
  18. Google play ASO 关键字指南
  19. 文字转语音 相关软件
  20. 二极管常用型号与应用整理

热门文章

  1. AutoHotkey进阶--- 修改脚本的图标
  2. Markdown和快捷键
  3. SwiftUI 设置底部TabBar(tabItem)
  4. EVE船模处理-(转载自-Win的小站)
  5. 手机拍照软件for android1.6,画画相机软件
  6. 苹果手机丢了怎么定位找回
  7. POI版本对比jar包升级后代码报错修正
  8. 我国首次发布IT从业人员心理特征研究报告
  9. QQ空间说说尾巴修改器
  10. ORACLE ORA-01688: unable to extend table 的错误处理