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

ỨNG DỤNG PID TRONG ĐIỀU KHIỂN TỐC độ VÀ VỊ TRÍ ĐỘNG CƠ DC

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 (1.41 MB, 34 trang )

TRƯỜNG ĐẠI HỌC SƯ PHẠM KĨ THUẬT THÀNH PHỐ HỒ CHÍ MINH
KHOA CƠ KHÍ ĐỘNG LỰC

BÁO CÁO MƠN HỌC

ỨNG DỤNG PID TRONG ĐIỀU
KHIỂN TỐC ĐỘ VÀ VỊ TRÍ ĐỘNG
CƠ DC

LÊ HẬU ĐỨC

MSSV: 17145277

MAI NGUYỄN ANH ĐỨC

MSSV: 17145278

NGUYỄN TẤN HƯNG

MSSV: 17145

PHAN TRẦN TRỌNG HIẾU

MSSV:17145291

DƯƠNG NGỌC TRỌNG

MSSV: 17145379

TRẦN NGỌC HUẤN


MSSV: 18145

GVHD:

ThS. NGUYỄN TRUNG HIẾU

TP.Hồ Chí Minh, tháng 7 năm 2020


TRƯỜNG ĐẠI HỌC SƯ PHẠM KĨ THUẬT THÀNH PHỐ HỒ CHÍ MINH
KHOA CƠ KHÍ ĐỘNG LỰC

BÁO CÁO MƠN HỌC
Chun ngành: Công nghệ Kỹ thuật ô tô

ỨNG DỤNG PID TRONG ĐIỀU KHIỂN
TỐC ĐỘ VÀ VỊ TRÍ ĐỘNG CƠ DC

LÊ HẬU ĐỨC

MSSV: 17145277

MAI NGUYỄN ANH ĐỨC

MSSV: 17145278

NGUYỄN TẤN HƯNG

MSSV: 17145


PHAN TRẦN TRỌNG HIẾU

MSSV:17145291

DƯƠNG NGỌC TRỌNG

MSSV: 17145379

TRẦN NGỌC HUẤN

MSSV: 18145

GVHD:

ThS. NGUYỄN TRUNG HIẾU

TP.Hồ Chí Minh, tháng 7 năm 2020


TRƯỜNG ĐẠI HỌC SƯ PHẠM KỸ THUẬT
THÀNH PHỐ HỒ CHÍ MINH
KHOA CƠ KHÍ ĐỘNG LỰC

NHẬN XÉT CỦA GIẢNG VIÊN HƯỚNG DẪN
Tên tiểu luận: ĐIỀU KHIỂN TỐC ĐỘ VÀ VỊ TRÍ CỦA ĐỘNG CƠ DC
Ngành: Công nghệ kĩ thuật ô tô.
Họ và tên:
MSSV:
Lê Hậu Đức
17145277

Mai Nguyễn Anh Đức
17145278
Nguyễn Tấn Hưng
17145
Phan Trần Trọng Hiếu
17145291
Dương Ngọc Trọng
17145373
Trần Ngọc Huấn
18145
I. NHẬN XÉT
1. Về hình thức trình bày & tính hợp lý của cấu trúc tiểu luận:
………………………………………………………………………………………………
………………………………………………………………………………………………
………………………………………………………………………………………………
………………………………………………………………………………………………
2. Về nội dung (đánh giá chất lượng tiểu luận, ưu/khuyết điểm và giá trị thực Tiễn):
………………………………………………………………………………………………
………………………………………………………………………………………………
………………………………………………………………………………………………
………………………………………………………………………………………………
II. NHỮNG NỘI DUNG CẦN ĐIỀU CHỈNH, BỔ SUNG:
………………………………………………………………………………………………
………………………………………………………………………………………………
………………………………………………………………………………………………
………………………………………………………………………………………………
III. ĐỀ NGHỊ VÀ ĐÁNH GIÁ:
Điểm đánh giá (theo thang điểm 10): ...............................................................................
Tp. Hồ Chí Minh, ngày 12 tháng 12 năm 2019
Giảng viên hướng dẫn

(Ký & ghi rõ họ tên)


Mục lục
Chương 1.

TỔNG QUAN.................................................................................................................... 4

Chương 2.

GIẢI THUẬT ĐIỀU KHIỂN PID .................................................................................... 5

2.1

Giới thiệu chung về PID ........................................................................................................... 5

2.2

Thuật toán PID ......................................................................................................................... 5

2.2.1

Khâu tỉ lệ ........................................................................................................................... 5

2.2.2

Khâu đạo hàm ................................................................................................................... 6

2.2.3


Khâu tích phân.................................................................................................................. 7

2.3

