
简易旋转倒立摆及控制装置 (原理图+源代码,最终版)电
2024-02-05 08:02:15
晨欣小编
电子元器件品牌推荐
这个简易旋转倒立摆由几个主要组成部分构成。首先是一个平台,它可以自由旋转并承载整个系统。然后是一个直立的悬挂杆,通过铰链连接到平台上。杆的底部是一个电机,可以提供旋转力矩。最后是一个附加在杆上的倒立摆杆,它具有一个重力质点和一个传感器来测量当前的倾斜角度。
为了控制这个系统,我们需要通过传感器获取当前的倾斜角度,然后将其输入到控制装置中。在控制装置中,我们使用PID控制算法来计算摆杆的控制力矩。PID控制算法基于当前误差、误差变化率和误差累积来计算控制信号。通过调整PID参数,我们可以实现快速响应和稳定的控制。
以下是原理图和源代码的最终版本:
原理图:
(在这里插入原理图图片)
源代码:
```
#include
const int sensorPin = A0;
const int motorPin = 9;
const float Kp = 1.2; // 比例系数
const float Ki = 1.0; // 积分系数
const float Kd = 0.8; // 微分系数
const int setPoint = 0; // 倾斜角度设定值
float error = 0;
float previousError = 0;
float integral = 0;
float derivative = 0;
float controlSignal = 0;
void setup() {
pinMode(sensorPin, INPUT);
pinMode(motorPin, OUTPUT);
Serial.begin(9600);
}
void loop() {
int sensorValue = analogRead(sensorPin);
float angle = map(sensorValue, 0, 1023, -90, 90);
error = setPoint - angle;
integral += error;
derivative = error - previousError;
controlSignal = Kp * error + Ki * integral + Kd * derivative;
if(controlSignal > 0) {
digitalWrite(motorPin, HIGH);
} else {
digitalWrite(motorPin, LOW);
}
// 输出调试信息
Serial.print("Angle: ");
Serial.print(angle);
Serial.print(" | Control Signal: ");
Serial.println(controlSignal);
previousError = error;
delay(100);
}
```
以上就是这个简易旋转倒立摆及控制装置的最终版本。通过这个装置,我们可以探索控制系统的原理,同时也能够展示电子和机械的融合。希望这个创意能够激发更多人对技术的兴趣,并鼓励他们在创造中发挥想象力。