机器人开发过程中,对于直流电机来说,编码器至关重要,它不仅可以使我们对电极进行精确的速度闭环,位置闭环,还可以通过时间积分,根据运动学关系,获得速度、位置等信息

STM32的定时器有编码器模式,大大的方便我们的开发

使用STM32cubeMX配置工具,使得这个过程变得无比简单

我使用STM32cubeMX 开发一个机器人中 使用两个定时器TIM3 和TIM4编码器模式读取编码器的值,做闭环控制
##STM32定时器编码器模式(Encoder Mode)

CubeMX配置过程

选择芯片过程不再赘述

RCC: HSE高速总线始终改为外部晶振

SYS: DEBUG选择 SW模式

TIM3 TIM4 配置成定时器模式 Combined Channels: Encoder Mode

TIM3 TIM4 定时器分频配置: 这里分频数要注意一下,Prescaler 直接给0 ,Counter Period给65535,下面的Encoder Mode 如果是TI1的话就是只计数上升沿的脉冲,如果是TI2 andTI2 就是上下沿都计,脉冲是前一个的两倍

TIM Encoder GPIO上拉模式配置,两个定时器四个引脚,全部改成 Pull-Up,即上拉模式,主要用于没有外部上拉的编码器读取时,可以确定引脚电平,防止出错

时钟树配置

工程配置 IDE选择 MDK V5

第一栏里选择复制必要的库文件 第二栏里勾选将文件分为.c和.h

最后点击生成文件
注意 !
工程路径绝对不能有中文名,否则会报错,无法复制stm32的库文件到你的工程

keil中添加处理函数

打开生成的文件,在main.c中初始化的时候开启编码器计数

HAL_TIM_Encoder_Start(&htim3, TIM_CHANNEL_ALL);
HAL_TIM_Encoder_Start(&htim4, TIM_CHANNEL_ALL);

在循环中调用 __HAL_TIM_IS_TIM_COUNTING_DOWN 可以获得当前电机的转向 0为正、1为负

DirectionA = __HAL_TIM_IS_TIM_COUNTING_DOWN(&htim3);
DirectionB = __HAL_TIM_IS_TIM_COUNTING_DOWN(&htim4);

在循环中调用 __HAL_TIM_GET_COUNTER 获取计数器的计数值,即编码器的脉冲数

CaptureNumberA=__HAL_TIM_GET_COUNTER(&htim3);
CaptureNumberB=__HAL_TIM_GET_COUNTER(&htim4);

脉冲计算:

我的电机编码器是AB相位差90度,栅格数是96,无减速器,码盘转一圈,A相和B相分别输出96个矩形脉冲,总共输出192个脉冲。
如果使用 Encoder Mode TI1 或者Encoder Mode TI2,码盘转一圈得到的计数值为192。
如果使用Encoder Mode TI1 andTI2 那么得到的脉冲数为384。



电机转过的角度
如果使用Encoder Mode TI1 andTI2 那么

电机真实方向= 0为正、1为负
电机真实角度= 得到的脉冲数 / 384 * 360

