文章目录

  • 前言
  • 一、STM32编码器测速
    • 定时器配置
    • 配置四倍频
  • 二、arduino光电测速

前言

前面也是只学习了四倍频测速的原理,并没有真正实验过,今天正好看到编码器电机了,就尝试一下

一、STM32编码器测速

用到的就是四倍频技术,可以看之前写的博客,里面提到了这个技术。今天主要看怎么用代码实现

定时器配置

初始化定时器2

#include "TIMER.h"
#include "usart.h"//通用定时器2初始化函数,arr:自动重装载值,psc:预分频系数,默认定时时钟为72MHZ时,两者共同决定定时中断时间
void TIM2_Int_Init(u16 arr, u16 psc)
{TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStrue; //定义一个定时中断的结构体NVIC_InitTypeDef NVIC_InitStrue; //定义一个中断优先级初始化的结构体RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE); //使能通用定时器2时钟TIM_TimeBaseInitStrue.TIM_Period=arr; //计数模式为向上计数时,定时器从0开始计数,计数超过到arr时触发定时中断服务函数TIM_TimeBaseInitStrue.TIM_Prescaler=psc; //预分频系数,决定每一个计数的时长TIM_TimeBaseInitStrue.TIM_CounterMode=TIM_CounterMode_Up; //计数模式:向上计数TIM_TimeBaseInitStrue.TIM_ClockDivision=TIM_CKD_DIV1; //一般不使用,默认TIM_CKD_DIV1TIM_TimeBaseInit(TIM2, &TIM_TimeBaseInitStrue); //根据TIM_TimeBaseInitStrue的参数初始化定时器TIM2TIM_ITConfig(TIM2, TIM_IT_Update, ENABLE); //使能TIM2中断,中断模式为更新中断:TIM_IT_UpdateNVIC_InitStrue.NVIC_IRQChannel=TIM2_IRQn; //属于TIM2中断NVIC_InitStrue.NVIC_IRQChannelCmd=ENABLE; //中断使能NVIC_InitStrue.NVIC_IRQChannelPreemptionPriority=1; //抢占优先级为1级,值越小优先级越高,0级优先级最高NVIC_InitStrue.NVIC_IRQChannelSubPriority=1; //响应优先级为1级,值越小优先级越高,0级优先级最高NVIC_Init(&NVIC_InitStrue); //根据NVIC_InitStrue的参数初始化VIC寄存器,设置TIM2中断TIM_Cmd(TIM2, ENABLE); //使能定时器TIM2
}

配置四倍频

#include "ENCODER.h"/*TIM2初始化为编码器接口*/
void Encoder_Init_TIM4(u16 arr,u16 psc)
{GPIO_InitTypeDef GPIO_InitStructure; //定义一个引脚初始化的结构体  TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;//定义一个定时器初始化的结构体TIM_ICInitTypeDef TIM_ICInitStructure; //定义一个定时器编码器模式初始化的结构体RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4, ENABLE); //使能TIM4时钟RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE); //使能CPIOB时钟GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6|GPIO_Pin_7;  //PB6、PB7GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; //浮空输入GPIO_Init(GPIOB, &GPIO_InitStructure);    //根据GPIO_InitStructure的参数初始化GPIOB0TIM_TimeBaseStructure.TIM_Period = arr; //设定计数器自动重装值TIM_TimeBaseStructure.TIM_Prescaler = psc; // 预分频器 TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1; //选择时钟分频:不分频TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //TIM向上计数模式TIM_TimeBaseInit(TIM4, &TIM_TimeBaseStructure); //根据TIM_TimeBaseInitStruct的参数初始化定时器TIM4TIM_EncoderInterfaceConfig(TIM4, TIM_EncoderMode_TI12, TIM_ICPolarity_Rising, TIM_ICPolarity_Rising);//使用编码器模式3:CH1、CH2同时计数,四分频TIM_ICStructInit(&TIM_ICInitStructure); //把TIM_ICInitStruct 中的每一个参数按缺省值填入TIM_ICInitStructure.TIM_ICFilter = 10;  //设置滤波器长度TIM_ICInit(TIM4, &TIM_ICInitStructure); //根TIM_ICInitStructure参数初始化定时器TIM4编码器模式TIM_Cmd(TIM4, ENABLE); //使能定时器4
}//读取编码器计数
int Read_Encoder_TIM4(void)
{int Encoder_TIM;Encoder_TIM=TIM4->CNT; //读取计数if(Encoder_TIM>0xefff)Encoder_TIM=Encoder_TIM-0xffff; //转化计数值为有方向的值,大于0正转,小于0反转。//TIM4->CNT范围为0-0xffff,初值为0。TIM4->CNT=0; //读取完后计数清零return Encoder_TIM; //返回值
}

实物图

效果图

还是很准的,虽然有些跳动,使用一介低通滤波过滤一下就很稳定了,有了速度才能更好的做闭环控制。

二、arduino光电测速

这个呢就是用模块进行测速,突发奇想想尝试一下,效果肯定没有编码器的好,可以看一看
实物图

效果图

代码

int U_Pin = 2;  float Val = 0;    //设置变量Val,计数float time;  //设置变量time,计时float Speed;  //设置变量Speed,存储转速void setup(){Serial.begin(9600);attachInterrupt(0,count,CHANGE);  //引脚电平发生改变时触发}void loop(){time = millis();Speed =  (Val/40)/(time/6000) ;Serial.println(Speed);delay(1000);}void count(){Val += 1;}

