|
本帖最后由 tanbocandy 于 2013-7-8 01:29 编辑
今天把PID电机调速的弄出来了,看到论坛了好像还没的有关于这个的帖子(也有可能是我没发现,希望有知道的在下面把链接贴出来下,让大家都学习下),代码比较简单,波形还算好,通过电位器调节Setpoint,100线的码盘,PID参数要根据自己的调整,PIN8和PIN11控制电机,速度是每秒多少转,代码如下
注:PID的库在这里
http://playground.arduino.cc/Code/PIDLibrary
#include <PID_v1.h>
double Setpoint, Input, Output;
PID myPID(&Input,&Output,&Setpoint,0.1,0.05,0,DIRECT); //Kp=0.1,Ki=0.05,Kd=0,change depend on your system
int control_v;
float rotation_v;
int time1,time2;
int elapse_time;
void setup()
{
pinMode(8,OUTPUT);
pinMode(11,OUTPUT);
attachInterrupt(0,count,FALLING);
Serial.begin(9600);
time1=millis();
myPID.SetMode(AUTOMATIC);
}
void loop()
{
control_v=analogRead(A0); //read the analog from potentiometer
Setpoint=map(control_v,0,1023,0,200); //the range of the speed is 0~200
time2=millis();
elapse_time=time2-time1;
time1=time2;
Input=rotation_v*elapse_time/10; // the speed of the motor
rotation_v=0;
myPID.Compute(); //PID algorithem
Serial.print(Setpoint); //send to serial chat
Serial.print(",");
Serial.print(Input);
Serial.print("\r\n");
analogWrite(11,Output); //PWM out put
}
void count()
{
rotation_v+=1; //rotate++
}
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?注册
x
|