- UID
- 373967
- 帖子
- 8764
- 主題
- 2609
- 精華
- 0
- 積分
- 992
- 楓幣
- 2547
- 威望
- 969
- 存款
- 31556
- 贊助金額
- 0
- 推廣
- 0
- GP
- 1205
- 閱讀權限
- 50
- 在線時間
- 450 小時
- 註冊時間
- 2023-1-12
- 最後登入
- 2024-11-2
|
ESP32-PICO-D4 芯片的 PID 控制器,你需要以下零件:
ESP32-PICO-D4 控制芯片
直流馬達(或其他需要控制的裝置)
馬達驅動器
4位七段顯示器(選擇性,用於顯示控制器的狀態)
杜邦線和其他連接器
下面是 ESP32-PICO-D4 的引腳連接示意圖:
ESP32-PICO-D4 | 零件
-------------------|-------------------
5V --> 馬達驅動器電源
GND --> 馬達驅動器GND
GPIO12 --> 馬達驅動器PWM
GPIO13 --> 馬達驅動器DIR
GPIO14 --> 七段顯示器D1
GPIO27 --> 七段顯示器D2
GPIO26 --> 七段顯示器D3
GPIO25 --> 七段顯示器D4
以下是 ESP32-PICO-D4 上的 PID 控制器的範例程式碼:
c++
#include <PID_v1.h>
// PID 控制器參數
double Setpoint, Input, Output;
double Kp = 2, Ki = 5, Kd = 1;
// 七段顯示器引腳
int digit1 = 14;
int digit2 = 27;
int digit3 = 26;
int digit4 = 25;
// 顯示數字的模式
byte digit[10][8] = {
{1,1,1,1,1,1,0,0}, // 0
{0,1,1,0,0,0,0,0}, // 1
{1,1,0,1,1,0,1,0}, // 2
{1,1,1,1,0,0,1,0}, // 3
{0,1,1,0,0,1,1,0}, // 4
{1,0,1,1,0,1,1,0}, // 5
{1,0,1,1,1,1,1,0}, // 6
{1,1,1,0,0,0,0,0}, // 7
{1,1,1,1,1,1,1,0}, // 8
{1,1,1,1,0,1,1,0} // 9
};
// 建立 PID 控制器物件
PID myPID(&Input, &Output, &Setpoint, Kp, Ki, Kd, DIRECT);
void setup() {
// 初始化引腳為輸出模式
pinMode(digit1, OUTPUT);
pinMode(digit2, OUTPUT);
pinMode(digit3, OUTPUT);
pinMode(digit4, OUTPUT);
// 設置 PID 控制器參數
Setpoint = 50;
Input = 0;
Output = 0;
// 啟動 PID 控制器
myPID.SetMode(AUTOMATIC);
}
void loop() {
// 讀取馬達速度
Input = analogRead(A0);
// 更新 PID 控制器
myPID.Compute();
// 控制馬達速度
analogWrite(12, Output);
// 顯示 PID 控制器狀態
int integer_part = (int)Output;
int decimal_part = (int)((Output - integer_part) * 10);
digitalWrite(digit1, LOW);
digitalWrite(digit2, LOW);
digitalWrite(digit3, LOW);
digitalWrite(digit4, HIGH);
displayNumber(decimal_part);
delay(1);
digitalWrite(digit1, LOW);
digitalWrite(digit2, LOW);
digitalWrite(digit3, HIGH);
digitalWrite(digit4, LOW);
displayNumber(integer_part % 10);
delay(1);
digitalWrite(digit1, LOW);
digitalWrite(digit2, HIGH);
digitalWrite(digit3, LOW);
digitalWrite(digit4, LOW);
displayNumber((integer_part / 10) % 10);
delay(1);
digitalWrite(digit1, HIGH);
digitalWrite(digit2, LOW);
digitalWrite(digit3, LOW);
digitalWrite(digit4, LOW);
displayNumber((integer_part / 100) % 10);
delay(1);
}
// 顯示數字
void displayNumber(int number) {
for (int i = 0; i < 8; i++) {
if (digit[number][i] == 1) {
digitalWrite(i + 15, HIGH);
} else {
digitalWrite(i + 15, LOW);
}
}
}
這個程式碼示範了如何使用 ESP32-PICO-D4 和 PID 控制器來控制馬達速度,同時在 4 位七段顯示器上顯示 PID 控制器輸出。
程式碼中,我們先初始化 PID 控制器和七段顯示器的引腳,然後設置 PID 控制器的參數並啟動它。
在主循環中,我們讀取馬達速度,更新 PID 控制器,並控制馬達速度。
最後,我們顯示 PID 控制器的輸出值在 4 位七段顯示器上。 |
|