STM32C8T6编码器电机测速与arduino光电模块测速相关推荐

  1. STM32应用(九)编码器及其测速原理、L298N电机驱动控制编码器电机

    文章目录 1.L298N电机驱动 1.1 产品参数 1.2 实物图和接线 2.编码器 2.1 编码器简介 2.2 常用编码器分类 2.3 霍尔编码器实物图接线!!!! 2.4 编码器倍频原理 3.控制 ...

  2. stm32编码器电机测速(hal库)

    记录一下今天参考别人的代码实现了四个电机的测速. 编码器被广泛应用于电机测速,实现电机闭环控制.所以不论是自己做小车还是后续参加各种比赛,必须要学会编码器测速. 一.参数 编码电机其实就是一个带有编码 ...

  3. STM32 CubeMax 编码器电机测速 原理与实现

    编码器电机测速 部分参考:https://blog.csdn.net/lzzzzzzm/article/details/119416134 其他参考部分见图片水印 1. 编码器种类及原理 常见的编码器 ...

  4. STM32之增量式编码器电机测速

    STM32之增量式编码器电机测速 编码器 编码器种类 按监测原理分类 光电编码器 霍尔编码器 按输出信号分类 增量式编码器 绝对式编码器 编码器参数 分辨率 精度 最大响应频率 信号输出形式 编码器倍 ...

  5. 电机控制中的传感器与测速原理

    一.传感器与测速原理 在做电机控制中速度检测的是否准确是直接影响系统的控制精度的,目前测速有两种1:模拟测速(这里不做说明)2:数字测速----霍尔位置传感器和旋转编码器.这是大的分类.而霍尔传感器的 ...

  6. STM32控制编码器电机实现【速度闭环控制】与【位置闭环控制】

    一.硬件及接线说明 本实验所基于的硬件分别为: STM32F103C8T6 主控板 TB6612FNG 直流电机驱动模块 6线正交编码器电机(带AB相) 其中硬件接线为: PWMA -- PA8 AI ...

  7. 【手把手带你用pid算法控制电机】——(1)编码器电机和0.96寸OLED显示屏的使用

    目录 前言 一.需要用到的器材 二.接线说明 三.cubmx配置 3.1 时钟树 3.2 输出PWM(TIM4) 3.3 编码器模式(TIM3) 3.4 中断定时器配置(TIM1) 3.5 配置IIC ...

  8. 直流电机与PID——编码器电机使用(一)

    直流电机与PID学习 文章目录 直流电机与PID学习 前言 一.直流电机原理 二.编码器电机 1.减速器作用 2.编码器电机接线 3.编码器原理 4.四倍频技术 5.单片机采集编码器数据 三.TB66 ...

  9. STM32F103C8T6编码器电机的使用

    目录 前言 一.定时器部分和按键部分 二.PWM调速 三.电机驱动部分​​​​​​​ 三.编码器接口部分(测速) 四.主函数 总结​​​​​​​ 推荐STM32学习课程: [6-8] 编码器接口测速_ ...

最新文章

  1. 解决eclipse中egit中的cannot open git-upload-pack问题
  2. 《Web 标准实战》——Web开发人员必读的一本书
  3. 配置 CentOS 7 的网络,及重命名网卡名
  4. Javascript IE 内存释放
  5. hdu-2032杨辉三角
  6. First of all, let’s talk about the richest man in Japan
  7. [leetcode]139. 单词拆分
  8. 对拷 使用scp命令在两台linux上对拷文件或者文件夹
  9. Java数据类型从小到大排序_编写一个字符串排序程序,对一个字符串的数值进行从小到大的排序,要求使用包装类对数值类型的字符串转换成整型进行排序...
  10. android NDK 详解
  11. Android 跑马灯效果与EditText冲突
  12. 4K工业级高清2进1出HDMI自动USB KVM多电脑切换器(MT-HK201)
  13. Spring中FrameMaker中文乱码
  14. AI行业全面复苏,秋招AI岗位竞争激烈!Tesra超算网络助力找到合适的岗位!
  15. 用python做系统的感悟_python感悟
  16. cf网络不稳定或服务器异常,电脑玩穿越火线为什么提示网络环境异常 - 卡饭网...
  17. JPG和TIFF图像转换
  18. Windows Phone周岁背后的喜和忧
  19. 数据结构——左高树(C语言)
  20. crmsh配置pacemaker集群时报错 CIB not supported: validator 'pacemaker-2.5'

热门文章

  1. SQL 查询当前时间,已经设置时区
  2. bash:/home/xxxx/catikin_ws/setup.bash:没有那个文件或者目录
  3. 史上最全的APP推广模式及方法技巧
  4. gohbase的使用
  5. Unity3D: 给字符串中的部分字体添加颜色突出显示
  6. 无法在已有的 xxxxxxx“上还原文件 zzz。请重新发出 RESTORE 语句,用 WITH REPLACE 来覆盖原先存在的文件
  7. win10下如何为jdk配置环境变量
  8. Adapter的notifyDataSetChange无效的问题
  9. python中str类型和object类型_pandas str和object类型之间的区别
  10. Eclipse MyEclipse 代码提交时,让svn忽略classpath、target、.project