控制任务

检测编码器的脉冲并测速

电路设计

图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 }

最新文章

  1. Ajax表单异步上传(包括文件域)
  2. 使用Project进行项目管理 - 项目管理系列文章
  3. Mac 下安装PHP遇到的问题
  4. MYSQL数据库函数集合
  5. ADS报错 Warning&#160;:&#160;L6301W:Could&#160;not&#160;find&#160;file&#160;C:\Program&#160;Files&#160;.&#160;Error&#160;:&#160;L6218&#160;:&#160;Undefined&#160;symbol&#160;......
  6. LT1619EMS8 锂电池 升压电路分析
  7. 工具:BT Sync 同步文件
  8. Swift - 控制流/控制结构说明(if,switch,for,while)
  9. android的ViewPager和Animation有些使用(二)
  10. Ubuntu 14.04下搭建Node.js的开发环境
  11. ArcGis地理坐标系转投影坐标系问题的思考与处理
  12. 求两个数之间的质数 -----------基于for循环 算法思想
  13. awk 文本处理工具
  14. MT【180】齐次化+换元
  15. PowerDesigner 打印错误
  16. tableView cell 设置圆角 响应链
  17. Tarjan算法初探 (1):Tarjan如何求有向图的强连通分量
  18. onItemLongClick+onCreateContextMenu实现长按ListItem弹出不同菜单
  19. DOM基础操作实战代码
  20. informatica powercenter学习笔记(一)

热门文章

  1. 【Gin-API系列】Gin中间件之异常处理(六)
  2. C++轻量级跨平台文件系统API
  3. 实际项目中遇到EF实体类的操作问题及操作方法
  4. pie 饼图
  5. Zabbix如何解决&ldquo;System time is out of sync (diff with Zabbix server &gt; 60s)&rdquo;告警
  6. [bash]查找指定目录下符合格式的txt文件
  7. 如何《快速搭建LAMP环境》
  8. flutter dio网络请求封装实现
  9. 2018.12.08【NOIP提高组】模拟B组总结(未完成)
  10. 数据库连接池设计和实现(Java版本)