电机 对射、计数、光电传感器 测速偏小问题
本帖最后由 Jackxwb 于 2016-3-29 10:41 编辑//double Time;
long Time, qdTime, qdTime2;//通过两个变量来判断运行时间
double a, l; //l为截面长度(cm)
long js;//记录转动次数
void setup()
{
// put your setup code here, to run once:
Serial.begin(9600);
pinMode(3, INPUT);
l = 0.7;//截面长度(cm)
qdTime = millis();
}
void loop() {
// put your main code here, to run repeatedly:
Time = pulseIn(3, HIGH, 60000000); //读取引脚上的高电平脉冲,最大脉冲时间间隔为6秒,并且把结果赋值给Time变量
//Serial.println(Time/100000);//单位秒
Serial.print(Time);//单位微秒
// a=0.01/Time*10000;
Serial.print(",");
Serial.print(l / Time * 1000); //m/s
Serial.print(" m/s");
js++;
qdTime2 = millis();
Serial.print(",");
Serial.print((qdTime2 - qdTime) / 1000.0);
Serial.println(" s");
if ((qdTime2 - qdTime) / 1000.0> 60)//这个if用来判断有没有一分钟
{
Serial.print(" ");
Serial.print(js);
Serial.println(" r/min");
js = 0;
qdTime = qdTime + 60000;
}
}
使用 对射式计数光电传感器模块 + arduino mead 2560 对空心杯测速,测得每分钟只有2700转左右!!
但是卖家给出的是空转50000r/min,差了二十倍左右!!
恳请大神检查一下源码是不是哪里错了?
164335413 发表于 2016-3-28 22:33 static/image/common/back.gif
试试外部中断,准确性会高一些。
?没有明白?
每次运行loop都会卡在“Time = pulseIn(3, HIGH, 60000000);”等待高电平,只有变高电平程序才继续运行(计时不受影响)。
就相当于叶片经过一次就计次一次,没有经过就等待(除非60秒都没有返回高电平)。
____________________
目前已经知道是什么问题了,每次都串口输出会造成严重的延迟,把if外边的串口输出都屏蔽掉就有一个比较接近的数据了。(我的空心杯最高有60000r/min)
~~一个小时之内回只能回一帖等得好幸苦~~ 代码不对,你是想用js来计脉冲的个数,不过这么写是无法实现计数的。这个2000多这个数据其实只是1分钟内loop函数运行的次数,不是脉冲数。 试试外部中断,准确性会高一些。 print函数占用了时间,就在你从串口向终端发数据的时候,已经有脉冲过去了,然而并没有被检测到。 2560有外部中断IO口,用这个准确度要高一些。然后不知道采用多少线的光电编码器,线数不宜高,Arduino的没有专业的编码器计数器,所以计数的能力较弱,如果控制精度要求不高建议用10线或者1线的,如果只是做电机调速控制,这个高的转速1线也够用啦。
页:
[1]