Valyrian 发表于 2016-8-17 10:06:57

关于电机调速的问题,为什么串口输出nan,大神帮帮忙!!!

mega2560,用的普通小车黄色电机,驱动是L298n,码盘是20栅的。借鉴了http://www.geek-workshop.com/forum.php?mod=viewthread&tid=5215&highlight=%B5%F7%CB%D9
原文处进行速度计算是这么写的:Input=rotation_v*elapse_time/10;我觉得有错改成了Input=rotation_v/elapse_time*50;(因为是20栅所以改成50)。但运行后无法串口控制变速,而且关键是此时的Output串口输出为nan,不懂什么意思。。。我觉得问题就出在这一句,因为用原文语句电机可以旋转(通过串口给速度可以改变转速,但是速度与所需速度不一致),而自己改后的完全都不能旋转。我的代码如下,希望大神能给与帮助

#include <PID_v1.h>
double Setpoint, Input, Output;
PID myPID(&Input,&Output,&Setpoint,15,2,1,DIRECT); //pid值还未调好
float control_v;   
float rotation_v;   
int time1,time2;   
int elapse_time;   

void setup()
{
pinMode(8,OUTPUT);                  //原文只用了一个引脚
pinMode(9,OUTPUT);                  //此处加了一个
pinMode(10,OUTPUT);               
digitalWrite(8,HIGH);
digitalWrite(9,LOW);
attachInterrupt(0,count,FALLING);
Serial.begin(9600);
time1=millis();
myPID.SetMode(AUTOMATIC);
}

void loop()
{
while(Serial.available()){                //原文采用电位器,此处改为串口
    control_v=Serial.parseInt();            //
}                                           //
Setpoint=control_v;                        //
time2=millis();      
elapse_time=time2-time1;
time1=time2;
Input=rotation_v/elapse_time*50;   //原文处采用100栅Input=rotation_v*elapse_time/10;
rotation_v=0;                         //我采用的20栅码盘,并觉得原文速度计算有误,变作了更改
myPID.Compute();      

Serial.print(Setpoint);      
Serial.print(",");
Serial.print(Input);
Serial.print(",");
Serial.print(Output);      //检测Output输出是什么
Serial.print("\r\n");
analogWrite(10,Output);               //改了引脚
}

void count()
{
rotation_v+=1;         
}

Valyrian 发表于 2016-8-17 10:33:04

这是昨天的问题,今天看了看发现将Input=rotation_v/elapse_time*50;改为
Input=(rotation_v/elapse_time*50);后电机可以开始旋转了,难道是pid库的字符类型的问题?
效果如下(..,..,..)依次为Setpoint值,Input值,Output值。然而Input依旧没有接近Setpoint的值只是让电机能转起来且Setpoint值越大转的越快,当我设置Setpoint为99,999这些大数字时,电机转速加快了,但Input的值却变化不大还是个位数,这是转速求法的问题吗?

Valyrian 发表于 2016-8-17 10:33:30

转速设置为rad/s

Valyrian 发表于 2016-8-17 10:34:54

可能我的pid得重调

pumpitup 发表于 2016-8-18 00:13:24

pid没研究过......
页: [1]
查看完整版本: 关于电机调速的问题,为什么串口输出nan,大神帮帮忙!!!