Giải thuật điều khiển PID ........................................................................................................ 8

Chương 3.
3.1

THỰC HÀNH ĐIỀU KHIỂN TỐC ĐỘ VÀ VỊ TRÍ ĐƠNG CƠ DC ............................ 10

Các linh kiện trên mơ hình ..................................................................................................... 10

3.1.1

Encoder ........................................................................................................................... 10

3.1.2

Mạch cầu H-L298N ......................................................................................................... 12

3.1.3

Động cơ DC ..................................................................................................................... 15

3.2

Sơ đồ lắp mạch........................................................................................................................ 16

3.2


Lưu đồ giải thuật điều khiển động cơ DC (tốc độ + vị trí) .................................................... 16

3.3

Điều khiển tốc độ động cơ DC ................................................................................................ 17

3.3.1

Cách thức điều khiển ...................................................................................................... 17

3.3.2

Mô phỏng trên Simulink ................................................................................................. 18

3.3.3

Code điều khiển tốc độ động cơ DC có giảm tốc GA25-370........................................... 19

3.3.4

Code điều khiển tốc độ động cơ DC không giảm tốc (1 vòng 334 xung) ....................... 21

3.3.5

Kết quả của điều khiển động cơ DC ............................................................................... 23

3.4

Điều khiển vị trí động cơ DC .................................................................................................. 24


3.4.1

Cách thức điều khiển ...................................................................................................... 24

3.4.2

Mô phỏng trên Simulink ................................................................................................. 25

3.4.3

Code điều khiển vị trí động cơ ........................................................................................ 27

3.3.3

Kết quả của việc điều khiển vị trí động cơ DC ............................................................... 29

Chương 4. KẾT LUẬN .......................................................................................................................... 31

1


DANH MỤC CÁC CHỮ VIẾT TẮT VÀ KÝ HIỆU

2


DANH MỤC CÁC HÌNH
Hình 2. 1. Khâu tỉ lệ ................................................................................................. 6
Hình 2. 2. Khâu tích phân ........................................................................................ 6

Hình 2. 3. Khâu đạo hàm ......................................................................................... 7
Hình 2. 4. Ví dụ điều khiển xe trên đường thẳng .................................................... 8
Hình 3. 1. Encoder loại quang ............................................................................... 11
Hình 3. 2. Xung của kênh A và kênh B ................................................................. 12
Hình 3. 3. Mạch cầu L298N ................................................................................... 13
Hình 3. 4. Chip L298 .............................................................................................. 13
Hình 3. 5. Mạch bên trong của chip L298 ............................................................. 14
Hình 3. 6. Động Cơ Giảm Tốc Có Encoder GA25-370 12V 130rpm .................... 15
Hình 3. 7. Sơ đồ lắp mạch ...................................................................................... 16
Hình 3. 8: Lưu đồ giải thuật điều khiển động cơ DC (tốc độ + vị trí) .................. 17
Hình 3. 9. Mơ hình điều khiển ............................................................................... 17
Hình 3. 10: Tạo hàm truyền ................................................................................... 19
Hình 3. 11: Mơ phỏng điều khiển tốc độ bằng Simulink ...................................... 19
Hình 3. 12. Động cơ giảm tốc GA25-370 130rpm ................................................. 23
Hình 3. 13. Điều khiển tốc độ động cơ khơng giảm tốc (1 vịng 334 xung) .......... 24
Hình 3.14. Mơ hình điều khiển .............................................................................. 25
Hình 3. 15: Tạo hàm truyền ................................................................................... 26
Hình 3. 16: Mơ hình mơ phỏng vị trí động cơ DC ................................................ 26
Hình 3. 17: Đồ thị điều khiển vị trí trên mơ phỏng ............................................... 27
Hình 3. 18 Đồ thị biểu diễn điều khiển vị trí động cơ DC..................................... 29

3


Chương 1. TỔNG QUAN
Điều khiển động cơ DC (DC motor) là một ứng dụng thuộc dạng cơ bản nhất của điều
khiển tự động vì DC Motor là cơ cấu chấp hành (actuator) được dùng nhiều nhất trong các hệ
thống tự động (ví dụ cánh tay robot, các robot). Bộ điều khiển dùng cho việc điều khiển động
cơ là closed-loop, thông qua bài này ta có thể tổng hợp nhiều vấn đề về ứng dụng Arduino bao
gồm nhận dữ liệu từ dùng, điều khiển motor, mạch công suất cho motor, đọc cảm biến encoder

