控制任务

检测编码器的脉冲并测速

电路设计

图1 直流电机带减速器和编码器

图2  编码器接线定义

编码器接线定义如下

M1:电机电源接口,绿色的

GND:编码器电源负极输入口,橙色的

C1:编码器A相输出,黄色的,接Arduino控制板2号引脚

C2:编码器B相输出,白色的,接Arduino控制板3号引脚

3.3V:编码器电源正极输入口(兼容3.3V、5V),红色的

M2:电机电源接口,黑色的,

程序设计

 1 int motor_c_ENA=6;   //控制板与驱动板的引脚连接
2 int motor_c_IN1=8;
3 int motor_c_IN2=7;
4
5 #define ENCODER_A_PIN 2 //编码器A相接控制板2号引脚,对应0号外部中断
6 #define ENCODER_B_PIN 3 //编码器B相接控制板3号引脚,
7 long pulse_number=0; // 脉冲计数
8 int rpm;
9
10 #include <MsTimer2.h> //定时器库的头文件
11
12 void setup()
13 {
14 pinMode(motor_c_ENA,OUTPUT); //电机C使能和PWM调速口
15 pinMode(motor_c_IN1,OUTPUT); //电机C控制口
16 pinMode(motor_c_IN2,OUTPUT); //电机C控制口
17
18 MsTimer2::set(500, send); // 中断设置函数,每 500ms 进入一次中断
19 MsTimer2::start(); //开始计时
20
21 pinMode(ENCODER_A_PIN, INPUT);
22 pinMode(ENCODER_B_PIN, INPUT);
23 attachInterrupt(0, read_quadrature, FALLING); //EN_A脚下降沿触发中断
24 Serial.begin(9600); //初始化Arduino串口
25 }
26
27 void loop()
28 {
29 //C加速正转
30 digitalWrite(motor_c_IN1,0);
31 digitalWrite(motor_c_IN2,1);
32 for (int a=100;a<=255;a++)
33 {
34 analogWrite(motor_c_ENA,a);
35 delay(200);
36 }
37
38 //C减速正转
39 digitalWrite(motor_c_IN1,0);
40 digitalWrite(motor_c_IN2,1);
41 for (int a=255;a>0;a--)
42 {
43 analogWrite(motor_c_ENA,a);
44 delay(200);
45 }
46 }
47
48 void send() //速度串行传送
49 {
50 rpm=int(pulse_number/37.4);
51 //编码器精度为224线,减速器减速比为1:20,故系数=(224/(60/0.5))*20=37.4
52 Serial.print("rpm: ");
53 Serial.println(rpm, DEC);
54 pulse_number = 0;
55 }
56
57 void read_quadrature() //编码器脉冲计数中断函数
58 {
59 if (digitalRead(ENCODER_A_PIN) == LOW)
60 {
61 if (digitalRead(ENCODER_B_PIN) == LOW) // 查询EN_B的电平以确认正转
62 { pulse_number ++; }
63 if (digitalRead(ENCODER_B_PIN) == HIGH) // 查询EN_B的电平以确认反转
64 { pulse_number --; }
65 }
66 }

