STM32CUBEMX F103 HAL库开发 两路定时器的Encoder编码器模式
机器人开发过程中,对于直流电机来说,编码器至关重要,它不仅可以使我们对电极进行精确的速度闭环,位置闭环,还可以通过时间积分,根据运动学关系,获得速度、位置等信息
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编码器模式相关推荐
- [野火]STM32 F103 HAL库开发实战指南笔记之基础总结
1.本书配套的仿真器为 Fire-Debugger,遵循 ARM 公司的 CMSIS-DAP 标准,支持所有基于 Cortex-M 内核的单片机,常见的 M3.M4 和 M7 都可以完美支持.Fire ...
- [野火]STM32 F103 HAL库开发实战指南笔记之简单外设总结
1.GPIO编程总结 使能 GPIO 端口时钟: 初始化 GPIO 目标引脚为推挽输出模式: 编写简单测试程序,控制 GPIO 引脚输出高.低电平. 这部分宏控制 LED 亮灭的操作是直接向 BSRR ...
- STM32CUBEMX F103 HAL库开发之 USB虚拟串口
今天心血来潮想写点东西 做比赛这么久了,应该写点东西,一是为了给自己学的知识一个总结,二是可以锻炼自己的写作能力与表达能力,帮助他人避免自己走过的坑 stm32 USB VPC虚拟串口简介 很多stm ...
- STM32CubeMX与HAL库学习--基本定时器定时中断
STM32CubeMX与HAL库学习--基本定时器定时中断 背景 STM32CubeMX生成初始化代码 在MDK-ARM里编辑代码 其他 背景 本人小白,最近在学着使用STM32CubeMX与HAL库 ...
- 基于stm32cubeMX的stm32f103c8t6的HAL库开发的智能小车------小车接线和材料准备
我的第一辆智能小车 提示:小编也是初学者,本文适用于想完成一个基础智能四轮车的初学者,大佬还请勿喷,欢迎各位指出错误的地方 暑假在家无聊,刚好也在学习STM32的HAL库,就想着做个小车巩固自己学到的 ...
- STM32+RS485+Modbus-RTU(主机模式+从机模式)-标准库/HAL库开发
modbus协议 完成modbus协议的编程之后,设备可以分别作为modbus协议的主机或者从机进行测试,使用模拟软件测试完毕后,完整代码以三个版本的形式进行介绍 1.版本一:使用串口接收数据超时完成 ...
- STM32F4 HAL库开发 -- 串口
一.串口介绍 串口设置包含:开启串口时钟.设置响应的IO口模式.设置波特率.数据位长度.奇偶校验位.DMA等信息. 具体参看:STM32开发 – 串口详解 二.函数 1.串口参数初始化,并使能串口. ...
- STM32CubeMX与HAL库学习--简单的CAN回环测试
STM32CubeMX与HAL库学习--简单的CAN回环测试 前言 STM32CubeMX生成初始化代码 在MDK-ARM里编辑代码 其他 后续 前言 本人小白,最近看了CAN协议与STM32的bxC ...
- (STM32CubeMx生成HAL库)STM32F103C8T6最小系统板,4个按键分别控制42混合步进电机启停、变向、加减速
用的定时器1通道1生成pwm脉冲,改变ARR值改变脉冲频率从而实现调速,采用按键中断控制 直接上图 引脚定义: PA5 EN 使能 PA7 DIR/CW 方向 PA8 PUL/CLK ...
最新文章
- jQuery学习- 内容选择器
- [WinAPI] API 4 [注册][创建][消息][第一个框架类窗口]
- Egret之位图字体
- 华为鸿蒙系统明年公测,华为终于发布新系统,即将与安卓系统告别,这批机型可以申请公测...
- xgboost与gbdt的区别
- IDEA開發 java web 初步
- TCP 之 RST 原因分析
- Webpack实战(一):基础入门-教你轻松搞定Webpack打包工具安装及参数配置
- 2.15_graph_图
- oracle procedure可以执行非常复杂的语句吗,oracle-存储过程(procedure)
- 小程序之支付(前端)
- iOS:Reachability网络监听
- swing简单的打字游戏源码
- Linux安装vim命令
- Dragonfly单机部署比redis快25倍的缓存中间件
- Unity中常用的游戏存档/读档技术
- 中国石油大学(北京)-《中国近现代史纲要》第二阶段在线作业
- 5G系统——MICO模式
- mysql meb备份_MySQL的企业备份(MEB)
- linux more 乱码,Linux 中vim/more/cat/tail/head 命令查看文件显示乱码
热门文章
- Cognos入门教程
- libuv访问mysql_libuv源码剖析
- libuv使用的若干个坑
- IE不能下载MSG文件的解决方案
- 亿级流量电商详情页系统的大型高并发与高可用缓存架构实战 目录
- 警惕“电子发票”邮件,多家企业中招
- 数据分析(一)- 数据分析基础及matplotlib
- C语言程序课程设计—读心术
- MinIO The access key ID you provided does not exist in our records
- Acquisition Attempt Failed!!! Clearing pending acquires. While trying to acquire a needed new resour