và đặc biệt là giải thuật điều khiển PID. Nói chung là thơng qua bài này ta có thể hiểu rõ hơn
về các vấn đề của giải thuật PID như việc sử dụng các phần P, phần D hay phần I tùy thuộc
vào nhu cầu đáp ứng của từng người dùng về độ chính xác; hoặc về vấn đề chọn các hệ số kp,
kd, ki làm sao cho vận tốc và vị trí của động cơ mà ta điều khiển phải dao động xung quanh
vận tốc và vị trí đã xét với error nhỏ.

4


Chương 2. GIẢI THUẬT ĐIỀU KHIỂN PID
2.1 Giới thiệu chung về PID
PID là sự kết hợp của 3 bộ điều khiển: tỉ lệ, tích phân và vi phân, có khả năng điều
chỉnh sai số thấp nhất có thể, tăng tốc độ đáp ứng, giảm độ vọt lố, hạn chế sự dao động.
Bộ điều khiển PID hay chỉ đơn giản là PID là một kỹ thuật điều khiển quá trình tham gia
vào các hành động xử lý về “tỉ lệ, tích phân và vi phân“. Nghĩa là các tín hiệu sai sốxảy ra sẽ
được làm giảm đến mức tối thiểu nhất bởi ảnh hưởng của tác động tỉ lệ, ảnh hưởng của tác
động tích phân và được làm rõ bởi một tốc độ đạt được với tác động vi phân số liệu trước
đó.
Điều khiển PID là một kiểu điều khiển có hồi tiếp vịng kín được sử dụng rộng rải trong
hệ thống điện, tự động hóa, điện tử,…
2.2 Thuật tốn PID
Phần này chỉ mô tả dạng song song hoặc không tương tác của bộ điều khiển PID
Sơ đồ điều khiển PID được đặt tên theo ba khâu hiệu chỉnh của nó, tổng của ba khâu này tạo
thành bởi các biến điều khiển (MV). Ta có:

Pout ;Iout ; Dout là các thành phần đầu ra từ ba khâu của bộ điều khiển PID, được xác định như
dưới đây.
2.2.1

Khâu tỉ lệ


Khâu tỉ lệ (đơi khi cịn được gọi là độ lợi) làm thay đổi giá trị đầu ra, tỉ lệ với giá trị
sai số hiện tại. Đáp ứng tỉ lệ có thể được điều chỉnh bằng cách nhân sai số đó với một hằng
số Kp, được gọi là độ lợi tỉ lệ.
Khâu tỉ lệ được cho bởi:

5


Hình 2. 1. Khâu tỉ lệ
Độ lợi của khâu tỉ lệ lớn là do thay đổi lớn ở đầu ra mà sai số thay đổi nhỏ. Nếu độ lợi
của khâu tỉ lệ quá cao, hệ thống sẽ không ổn định (xem phần điều chỉnh vòng). Ngược lại,
độ lợi nhỏ là do đáp ứng đầu ra nhỏ trong khi sai số đầu vào lớn, và làm cho bộ điều khiển
kém nhạy, hoặc đáp ứng chậm. Nếu độ lợi của khâu tỉ lệ quá thấp, tác động điều khiển có
thể sẽ quá bé khi đáp ứng với các nhiễu của hệ thống.

2.2.2

Khâu đạo hàm

Phân phối của khâu tích phân (đơi khi cịn gọi là reset) tỉ lệ thuận với cả biên độ sai
số lẫn quảng thời gian xảy ra sai số. Tổng sai số tức thời theo thời gian (tích phân sai số)
cho ta tích lũy bù đã được hiệu chỉnh trước đó. Tích lũy sai số sau đó được nhân với độ lợi
tích phân và cộng với tín hiệu đầu ra của bộ điều khiển. Biên độ phân phối của khâu tích
phân trên tất cả tác động điều chỉnh được xác định độ lợi tích phân, .
Thừa số tích phân được cho bởi:

Hình 2. 2. Khâu tích phân

6



Khâu tích phân (khi cộng thêm khâu tỉ lệ) sẽ tăng tốc chuyển động của quá trình tới
điểm đặt và khử số dư sai số ổn định với một tỉ lệ chỉ phụ thuộc vào bộ điều khiển. Tuy
nhiên, vì khâu tích phân là đáp ứng của sai số tích lũy trong quá khứ, nó có thể khiến giá
trị hiện tại vọt lố qua giá trị đặt (ngang qua điểm đặt và tạo ra một độ lệch với các hướng
khác). Để tìm hiểu thêm các đặc điểm của việc điều chỉnh độ lợi tích phân và độ ổn của bộ
điều khiển.

2.2.3

Khâu tích phân

Tốc độ thay đổi của sai số qua trình được tính tốn bằng cách xác định độ dốc của sai
số theo thời gian (tức là đạo hàm bậc một theo thời gian) và nhân tốc độ này với độ lợi tỉ
lệ Biên độ của phân phối khâu vi phân (đôi khi được gọi là tốc độ) trên tất cả các hành vi
điều khiển được giới hạn bởi độ lợi vi phân, .
Thừa số vi phân được cho bởi:

