649206599 发表于 2015-8-18 14:01:32

用码盘给直流小电机测速问题求助

小白一个,折腾了堆代码,运行后返回的数值永远是0,求助{:soso_e136:} {:soso_e136:}


#include <MsTimer2.h>
//volatile int state = HIGH;
int u = 13;//定义U型测速端口
int CW1=8;//连接电机1转向端口到数字接口8
int CW2=9;
int PWM=11; //连接电机1调速端口到数字接口11
int wheel = 0; //记录U型测速模块的次数
wheel++;
//state=!state;
}
float velocity(int n)
{
float vel =n/20;
return vel;
}

void flash()
{
int l;
l=wheel;
vel=velocity(l);
Serial.print(vel);
Serial.print("r/s");
Serial.print("\n");
wheel = 0;
}

void setup ()
{
Serial.begin(9600);
attachInterrupt(0,Count, RISING);
pinMode(CW1,OUTPUT);
pinMode(CW2,OUTPUT);
pinMode(PWM,OUTPUT);
pinMode(u,INPUT);
MsTimer2::set(1000, flash);      // 中断设置函数,每 1s 进入一次中断
MsTimer2::start();
}

void loop()
{
digitalWrite(PWM,200);
digitalWrite(CW1,HIGH);//电机1正转
digitalWrite(CW2,LOW);
}



林定祥 发表于 2015-8-18 15:35:41

wheel只有在初始化中出现,int wheel=0 因此打印为0,wheel++在loop外只会动作一次,不会累加的,应该放在loop内吧。

Super169 发表于 2015-8-18 16:15:07

怎麼找不到你的 Count function 的?

Super169 发表于 2015-8-18 16:20:23

好像少了一行, wheel++ 之前, 應該是 void Count { , 對嗎?

如果是的話, 還要看看你的接線, 是否接到 D2 上?

PINKWALKMAN 发表于 2015-8-19 08:12:13

之前做过用电机编码器结合PID算法控制电机转速,电机编码器线数10线,一开始也用1S周期的作为PID转速采样的输入,结果电机的转速就像SIN函数曲线,懂的。后来改为脉冲宽度采集,用脉冲宽度反推时间,采样周期明显缩短。控制精度提高。

PINKWALKMAN 发表于 2015-8-19 08:13:13

Arduino能力有限,如果做好电机控制建议用STM32或者DSP。

rick_hou 发表于 2015-8-19 12:15:24

Super169 发表于 2015-8-18 16:15 static/image/common/back.gif
怎麼找不到你的 Count function 的?

没看到中断处理函数啊。
页: [1]
查看完整版本: 用码盘给直流小电机测速问题求助