You are on page 1of 5

BÀI 1.

ĐIỀU KHIỂN HỆ TRUYỀN ĐỘNG ĐỘNG CƠ MỘT CHIỀU

1. Khảo sát đặc tính cơ của động cơ điện một chiều


Phương trình đặc tính cơ động cơ động cơ một chiều có dạng như sau:
Vu Ru
n  f M    M
K K2
Đây là phương trình bậc nhất nên đặc tính cơ là một đường thẳng.

2. Điều khiển động cơ một chiều


2.1. Mô phỏng sử dụng MATLAB Simulink
Chương trình MATLAB nhập thông số động cơ, xác định hàm truyền và tính toán bộ điều khiển
PI cho động cơ:
clc; % Xoa man hinh
clear; % Xoa cac bien trong workspace
R = 24.2674; % Dien tro phan ung (Ohms)
L = 1.1752; % Dien cam phan ung (H)
J = 0.0383; % Mo men quan tinh (kg.m^2)
D = 7.6639e-4; % Hang so mo men can diu (N.m.s)
K = 1.8884; % Hang so suc dien dong nguoc (V/rad/s)
TL = 1.5; % Mo men tai dinh muc (N.m)
a = K/L/J; % He so trung gian a
b = (R*J + L*D)/L/J; % He so trung gian b
c = (R*D + K^2)/L/J; % He so trung gian c
num = a*30/pi; % Tu so ham truyen
den = [1 b c]; % Mau so ham truyen
Gs = tf(num,den) % Ham truyen cua dong co
pidtune(Gs,'pi') % Tinh he so Kp va Ki cua bo dieu khien PI
Ts = 0.1; % Chu ky lay mau (giay)
Hình 1. Mô phỏng Simulink điều khiển động cơ 1 chiều.

Chương trình MATLAB vẽ đường cong tốc độ:


clc;
clear;
load data_1.mat;
t = data_1.time;
ref = data_1.data(:,1);
y = data_1.data(:,2);
plot(t,ref,'b--','linewidth',2);
xlabel('Time (s)');
ylabel('ref (rpm)');
grid on;
hold on
plot(t,y,'r-','linewidth',2);
xlabel('Time (s)');
ylabel('Speed (rpm)');
grid on;
legend('Reference speed','Real speed');
axis([0 max(t) 1.1*min(y) 1.2*max(y)]);
600 Reference speed
Real speed

500

400

Speed (rpm) 300

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);
}

You might also like