Arduino UNO R3自学笔记20 之 Arduino如何测定电机速度?

news2024/11/26 16:49:17

注意:学习和写作过程中,部分资料搜集于互联网,如有侵权请联系删除。

前言:在学习了Arduino的相关基础知识后,现在做个综合应用,给旋转的电机测速。

1.实验目的

        测定旋转电机的转速

2.实验器材-编码器

        要想测定电机的转速,那么就要有个器件在电机旋转过程中其转动的角速度与这个器件的输出线性相关的。这个器件呢就是编码器。

        我们先说一下编码器,简单来说,电机的主轴旋转一圈,编码器输出n个脉冲,信号中有n个上升沿,n个高电平,n个下降沿,n个低电平。

        这样的话,对于Arduino有四种出发方式:RISING 、FALLING、LOW 、CHANGE 。则Arduino采用上述编码器时,电机旋转1圈对应的触发数量如图所示:

                                RISING             n个

                                FALLING           n个

                                LOW                  n个

                                CHANGE           2n个

注:此处采用中断测量触发数量,更加准确。

3.实验思路

        既然要测速,那么就需要知道在一定时间T内电机转过的圈数,则转速n_{motor}就是:

                                                        n_{motor}=\frac{n_{0}}{t},其中n_{0}为圈数,t为对应的时间。

        圈数n_{0}则根据电机旋转时测得的脉冲数n_{t}与电机转一圈脉冲的数量n计算:

                                ​​​​​​​        ​​​​​​​        ​​​​​​​        n_{0}=\frac{n_{t}}{n}

        则转速n_{motor}就是:

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        n_{motor}=\frac{n_{t}}{t*n}                  单位:r/s​​​​​​​

                                                         n_{motor}=\frac{n_{t}}{t*n}*60       单位:r/min

最终,计算n_{motor}我们需要知道:

                ​​​​​​​        ​​​​​​​        ​​​​​​​                       n_{t} 测得的脉冲数

                                                         ​​​​​​​t:为对应的时间

                                                        n:机转一圈脉冲的数量

上述三个量,其中,我们可以通过程序在t时间内测定n_{t},n为电机编码器的参数,一般会给定。

4.实验电路(Proteus仿真图)

电机参数:

5.仿真程序

#include<MsTimer2.h>

#define moto_in1 7
#define moto_in2 8
#define moto_pwm 9

#define moto_num1 2
#define moto_num2 3

float num1=0;
float num2=0;

int interrupt_time = 40;
bool num_over_flag=0;

void speed_c1();
void speed_c2();
void int_time();

void setup()
 { // put your setup code here, to run once:
    Serial.begin(9600);
	pinMode(moto_in1,OUTPUT);
	pinMode(moto_in2,OUTPUT);
	pinMode(moto_pwm,OUTPUT);
	pinMode(moto_num1,INPUT);
	pinMode(moto_num2,INPUT);
    noInterrupts();
    attachInterrupt( 0,speed_c1,CHANGE );
    attachInterrupt( 1,speed_c2,CHANGE);
    MsTimer2::set(interrupt_time,int_time);   
    MsTimer2::start(); 
    interrupts();//开所有中断,准备进入程序运行模式
 }

void loop()
 { // put your main code here, to run repeatedly:
 
   digitalWrite(moto_in1,HIGH);
   digitalWrite(moto_in2,LOW);
   analogWrite(moto_pwm,150);

 }

void speed_c1()
{
  num1++;
}

void speed_c2()
{
  num2++;
}

void int_time()
{
float speed_real = (num1+num2)/(1200*0.04)*60;
 Serial.print(speed_real);
 Serial.print("   ");
 num1=0;
 num2=0;
}

6.测试视频

proteus 仿真电机测速

上一篇:Arduino UNO R3自学笔记19 之 PID基础知识简介?

下一篇:​​​​​​​

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2190188.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

比较搜索难度曲线5s1-4和4s1