电机AB相编码器测速的更多相关文章

  1. 通过电机编码器AB相输出确定电机转向

    AB相输出相差90度,即当A相"正跳变"时如果B相是高电平那么是"正转",反之是"反转" 图片: 正转 反转 #include <Ti ...

  2. 伺服驱动器UVW电机电源线相序错误

       我们有必要先了解此讨论的前提:编码器初始安装相位正确.伺服驱动器将全然"採信"电机编码器的初始安装相位所表征的电机电角度相位,无需在伺服电机 的UVW动力线接线连接后进行额外 ...

  3. stm32直流电机驱动与测速代码配套视频资料

    说实话就现在的市场应用中stm32已经占到了绝对住到的地位,51已经成为过去式,32的功能更加强大,虽然相应的难度有所增加,但是依然阻止不了大家学习32的脚步,不说大话了这些大家都懂要不然也不会学习s ...

  4. 不可错过的stm32单片机直流电机驱动与测速详解

    stm32直流电机驱动与测速 说实话就现在的市场应用中stm32已经占到了绝对住到的地位,51已经成为过去式,32的功能更加强大,虽然相应的难度有所增加,但是依然阻止不了大家学习32的脚步,不说大话了 ...

  5. 轻松掌握stm32直流电机驱动与测速

    说实话就现在的市场应用中stm32已经占到了绝对住到的地位,51已经成为过去式,32的功能更加强大,虽然相应的难度有所增加,但是依然阻止不了大家学习32的脚步,不说大话了这些大家都懂要不然也不会学习s ...

  6. stm32直流电机驱动与测速

    stm32直流电机驱动与测速 说实话就现在的市场应用中stm32已经占到了绝对住到的地位,51已经成为过去式,32的功能更加强大,虽然相应的难度有所增加,但是依然阻止不了大家学习32的脚步,不说大话了 ...

  7. [ Arch Linux ] Arch更新源高速源整理之测速并自动排序高速源 加快更新效率

    方法一: 工具:rankmirrors 0x01 备份原来的源,并创建一个测试源 cd /etc/pacman.d cp mirrorlist mirrorlist.bakcp mirrorlist ...

  8. C# Ping的例子,可用于测试网络,延迟xx毫秒 C#编写网站测速

    C#编写网站测速 WebClient wcl = new WebClient(); Stopwatch spwatch = new Stopwatch(); spwatch.Start(); byte ...

  9. linux测速软件speedtest-cli

    linux测速软件: https://github.com/sivel/speedtest-cli 以下是我在gentoo上测的

随机推荐

  1. 华为荣耀5X(畅玩版 全网通)USB调试模式如何开启教程(开发者模式 开发者选项打开)

    作者:程序员小冰,CSDN博客:http://blog.csdn.net/qq_21376985, 前一段时间,公司买了一款华为荣耀畅玩版5X全网通,进行测试.发现 拿usb数据线连接PC电脑,无法进 ...

  2. Android开发之TextView中间设置横线,适用于电商项目,商品原价之类的功能。

    textview.getPaint().setFlags(Paint. STRIKE_THRU_TEXT_FLAG ); //中间横线 textview.getPaint().setFlags(Pai ...

  3. Fitness - 05.11

    倒计时234天 从本周开始改变运动模式 跑步换到每周二.四.六进行. 每周一.三.五增加瑜伽的练习,周日山地车骑行~~~~ 久违的瑜伽课,瑜伽老师居然是男的,第一次看到这么柔软的男生~! 平时感觉不到 ...

  4. 使用Loadrunner进行性能测试

    一.确定性能测试的范围.要求.配置.工具等 明确测试的系统: 本文档主要指的是web应用. 明确测试要求: 用户提出性能测试,例如,网站首页页面响应时间在3S之内,主要的业务操作时间小于10s,支持3 ...

  5. 牛客多校训练AFJ(签到)

    题目链接https://ac.nowcoder.com/acm/contest/881/A(单调栈) #include<cstdio> #include<iostream> # ...

  6. springboot配置ssl访问

    第一步:########################################### # 端口设置 ########################################### s ...

  7. Agumaster 将爬虫取股票名称代号子系统分出来成agumaster_crawler, 两系统通过RabbitMq连接

    agumaster_crawler系统负责启动爬虫取得数据,之后便往队列中推送. agumaster_crawler系统中pom.xml关于RabbitMq的依赖是: <!-- RabbitMq ...

  8. Zookeeper启动流程分析

    前言 之前的Zookeeper协议篇-Paxos算法与ZAB协议通过了解Paoxs算法开始,到Zab协议的两大特性:崩溃恢复和消息广播,学习了Zookeeper是如何通过Zab协议实现高可用,本篇主要 ...

  9. MyBatis的逆向工程、Example类

    public void testFindUserByName(){ //通过criteria构造查询条件 UserExample userExample = new UserExample(); us ...

  10. mock接口开发——flask模块

    1.mock接口开发: #1.模拟没有开发好的接口,你可以模拟它,,,,,,,需要调用其他系统的接口 #2.给别人提供数据 2.步骤:1.安装pip install flask 2.导入模块--起服务 ...