Arduino Uno控制直流電機(jī)
其實(shí),三年前的東西都已經(jīng)記不清楚了。研究生沒有做硬件,相關(guān)的都快看不懂了!為了讓大家看得懂程序,將總的系統(tǒng)設(shè)計(jì)思路貼出來,如下:
整個(gè)系統(tǒng)是實(shí)現(xiàn)“太陽(yáng)能智能控制環(huán)保路燈控制器設(shè)計(jì)”,主要是用直流電機(jī)控制太陽(yáng)能電池板轉(zhuǎn)動(dòng),確保其在每個(gè)時(shí)間段能夠?qū)崿F(xiàn)最高的發(fā)電效率,仿向日葵實(shí)現(xiàn)東西轉(zhuǎn)動(dòng)。
Arduino Uno手冊(cè)上有其關(guān)于控制直流電機(jī)的詳細(xì)介紹,如果仔細(xì)閱讀,實(shí)現(xiàn)起來很簡(jiǎn)單的。可以結(jié)合本文的系統(tǒng),對(duì)其進(jìn)一步理解,則可以編寫響應(yīng)的代碼。
主程序
//#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);
// }
}
}
}
這是我本科畢業(yè)設(shè)計(jì)的部分內(nèi)容,之前回答別人相關(guān)問題時(shí)留下了QQ號(hào),這幾年總有人加我問相關(guān)的問題。今天也有一個(gè)本科生咨詢,趁這個(gè)機(jī)會(huì),就把相關(guān)資料貼出來吧。
其實(shí),三年前的東西都已經(jīng)記不清楚了。研究生沒有做硬件,相關(guān)的都快看不懂了!為了讓大家看得懂程序,將總的系統(tǒng)設(shè)計(jì)思路貼出來,如下:
12
PID算法控制程序
該部分系統(tǒng)原理圖如下,有助于理解代碼,可根據(jù)應(yīng)用環(huán)境不同修改代碼:
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);}
}
-
直流電機(jī)
+關(guān)注
關(guān)注
36文章
1718瀏覽量
71067 -
Arduino
+關(guān)注
關(guān)注
188文章
6483瀏覽量
189473
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
如何使用MATLB和Arduino控制直流電機(jī)

Arduino實(shí)踐詳細(xì)說明之L298N驅(qū)動(dòng)直流電機(jī)
一種arduino直流電機(jī)
如何用Arduino Uno去控制直流電機(jī)?
直流電機(jī)速度
arduino uno如何利用l298n驅(qū)動(dòng)板來控制直流電機(jī)的正反轉(zhuǎn)和速度?
Arduino的直流電機(jī)調(diào)速

arduino直流電機(jī)

ros與arduino通信控制直流電機(jī)

使用Arduino的直流電機(jī)MOSFET控制速度

使用Arduino來控制直流電機(jī)

如何使用Arduino UNO和TIP120晶體管驅(qū)動(dòng)和控制直流電機(jī)的速度

評(píng)論