二、读取编码器数值实现电机测速—3、速读

该博客聚焦电机测速,介绍通过读取编码器数值实现测速的方法。阐述了测速原理,即利用5ms定时器中断,根据单位时间脉冲走过距离计算速度。说明了采集数据要点,如获取轮子转一圈编码器个数等,还给出速度计算思路及公式,最后提及相关代码结构及查看速度的方式。

开发板推荐:天空星STM32F407VET6开发板

超高性价比 STM32主控 | 超高主频 | 一板兼容百芯 | 比赛神器 | 沉金彩色丝印

电机系列

二、读取编码器数值实现电机测速

3、速度;

测速原理:

单位时间内,根据脉冲走过的距离计算电机实际速度,这里采用5ms定时器中断。

采集数据:

就是获得到轮子转一圈的编码器个数;
注意电机参数:
减速比:30:1
编码器线数:13线,也称编码器分辨率;

使用四倍频提高测量精度;

代码见下载区。

速度计算思路:

在这里插入图片描述

单位时间内获得的编码器脉冲变化数:可以通过代码得到,定为 e 个 ; (反应电机正反转)

单位时间:定时器设定为5ms,即0.005s;

电机转动一圈的脉冲数:n 个

电机轮子半径:R 单位:m(米)

圆周率:PI 单位:无

速度:speed 单位: m/s

在这里插入图片描述
此处:

轮子半径 R:0.03m(米);

PI:3.1415926;

手动转一圈的脉冲数 n:1560 个;

e: 通过函数得到;

可得:
speed = 0.024166 * e

代码:
结构如下:
在这里插入图片描述

encoder.h

将2中部分改为一下代码;

#ifndef __ENCODER_H
#define __ENCODER_H
#include <sys.h>	
#include "stm32f10x_tim.h"
 
/**************************************************************************
作者:chance
**************************************************************************/

#define ENCODER_TIM_PERIOD (u16)(65535)   //不可大于65535 因为F103的定时器是16位的。

//定时器编码器初始化;
void Encoder_Init_TIM2(u16 arr,u16 psc);
void Encoder_Init_TIM3(u16 arr,u16 psc);
void Encoder_Init_TIM4(u16 arr,u16 psc);
void Encoder_Init_TIM5(u16 arr,u16 psc);

//5ms 定时器中断服务函数
void TIM7_Int_Init(u16 arr,u16 psc);

//编码器计数函数;
int Read_Encoder_TIM2(void);
int Read_Encoder_TIM3(void);
int Read_Encoder_TIM4(void);
int Read_Encoder_TIM5(void);

int Read_Encoder_test(TIM_TypeDef * TIMx);

//speed
void Get_Motor_Speed(int *A_Speed,int *B_Speed,int *C_Speed,int *D_Speed);

#endif
encoder.c
#include "encoder.h"
#include "stm32f10x_gpio.h"

/**************************************************************************
作者:chance
**************************************************************************/

int Encoder_A,Encoder_B,Encoder_C,Encoder_D;  //编码器的脉冲计数

void Encoder_Init_TIM2(u16 arr,u16 psc)
{
   
   
	//1) 定义相关结构体:
  TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;  
  TIM_ICInitTypeDef TIM_ICInitStructure;  
  GPIO_InitTypeDef GPIO_InitStructure;
	
	//2) 使能相关时钟:
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);// 需要使能AFIO时钟
  RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);//使能定时器2的时钟
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);//使能PA端口时钟
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);//使能PB端口时钟	
  GPIO_PinRemapConfig(GPIO_FullRemap_TIM2, ENABLE);
  GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable , ENABLE);	//禁止JTAG功能,把PB3,PB4作为普通IO口使用
	
	//3) 初始化 GPIO:(用于AB相,脉冲计数)
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_15;	//端口配置
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; //浮空输入
  GPIO_Init(GPIOA, &GPIO_InitStructure);					      //根据设定参数初始化GPIOA
  
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3;	//端口配置
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; //浮空输入
  GPIO_Init(GPIOB, &GPIO_InitStructure);					      //根据设定参数初始化GPIOB
  
	//4) 设置并初始化定时器 TIM2:
  TIM_TimeBaseStructInit(&TIM_TimeBaseStructure);
  TIM_TimeBaseStructure.TIM_Prescaler = psc; // 预分频器 
  TIM_TimeBaseStructure.TIM_Period = arr; //设定计数器自动重装值
  TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1;//选择时钟分频:不分频
  TIM_TimeBaseStructure

开发板推荐:天空星STM32F407VET6开发板

超高性价比 STM32主控 | 超高主频 | 一板兼容百芯 | 比赛神器 | 沉金彩色丝印

