控制任务

检测编码器的脉冲并测速

电路设计

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

图2  编码器接线定义

编码器接线定义如下

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

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

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

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

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

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

程序设计

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

    导入Project的出现: Error:(1, 0) Your project path contains non-ASCII characters. This will most likely ca ...

  2. 【平台开发】— 2.前端:vue-element-admin

    前端我虽然没怎么写过,但也并不陌生.之前做web自动化,网页结构没少看,html,css,js也都断断续续了解过. 如果从空白开始写,肯定还是需要花不少时间的. 好在网上有了不少成熟的后台系统的前端脚 ...

  3. maven踩过的坑

    maven配置 maven默认配置 解决每次打开idea的spring项目都需要重新配置maven,选择file/other settings/preference for new projects ...

  4. html打印后不刷新当前页

    这种方法可以在打印的页面中添加样式,新页面跳转打印 doPrint(ids){ var titleHTML=document.getElementById(ids).innerHTML; var Op ...

  5. SSM整合+WebUpload使用(spring+springmvc+mybatis+maven)

      SSM框架整合以及webupload的集成与使用 在项目中最近用到了webupload.js,也方方面面遇到了不少问题,比如上传文件前对表单参数校验,当校验失败不予提交,及在文件上传成功后,选择同 ...

  6. OpenvSwitch系列之七 meter表限速

    Open vSwitch系列之一 Open vSwitch诞生 Open vSwitch系列之二 安装指定版本ovs Open vSwitch系列之三 ovs-vsctl命令使用 Open vSwit ...

  7. shell 逻辑判断

    || && 查了 Stack Overflow ||,表示或,从前往后执行,执行第一个真 &&,前者是真才会接着执行 ; 表示接着往下执行,不管前者如何 #!/bin/ ...

  8. pythont多线程

    import threading # 线程模块 def function(num): pass thread_1 = threading.Thread(target=function, args=(1 ...

  9. Golang多线程简单斗地主

    多线程,通道,读写锁(单写多读),随机(洗牌),是本文涉及的主要知识点. 先看一下做出来的效果,因为是实验程序,跟真实的斗地主还是有差距,理解万岁! [发牌员]:洗牌咯. 刷刷刷... [发牌员]:牌 ...

  10. 数据库连接池设计和实现(Java版本)

    1 前言 数据库连接池是目前系统开发必须面对和考虑的问题,原理并不复杂,主要是减少重复连接数据库的代价:在系统中创建预期数量的数据库连接,并将这些连接以一个集合或类似生活中的池一样管理起来,用到的时候 ...