Tải bản đầy đủ (.pdf) (20 trang)

Giao tiếp simulink matlab và arduino thông qua serial port và ứng dụng vào bài toán điều khiển tốc độ động cơ DC bằng PID

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (716.04 KB, 20 trang )

ĐẠI HỌC
C QUỐC
QU
GIA THÀNH PHỐ HỒ CHÍ MINH
TRƯỜNG
TRƯ
ĐẠI HỌC BÁCH KHOA

BÁO CÁO ĐỀ TÀI
Giao tiếp Simulink Matlab và Arduino thông
qua Serial port và ứng dụng
ng vào bài toán đi
điều
khiển
n ttốc độ động cơ DC bằng
ng PID

GVHD: Thầy Nguyễn Lê Dũng
Thựcc hi
hiện: Vũ Đức Hùng

MSSV: 1812476

Tp. Hồ
H Chí Minh, tháng 7 2021.


Tóm tắt
Arduino là một nền tảng mở và dễ dàng cho người bắt đầu học lập trình nhờ sự
hỗ trợ đông đảo từ các nguồn và các nền tảng khác. Arduino hỗ trợ nhiều cách
giao tiếp thông dụng với các I/O devices, chẳng hạn như TCP/IP, giao tiếp qua


cổng nối tiếp (Serial port). Trong bài này, giao tiếp nối tiếp sẽ được sử dụng để
thực hiện việc truyền và nhận dữ liệu giữa Matlab simulink và Arduino. Bằng
việc gửi và nhận dữ liệu giữa Arduino và Matlab simulink, ta sẽ theo dõi được
tốc độ của động cơ và tận dụng được bộ điều khiển PID được cung cấp bởi
Simulink để điều khiển tốc độ động cơ DC có gắn encoder.
Trong phần này, ta sẽ không sử dụng các khối trong thư viện Simulink Support
Package for Arduino Hardware. Bởi vì chúng ta sẽ sử dụng Arduino như một
thiết bị điều khiển trong một vịng kín. Bên cạnh đó, ta cũng sẽ điều khiển tốc
độ động cơ bằng bộ điều khiển On-Off để thấy rõ sự khác biệt giữa hai bộ điều
khiển.


I. Giới thiệu
Động cơ DC là một thiếết bị phổ biến, được sử dụng
ng trong các linh vvực khác
nhau. Trong công nghiệp,
p, động
đ
cơ DC được ứng dụng
ng trong vi
việc chế tạo các
băng tải,
i, bàn xoay, hay trong lĩnh
l
vực Robot, động cơ DC đượcc ssử dụng để làm
các bánh xe, giúp hệ thống
ng di chuyển.
ch
Do đó việc điều khiển độộng cơ hoạt động
theo mong muốn đã trở thành nhu ccầu tất yếu.

Để ứng dụng hệ thống điềều khiển kín vào động cơ, ta cần tín hiệệu hồi tiếp về bộ
điều khiển để hiệu chỉnh
nh liên tục
t tín hiệu điều khiển đầu vào để giữ cho động cơ
hoạt động theo giá trị mong muốn.
mu
Encoder là thiết bị hỗ trợ cho vấn đề này.
Bằng cách đọc tín hiệu từ
ừ Encoder được gắn với động
ng cơ DC, ta có th
thể đo đạc
được tốc độ của động
ng cơ DC. Từ
T đó hồi tiếp về để tính sai số gi
giữa giá trị tham
chiếu và giá trị đo đượcc để
đ điều chỉnh tín hiệu điều khiển.
Trong đề tài này, ta sẽ sử
ử dụng phần mềm Proteus để mô phỏỏng động cơ DC,
Arduino và mạch điều
u khiển.
khi Arduino được sử dụng
ng là Arduino Uno. Vì khơng
làm thiết bị thật nên ta sẽẽ sử dụng phần mềm com0com để tạoo ccổng COM ảo,
phục vụ giao tiếp nối tiếp
p giữa
gi Matlab Simulink và Arduino.
II. Cơ sở lí thuyết
1. Điều khiển tốcc độ
đ động cơ DC

Động cơ DC có cấu tạo
o ggồm nam châm vĩnh cữu có từ thơng khơng đđổi. Ta sẽ
điều chỉnh điện áp đặtt vào phần
ph ứng để thay đổi tốc độ động
ng cơ. Phương pháp
để điều chỉnh điện
n áp là đi
điều chế độ rộng xung PWM.


