STM32C8T6编码器电机测速与arduino光电模块测速
文章目录
- 前言
- 一、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光电模块测速相关推荐
- STM32应用(九)编码器及其测速原理、L298N电机驱动控制编码器电机
文章目录 1.L298N电机驱动 1.1 产品参数 1.2 实物图和接线 2.编码器 2.1 编码器简介 2.2 常用编码器分类 2.3 霍尔编码器实物图接线!!!! 2.4 编码器倍频原理 3.控制 ...
- stm32编码器电机测速(hal库)
记录一下今天参考别人的代码实现了四个电机的测速. 编码器被广泛应用于电机测速,实现电机闭环控制.所以不论是自己做小车还是后续参加各种比赛,必须要学会编码器测速. 一.参数 编码电机其实就是一个带有编码 ...
- STM32 CubeMax 编码器电机测速 原理与实现
编码器电机测速 部分参考:https://blog.csdn.net/lzzzzzzm/article/details/119416134 其他参考部分见图片水印 1. 编码器种类及原理 常见的编码器 ...
- STM32之增量式编码器电机测速
STM32之增量式编码器电机测速 编码器 编码器种类 按监测原理分类 光电编码器 霍尔编码器 按输出信号分类 增量式编码器 绝对式编码器 编码器参数 分辨率 精度 最大响应频率 信号输出形式 编码器倍 ...
- 电机控制中的传感器与测速原理
一.传感器与测速原理 在做电机控制中速度检测的是否准确是直接影响系统的控制精度的,目前测速有两种1:模拟测速(这里不做说明)2:数字测速----霍尔位置传感器和旋转编码器.这是大的分类.而霍尔传感器的 ...
- STM32控制编码器电机实现【速度闭环控制】与【位置闭环控制】
一.硬件及接线说明 本实验所基于的硬件分别为: STM32F103C8T6 主控板 TB6612FNG 直流电机驱动模块 6线正交编码器电机(带AB相) 其中硬件接线为: PWMA -- PA8 AI ...
- 【手把手带你用pid算法控制电机】——(1)编码器电机和0.96寸OLED显示屏的使用
目录 前言 一.需要用到的器材 二.接线说明 三.cubmx配置 3.1 时钟树 3.2 输出PWM(TIM4) 3.3 编码器模式(TIM3) 3.4 中断定时器配置(TIM1) 3.5 配置IIC ...
- 直流电机与PID——编码器电机使用(一)
直流电机与PID学习 文章目录 直流电机与PID学习 前言 一.直流电机原理 二.编码器电机 1.减速器作用 2.编码器电机接线 3.编码器原理 4.四倍频技术 5.单片机采集编码器数据 三.TB66 ...
- STM32F103C8T6编码器电机的使用
目录 前言 一.定时器部分和按键部分 二.PWM调速 三.电机驱动部分 三.编码器接口部分(测速) 四.主函数 总结 推荐STM32学习课程: [6-8] 编码器接口测速_ ...
最新文章
- 解决eclipse中egit中的cannot open git-upload-pack问题
- 《Web 标准实战》——Web开发人员必读的一本书
- 配置 CentOS 7 的网络,及重命名网卡名
- Javascript IE 内存释放
- hdu-2032杨辉三角
- First of all, let’s talk about the richest man in Japan
- [leetcode]139. 单词拆分
- 对拷 使用scp命令在两台linux上对拷文件或者文件夹
- Java数据类型从小到大排序_编写一个字符串排序程序,对一个字符串的数值进行从小到大的排序,要求使用包装类对数值类型的字符串转换成整型进行排序...
- android NDK 详解
- Android 跑马灯效果与EditText冲突
- 4K工业级高清2进1出HDMI自动USB KVM多电脑切换器(MT-HK201)
- Spring中FrameMaker中文乱码
- AI行业全面复苏,秋招AI岗位竞争激烈!Tesra超算网络助力找到合适的岗位!
- 用python做系统的感悟_python感悟
- cf网络不稳定或服务器异常,电脑玩穿越火线为什么提示网络环境异常 - 卡饭网...
- JPG和TIFF图像转换
- Windows Phone周岁背后的喜和忧
- 数据结构——左高树(C语言)
- crmsh配置pacemaker集群时报错 CIB not supported: validator 'pacemaker-2.5'
热门文章
- SQL 查询当前时间,已经设置时区
- bash:/home/xxxx/catikin_ws/setup.bash:没有那个文件或者目录
- 史上最全的APP推广模式及方法技巧
- gohbase的使用
- Unity3D: 给字符串中的部分字体添加颜色突出显示
- 无法在已有的 xxxxxxx“上还原文件 zzz。请重新发出 RESTORE 语句,用 WITH REPLACE 来覆盖原先存在的文件
- win10下如何为jdk配置环境变量
- Adapter的notifyDataSetChange无效的问题
- python中str类型和object类型_pandas str和object类型之间的区别
- Eclipse MyEclipse 代码提交时,让svn忽略classpath、target、.project