Hình 2. 3. Khâu đạo hàm
Khâu vi phân làm chậm tốc độ thay đổi của đầu ra bộ điều khiển và đặc tính này là
đang chú ý nhất để đạt tới điểm đặt của bộ điều khiển. Từ đó, điều khiển vi phân được sử
dụng để làm giảm biên độ vọt lố được tạo ra bởi thành phần tích phân và tăng cường độ
ổn định của bộ điều khiển hỗn hợp. Tuy nhiên, phép vi phân của một tín hiệu sẽ khuếch
đại nhiễu và do đó khâu này sẽ nhạy hơn đối với nhiễu trong sai số, và có thể khiến q
trình trở nên khơng ổn định nếu nhiễu và độ lợi vi phân đủ lớn. Do đó một xấp xỉ của bộ
vi sai với băng thông giới hạn thường được sử dụng hơn.
7



2.3 Giải thuật điều khiển PID
Để hiểu rõ hơn về bản chất của giải thuật PID ta sẽ dùng một ví dụ điều khiện vị trí của
một chiếc xe trên đường thẳng. Giả sử chiếc gắn một động cơ DC , động cơ sinh ra một lực F
để đẩy xe đi tiến hoặc đi lùi trên một đường thằng như hình 2.1.

Hình 2. 4. Ví dụ điều khiển xe trên đường thẳng
Gọi F là lực do động cơ tạo ra điều khiển xe. Ban đầu xe ở vị trí A, nhiệm vụ đặt ra là
điều khiển lực F (một cách tự động) để đẩy xe đến đúng vị trí O với các yêu cầu: chính xác
(accurate), nhanh (fast response), ổn định (small overshot).
Nếu vị trí hiện tại của xe rất xa vị trí mong muốn (điểm O), hay nói cách khác sai số
(error) lớn, chúng ta cần tác động lực F lớn để nhanh chóng đưa xe đến điểm O. Một cách đơn
giản để cơng thức hóa ý tưởng này là dùng quan hệ tuyến tính:
F = Kp*e
Trong Kp là một hằng số dương nào đó mà chúng ta gọi là hệ số P (Propotional gain), e
là sai số cần điều khiển chính là khoảng cách từ điểm O đến vị trí hiện tại của xe. Mục tiêu
điều kheiern là đưa e tiến về 0 càng nhanh càng tốt. Nếu Kp lớn thì F sẽ cũng rất lớn và nhanh
chóng tiến về điểm O. Tuy nhiên khi F quá lớn thì gia tốc của xe lớn thì khi đưa xe đến điểm
O (e=0) thì do lực qn tính của xe sẽ đẩy xe vượt qua điểm O (e ≠ 0), giá trị sai số lúc này
được gọi là overshot (vượt quá). Lúc này, sai số e là số âm, lực F lại xuất hiện nhưng chiều
ngược lại để kéo xe về điểm O. Nhưng một lần nữa, do Kp lớn nên giá trị F lớn và có thể kéo
xe vượt quá điểm O. Quá trình này cứ tiếp diễn xe cứ mãi dao động quanh điểm O. Có trường
hợp xe dao động ngày càng xa điểm O. Bộ điều khiển lúc này được nói là khơng ổn định. Một
8


đề xuất nhằm giảm overshot của xe là sử dụng một phần “thắng” trong bộ điều khiển. Sẽ rất
lý tưởng khi xe đang ở xa điểm O, bộ điều khiển sinh ra lực F lớn nhưng khi xe đã tiến gần
đến điểm O thì thành phần “thắng” sẽ giảm tốc độ xe lại. Chúng ta đề biết khi một vật dao
động quang 1 điểm thì vật đó có vận tốc cao nhất ở tâm dao động (điểm O). Nói cách khác,
tốc độ thay đổi của e có thể tính bằng đạo hàm của biến này theo thời gian. Như vậy, khi xe

