Professional Documents
Culture Documents
N I Dung TN1 - 081123
N I Dung TN1 - 081123
500
400
200
100
0
0 1 2 3 4 5 6
Time (s)
Hình 2. Tốc độ tham chiếu và tốc độ thực (tốc độ tham chiếu tăng từ 200 vòng/phút lên 500
vòng/phút sau 3 giây).
Reference speed
600
Real speed
500
Speed (rpm)
400
300
200
100
0
0 1 2 3 4 5 6
Time (s)
Hình 3. Tốc độ tham chiếu và tốc độ thực (tốc độ tham chiếu giảm từ 500 vòng/phút xuống
200 vòng/phút sau 3 giây).
2.2. Thực nghiệm
Chương trình C cho vi điều khiển Arduino Uno hệ điều khiển vòng hở động cơ 1 chiều:
const int analogInPin = A0;
const int analogOutPin = 5;
int sensorValue = 0;
int outputValue = 0;
int duty = 0;
void setup() {
Serial.begin(9600);
}
void loop() {
sensorValue = analogRead(analogInPin);
outputValue = map(sensorValue, 0, 1023, 0, 255);
duty = map(sensorValue, 0, 1023, 0, 100);
analogWrite(analogOutPin, outputValue);
Serial.print(outputValue);
Serial.print("\t");
Serial.println(duty);
delay(100);
}
Chương trình C cho vi điều khiển Arduino Uno cho hệ điều khiển vòng kín động cơ 1 chiều sử
dụng bộ điều khiển PI:
float a = 0.32;
float b = 0.0187;
float rk, yk, ek;
float pk = 0;
float qk = 0;
float qk_1 = 0;
float uk = 0;
int MIN = 0;
int MAX = 255;
float sensorValue = 0;
int adc;
int Ts = 100;
void setup() {
Serial.begin(9600);
}
void loop() {
rk = 500;
adc = analogRead(A0);
yk = map(adc, 0, 1023, 0, 2500);
ek = rk - yk;
pk = a*ek;
qk = qk_1 + b*ek;
uk = pk + qk;
if (uk<=MIN) {
uk = MIN;
qk_1 = qk;
}
if (uk>=MAX) {
uk = MAX;
qk_1 = qk;
}
qk_1 = qk;
analogWrite(5, uk);
delay(Ts);
}