在行列可自由变换的条件下&#xff0c;平面上的5点结构只有34个,4点结构有16个 (A,B)---6*n*2---(0,1)(1,0) 让B全是0。当收敛误差为7e-4&#xff0c;收敛199次取迭代次数平均值。让隐藏层节点数n分别为10&#xff0c;15&#xff0c;20&#xff0c;25&#xff0c;30&#xff…

一些关于上传数据-p7zip-full-压缩包的经验

目录 前言 7z 简介 Windows如何压缩tar.gz格式 一、下载7-ZIP 二、tar文件进一步压缩 说明&#xff1a; 前言 本人每次在linux服务器上执行apt-get install p7zip-full命令&#xff0c;都会有复杂依赖报错&#xff08;因为实验过程中用到的依赖包太多了&#xff09;&…

今日指数项目个股周K线功能实现

个股周K线功能实现 1 个股周K线功能实现功能分析 1&#xff09;个股周K线功能原型分析 2&#xff09;个股周K线功能接口分析 个股周K线数据主要包含&#xff1a; 股票ID、 一周内最高价、 一周内最低价 、周1开盘价、周5的收盘价、 整周均价、以及一周内最大交易日期&#x…

【Linux】-----进程第二弹(优先级,环境变量)

目录 一、进程优先级 是什么 为什么要有&#xff1f; 查看进程优先级 修改进程优先级 二、环境变量 命令行参数 概念 常见环境变量 查看环境变量 配置环境变量 内存级别修改&#xff08;命令行修改&#xff0c;暂时&#xff09; ①拷贝到系统路径下 ② 路径添加…

【Android】中级控件

其他布局 相对布局RelativeLayout RelativeLayout下级视图的位置是相对位置&#xff0c;得有具体的参照物才能确定最终位置。如果不设定下级视图的参照物&#xff0c;那么下级视图默认显示在RelativeLayout内部的左上角。用于确定视图位置的参照物分两种&#xff0c;一种是与…

算法专题三: 二分查找

目录 1. 朴素版: 二分查找2. 查找排序数组元素第一个和最后一个位置3. 搜索插入位置4. x的平方根5. 山脉数组的峰顶索引6. 寻找旋转数组中的最小值7. 点名 博客主页: 酷酷学!!! 感谢您的关注~ 正文开始 1. 朴素版: 二分查找 题目思路: 仅需根据题意, 找出二段性, 正确更新下标…

Python编码系列—Python访问者模式:为对象结构添加新功能的艺术

&#x1f31f;&#x1f31f; 欢迎来到我的技术小筑&#xff0c;一个专为技术探索者打造的交流空间。在这里&#xff0c;我们不仅分享代码的智慧&#xff0c;还探讨技术的深度与广度。无论您是资深开发者还是技术新手&#xff0c;这里都有一片属于您的天空。让我们在知识的海洋中…

LLM端侧部署系列 | PowerInfer-2助力AI手机端侧部署47B大模型 (论文解读)

引言 简介 PowerInfer-2 概述 神经元感知的运行时推理 多态神经元引擎 内存中的神经元缓存 灵活的神经元加载 Neuron-Cluster-Level Pipeline 生成执行计划 执行 总结 0. 引言 一雨池塘水面平&#xff0c;淡磨明镜照檐楹。东风忽起垂杨舞&#xff0c;更作荷心万点声…

2024年liunx安装openvino非源码编译版(比源码编译简单!)

前言 真的要感慨一句&#xff0c;openvino源码编译真的麻烦&#xff01;由于2023年之后openvino官网的之间下载取消之后&#xff0c;很多人只能选择源码编译&#xff0c;我也是研究了好几天&#xff0c;又是clone改变的库&#xff0c;又是安装什么&#xff0c;搞了三四天都没有…

已解决:TypeError: ‘int‘ object is not iterable

已解决&#xff1a;TypeError: ‘int’ object is not iterable 文章目录 写在前面问题描述报错原因分析 解决思路解决办法1. 检查代码中的 for 循环2. 检查函数返回值是否为可迭代对象3. 确认变量类型4. 使用 map() 或 list comprehension 处理整数5. 防止不必要的迭代 总结 写…