từ điểm A tiến gần về O, đạo hàm của sai số e tăng giá trị nhưng ngược chiều của lực F (vì e
đang giảm nhanh dần). Nếu sử dụng đạo hàm làm thành phần “thắng” thì có thể giảm được
overshot của xe. Thành phần “thắng” này chính là thành phần D (Derivative) trong bộ điều
khiển PID mà chúng ta đang khảo sát. Thêm thành phần D này vào bộ điều khiển P hiện tại,
chúng ta thu được bộ điều khiển PD như sau:
F = Kp*e + Kd*(de/dt)
Trong đó (de/dt) là vận tốc thay đổi của sai số e và Kd là một hằng số không âm gọi là hệ
số D (Derivative gain) và Kd*(de/dt) ≤ 0 (D). Trong một số trường hợp thành phần D có giá
trị lớn hơn thành phần P và lực F đổi chiều, “thắng” xe lại, vận tốc của xe vì thê giảm mạnh ở
điểm O. Một vấn đề nảy sinh là nếu thành phần D quá lớn so với thành phần P hoặc bản thân
thành phần P nhỏ thì khi xe tiến gần điểm O (chưa thật sự đến điểm O), xe có thể dừng hẳn,
thành phần D bằng 0 (vì sai số e không thay đổi nữa), lực F = Kp*e. Trong khi Kp và e lúc
này đề nhỏ nên lwucj F cũng nhỏ và có thể khơng thắng được lực ma sát tĩnh. Như thế, xe sẽ
đứng yên mãi dù sai số e vẫn chưa bằng 0. Sai số e trong tình huống này gọi là steady state
error (sai số trang thái tĩnh). Để tránh steady state error, người ta thêm vào bộ điều khiển một
thành phần có chức năng “cộng dồn” sai số. Khi steady state error xảy ra, 2 thành phần P và
D khơng cịn tác dụng, thành phần điều khiển mới sẽ “công dồn” sai số theo thời gian và làm
tăng lực F theo thời gian. Đến một lúc nào đó, lực F đủ lớn để thắng ma sát tĩnh và đẩy xe tiến
về điểm O. Thành phần “cộng dồn” này chính là thành phần I (Integral – tích phân) trong bộ
điều khiển PID. Vì chúng ta đều biết, tích phân một đại lượng theo thời gian chính là tổng của
đại lượng đó theo thời gian. Bộ điều khiển đến thời điểm này đã đầy đủ là PID:
F = Kp*e + Kd*(de/dt) + Ki*∫edt

9


Như vậy, chức năng của từng phần trong bộ điều PID đã nêu rõ. Tùy vào mục đích và đối
tượng điều khiển mà bộ điều khiển PID có thể được lượt bớt để trở thành bộ điều khiển P, PI
hoặc PD. Cơng việc chính của người thiết kế bộ điều khiển PID là chọn hệ số Kp, Kd và Ki
sao cho bộ điều khiển hoạt động tốt và ổn định (q trình này gọi là PID gain tuning). Đây

khơng phải là việc dễ dàng vì nó phụ thuộc vào nhiều yếu tố. Các bước cơ bản để chọn các hệ
số PID như sau:
 Chọn Kp trước: thử bộ điều khiển P với đối tượng thật (hoặc mô phỏng), điều chỉnh Kp
sao cho thời gian đáp ứng đủ nhanh, chấp nhận overshot nhỏ.
 Thêm thành phần D để loại overshot, tăng Kd từ từ, thử nghiệm và chọn giá trị thích hợp.
Steady state error có thể sẽ xuất hiện.
 Thêm thành phần I đẻ giảm steady state error. Nên tăng Ki từ bé đến lớn để giảm steady
state error đồng thời không để cho overshot xuất hiện trở lại.
Chương 3. THỰC HÀNH ĐIỀU KHIỂN TỐC ĐỘ VÀ VỊ TRÍ ĐƠNG CƠ DC
3.1 Các linh kiện trên mơ hình
3.1.1

Encoder

Để điều khiển số vịng quay hay vận tốc động cơ thì chúng ta nhất thiết phải đọc được
góc quay của motor. Một số phương pháp có thể được dùng để xác định góc quay của
motor bao gồm tachometer (bộ điều khiển tốc độ quay), dùng biến trở xoay hoặc dùng
encoder. Trong đó 2 phương pháp đầu tiên là phương pháp analog và dùng optiacal encoder
(encoder quang) thuộc nhóm digital. Hệ thống optical encoder bao gồm một nguồn phát
quang (thường là hồng ngoại), một cảm biến quang, một đĩa có chia rãnh. Optical encoder
lại được chia thành 2 loại: encoder tuyệt đối (absolute optical encoder) và encoder tương
đối (incremental optical encoder). Trong đa số các motor DC, loại encoder tương đối được
sử dụng nhiều hơn.

10


Hình 3. 1. Encoder loại quang
Encoder thường có ba kênh bao gồm kênh A, kênh B và kênh I (Index). Trong hình
2.1 ta thấy một lỗ nhỏ phía trong của đĩa quay và một cặp thu-phát dành riêng cho lỗ này,

