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浏览量
70193 -
Arduino
+关注
关注
188文章
6470浏览量
187135
发布评论请先 登录
相关推荐
评论