Xung là các trạng
ng thái cao/thấp
cao/th được lặp đi lặp lại. Tỉ lệ phầnn trăm gi
giữa thời
gian mức cao và chu kỳ củ
ủa xung là chu kỳ nhiệm vụ (duty cycle).
Có nhiều
u phương pháp để
đ tạo xung khác nhau, trong bài này ta ssẽ sử dụng
phương pháp tạo
o xung bằng
b
phần mềm. Cụ thể, ta sẽ sử dụng hàm
"analogWrite" củaa Arduino để tạo xung PWM. Tương ứng vớii giá tr
trị từ 0-255
củaa Hàm analogWrite là chu kỳ
k nhiệm vụ (Duty cycle) từ 0-100%.
100%.
2. Bộ điều khiển
n PID

PID là một bộ điều khiển
n vịng kín. Đây là bộ điều khiển kết hợ
ợp của 3 khâu: Tỉ
lệ (Proportional), tích phân (Intergral), và vi phân (Derivative).
Sơ đồ điều khiển PID:

Luật điều khiển PID:
u(t) = Kp( e(t) +

( )

+Td

( )

)

Ảnh hưởng củaa các khâu đi
điều khiển lên hệ thống:
+Khâu tỉ lệ (Kp): Làm giảm
gi thời gian lên và sai số xác lậập. Tuy nhiên Kp
quá lớn sẽ làm tăng độ vọ
ọt lố, hệ thống càng dao động
ng và khó xác llập.
+Khâu tích phân (Ki): Loại
Lo bỏ sai số xác lập. Ki càng lớ
ớn thì đột vọt lố
càng cao, thời gian xác lập
p tăng.



+Khâu vi phân (Kd): Hệ thống đáp ứng nhanh, độ vọt lố nhỏ. Tuy nhiên
không thể sử dụng riêng lẻ mà phải kết hợp với hai khâu trên.
Cách xác định các thông số của bộ điều khiển: Dùng Phương pháp ZieglerNichols:
+Đầu tiên ta sẽ cho Ki=Kd=0. Sau đó tăng dần Kp cho đến khi hệ thống
dao động tuần hoàn. Đặt Kp này là Kc.
+Đo chu kỳ dao động Pc của hệ, thực hiện tính tốn theo bảng sau:
Loại điều khiển

Kp

Ki

P

0.5Kc

PI

0.45Kc

1.2Kp/Pc

PID

0.6Kc

2Kp/Pc

Kd


KpPc/8

Bộ điều khiển PID số (rời rạc):
Bộ điều khiển được số hóa để tận dụng được sức mạnh của vi xử lí. Do trong đề
tài này, ta sử dụng khối nhận thông tin từ Arduino với thời gian lấy mẫu nên ta
sẽ sử dụng bộ PID số để không xuất hiện lỗi khi thực hiện điều khiển.
Sơ đồ bộ điều khiển:

Việc lựa chọn tham số cho bộ điều khiển PID số cũng tương tự như trên.
3. Encoder


Encoder hay cịn gọi là bộ mã hóa, là một thiết bị có khả năng làm biến đổi
chuyển động thành tín hiệu số hoặc xung1.
Encoder gồm hai loại chính:
+Encoder tuyệt đối .
+Encoder tương đối (incremental encoder).
Encoder mà ta sử dụng trong phần này là Encoder tương đối vì nó đơn giản, giá
thành rẻ.
Ngun lí hoạt động của Encoder:
Encoder có một đĩa với những lỗ có độ dài bằng nhau và cách đều nhau. Tất cả
đều được kết nối với chân Z chung và hai chân riêng biệt A và B.
Khi cái đĩa quay, chân A và chân B sẽ liên lạc với chân chung Z và hai tín hiệu
sóng vng được tạo ra lần lượt bởi hai chân, được biểu hiện như trong hình
bên dưới:

Hai tín hiệu tạo ra từ chân A và B ngược pha nhau một góc 90 độ. Nếu encoder
quay cùng chiều kim đồng hồ, tín hiệu từ chân A sẽ sớm pha hơn chân B.
Ngược lại, nếu encoder quay ngược chiều kim đồng hồ thì tín hiệu từ chân B sẽ

sớm pha hơn chân A.
Động cơ quay theo chiều kim đồng hồ:

1

/>

Động cơ quay ngược chiều kim đồng hồ:

Cách tính tốc độ động cơ DC:
Số xung một vòng quay (Pulses per revolution - PPR) là một thơng số của
encoder. Nó là số lượng xung đo được khi encoder hoàn tất một vòng quay 360
độ. Đây cũng là số đo của độ phân giải của encoder.
Phương pháp xác định tốc độ (RPM): Đo tần số. Ta sẽ đo tần số xung (số xung
trong một giây) từ một chân A hoặc B của encoder nhờ vào chức năng digital
input của vi xử lí. Sau đó áp dụng cơng thức sau để tính tốc độ (RPM):
RPM =