đó là kênh I của encoder. Cứ mỗi lần motor quay được một vịng, lỗ nhỏ xuất hiện tại vị
trí của cặp thu-phát, hồng ngoại từ nguồn phát sẽ xuyên qua lỗ nhỏ đến cảm biến quang,
một tín hiệu xuất hiện trên cảm biến. Vậy kênh I xuất hiện một “xung” mỗi vịng quay của
motor. Bên ngồi đĩa thu phát có các rãnh nhỏ và một cặp thu-phát khác dành cho các rãnh
này. Đó là kênh A của encoder, nó hoạt động tương tự kênh I chỉ khác là 1 vịng quay của
motor thì sẽ có N “xung”. N là số rãnh trên đĩa và được gọi là độ phân giải (resolution) của
encoder. Mỗi loại encoder có độ phân giải khác nhau, có loại chỉ có vài rãnh nhưng cũng
có loại hàng nghìn rãnh. Để điều khiển tốc độ động cơ thì ta phải biết được độ phân giải
của encoder đang dùng. Độ phân giải ảnh hưởng đến sự chính xác của việc điều khiển.
Trên encoder cịn có một cặp thu-phát khác được đặt trên cũng đường tròn với kênh A
nhưng lệch một chút (lệch M+0,5 rãnh), đây là kênh B của encoder. Tín hiệu xung từ kênh
B cùng tần số với kênh A nhưng bị lệch pha 90⁰. Bằng cách phối hợp kênh A và B, ta sẽ
biết được chiều quay của động cơ.

11


Hình 3. 2. Xung của kênh A và kênh B
Hình trên cùng của hình 2.2 thể hiện sự bố trí của 2 cảm biến kênh A và B lệch pha
nhau. Hình ở dưới của hình 2.2 là dạng xung ngõ ra trên 2 kênh. Xét trường hợp motor
quay cùng chiều kim đồng hồ , tín hiệu đi từ trái sáng phải thì tín hiệu kênh A sẽ chuyển
từ mức cao sang mức thấp (cạnh xuống) thì kênh B đang ở mức thấp. Ngược lại nếu động
cơ quay ngược chiều kim đồng hồ, tín hiệu đi từ phải qua trái. Lúc này, tại cạnh xuống của
kênh A thì kênh B đang ở mức cao. Như vậy, bằng phối hợp 2 kênh A và B, ta khơng
những xác định được góc quay và còn xác định được chiều quay của động cơ.
Ở trong project này thì ta sử dụng ngắt ngồi để đọc encoder. Ý tưởng của phương
pháp này rất đơn giản, ta kết nối kênh A của encoder với 1 ngắt ngồi (đối với Arduino thì
có 2 ngắt ngồi INT0 và INT1) và kênh B nối với chân bất kỳ nào đó (khơng phải là chân
ngắt). Cứ mỗi lần ngắt ngồi xảy ra, tức là có 1 xung xuất hiện trên kênh A thì trình phục
vụ ngắt ngồi tự đơng được gọi. Trong trình phục vụ ngắt này ta kiểm tra mức của kênh B

(cao hay thấp) để tăng biến đếm xung lên 1 hoặc giảm đi 1. Ta cần phải tính tốn cẩn thận
ở phương pháp này, ví dụ encoder có độ phân giải 2000xung/vịng, motor quay với tốc độ
100 vịng/s thì tần số của kênh A là 2000×100 = 200KHz, nghĩa là cứ mỗi 5us ngắt ngoài
xảy ra một lần. Tần số ngắt như thế này là quá cao cho AVR, điều này có nghĩa AVR chỉ
tập trung vào việc đếm xung chứ không đủ thời gian thực hiện các công việc khác.
3.1.2

Mạch cầu H-L298N

Driver L298N là thiết bị tích hợp sẵn các mạch kích, mạch cầu H bao gồm IC L298
2 mạch cầu H trong gói 15 chân (Multiwatt 15), IC ổn áp 5V 78M05 và một số thiết bị
12


khác. Điện áp đầu vào cấp cho motor từ 6-35V (12V jumper-tháo jumper nếu sử dụng
nguồn trên 12V, jumper dùng để cấp nguồn cho IC ổn áp tạo ra nguồn 5V nếu dùng nguồn
12V sẽ làm cháy IC nguồn). Dòng tối đa cấp cho mỗi cầu H có thể lên đến 2A (cho mỗi
motor) nên rất thích hợp cho các ứng dụng động cơ DC, loa nhỏ và vừa. Điện áp tín hiệu
điều khiển từ 5-7V, dịng điều khiển từ 0-36mA nên chúng ta có thể dùng Arduino điều
khiển một cách thoải mái (dịng của Arduino có thể lên đến 40mA).
Mơ hình thật và cấu trúc bên trong chip L298

Hình 3. 3. Mạch cầu L298N

Hình 3. 4. Chip L298

13


