Số hiệu: BM1/QT-PĐBCL-RĐTV 1
TRƯỜNG ĐẠI HỌC SƯ PHẠM KỸ THUẬT
THÀNH PHỐ HỒ CHÍ MINH
KHOA CƠ KHÍ CHẾ TẠO MÁY
BỘ MÔN CƠ ĐIỆN TỬ
-------------------------
ĐÁP ÁN HỌC KỲ 2, NĂM HỌC 18-19
Môn: HỆ THỐNG TRUYỀN ĐỘNG SERVO
Mã môn học: SERV424029
Đề số: 01; Đề thi có 2 trang.
Thời gian: 75 phút.
Được phép sử dụng tài liệu
Bài 1:
a (1đ) Đường đặc tính tả mối quan hệ giữa vận tốc tối đa của động -men xoắn
(torque). Dựa vào đường đặc tính này ta thể tính được vận tốc khởi động của động
tương ứng với mô-men tải để không bị trượt bước.
b (1đ). Theo hình vận tốc khởi động tối đa của động 12000 pps. Theo công thức slide
16:
60 60 12000 3600
3601.8
pps
rpm ppr

Vận tốc động cơ:
3600 2 377 (rad/s)
60
c. Kết nối phần cứng (0.5đ)
Do động cơ lưỡng cực 2 pha nên sử dụng mạch cầu H tích hợp (ví dụ: L298)
H-Bridge 1
H-Bridge 2
IN 1
IN 2
IN 3
IN 4
CONTROLLER
A
B
B
OUT1
OUT2
OUT3
OUT4
P0
P1
P2
P3
Với vận tốc như câu b, ta tính được thời gian delay (0.5đ):
3
11
84 10 (ms) 84 (us)
12000
d
Tpps
Dựa vào hình 1b, ta có bảng trạng thái xuất xung của bộ điều khiển (0.5đ)
Số hiệu: BM1/QT-PĐBCL-RĐTV 1
SV có thể viết chương trình hoặc lưu đồ giải thuật cho bộ điều khiển theo bảng trên (0.5đ)
Lưu ý: Nếu SV sử dụng chân PWM DIR cho phần cứng bảng trạng thái vẫn cho đủ
điểm nếu làm đúng.
Bài 2:
a. Để đọc encoder chế độ x2 ta sử dụng 1 ngắt ngoài, cạnh lên (rising) cạnh xuống
(falling). Giả sử dùng ngắt ngoài kênh 0, (EXTI0), kết nối với kênh A của encoder (0.5đ)
Chương trình (1đ)
T1_ISR(){
if ((rising)&(B==0)|(falling)&(B==1))
count++;
else
count--;
cntvel++; //dùng để tính vận tốc
if (count>=2000)
count=0;
else if (count<=-2000)
count=0;
}
b. Sdụng ngắt timer, dụ Timer 1 của vi điều khiển, thời gian ngắt (thời gian lấy mẫu) tự
khai báo. Gọi T(s) thời gian lấy mẫu. Cấp vận tốc trung bình từ 150 RPM đến 600 RPM,
giả sử ta tìm được thông số của bộ điều khiển PI cho cấp vận tốc này Kp Ki. Do sử
dụng anti-windup nên sử dụng thêm hệ số Kb cho bộ anti-windup. (0.5đ)
Các công thức tính toán bộ điều khiển vận tốc PI:
Tính vận tốc :
2( / )
(2 )
k
Mrad s
NT
(2.1)
Trong đó: M là số xung đếm được trong thời gian lấy mẫu, T(s)
Tính sai số
d
k k k
e


(2.2)
Khâu P:
Pk p k
u K e
(2.3)
Khâu I (sử dụng công thức tích phân lùi và có anti-windup)
ek_windup = KIek + Kbek_reset
1_
II
k k k windup
u u Te

(2.4)
T: thời gian lấy mẫu (s)
P3
P2
P1
P0
HEX
L
H
L
H
0x05
H
L
L
H
0x09
H
L
H
L
0x0A
L
H
H
L
0x06
Số hiệu: BM1/QT-PĐBCL-RĐTV 1
Cấu trúc anti-windup cho khâu I
Chương trình (2đ)
const float pi = 3.1415;
float desiredVel;
T1_ISR(){
static float iterm_p=0;
static float err_sat=0;
float err,err_windup;
float pterm, iterm;
float piterm,pi_sat;
int cnttmp, piout;
HILIM = 100; LOLIM=0; //HILIM =100 tương đương PWM -> 100%
//Tính vận tốc theo công thức (2.1)
cnttmp = cntvel;
cntvel = 0;
curVel = (cnttmp*pi)/(1000*T); //tính vận tốc (rad/s) khi đọc encoder mode x2
//Tính sai số
err = desiredVel - curVel;
//Tính PI bao gồm anti-windup theo các công thức (2.2), (2.3), (2.4)
pterm = Kp*err;
err_windup = Ki*err + Kb*err_reset;
iterm = iterm_p + err_windup*T;
iterm_p = iterm;
piterm += pterm + iterm;
//saturation of PIterm
if (piterm>HILIM)
pi_sat = HILIM;
else if (piterm<LOLIM)
pi_sat = LOLIM;
else
pi_sat = piterm;
err_reset = pi_sat-piterm;
piout = (int)pi_sat; //ép kiểu số nguyên cho độ rộng xung PWM
return piout;
Số hiệu: BM1/QT-PĐBCL-RĐTV 1
Lưu ý: Nếu SV không trình bày các công thức tính nhưng vẫn viết đầy đủ trong chương trình
thì vẫn cho đủ số điểm.
Bài 3: Tính toán các thông số cần thiết (0.5)
Góc quay:
150 5 ()
180 6 rad

Lựa chọn gia tốc khởi động cho động cơ,
công thức 4.12 slide bài giảng.
2
2
44 5 6 10 ( / )
13
fi
c
f
qq
q rad s
t

Chọn
2
10 ( / )
c
q rad s
Thời gian tăng tốc, công thức 4.11 slide bài
giảng:
24( )
1
22
f f c f i
c
c
t t q q q
tq

=0.092 (s)
Tính quỹ đạo q(t) theo công thức (4.14)
trong slide bài giảng (0.5đ)
Đồ thị vị trí, vận tốc, gia tốc (1đ)
Trong đó
0.092( )
c
ts
,
1( )
f
ts
6;
if
qq


2
10 (rad/ s )
c
q