,

trong đó: tần số xung được tính bằng số xung/s; 60 là do 1 phút = 60s, tốc độ
đang tính là RPM.
III. Thiết kế hardware và các linh kiện cần thiết
Sơ đồ thiết kế mô phỏng trên Proteus:



•Arduino Uno: là một board mạch vi điều khiển được phát triển bởi
Arduino.cc, một nền tảng điện tử mã nguồn mở chủ yếu dựa trên vi điều
khiển AVR Atmega328P. Với Arduino chúng ta có thể xây dựng các ứng
dụng điện tử tương tác với nhau thông qua phần mềm và phần cứng hỗ
trợ.
Các chân input-output của Arduino uno


Chức năng trong đề tài này:
 Read and Write xử lý tín hiện digital, analog
 Đọc tín hiệu encoder gửi về để tính tốc độ động cơ
 Send/Receive data với Software Matlab bằng kết nối Serial port
•Mạch cầu L293N: là trình điều khiển động cơ H-Bridge kép cho phép điều
khiển tốc độ và hướng của hai động cơ DC cùng một lúc. Mơ-đun có thể điều
khiển động cơ DC có điện áp trong khoảng từ 5 đến 35V, với dòng điện cực đại
lên đến 2A.

Mơ-đun này có hai nhóm chân cho động cơ A và B, và một chân ở giữa cho
chân Ground, VCC cho động cơ và chân 5V có thể là đầu vào hoặc đầu ra.

Chân IN1, IN2 điều khiển hướng quay và tốc độ động cơ bằng PWM. IN1
bằng 0 và đầu vào 2 khác 0 thì động cơ sẽ quay theo chiều kim đồng hồ Vf
ngược lại.
Chân ENA để cho phép động cơ hoạt động


•Động cơ tích hợp encoder :Encoder có chức năng quay theo động cơ và dc
sử dụng để xác định tốc độ động cơ, hướng quay của động cơ bằng hai xung

A, B gửi về cho Arduino xử lí.
•Compim: mơ phỏng giao tiếp nối tiếp với cổng COM trong máy tính.
IV. Sơ đồ nguyên lí
Điểm đặt

+

Bộ điều khiển


_

DC Motor

Encoder

V. Các module sử dụng, lưu đồ giải thuật (flowchart)
1. Các module sử dụng
Để truyền và gửi dữ liệu từ Matlab qua cổng nối tiếp, ta sử dụng các khối trong
thư viện Instrument Control Toolbox của Matlab simulink.
Khối Serial Configuration được dùng để cấu hình
các thơng số của cổng nối tiếp cho Simulink.
Khối Serial Receive được dùng để nhận dữ liệu
dưới dạng nhị phân qua cổng nối tiếp.

Khối Serial Send được dùng để gửi dữ liệu dưới
dạng nhị phân qua cổng nối tiếp.

Khối Data Type Conversion dùng để chuyển đổi
kiểu dữ liệu từ ngõ vào và scale ngõ ra.



2. Lưu đồ giải thuật
Bắt đầu

Simulink nhận giá trị
ngõ ra từ Arduino

Tính tốn sai số giữa
giá trị đặt và giá trị
ngõ ra

Tính tốn tín hiệu
điều khiển

Gửi tín hiệu điều
khiển xuống arduino

Chờ tới lần lấy mẫu
tiếp theo