Hình 3. 5. Mạch bên trong của chip L298

Với hai mạch cầu H chúng ta có thể điều khiển cả hai đối tượng. Chân VS là chân
cấp nguồn chung cho cả hai mạch, hai đường current sensing A,B cho mỗi cầu thường
trong chip chúng được nối GND sẵn. Động cơ sẽ được nối với hai đường OUT1, OUT2
(hoặc OUT3, OUT4 cho mạch cầu bên phải). Một chân En (EnA và EnB cho cả hai mạch
cầu) cho phép mạch cầu hoạt động, khi chân En được kéo lên mức cao, mạch cầu sẵn sang
hoạt động. Các đường kích mỗi bên mạch cầu kết hợp với nhau nhưng mức điện áp ngược
nhau do cổng Logic NOT (cổng AND

trên mức 1 thì bên dưới ở mức 0 và ngược

lại). Bằng cách này ta có thể tránh được hiện tượng trùng dẫn (tức là hai transitor ở cùng
1 bên kích hoạt cùng lúc). Như vậy, có hai đường kích cho mỗi cầu H gọi là In1 và In2
(hoặc In3, In4). Để motor chúng ta phải kéo một trong hai đường kích lên cao, ví dụ
In1=1, In2=0. Khi đảo mức kích của 2 đường In, động cơ sẽ đảo chiều quay. Ngoài điều
khiển chiều quay động cơ, chip còn điều khiển cả tốc độ động cơ bằng xung PWM, các
đường In được kết nối lịa bằng các cổng Logic tích hợp sẵn trong drive. Thơng thường
khi thiết kế để điều khiển vận tốc và chiều quay sẽ có 3 chân để điều khiển là PWM điều
khiển tốc độ, DIR chiều quay và En cho phép mạch hoạt động. Điện áp cho phần logic
(5V) được cấp từ đường Vss và GND chung cho cả logic và motor. Để điều khiển tốc độ
trên driver L298N, ta tháo 2 jumper Enable A,B ra (vì khi jump lại 2 chân này được nối
lên 5V động cơ hoạt động ở mức tối đa)
14


3.1.3

Động cơ DC

Động cơ DC Servo giảm tốc GA25 thường được sử dụng trong các ứng dụng cần
xác định tốc độ, vị trí, chiều quay của động cơ DC: Robot mê cung, robot xe hai bánh tự

cân bằng,...
Động cơ DC Servo thực tế là động cơ DC thường có gắn thêm phần Encoder để có
thể trả xung về vi điều khiển giúp xác định vị trí, vận tốc,... Về cách điều khiển thì động
cơ DC Servo sử dụng Driver như động cơ DC thường để điều khiển công suất động cơ,
tốc độ và đảo chiều: L298, L293,..., chỉ có điểm khác biệt là có thêm phần encoder để có
thể hồi tiếp (feedback) xung về Vi điều khiển, từ đó vi điều khiển tác động lại động cơ
qua mạch công suất sử dụng các thuật toán điều khiển như PID,... để điều khiển tốc độ,
vị trí,...

Hình 3. 6. Động Cơ Giảm Tốc Có Encoder GA25-370 12V 130rpm
THƠNG SỐ KĨ THUẬT
 Tốc độ sau hộp giảm tốc: 130rpm
15


 Moment xoắn : 6.3 kg.cm
 Dịng điện khơng tải : 50mA
 Đường kính động cơ: 24.4mm
 Chiều dài động cơ (khơng tính trục và hộp số): 30.8mm
 Đường kính trục: 4mm
 Chiều dài trục: 8mm
 Trục ra là loại trục vát
3.2 Sơ đồ lắp mạch

Hình 3. 7. Sơ đồ lắp mạch

3.2 Lưu đồ giải thuật điều khiển động cơ DC (tốc độ + vị trí)

16



Hình 3. 8: Lưu đồ giải thuật điều khiển động cơ DC (tốc độ + vị trí)
3.3 Điều khiển tốc độ động cơ DC
3.3.1 Cách thức điều khiển

Hình 3. 9. Mơ hình điều khiển
 Input : số xung trong 1 khoảng thời gian
17


 Controller: Arduino Uno
 Actuator: L298N
 Process : ĐC
 Output : Tốc độ trục ĐC

