1. Trang chủ
  2. » Luận Văn - Báo Cáo

Báo cáo đề tài 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

20 11 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Tiêu đề Báo cáo đề tài 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
Tác giả Vũ Đức Hùng
Người hướng dẫn Thầy Nguyễn Lê Dũng
Trường học Trường Đại Học Bách Khoa, Đại Học Quốc Gia Thành Phố Hồ Chí Minh
Chuyên ngành Điều Khiển Tự Động
Thể loại Báo cáo đề tài
Năm xuất bản 2021
Thành phố TP. Hồ Chí Minh
Định dạng
Số trang 20
Dung lượng 765,84 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

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 độ đ

Trang 1

ĐẠI HỌC QU

TRƯ

BÁO CÁO

Giao tiếp Simulink Matlab và Arduino thông qua Serial port và

khiển t

GVHD:

Tp H

Thực hi

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

BÁO CÁO ĐỀ TÀI

Simulink Matlab và Arduino thông qua Serial port và ứng dụng vào bài toán đi

n tốc độ động cơ DC bằng PID

GVHD: Thầy Nguyễn Lê Dũng

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

CHÍ MINH

Simulink Matlab và Arduino thông

ng vào bài toán điều

ng PID

1812476

Trang 2

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

Trang 3

I Giới thiệu

Động cơ DC là một thiế

nhau Trong công nghiệp, đ

băng tải, bàn xoay, hay trong l

các bánh xe, giúp hệ thống di ch

theo mong muốn đã trở thành nhu c

Để ứng dụng hệ thống điề

điều khiển để hiệu chỉnh liên t

hoạt động theo giá trị mong mu

Bằng cách đọc tín hiệu từ

được tốc độ của động cơ DC T

chiếu và giá trị đo được đ

Trong đề tài này, ta sẽ sử

Arduino và mạch điều khi

làm thiết bị thật nên ta sẽ

phục vụ giao tiếp nối tiếp gi

II Cơ sở lí thuyết

1 Điều khiển tốc đ

Động cơ DC có cấu tạo g

điều chỉnh điện áp đặt vào ph

để điều chỉnh điện áp là đi

ết bị phổ biến, được sử dụng trong các linh v

p, động cơ DC được ứng dụng trong vi

i, bàn xoay, hay trong lĩnh vực Robot, động cơ DC được s

ng di chuyển Do đó việc điều khiển độ thành nhu cầu tất yếu

ều khiển kín vào động cơ, ta cần tín hiệ

nh liên tục tín hiệu điều khiển đầu vào để mong muốn Encoder là thiết bị hỗ trợ

ừ Encoder được gắn với động cơ DC, ta có th

ng cơ DC Từ đó hồi tiếp về để tính sai số gi

c để điều chỉnh tín hiệu điều khiển

ử dụng phần mềm Proteus để mô phỏ

u khiển Arduino được sử dụng là Arduino Uno Vì không

ẽ sử dụng phần mềm com0com để tạo c

p giữa Matlab Simulink và Arduino

c độ động cơ DC

o gồm nam châm vĩnh cữu có từ thông không đ

t vào phần ứng để thay đổi tốc độ động cơ

n áp là điều chế độ rộng xung PWM

ng trong các linh vực khác

ng trong việc chế tạo các

c sử dụng để làm ộng cơ hoạt động

ệu hồi tiếp về bộ giữ cho động cơ cho vấn đề này

ng cơ DC, ta có thể đo đạc

giữa giá trị tham

ỏng động cơ DC,

ng là Arduino Uno Vì không

o cổng COM ảo,

thông không đổi Ta sẽ

ng cơ Phương pháp

Trang 4

Xung là các trạng thái cao/th

gian mức cao và chu kỳ củ

Có nhiều phương pháp đ

phương pháp tạo xung b

"analogWrite" của Arduino

của Hàm analogWrite là chu k

2 Bộ điều khiển PID

PID là một bộ điều khiển vòng kín

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) +

Ảnh hưởng của các khâu đi

+Khâu tỉ lệ (Kp): Làm gi

quá lớn sẽ làm tăng độ vọ

+Khâu tích phân (Ki): Lo

càng cao, thời gian xác lập tăng

ng thái cao/thấp được lặp đi lặp lại Tỉ lệ phần trăm gi

ủa xung là chu kỳ nhiệm vụ (duty cycle)

u phương pháp để tạo xung khác nhau, trong bài này ta s

o xung bằng phần mềm Cụ thể, ta sẽ

a Arduino để tạo xung PWM Tương ứng với giá tr

a Hàm analogWrite là chu kỳ nhiệm vụ (Duty cycle) từ 0-100%

n PID

n vòng kín Đây là bộ điều khiển kết hợ (Proportional), tích phân (Intergral), và vi phân (Derivative)

( ) +Td ( ) )

a các khâu điều khiển lên hệ thống:

(Kp): Làm giảm thời gian lên và sai số xác lậ

ọt lố, hệ thống càng dao động và khó xác l +Khâu tích phân (Ki): Loại bỏ sai số xác lập Ki càng lớ

p tăng

n trăm giữa thời (duty cycle)

này ta sẽ sử dụng

sử dụng hàm

i giá trị từ 0-255 100%

ợp của 3 khâu: Tỉ

ập Tuy nhiên Kp

ng và khó xác lập

ớn thì đột vọt lố

Trang 5

+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 Ziegler-Nichols:

+Đầ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 toán theo bảng sau:

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

Trang 6

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ẻ

Nguyên 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 vuông đượ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

https://prosensor.vn/encoder-la-gi-nhung-dieu-can-biet-ve-encoder/

Trang 7

Độ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):

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:

Trang 8

•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

Trang 9

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

Trang 10

•Độ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í

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

+ _ Điểm đặt ∑ Bộ điều khiển DC Motor Encoder

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

Trang 11

2 Lưu đồ giải thuật

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<buffer_size; i++)

{

u.b[i]=buf[i];

}

float output = u.fval;

return output;

}

Bắt đầu

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

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

Tính toá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

Trang 12

-writeToMatlab (): Gửi dữ liệu từ Arduino lên Matlab

-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 hoàn chỉnh như sau:

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

void writeToMatlab (float number) {

byte *b = (byte *)& number;

Serial.write(b,4);

Serial.write(13);

Serial.write(10);

}

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

}

Trang 13

-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:

Trang 14

Để 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:

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

if e>=0

u=255;

else u=0;

end

Trang 15

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

Trang 16

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:

Trang 17

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 hoàn toàn sang mở hoàn toà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

Trang 18

Setpoint 120 RPM, Kp=6.8, Ki=27, Kd=0

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

Đáp ứng hệ thống

Trang 19

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 quá trình thực hiện

Trang 20

Tài liệu tham khảo:

1 https://prosensor.vn/encoder-la-gi-nhung-dieu-can-biet-ve-encoder/

2 https://www2.hcmuaf.edu.vn/data/phucnt/file/bo-dieu-khien_pid.pdf

3.http://documents.opto22.com/1784_RPM_Measurement_Techniques_Technic al_Note.pdf

4 https://github.com/leomariga/Simulink-Arduino-Serial

5 https://www.youtube.com/watch?v=wj-EGwmY6Fo

6 https://www.youtube.com/watch?v=DVwNZQu5jTk&t=352s

Ngày đăng: 22/06/2023, 21:27

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm

w