VI. Các hàm giao thức trong Arduino
-readFromMatlab(): Nhận dữ liệu gửi từ Maltlab qua Serial Port.
float readFromMatlab()
{
int reln = Serial.readBytesUntil("\r\n", buf, buffer_size);
for (int i=0; i{
u.b[i]=buf[i];
}

float output = u.fval;
return output;
}


-writeToMatlab (): Gửi dữ liệu từ Arduino lên Matlab
void writeToMatlab (float number)
{
byte *b = (byte *)& number;
Serial.write(b,4);
Serial.write(13);
Serial.write(10);
}

-encoder(): Tính tốc độ động cơ DC và điều khiển chiều quay
Bằng việc sử dụng chức năng ngắt, ta sẽ ghi lại thời gian phát hiện xung cạnh
lên theo đơn vị mirco giây. Hiệu số giữa hai lần liên tiếp được sử dụng để tính
tần số xung, tuy nhiên đây là đơn vị micro giây nên ta sẽ đổi ra giây bằng cách
chia 106. PPR của encoder trong trường hợp này là 24. Áp dụng cơng thức trong
phần II.3, ta được cơng thức hồn chỉnh như sau:


RPM=

∗∆

, trong đó ∆t (us) là hiệu thời gian giữa hai lần khi ngắt xảy ra.

void encoder() {
now=micros();

rpm = 60*1000000/(24*(now - previousMicros));
previousMicros =now;
if (digitalRead(encoderPinB)==LOW) {
Aled=true;//dong co dang xoay ve ben phai
Bled=false;
}
else { Bled=true;//dong co dang xoay ve ben trai
Aled=false;}
}


-Lệnh "analogWrite" chỉ cho ra giá trị từ 0-255 nên ta sẽ giới hạn giá trị
đọc được từ Simulink trong khoảng này.
VI. Thực hiện quá trình điều khiển
1. Điều khiển động cơ bằng bộ điều khiển On-Off
Ta xây dựng một model Simulink như sau:

Trong hình trên, ta sẽ cấu hình một số khối như sau:


Để xây dựng bộ điều khiển On-Off ta sẽ sử dụng khối Matlab Function. Đoạn
chương trình điều khiển như sau:
function u = fcn(e)
if e>=0
u=255;
else u=0;
end

2. Điều khiển động cơ bằng bộ điều khiển PID số (rời rạc)
Ta xây dựng các khối chức năng và thiết lập các thông số giống như bộ điều

khiển On-Off, chỉ thay thế bộ điều khiển On-Off bằng bộ điều khiển PID.

V. Kết quả
Trên Proteus
Tốc độ đặt của động cơ là 120, tốc độ Baund 115200


LED-RED hiển thị động cơ đang quay cùng chiều kim đồng hồ.

LED-BLUE hiển thị động cơ đang chạy ngược chiều kim đồng hồ, để quay
ngược chiều đóng switch nối đến PIN4 của Arduino, tốc độ đặt 120rpm.
Trên simulink


1. Bộ điều khiển On-Off
Tốc độ đăt 120 RPM.
Đáp ứng hệ thống:

Tín hiệu điều khiển u

Nhận xét:


Bộ điều khiển On-Off là bộ điều khiển hồi tiếp đơn giản nhất. Nó chỉ đơn giản
thay đổi tín hiệu điều khiển từ đóng hồn tồn sang mở hồn tồn phụ thuộc vào
sai số giữa giá trị đặt và giá trị đo được.
Tuy nhiên, đối với bộ điều khiển này, sai số xác lập lớn, hệ thống kém ổn định.
Việc đóng mở liên tục sẽ dẫn tới hiện tượng chattering. Để tránh việc này xảy
ra, bộ điều khiển On-off thường có vùng chết (deadband) ở điểm đặt.
2. Bộ điều khiển PID

Setpoint 120 RPM, Kp=10, Ki=0, Kd=0.
Tín hiệu điều khiển u

Đáp ứng hệ thống


Setpoint 120 RPM, Kp=6.8, Ki=27, Kd=0
Tín hiệu điều khiển u

Đáp ứng hệ thống


Nhận xét: Với bộ điều khiển PID, đáp ứng hệ thống đã được cải thiện. Tuy
nhiên, đối với mỗi hệ số điều khiển khác nhau sẽ ảnh hưởng đến chất lượng của
hệ thống. Vì vậy cần lựa chọn hệ số của bộ điều khiển phù hợp để có chất lượng
hệ thống tốt nhất.
VI. Kết luận
Thông qua đề tài, ta đã biết cách giao tiếp Matlab Simulink với Arduino thông
qua cổng Serial. Bằng việc này, ta có truyền và nhận dữ liệu giữa Matlab
Simulink và Arduino với nhau. Từ đó, tận dụng được các tính năng trên Matlab
để điều khiển các đối tượng dễ dàng hơn.
Bên cạnh đó, ta đã nắm được nguyên lí hoạt động của encoder để ứng dụng vào
quá trình đo tốc độ động cơ DC, cách điều chế độ rộng xung (PWM) để điều
khiển động cơ quay theo tốc độ mong muốn, và thực hiện điều khiển động cơ
quay theo hai bộ điều khiển là On-Off và PID.
Mặc dù đề tài không được thực hiện với các thiết bị thật, nhưng thông qua việc
mô phỏng, ta cũng sẽ hiểu được cách thực hiện đề tài trong thực tế, giảm thiểu
sai sót trong q trình thực hiện.



Tài liệu tham khảo:
1. />2. />3. />al_Note.pdf
4. />5. />6. />


×