STM32CUBEMX F103 HAL库开发 两路定时器的Encoder编码器模式相关推荐

  1. [野火]STM32 F103 HAL库开发实战指南笔记之基础总结

    1.本书配套的仿真器为 Fire-Debugger,遵循 ARM 公司的 CMSIS-DAP 标准,支持所有基于 Cortex-M 内核的单片机,常见的 M3.M4 和 M7 都可以完美支持.Fire ...

  2. [野火]STM32 F103 HAL库开发实战指南笔记之简单外设总结

    1.GPIO编程总结 使能 GPIO 端口时钟: 初始化 GPIO 目标引脚为推挽输出模式: 编写简单测试程序,控制 GPIO 引脚输出高.低电平. 这部分宏控制 LED 亮灭的操作是直接向 BSRR ...

  3. STM32CUBEMX F103 HAL库开发之 USB虚拟串口

    今天心血来潮想写点东西 做比赛这么久了,应该写点东西,一是为了给自己学的知识一个总结,二是可以锻炼自己的写作能力与表达能力,帮助他人避免自己走过的坑 stm32 USB VPC虚拟串口简介 很多stm ...

  4. STM32CubeMX与HAL库学习--基本定时器定时中断

    STM32CubeMX与HAL库学习--基本定时器定时中断 背景 STM32CubeMX生成初始化代码 在MDK-ARM里编辑代码 其他 背景 本人小白,最近在学着使用STM32CubeMX与HAL库 ...

  5. 基于stm32cubeMX的stm32f103c8t6的HAL库开发的智能小车------小车接线和材料准备

    我的第一辆智能小车 提示:小编也是初学者,本文适用于想完成一个基础智能四轮车的初学者,大佬还请勿喷,欢迎各位指出错误的地方 暑假在家无聊,刚好也在学习STM32的HAL库,就想着做个小车巩固自己学到的 ...

  6. STM32+RS485+Modbus-RTU(主机模式+从机模式)-标准库/HAL库开发

    modbus协议 完成modbus协议的编程之后,设备可以分别作为modbus协议的主机或者从机进行测试,使用模拟软件测试完毕后,完整代码以三个版本的形式进行介绍 1.版本一:使用串口接收数据超时完成 ...

  7. STM32F4 HAL库开发 -- 串口

    一.串口介绍 串口设置包含:开启串口时钟.设置响应的IO口模式.设置波特率.数据位长度.奇偶校验位.DMA等信息. 具体参看:STM32开发 – 串口详解 二.函数 1.串口参数初始化,并使能串口. ...

  8. STM32CubeMX与HAL库学习--简单的CAN回环测试

    STM32CubeMX与HAL库学习--简单的CAN回环测试 前言 STM32CubeMX生成初始化代码 在MDK-ARM里编辑代码 其他 后续 前言 本人小白,最近看了CAN协议与STM32的bxC ...

  9. (STM32CubeMx生成HAL库)STM32F103C8T6最小系统板,4个按键分别控制42混合步进电机启停、变向、加减速

    用的定时器1通道1生成pwm脉冲,改变ARR值改变脉冲频率从而实现调速,采用按键中断控制 直接上图 引脚定义: PA5 EN 使能   PA7 DIR/CW    方向 PA8 PUL/CLK     ...

最新文章

  1. jQuery学习- 内容选择器
  2. [WinAPI] API 4 [注册][创建][消息][第一个框架类窗口]
  3. Egret之位图字体
  4. 华为鸿蒙系统明年公测,华为终于发布新系统,即将与安卓系统告别,这批机型可以申请公测...
  5. xgboost与gbdt的区别
  6. IDEA開發 java web 初步
  7. TCP 之 RST 原因分析
  8. Webpack实战(一):基础入门-教你轻松搞定Webpack打包工具安装及参数配置
  9. 2.15_graph_图
  10. oracle procedure可以执行非常复杂的语句吗,oracle-存储过程(procedure)
  11. 小程序之支付(前端)
  12. iOS:Reachability网络监听
  13. swing简单的打字游戏源码
  14. Linux安装vim命令
  15. Dragonfly单机部署比redis快25倍的缓存中间件
  16. Unity中常用的游戏存档/读档技术
  17. 中国石油大学(北京)-《中国近现代史纲要》第二阶段在线作业
  18. 5G系统——MICO模式
  19. mysql meb备份_MySQL的企业备份(MEB)
  20. linux more 乱码,Linux 中vim/more/cat/tail/head 命令查看文件显示乱码

热门文章

  1. Cognos入门教程
  2. libuv访问mysql_libuv源码剖析
  3. libuv使用的若干个坑
  4. IE不能下载MSG文件的解决方案
  5. 亿级流量电商详情页系统的大型高并发与高可用缓存架构实战 目录
  6. 警惕“电子发票”邮件,多家企业中招
  7. 数据分析(一)- 数据分析基础及matplotlib
  8. C语言程序课程设计—读心术
  9. MinIO The access key ID you provided does not exist in our records
  10. Acquisition Attempt Failed!!! Clearing pending acquires. While trying to acquire a needed new resour