Leetcode—148. 排序链表【中等】

2024每日刷题&#xff08;171&#xff09; Leetcode—148. 排序链表 C实现代码 /*** Definition for singly-linked list.* struct ListNode {* int val;* ListNode *next;* ListNode() : val(0), next(nullptr) {}* ListNode(int x) : val(x), next(nullptr…

java计算机毕设课设—坦克大战游戏

这是什么系统&#xff1f; 坦克大战游戏是一款以坦克为主题的射击游戏&#xff0c;旨在为玩家提供一个刺激、有趣的游戏体验。该游戏不仅拥有丰富的功能&#xff0c;还注重玩家的互动体验。此系统是使用Java语言实现坦克大战游戏程序&#xff0c;玩家通过连接访问进入游戏&…

【C++】—— 类和对象(上)

【C】—— 类和对象(上) 文章目录 【C】—— 类和对象(上)前言1. 类的定义1.1 类定义格式1.2 访问限定符1.3 类域 2. 实例化2.1 实例化概念2.2 对象的大小 3. this指针4. C和C语言实现Stack对比结语 前言 小伙伴们大家好呀&#xff0c;今天我们就开始学习C的重点及难点——类和…

[python]Flask_Login

flask_login是flask框架中的一个拓展功能&#xff0c;用于更快捷的实现用户会话管理功能&#xff0c;主要处理登录&#xff0c;注销和长时间会话存储的功能处理。 目录 安装 使用 第一步,配置SECRET_KEY 第二步,创建LoginManager实例绑定app 第三步,用户类继承UserMixin …

Github优质项目推荐-第三期

文章目录 Github优质项目推荐 - 第三期一、【coding-interview-university】&#xff0c;305k stars - 软件工程师学习计划二、【drawdb】&#xff0c;20.1k stars - 数据库设计工具三、【twenty】&#xff0c;16k stars - 排名第一的开源 CRM四、【Douyin-Vue】&#xff0c;9.…

海南网站建设提升网站用户体验实用技巧

海南网站建设提升网站用户体验实用技巧 在当今数字时代&#xff0c;网站已成为企业展示形象和吸引客户的重要平台。尤其对于海南这一旅游胜地来说&#xff0c;优化网站用户体验显得尤为重要。以下是一些实用技巧&#xff0c;可帮助您提升网站的用户体验。 首先&#xff0c;确保…

柔性作业车间调度(FJSP)

1.1 调度问题的研究背景 生产调度是指针对一项可分解的工作(如产品制造),在尽可能满足工艺路线、资源情况、交货期等约束条件的前提下,通过下达生产指令,安排其组成部分(操作)所使用的资源、加工时间及加工的先后顺序,以获得产品制造时间或成本最优化的一项工作。 一般研究车间…

django的路由分发

前言&#xff1a; 在前面我们已经学习了基础的Django了&#xff0c;今天我们将继续学习&#xff0c;我们今天学习的是路由分发&#xff1a; 路由分发是Web框架中的一个核心概念&#xff0c;它指的是将不同的URL请求映射到对应的处理函数&#xff08;视图&#xff09;的过程。…

发现一篇瑞芯微RK3588上使用Gstreamer的文章(野火)

1. 前言 最近经常使用英伟达的Orin和瑞芯微RK3588做开发,自己还买了好几块开发板,很多需要自己琢磨,今天忽然发现了一篇文章,意外解决了一些之前的问题,以此作为记录: 文章链接:https://doc.embedfire.com/linux/rk356x/quick_start/zh/latest/lubancat_rk_software_har…

Redis基础三(redis的高级配置)

Redis进阶配置 一、Redis持久化操作 ​ 持久化就是把内存的数据写到磁盘中去&#xff0c;防止服务宕机了内存数据丢失。&#xff08;Redis 数据都放在内存中。如果机器挂掉&#xff0c;内存的数据就不存在。所以需要做持久化&#xff0c;将内存中的数据保存在磁盘&#xff0c…