stm32霍尔编码器电机测速原理
本次选用的编码器电机为13线的霍尔编码器电机,电机减速比为30:1,转动一圈输出13*30=390个脉冲。轮胎直径为75mm,轮胎周长为pi*d=3*75=225mm.定时器采用四倍频计数,则一圈输出390*4=1560个脉冲。具体编码器知识这里就不多说了。
根据测速原理:假设编码器输出的脉冲数为N,而电机转动一圈输出1569个脉冲,转动一圈轮子将前进225mm。那输出脉冲数为N时前进的距离就应该为225*(N/1560)mm,再除以时间及可得速度。
下面为具体代码:
encoder.c文件
#include "encoder.h"void Encoder_TIM2_Init(void)
{RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); //开时钟RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);GPIO_InitTypeDef GPIO_InitStruct; //配置IO口GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IN_FLOATING;GPIO_InitStruct.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1;GPIO_Init(GPIOA, &GPIO_InitStruct);TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStruct; //定时器初始化TIM_TimeBaseInitStruct.TIM_ClockDivision = TIM_CKD_DIV1;TIM_TimeBaseInitStruct.TIM_CounterMode = TIM_CounterMode_Up;TIM_TimeBaseInitStruct.TIM_Period = 65535;TIM_TimeBaseInitStruct.TIM_Prescaler = 0;TIM_TimeBaseInit(TIM2, &TIM_TimeBaseInitStruct);//定时器编码器模式初始化TIM_EncoderInterfaceConfig(TIM2, TIM_EncoderMode_TI12, TIM_ICPolarity_Rising, TIM_ICPolarity_Rising);TIM_ICInitTypeDef TIM_ICInitStruct; //输入捕获单元配置TIM_ICStructInit(&TIM_ICInitStruct);TIM_ICInitStruct.TIM_ICFilter = 10;TIM_ICInit(TIM2, &TIM_ICInitStruct);TIM_ClearFlag(TIM2, TIM_FLAG_Update);TIM_ITConfig(TIM2, TIM_IT_Update, ENABLE);TIM_SetCounter(TIM2, 0);TIM_Cmd(TIM2, ENABLE);
}void Encoder_TIM4_Init(void)
{RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4, ENABLE);GPIO_InitTypeDef GPIO_InitStruct;GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IN_FLOATING;GPIO_InitStruct.GPIO_Pin = GPIO_Pin_6 | GPIO_Pin_7;GPIO_Init(GPIOB, &GPIO_InitStruct);TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStruct;TIM_TimeBaseInitStruct.TIM_ClockDivision = TIM_CKD_DIV1;TIM_TimeBaseInitStruct.TIM_CounterMode = TIM_CounterMode_Up;TIM_TimeBaseInitStruct.TIM_Period = 65535;TIM_TimeBaseInitStruct.TIM_Prescaler = 0;TIM_TimeBaseInit(TIM4, &TIM_TimeBaseInitStruct);TIM_EncoderInterfaceConfig(TIM4, TIM_EncoderMode_TI12, TIM_ICPolarity_Rising, TIM_ICPolarity_Rising);TIM_ICInitTypeDef TIM_ICInitStruct; TIM_ICStructInit(&TIM_ICInitStruct);TIM_ICInitStruct.TIM_ICFilter = 10;TIM_ICInit(TIM4, &TIM_ICInitStruct);TIM_ClearFlag(TIM4, TIM_FLAG_Update);TIM_ITConfig(TIM4, TIM_IT_Update, ENABLE);TIM_SetCounter(TIM4, 0);TIM_Cmd(TIM4, ENABLE);
}int Read_Spead(int TIMx) //读取编码器输出脉冲数
{int value_1;switch(TIMx){case 2:value_1 = (short)TIM_GetCounter(TIM2);TIM_SetCounter(TIM2, 0);break;case 4:value_1 = (short)TIM_GetCounter(TIM4);TIM_SetCounter(TIM4, 0);break;default:value_1 = 0;}return value_1;
}void TIM2_IRQHander(void)
{if(TIM_GetITStatus(TIM2, TIM_IT_Update) == 1){TIM_ClearITPendingBit(TIM2, TIM_IT_Update);}
}void TIM4_IRQHander(void)
{if(TIM_GetITStatus(TIM4, TIM_IT_Update) == 1){TIM_ClearITPendingBit(TIM4, TIM_IT_Update);}
}
我使用的是简单的delay一下来采集定时器捕获的编码器脉冲数,不过我建议使用定时器中断来处理编码器采集。此函数只采集右轮脉冲进行计算
主函数循环体内函数:
while(1){delay_s(1);{uint16_t right = Read_Spead(2);//采集右轮脉冲数displacement = 0.225 * (right / 1560);//计算位移speed = displacement;//由于我设置的为延时一秒就不用除时间OLED_Float(0, 0, speed, 4);//通过OLED显示速度set_PWM(999);//设置电机PWMTIM_SetCounter(TIM2, 0);//下一次一秒计数前再一次将计数清零}}
stm32霍尔编码器电机测速原理相关推荐
- STM32 CubeMax 编码器电机测速 原理与实现
编码器电机测速 部分参考:https://blog.csdn.net/lzzzzzzm/article/details/119416134 其他参考部分见图片水印 1. 编码器种类及原理 常见的编码器 ...
- stm32编码器电机测速(hal库)
记录一下今天参考别人的代码实现了四个电机的测速. 编码器被广泛应用于电机测速,实现电机闭环控制.所以不论是自己做小车还是后续参加各种比赛,必须要学会编码器测速. 一.参数 编码电机其实就是一个带有编码 ...
- STM32应用(九)编码器及其测速原理、L298N电机驱动控制编码器电机
文章目录 1.L298N电机驱动 1.1 产品参数 1.2 实物图和接线 2.编码器 2.1 编码器简介 2.2 常用编码器分类 2.3 霍尔编码器实物图接线!!!! 2.4 编码器倍频原理 3.控制 ...
- STM32之增量式编码器电机测速
STM32之增量式编码器电机测速 编码器 编码器种类 按监测原理分类 光电编码器 霍尔编码器 按输出信号分类 增量式编码器 绝对式编码器 编码器参数 分辨率 精度 最大响应频率 信号输出形式 编码器倍 ...
- STM32C8T6编码器电机测速与arduino光电模块测速
文章目录 前言 一.STM32编码器测速 定时器配置 配置四倍频 二.arduino光电测速 前言 前面也是只学习了四倍频测速的原理,并没有真正实验过,今天正好看到编码器电机了,就尝试一下 一.STM ...
- 51单片机电机测速程序c语言,单片机仿真编码器电机测速程序
/***********头文件声明************/ #include "reg52.h"//此文件中定义了单片机的一些特殊功能寄存器 /***********数据类型声明 ...
- linux直流电机测试,带霍尔传感器编码器的直流减速电机测速原理讲解(附源码)...
查看: 14294|回复: 83 带霍尔传感器编码器的直流减速电机测速原理讲解(附源码) 高级会员, 积分 891, 距离下一级还需 109 积分 积分金钱891 注册时间2019-4-22 在线时间 ...
- 平衡小车—编码器使用教程与测速原理
文章目录 1.编码器概述 2.编码器原理 3.编码器接线说明 4.编码器软件四倍频技术 5.单片机如何采集编码器数据 6.获取方式 来自平衡小车之家,与大家一起学习编码器使用与测速原理. 1.编码器概 ...
- STM32定时器捕获编码器模式测速和方向测不准问题
** STM32定时器捕获编码器模式测速和方向测不准问题 问题概述 关于STM32编码器模式电机测速的资料网上一抓一大把,却发现真的拿过来用还是有问题的,比如刚刚做了个东西,是个个头比较大的麦克纳姆轮 ...
- STM32应用开发实践教程:智能小车电机测速模块的应用开发
3.4.1 任务分析 本任务要求设计一个可实现智能小车电机测速的应用程序,具体要点如下. ① 取一个电机作为测速对象. ② 支持按键控制,使用 4 个按键,功能描述如下: Key1 控制电机正转, ...
最新文章
- python中__dict__与dir()区别
- 你需要知道的requestAnimationFrame
- 分布式存储Ceph 快速安装手册
- VC6.0 中的默认操作系统版本的问题
- struts2 如何跳转html5,在线HTML编辑器——ueditor,跟struts2结合
- linux 硬软链接区别
- CMOS图像传感器——TOF 图像传感器
- P5518-[MtOI2019]幽灵乐团【莫比乌斯反演,欧拉反演】
- vue监听对象某一个属性
- java中contains的用法_好程序员Java教程分享Java中this的几种用法
- MS SQL入门基础:创建和使用约束
- 用python来开发webgame服务端(1)
- 詹姆斯——永远的皇帝
- 如何判断网线连接状态
- 一分钟了解”matlab对数函数log“
- VB编程:SelectCase多分支选择结构实例测试生肖运势-13
- 关于locahost:8080一直在等待却不报错
- android 滑动取值_Android中滑屏实现
- python中库是什么意思,python中的库、包、模块和脚本是什么意思
- Java实现-五子棋