Khi động cơ hoạt động, encoder sẽ trả về 2 xung vuông lệch pha nhau, arrduino
dựa vào xung nhận được để tính được số xung trả về trong một khoảng thời gian
nhất định (tương ứng là tốc độ của động cơ). Sau đó thực hiện giải thuật PID để điều
khiển số xung cần điếm trong một khoảng thời gian được đặt bằng cách quy đổi giá
trị biến trở nhận được. Arduino thực hiện điều khiển độ rộng xung xuất ra tác động
vào L298N thực hiện điều khiển động cơ. Theo tài liệu của L298N, thì có tồn tại độ
trễ tại các cạnh xung điều khiển nên cần cân nhắc tương ứng tần số PWM của
arrduino và tần số hoạt động ổn định của động cơ phù hợp.
Khoảng thời gian đếm xung sẽ phụ thuộc vào dải tốc độ hoạt động ổn định của
động cơ và độ mịn của tín hiệu encoder (số xung trên một vịng quay). Cần cân nhắc
nếu sử dụng nguồn pin cho hệ thống vì theo thời gian pin giảm dần, điện áp điều
khiền động cơ sẽ thay đổi ảnh hưởng đến sự lựa chọn hệ số Kp, Kd, Ki của giải thuật
PID.
3.3.2 Mô phỏng trên Simulink
Từ các thông số điện trở cảm ứng Ra, độ từ cảm La, mơ men qn tính của motor Jm,

hệ số ma sát trượt Dm , hệ số mô men Kt, hệ số điện áp cảm ứng Kb của động cơ ta tạo
hàm truyền cho bộ điều khiển như sau:

18


Hình 3. 10: Tạo hàm truyền
Mơ phỏng điều khiển tốc độ của motor bằng Simulink với các khối constant, PID
controller, Transfer function, scope, Add, Integrator và ta nối các khối như hình 3.10

Hình 3. 11: Mơ phỏng điều khiển tốc độ bằng Simulink
3.3.3 Code điều khiển tốc độ động cơ DC có giảm tốc GA25-370
#include <avr/interrupt.h>
uint32_t demXung,lastDemXung;
int32_t P,I,D,Err,lastErr;
uint8_t soXung,soXungMM,output;
float kp,kd,ki;
void setup() {
Serial.begin(9600);
DDRD = 0b00111000;
PORTD = 0b10100000;
19


TCCR2B |= 0b011; //490-->976.5Hz
cli();
TCCR1A=0;
TCCR1B = 0b11; // T = 64/16 = 4 us
TCNT1 = 53036; // 50ms =12500 xung
TIMSK1=1;

sei();
attachInterrupt(0,readEncoder,RISING);
}

void loop() {
if(PIND&0b10000000){
kp=0.5775,kd=0.077,ki=1.9; // Ku=1.75,Tu=0.4s
}else{
kp=0,kd=0,ki=0;I=0;output=0;
}
soXungMM = map(analogRead(A0),0,1023,5,42);
float rpm = soXung/0.05/495;
float rpmMM = soXungMM/0.05/495;
Serial.print(rpm);
Serial.print(',');
Serial.print(rpmMM);
Serial.print(',');
Serial.print(3);
Serial.print(',');
Serial.println(0);
}

void readEncoder(){
20


if(PIND&0b01000000)demXung++;
}

ISR (TIMER1_OVF_vect){

TCNT1 = 53036;
soXung = demXung-lastDemXung; //5-->42
lastDemXung = demXung;
Err = (int32_t)soXungMM - soXung;
P =kp*Err;
D =kd*(Err-lastErr)/0.05;
I += ki*Err*0.05;
output += P+D+I;
output = constrain(output,0,255);
analogWrite(3,output);
lastErr = Err;
}
3.3.4 Code điều khiển tốc độ động cơ DC khơng giảm tốc (1 vịng 334 xung)
#include <avr/interrupt.h>
uint32_t demXung,lastDemXung;
int32_t P,I,D,Err,lastErr;
uint16_t soXung,soXungMM,output;
float kp,kd,ki;
void setup() {
Serial.begin(9600);
DDRD = 0b00111000;
PORTD = 0b10100000;
TCCR2B |= 0b010; //490-->3.9kHz
cli();
TCCR1A=0;
21


TCCR1B = 0b010;
TCNT1 = 45536;

TIMSK1=1;
sei();
attachInterrupt(0,readEncoder,RISING);
}

void loop() {
if(PIND&0b10000000){
kp=0.15,kd=0.0025,ki=0.05; // Ku=0.59,Tu=0.1111 kp=0.2,kd=0.0025,ki=0.05
}else{
kp=0,kd=0,ki=0;I=0;output=0;
}
soXungMM = map(analogRead(A0),0,1023,150,300);
uint16_t rpm= soXung/0.01/334;
uint16_t rpmMM =soXungMM/0.01/334;
Serial.print(rpm);
Serial.print(',');
Serial.print(rpmMM );
Serial.print(',');
// Serial.print(output);
// Serial.print(',');
Serial.print(100);
Serial.print(',');
Serial.println(0);

}

void readEncoder(){
22



×