打开链接下载源码: https://pan.quark.cn/s/a4b39357ea24 修改自己电脑的OEM信息及产品ID 本文主要讲述了如何修改自己电脑的OEM信息及产品ID,以拥有一个跟正版一样的显示效果。 文章共分为两种方法介绍了如何修改OEM信息,分别是通过软件<OEM-DIY>进行修改和手动修改注册表信息。 方法一:通过软件<OEM-DIY>进行修改 软件<OEM-DIY>可以帮助用户快速地修改OEM信息,使用非常简单,只要选择想要修改到的厂商就可以了。 然后在高级选项中选择是否要在开始菜单中显示OEM标和厂商信息。 通过以上步骤,用户的电脑就能拥有一个跟OEM版本一样的信息了! 方法:手动修改注册表信息 手动修改注册表信息需要用户具备一定的计算机知识和技能。 用户需要上网搜索一张OEM logo或者从另外一台电脑上复制一张logo到自己的电脑上。 然后,用户需要找一个标文件命名为 OEMLINKICON.ICO,作为支持信息之前的那个小标。 接下来,用户需要修改个人信息,打开注册表编辑器,搜索到“RegisteredOwner”和“RegisteredOrganization”,这两样分别指注册者姓名和注册者单位,修改成自己的就可以了。 然后,用户需要制作“厂商、电脑型号”和“技术支持信息”(如果你的电脑有的话)。 新建一个文本文档,输入[Version]Microsoft Windows Whistler EditionWinVer=5.01[General]Manufacturer=xx(厂商)有限公司Model=xx 系列电脑[Support Information],这是“技术支持信息”的内容。 Line1=""Line2=""Line3=""Li...
代码转载自:https://pan.quark.cn/s/fc0302cd30d9 Vultr root密码重置完全指南:3种方法解决忘记密码的困境 有没有经历过这种崩溃瞬间——深夜登录服务器,SSH连接上了,却发现密码怎么都对不上? 或者刚恢复了一个快照,发现原来的root密码直接失效了,整个人懵在那里…… 别慌,这不是你一个人的问题。 Vultr用户论坛里三天两头就有人在问怎么重置root密码,而且不同系统、不同场景,处理方式还不一样。 这篇文章把所有情况都整理了一遍,照着做基本都能解决。 -- 为什么Vultr的root密码会"失效"? 先搞清楚为什么会发生这种事,才不会下次踩同一个坑。 常见原因大概有这几种: 手动改过密码,但后来忘了——这是最普遍的情况,登录SSH后用改了新密码,结果时间一长就忘了是什么。 从快照恢复后密码失效——Vultr的快照功能很好用,但有时候恢复镜像之后,VPS的root密码会变成镜像里的原始密码,跟你后来设置的完全不同。 VPS系统脚本导致的密码无效——某些自动化部署脚本会在启动时随机生成或清空密码,结果你连知道密码是什么的机会都没有。 新开实例忘记复制初始密码——Vultr在开通VPS后会在控制台显示一次随机生成的初始密码,如果当时没有保存,后来就麻烦了。 知道原因之后,我们来看具体的解决方法。 -- 方法一:知道旧密码的情况下直接修改 这是最简单的情况。 你还能登进去,只是想换一个更好记的密码。 通过SSH修改(推荐,最快) 打开终端,连接到你的服务器: bash ssh root@你的VPS_IP地址 登录成功后,直接输入: bash passwd 系统会要求你输入当前密码,然后两次输入新密码。 输入新密码时屏幕不会显示任何字符...
代码转载自:https://pan.quark.cn/s/a4b39357ea24 **由OpenSSL生成的安全凭证** 在网络安全的范畴内,SSL(Secure Socket Layer)证书扮演着确保网站数据传输安全的关键角色。OpenSSL作为一个开源的软件库,囊括了多种加密算法,并具备生成SSL证书的能力。本指南将详尽阐述如何在Windows操作系统中,为Nginx服务器设置HTTPS服务,以及如何创建和管理SSL证书。 掌握SSL证书的功能。SSL证书通过实施加密机制,保障了用户与服务器之间数据传输的安全性,防止第三方进行窃取或篡改。该凭证内含公钥和私钥组合,其中公钥负责加密数据,私钥则负责解密数据,以此确保只有服务器能够解读接收到的信息。 **借助OpenSSL创建安全凭证** 1. **部署OpenSSL**:尽管在说明中提到无需再次下载和配置OpenSSL环境,但在实际执行时,必须首先获取适用于Windows的OpenSSL版本并进行安装。可以从官方渠道或其他可靠来源获取安装程序。 2. **建立密钥对**:运用OpenSSL生成一个私钥文件,通常命名为`private.key`。执行以下指令: ``` openssl genrsa -out private.key 2048 ``` 此操作将产生一个2048位的RSA私钥。 3. **构建证书签名请求(CSR)**:随后,基于先前生成的私钥创建一个证书签名请求,其中将包含服务器的相关细节。命令如下: ``` openssl req -new -key private.key -out CSR.csr ``` 在提示输入信息时,需提供服务器的域名、组织信息等内容。 4. **自行颁发证书**...
评论 31
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值