极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 13918|回复: 5

电机 对射、计数、光电传感器 测速偏小问题

[复制链接]
发表于 2016-3-28 21:35:08 | 显示全部楼层 |阅读模式
本帖最后由 Jackxwb 于 2016-3-29 10:41 编辑
  1. //double Time;
  2. long Time, qdTime, qdTime2;//通过两个变量来判断运行时间
  3. double a, l; //l为截面长度(cm)
  4. long js;//记录转动次数
  5. void setup()
  6. {
  7.   // put your setup code here, to run once:
  8.   Serial.begin(9600);
  9.   pinMode(3, INPUT);
  10.   l = 0.7;//截面长度(cm)
  11.   qdTime = millis();

  12. }

  13. void loop() {
  14.   // put your main code here, to run repeatedly:
  15.   Time = pulseIn(3, HIGH, 60000000); //读取引脚上的高电平脉冲,最大脉冲时间间隔为6秒,并且把结果赋值给Time变量
  16.   //  Serial.println(Time/100000);//单位秒
  17.   Serial.print(Time);//单位微秒
  18.   // a=0.01/Time*10000;
  19.   Serial.print(",");
  20.   Serial.print(l / Time * 1000); //m/s
  21.   Serial.print(" m/s");
  22.   js++;
  23.   qdTime2 = millis();
  24.   Serial.print(",");
  25.   Serial.print((qdTime2 - qdTime) / 1000.0);
  26.   Serial.println(" s");
  27.   if ((qdTime2 - qdTime) / 1000.0  > 60)//这个if用来判断有没有一分钟
  28.   {
  29.     Serial.print("                  ");
  30.     Serial.print(js);
  31.     Serial.println(" r/min");
  32.     js = 0;
  33.     qdTime = qdTime + 60000;
  34.   }
  35. }
复制代码


使用 对射式计数光电传感器模块 + arduino mead 2560 对空心杯测速,测得每分钟只有2700转左右!!
但是卖家给出的是空转50000r/min,差了二十倍左右!!
恳请大神检查一下源码是不是哪里错了?

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复

使用道具 举报

 楼主| 发表于 2016-3-28 23:27:15 | 显示全部楼层
164335413 发表于 2016-3-28 22:33
试试外部中断,准确性会高一些。


?没有明白?
每次运行loop都会卡在“Time = pulseIn(3, HIGH, 60000000);”等待高电平,只有变高电平程序才继续运行(计时不受影响)。
就相当于叶片经过一次就计次一次,没有经过就等待(除非60秒都没有返回高电平)。
____________________

目前已经知道是什么问题了,每次都串口输出会造成严重的延迟,把if外边的串口输出都屏蔽掉就有一个比较接近的数据了。(我的空心杯最高有60000r/min)
~~一个小时之内回只能回一帖等得好幸苦~~
回复 支持 反对

使用道具 举报

发表于 2016-3-28 22:14:31 | 显示全部楼层
代码不对,你是想用js来计脉冲的个数,不过这么写是无法实现计数的。这个2000多这个数据其实只是1分钟内loop函数运行的次数,不是脉冲数。
回复 支持 反对

使用道具 举报

发表于 2016-3-28 22:33:58 | 显示全部楼层
试试外部中断,准确性会高一些。
回复 支持 反对

使用道具 举报

发表于 2016-3-29 14:49:09 | 显示全部楼层
print函数占用了时间,就在你从串口向终端发数据的时候,已经有脉冲过去了,然而并没有被检测到。
回复 支持 反对

使用道具 举报

发表于 2016-3-30 08:21:56 | 显示全部楼层
2560有外部中断IO口,用这个准确度要高一些。然后不知道采用多少线的光电编码器,线数不宜高,Arduino的没有专业的编码器计数器,所以计数的能力较弱,如果控制精度要求不高建议用10线或者1线的,如果只是做电机调速控制,这个高的转速1线也够用啦。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 需要先绑定手机号

Archiver|联系我们|极客工坊

GMT+8, 2024-5-20 15:01 , Processed in 0.042635 second(s), 23 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表