YFROBOT创客社区

标题: Arduino入门教程—U型测速模块的使用 [打印本页]

作者: AllBlue    时间: 2013-11-23 11:27
标题: Arduino入门教程—U型测速模块的使用
U型测速模块的使用
今天做了一个电机测速实验!
实验元件:

U型测速模块

TT马达和测速码盘

标准电源(3V和6V)

使用了淘宝上很便宜的TT马达,下图为TT马达的几个基本参数:

[attach]672[/attach]
我本次使用的是1:48的减速比电机,其他两个都没有测试~~~
下面是U型测速模块图片:
[attach]671[/attach]
电路:(电路图就不画了,接线很简单)
将上面的U型测速模块接好,G接GND、V接5V、S接数字引脚2或者3(使用中断,只能接这两个脚),
然后将码盘和TT马达安装在一起,就可以试验了。 TT马达直接连接电源。

接好后,用一个遮挡物放在U型开关之间,模块上的LED点亮,无遮挡物时,LED不亮;
利用这一原理,当信号输出变化一次就计数一次,再经过一些列的换算就可以得到转速了~~

下面我们看下程序,将其复制到Arduino IDE中,烧写入UNO中:

[C] 纯文本查看 复制代码
/************************************************************************
   电机测速
   使用millis()函数,记录时间,单位为毫秒
   使用中断函数,当引脚电平改变时触发,计数一次
   以1:48减速电机、20孔的码盘为例
   将得到的值Val除以40,得到转动圈数
   除以 时间,可自定义采样时间,单位:ms
   换算单位,得到电机转速Speed ,单位 转/分
   BY YFROBOT
************************************************************************/
/* 注意:这里电机直接给电压转动,未使用程序和驱动模块驱动 */

int U_Pin = 2;              //设置模块引脚接到数字引脚2(程序用到中断函数,UNO中断引脚为数字引脚2和3)
float Val = 0;              //设置变量Val,计脉冲数
unsigned long time = 0;      //设置变量time,计时
int sampling_time = 500;    //采样时间
float Speed;                //设置变量Speed,存储转速

void setup() {
  Serial.begin(9600);
  attachInterrupt(0, count, CHANGE);  //引脚电平发生改变时触发
  time = millis();
}

void loop() {
  if (millis() - time >= sampling_time) {
    detachInterrupt(0);             // 关闭外部中断
    // Val/40 圈数; sampling_time/60000 换算时间单位;
    // 计算公式:转速/时间 - (Val / 40) / (sampling_time / 60000) ;
    // 简化:
    Speed = (float) (Val * 1500 / sampling_time);
    Serial.println(Speed);
    Val = 0;
    time = millis();
    attachInterrupt(0, count, CHANGE);  //重新开启外部中断
  }
}

void count() {
  Val += 1;
}

接上电源,测试结果结果如下(3V与6V,单位为转/分):
[attach]673[/attach][attach]674[/attach]
测试结果与上面的表中有些误差~~~


作者: YFRobot    时间: 2013-11-30 08:21
表格上的应该是参考数据,另外有误差,应该是由于码盘的精度不够!
作者: tiantianyouyou    时间: 2019-5-5 07:52
学习学习,谢谢分享




欢迎光临 YFROBOT创客社区 (http://www.yfrobot.com.cn/) Powered by Discuz! X3.1