Arduino Uno控制直流電機
其實,三年前的東西都已經記不清楚了。研究生沒有做硬件,相關的都快看不懂了!為了讓大家看得懂程序,將總的系統設計思路貼出來,如下:
整個系統是實現“太陽能智能控制環保路燈控制器設計”,主要是用直流電機控制太陽能電池板轉動,確保其在每個時間段能夠實現最高的發電效率,仿向日葵實現東西轉動。
Arduino Uno手冊上有其關于控制直流電機的詳細介紹,如果仔細閱讀,實現起來很簡單的。可以結合本文的系統,對其進一步理解,則可以編寫響應的代碼。
主程序
//#include
int pinI1=8;
int pinI2=9;
int pinI3=2;
//int pinI4=3;
int pinI5=4;
//int pinI6=5;
//int pinI7=6;
int speedin=11;
volatile int state=LOW;
void setup()
{
pinMode(pinI1,OUTPUT);
pinMode(pinI2,OUTPUT);
pinMode(pinI3,INPUT);
// pinMode(pinI4,OUTPUT);
pinMode(pinI5,OUTPUT);
// pinMode(pinI6,OUTPUT);
// pinMode(pinI7,OUTPUT);
pinMode(speedin,OUTPUT);
// myPID.SetMode(AUTOMATIC);
// attachInterrupt(0,light,HIGH);
}
void loop()
{
while(1)
{
int n=analogRead(A1);
int err,err1,err2;
int pidspeed1;
float kp=0.1 ,ki=0,kd=0;
err=m-n;
pidspeed1=(int)(err*kp-err1*ki+err2*kd);
err1=err;
err2=err1;
state=digitalRead(pinI3);
digitalWrite(pinI5,state);
if (m》n)
{
// while(1)
// {
digitalWrite(pinI1,LOW);
digitalWrite(pinI2,HIGH);
analogWrite(speedin,100+pidspeed1);
// }
// delay(2000);
}
else if(m
{
// while(1)
// {
digitalWrite(pinI1,HIGH);
digitalWrite(pinI2,LOW);
analogWrite(speedin,100-pidspeed1);
// delay(2000);
// }
}
1
else
{
// while(1)
// {
digitalWrite(pinI1,HIGH);
digitalWrite(pinI2,HIGH);
//delay(2000);
// }
}
}
}
這是我本科畢業設計的部分內容,之前回答別人相關問題時留下了QQ號,這幾年總有人加我問相關的問題。今天也有一個本科生咨詢,趁這個機會,就把相關資料貼出來吧。
其實,三年前的東西都已經記不清楚了。研究生沒有做硬件,相關的都快看不懂了!為了讓大家看得懂程序,將總的系統設計思路貼出來,如下:
12
PID算法控制程序
該部分系統原理圖如下,有助于理解代碼,可根據應用環境不同修改代碼:
int m=analogRead(A0);
int n=analogRead(A1);
int err,err1,err2;
int pidspeed1;
float kp=0.1 ,ki=0,kd=0;
err=m-n;
pidspeed1=(int)(err*kp-err1*ki+err2*kd);
err1=err;
err2=err1;
void light();
SetMotor(Output);
void SetMotor()
{
if (m》n)
{
digitalWrite(pinI1,LOW);
digitalWrite(pinI2,HIGH);
12345
analogWrite(speedin,100+pidspeed1);}
else if(m
{ digitalWrite(pinI1,HIGH);
digitalWrite(pinI2,LOW);
analogWrite(speedin,100-pidspeed1);}
12345
else
{digitalWrite(pinI1,HIGH);
digitalWrite(pinI2,HIGH);}
}
-
直流電機
+關注
關注
36文章
1710瀏覽量
70410 -
Arduino
+關注
關注
188文章
6477瀏覽量
187815
發布評論請先 登錄
相關推薦
評論