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

ỨNG DỤNG LÝ THUYẾT HIỆN ĐẠI THIẾT KẾMODUL ĐIỀU KHIỂN ĐỘ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 (6.11 MB, 37 trang )

TRƯỜNG ĐẠI HỌC BÁCH KHOA THÀNH PHỐ HỒ CHÍ MINH
Khoa Điện-Điện tử
Ngành Điều khiển tự động

ỨNG DỤNG LÝ THUYẾT HIỆN I
THIT K
MODUL IU KHIN NG C DC
-----ắ?ẵ-----

Sinh viờn thc hin:

Bùi Trung Hiếu
™ Mã số: 40200776
™ Lớp: DD02KSTN

Thành phố Hồ Chí Minh, 2005-12-24


Index – DC Motor Control Module
I. Khái quát-giới thiệu đề tài:
• Kiến thức cơ bản:
II. Giới thiệu thuật toán điều khiển và các chương trình.
II.1.
Điều khiển kinh điển
II.2.
Mạng neural
II.3.
Fuzzy control
II.4.
Genetic Algorithm(GA).
II.5.


Chương trình điều khiển viết bằng ngơn ngữ C trong uV3
Hình II.1
Mơ hình điều khiển hệ thống khi chưa có khâu chỉnh định
Hình II.2
Mơ hình điều khiển hệ thống có thêm khâu chỉnh định
III. Phần cứng chuẩn bị và phần mềm sử dụng.
III.1.
Mạch phần cứng
Mạch giao tiếp MCU P89LPC922 với PC qua cổng COM
Hình III.1
Hình III.2
Mạch phát triển ứng dụng MCU P89LPC922
Hình III.3
Mạch đọc Encoder sử dụng MCU P89LPC922 thiết kế>
Hình III.4
Mạch động lực (mạch cơng suất).
IV. Giải quyết vấn đề:
IV.1.
Định hướng chương trình:
Hình IV.1
Định hướng chương trình dạng TOP-DOWN design
IV.2.
Phác thảo giải thuật
IV.2.1. Đọc Encoder:
Hình IV.2.1.1
Cấu hình các nguồn tạo dao động của P89LPC922
Hình IV.2.1.2
Cấu hình của Counter/Timer 0 và cách khai báo khi T0 ở chức năng
Counter

Hình IV.2.1.3
Cấu hình của WDT ở chức năng Timer
Hình IV.2.1.4
Sơ đồ giải thuật cách đọc Encoder bằng Counter và gửi lên PC
IV.2.2. Điều xung
Hình IV.2.2.1
Sơ đồ khối điều xung tham khảo
Hình IV.2.2.2
Mạch nguyên lý của Driver LMD18200 dùng ở chế độ điều biến xung
Hình IV.2.2.3
Timer 1 ở mode 6 với chức năng PWM
IV.2.3. Khâu điều khiển kinh điển PID:
IV.2.3.1 Khâu PID rời rạc:
Hình IV.2.3.1
Tìm các thơng số cho PID nhờ Matlab
Hình IV.2.3.2
Sơ đồ giải thuật khảo sát đặc tính động cơ
Hình IV.2.3.3
Biểu diễn kết quả với Ts=9ms
Hình IV.2.3.4
Xấp xỉ các kết quả khảo sát bằng một hàm truyền không đơn vị
IV.2.3.2 Thiết kế khâu điều khiển mờ PID rời rạc dùng MATLAB(Tìm bộ
thơng số Kp,Ki,Kd bằng thuật tốn GA kết hợp mạng neural):
Hình IV.2.3.1
Sơ đồ mơ phỏng động cơ DC xây dựng trong Matlab
Hình IV.2.3.2
Chức năng của MCU P89LPC922 mơ phỏng trong Matlab
Hình IV.2.3.3
Khóa mờ xây dựng luật điều khiển
Hình IV.2.3.4

Khối PID rời rạc xây dựng trong Matlab
Hình IV.2.3.5
Quần thể được chọn nhờ lời khuyên của chuyên gia.
Hình IV.2.3.6
Đáp ứng của hệ thống khi tín hiệu thử là 1000+500sin(0.02t) (v/p) trên
mơ phỏng.
Hình IV.2.3.7
Hình phóng to sai số giữa tín hiệu đặc và tín hiệu đáp ứng (vịng/phút)
trên mơ phỏng.
Hình IV.2.3.8
Đáp ứng của hệ thống khi tín hiệu thử là 20+10sin(0.5t) (xung/Ts) trên
thực tế với chu kì lệnh là 10xung/lệnh.

Trang i


DC Motor Control Module
Hình IV.2.3.9
Sơ đồ giải thuật điều khiển vịng kín chưa chỉnh hướng chỉ dùng khâu
PID kinh điển
Hình IV.2.3.10
Đáp ứng vịng kín khi chỉ có khâu PID với các tốc độ khác nhau khi
không gây nhiễu tải.
IV.2.3.3 Mở rộng chiến lược điều khiển, tìm cách tối ưu hóa đáp ứng quá độ
của hệ thống-nhận dạng đối tượng và xây dựng một mơ hình tham chiếu
chuẩn cho động cơ-Mạng neural truyền thẳng:
Hình IV.2.3.1
Sơ đồ giải thuật khảo sát đặc tính động cơ.
Hình IV.2.3.2
Đặc tính điều xung theo vận tốc (xung/Ts).

Hình IV.2.3.3
Đáp ứng bước khi có khâu hiệu chỉnh kết hợp.
V. Các vấn đề mở rộng và hướng giải quyết:
VI. Kết luận:
VII. Dự định:
VIII. Tài liệu tham khảo
VIII.1.
Giáo trình.
VIII.2.
Tài liệu tham khảo chính:
• Từ khóa tra cứu tài liệu sử dụng.
IX. Các phiên bản cập nhật.

Trang ii


(I) Khái quát – Giới thiệu sơ lược về nội dung đề tài
I

Khái quát:
– Việc áp dụng lý thuyết điều khiển kinh điển và hiện đại vào những mơ hình thực
tế ln gặp khó khăn về giải thuật phần mềm lẫn đáp ứng phần cứng của thiết bị.
– Bằng cách sử dụng vi điều khiển P89LPC922 của Philips làm nhân điều khiển
trung tâm, Matlab là chương trình xử lý trung gian, phần mạch cơng suất sử dụng
Driver tích hợp <LMD18200>, hi vọng đề tài đem đến một cách nhìn nhận mới
về vấn đề áp dụng lý thuyết điều khiển vào thực tế.
– Đề tài đã phân tích khá kĩ lưỡng các vấn đề như thiết kế và chọn bộ thông số của
khâu điều khiển kinh điển PID bằng thuật toán GA, cách chọn tần số điều xung,
xử lý ngắt trong lấy mẫu, thời gian thực hiện của các hàm, giới hạn phần cứng
đáp ứng của thiết bị, cách xây dựng mơ hình tham chiếu chuẩn cho đối tượng,

khắc phục những sự cố về nhiễu tải hoặc/và nhiễu đo lên đối tượng.
– Làm việc trên nhân điều khiển P89LPC922 của Philips nên tơi phân tích các sơ
đồ giải thuật và chương trình, cũng như thời gian thực để thực thi trên cơ sở tập
lệnh của họ MCU8051.
"
Kiến thức cơ bản: Lý thuyết điều khiển kinh điển,lý thuyết điều khiển
hiện đại, điện tử cơ bản, điện tử công suất, cấu trúc vi điều khiển, giải thuật
và lập trình ngơn ngữ C.

Trang I.1


(II) Thuật tốn điều khiển và các chương trình
II.

Thuật tốn điều khiển và các chương trình:
II.1: Điều khiển kinh điển: Sử dụng khâu vi tích phân tỉ lệ (PID) để làm bộ điều
khiển hệ thống.
II.2: Mạng neural: nhận dạng đặc tính động cơ DC. Điều khiển theo mơ hình tham
chiếu. Chuyên gia cho ‘lời khuyên’ về vùng khả nghiệm của khâu PID, hướng dẫn
thuật tốn GA tìm quần thể thích nghi.
II.3: Fuzzy control: Điều khiển vịng kín bằng ‘cơng tắc mờ’: Nếu <80% tốc độ u
cầu thì mở tồn cơng suất, nếu >120% thì tắt nguồn, khoảng giữa sử dụng khâu hiệu
chỉnh PID kinh điển.
II.4: Genetic Algorithm(GA): chọn bộ thông số PID cho khâu điều khiển kinh điển,
lựa cá thể trội theo yêu cầu thiết kế với mức chính xác đặt ra của người dùng.
II.5: Chương trình điều khiển viết bằng ngơn ngữ C trong uV3.
II.6: Các mơ hình điều khiển hệ thống:

Hình II.1


Hình II.2

Mơ hình điều khiển hệ thống khi chưa có khâu tự chỉnh định

Mơ hình điều khiển hệ thống có thêm khâu chỉnh định

Trang II.1


(III) Phần cứng và phần mềm
III.
Phần cứng chuẩn bị và phần mềm sử dụng:
III.1: Mạch phần cứng:
III.1.1 Mạch giao tiếp MCU P89LPC922 với PC qua cổng COM.
III.1.2 Mạch phát triển ứng dụng MCU P89LPC922.
III.1.3 Mạch đọc Encoder sử dụng MCU P89LPC922 <dự định-đang thiết kế>
III.1.4 Mạch công suất điều khiển động cơ.
III.1.5 Động cơ DC có Encoder.
III.1.6 Bộ nguồn: 12VDC<Có thể sử dụng ở 24VDC>, 5VDC ATX-nối 2 chân 14-15>
III.2: Chương trình phần mềm:
III.2.1 Keil For 8051(uV3—tools c51+a51).
III.2.2 Hyper terminal.
III.2.3 Matlab version 7.0.
III.2.4 Orcad version 9.2.

Hình III.1.1.: Mạch giao tiếp MCU P89LPC922 với PC qua cổng COM.

Trang III.1



‘DC Motor Control Module’

Hình III.1.2.: Mạch phát triển ứng dụng MCU P89LPC922.

Hình III.1.3.: Mạch đọc Encoder sử dụng MCU P89LPC922 <dự định-đang thiết kế>

Trang III.2


(III) Phần cứng và phần mềm

Hình III.1.4.:Sơ đồ phần cứng mạch công suất

Trang III.3


(IV.I) Giải quyết vấn đề-Định hướng chương trình
IV. Giải quyết vấn đề:
IV.1.
Định hướng chương trình: Muốn điều khiển động cơ vịng kín, có hồi tiếp:
(i) Đề tài sử dụng encoder quang để phản hồi vận tốc có encoder 100xung/vòng>. Nhiệm vụ phải đọc được giá trị này. Dự
định sẽ phát triển cách đọc Encoder sử dụng ngắt cạnh ở mode x4
(ii) Áp đặt vào 2 đầu động cơ thay đổi sẽ làm vận tốc động cơ thay đổi nên
tín hiệu điều xung có tác động trực tiếp đến vận tốc động cơ. Nhiệm vụ
phải có chương trình điều biến xung.
(iii)Muốn động cơ đáp ứng đúng vận tốc mong muốn, phải có một khâu
điều khiển, có thể dùng khâu điều khiển kinh điển (PID) hoặc(/và kết

hợp với) điều khiển hiện đại (xây dựng mơ hình tham chiếu, hoặc/và
khâu điều khiển mờ)
(iv) Giá trị vận tốc và chiều quay của động cơ được ra lệnh từ bàn phím và
hiển thị trên màn hình PC bằng giao tiếp RS232. Các giá trị này có thể
được nhận từ một MCU master khác qua các giao tiếp I2C, song
song,… tùy nhu cầu sử dụng của người thiết kế.
(v) Khâu PID cần các thơng số để điều khiển vịng kín, nhiệm vụ phải tìm
được bộ 3 thơng số KP, KI, KD, sử dụng thuật GA kết hợp với ‘lời
khuyên của chuyên gia’.

Hình IV.2 Định hướng chương trình dạng TOP-DOWN design

Trang IV.1


DC Motor Control Module
IV. Giải quyết vấn đề:
IV.1.
Định hướng chương trình:
IV.2.
Phác thảo các giải thuật:
IV.2.1. Đọc Encoder:
Hình IV.2.1.1 Cấu hình các nguồn tạo dao động của P89LPC922
Hình IV.2.1.2 Cấu hình của Counter/Timer 0 và cách khai báo khi T0 ở chức năng Counter
Hình IV.2.1.3 Cấu hình của WDT ở chức năng Timer
Hình IV.2.1.4 Sơ đồ giải thuật cách đọc Encoder bằng Counter và gửi lên PC
Muốn điều khiển động cơ bằng vịng kín, có hồi tiếp, trong đề tài này sử dụng encoder
quang để phản hồi vận tốc <sử dụng động cơ có encoder 100xung/vịng>. Về cơ bản, để có
được giá trị vận tốc này, ta có thể:
(i) Tính số cạnh xuống trong thời gian Ts

(sampling time) để suy ra vận tốc trung
bình của động cơ.(pulse/Ts)
(ii) Tìm thời gian xuất hiện 2 cạnh xuống liên
tiếp của encoder, từ đó cũng suy ra được
vận tốc trung bình của động cơ.
• Phân tích:
i. Nếu sử dụng phương án 1, ta cần 1 timer để định thời gian lấy mẫu, 1 counter để
đếm số xung.
ii. Nếu sử dụng phương án 2, ta cũng cần 1 timer để định khoảng thời gian và 1 chân
(có thể là counter/ngắt ngồi/1 chân In/Out bình thường)
iii. Nếu sử dụng phương án 2, thời gian thực thi chiếm hầu hết thời gian hoạt động của
MCU nên sẽ dùng một Device riêng biệt làm nhiệm vụ này.
iv. Nếu sử dụng phương án 1 sẽ bị giới hạn về mặt đáp ứng do encoder gây ra quá lớn, tràn Counter/hoặc encoder có độ phân giải thấp thì thời gian lấy mẫu Ts phải
lớn để giảm thiểu sai số đo đạc>
v. Nếu sử dụng phương án 2, trong thuật giải của MCU MASTER, dùng giao tiếp song
song để giảm thiểu thời gian lấy mẫu, tất nhiên cần giao thức bắt tay để đảm bảo
nhận đúng dữ liệu, chiều quay của động cơ cũng được ENCODER READER CARD
nhận và gởi lên ở bit cao nhất của byte cao. <đang thiết kế>
→Lựa chọn: Trong đề tài chọn phương án 1.
• Cách thức giải quyết:
i. Sử dụng Watchdog Timer để định
khoảng thời gian ngắt(Ts). Khoảng thời
gian này được lập trình để có thể thay
đổi tùy mục đích sử dụng.
ii. Sử dụng Timer 0 ở mode 1 để làm
counter đếm số xung cạnh ở encoder.
Khơng tính đến trường hợp Counter
tràn do vượt q 65535xung/Ts. <được
khống chế trong đề tài bằng phần

mềm>

Trang IV.2


(IV.2.1)Phác thảo giải thuật – Đọc Encoder

Sơ qua về phần cứng của P89LPC922 phục vụ chức năng đếm xung:

Hình IV.2.1.1. Cấu hình các nguồn tạo dao động của P89LPC922
Muốn điều khiển động cơ
i. Đề tài sử dụng nguồn xung nhịp là thạch anh 11.0592MHz. (High freq) khai báo Flash User Configuration Byte 1 (UCFG1) chọn UCFG1.0-UCFG1.11
2
UCFG1.2=000B> bộ DIVM=0, tức là CCLK=
(thời gian
→ PCLK=
f osc
f osc
tính bằng giây <seconds>)
ii. Cấu hình của Counter/Timer 0 và cách khai báo khi T0 ở chức năng
Counter/Timer 16bit:

Hình IV.2.1.2. Cấu hình của Counter/Timer 0 và cách khai báo khi T0 ở chức năng Counter

Trang IV.3


(IV.2.1)Phác thảo giải thuật – Đọc Encoder
i. Cấu hình của WDT ở chức năng Timer:


Hình IV.2.1.3. Cấu hình của WDT ở chức năng Timer Cấu hình của WDT ở chức năng Timer
Khai báo cấu hình:Các thanh ghi chịu tác động: TMOD, TAMOD,WDFEED1&2,
WDCON, IE,IP Ở đây, ta dùng chân T0 ở
chế độ Input Only.
Sơ đồ giải thuật:

Hình IV.2.1.4. Sơ đồ giải thuật cách đọc Encoder bằng Counter và gửi lên PC
Trang IV.4


(IV.2.1)Phác thảo giải thuật – Đọc Encoder
Code: Khởi tạo WD ở chức năng Timer và sinh ra ngắt sau mỗi Ts trước> cho Counter 1 cập nhật giá trị gửi lên PC và Reset Counter.
Phân tích giá trị lớn nhất và nhỏ nhất có thể sinh ngắt từ WDT.
Từ công thức: tclks = 25+ PRE (WDL +1) + 1 , vi PRE=0ữ7, WDL=0ữ255 ta thy rng:
ã Khi chn PLCK=11.0592M/2 thỡ (Ts)min=6às, (Ts)max=189.6ms
ã Khi chn WDCLK=400kHz thỡ (Ts)min=82.5às, (Ts)max=2.62s
o Trong bài này, ta thống nhất chọn WDCLK, có các công thức sau:
25+ PRE (WDL + 1) + 1
400000Ts − 1
tclks
o Ts =
→ 2 PRE (WDL + 1) =
=
25
400000
400000
400Ts − 1

→ 2 PRE (WDL + 1) =
(Ts : ms )
25
Nếu ta thực hiện các phép nhân chia và so sánh tìm ra số có sai số bé nhất thì tương
đối tốn dung lượng bộ nhớ, vậy nên ta chuyển sang cách dùng cấu trúc sau để tính TS.(Có
sai số tương đối lớn)
o Ts=[1:20]ms→PRE=000
o Ts=(20:2000]ms→PRE=111
Từ định hướng như thế, ta viết chương trình:
if(time>20)
{
WDCON = 0xE5;
WDL = 25*time/256-1;
}

//Phai be thua 2500ms

//Thoi gian lay mau >=1ms va <=20ms
else
//(time>=1&time<=20)
{
WDCON = 0x05;
WDL = (400*time-1)/32-1;
}

Hay viết gọn lại:
(time>20)?( WDCON = 0xE5,WDL = 25*time/256-1):( WDCON = 0x05,WDL = (400*time-1)/32-1);

Trong các phép tính, khơng có số nào vượt quá tầm của số unsigned int nên kết quả
chấp nhận(trong sai số tính được)

<Code here>
Ghi chú: Source code có tại />Phân tích sự khó khăn về mặt đáp ứng của Counter:
o Khi xử lý thời gian thực, ta mong muốn sao cho vi điều khiển xử lý nhanh các kết quả
tính tốn hầu mong tạo được tín hiệu điều khiển thích hợp nhất với tín hiệu hiện tại.
o Sự đáp ứng phần cứng bao giờ cũng gây ra những khó khăn, ở đây ta khơng thể lấy
mẫu ở khoảng thời gian q nhỏ, khơng phải chỉ vì thời gian đáp ứng của thuật tốn
xử lý, mà cịn vì sự phân giải của sensor là có giới hạn. Ví dụ, trong bài, nếu sử dụng
encoder có độ phân giải 100xung/vịng, ta lấy mẫu với chu kì 10ms. Vậy, để có thể
đọc được sự sai lệch của 1 xung, động cơ cần có vận tốc tối thiểu:
60
1xung :10ms ⇒ 100 xung :1s ⇒ ω = 60v / p → ωmin =
( v / p ) . (Với S là độ phân
STs
giải của Sensor) Ở cơng thức trên, ta thấy có 2 cách để giảm ωmin:
™ Tăng độ phân giải của Encoder.
™ Hoặc/và tăng thời gian lấy mẫu.<Cái này lại gây khó khăn về mặt đáp ứng>
o Tuy nhiên: ωmin STs = 60 là một đẳng thức, và trong đẳng thức đó, ta muốn 2 thành
phần: ωmin và Ts càng nhỏ càng tốt, vậy chỉ cịn cách tăng S, cách này khơng phải bao

Trang IV.5


(IV.2.1)Phác thảo giải thuật – Đọc Encoder
giờ cũng thực hiện được vì giá thành/cũng như phần cứng đáp ứng cũng phải có giới
hạn.
o Hướng khắc phục: sử dụng Encoder có độ phân giải cao hơn, đề nghị đưa ra là
1000xung/vòng. Lúc này, giả sử vẫn dùng Ts=10ms, vậy thì tốc độ để đạt độ phân giải
xung là: ωmin = 6 ( v / p ) . Với cách khắc phục này, ta phải phân tích ngưỡng trên của
đáp ứng:
1

 1v : 362 μ s ,
11.0592 MHz
→ ω = 165840 ( v / p ) , giới hạn trên này không cần xét tới trong đề tài này.
1xung : 4CCLK ⇒ 1000 xung : 4000CCLK → 1v : 4000 ×

Phân tích khó khăn khi kéo tải:
P Khi kéo tải, vận tốc của động cơ sẽ giảm xuống và dòng qua động cơ tăng lên, lúc
này, giá trị encoder gởi về (nếu vẫn giữ thời gian lấy mẫu như trước) sẽ gây rất nhiều khó
khăn (do độ phân giải gây ra) để vi điều khiển có thể hiểu được.
>>>>Cách giải quyết vấn đề: Ta sẽ điều khiển động cơ bằng cách sau:
P Khi gán vận tốc>vận tốc hiện tại, ta mở hàm Vmax, đạt sai số khoảng gần 20%, chuyển
sang PID.
P Khi gán vận tốcdùng PID.
Cách làm này, có thể gọi là ‘khóa mờ’, hoặc dùng từ ‘điều khiển theo ngưỡng’. Hai thuật
ngữ như nhau trong trường hợp này!

Trang IV.6


DC Motor Control Module
IV. Giải quyết vấn đề:
IV.1.
Định hướng chương trình:
IV.2.
Phác thảo giải thuật
IV.2.1. Đọc Encoder:
IV.2.2. Điều xung Tín hiệu điều khiển trực tiếp lên mạch cơng suất chính là tín hiệu
điều xung để Driver có thể điều áp cấp cho động cơ đạt tốc độ mong muốn.
a) Phân tích: Sử dụng Timer ở Mode 6, ta sẽ có thuận lợi về mặt: không phải

lo giải thuật phần mềm và không tốn nhiều thời gian xử lý ngắt; khoảng thời
gian Tpwm = 256ìPCLK44àsặfpwm22kHz gõy khỏ nhiu phin phc v
phn cng <chủ yếu là do khoảng thời gian giới hạn của Opto cách ly> Áp
nguồn chia được 256 mức, tức khoảng 12/256=46.875mV mỗi mức.
Khối xử lý PWM:

Hình IV.2.2.1

Sơ đồ khối điều xung tham khảo

Mạch nguyên lý:
™ Mạch nguyên lý của Driver LMD18200 dùng ở chế độ điều biến xung:

Hình IV.2.2.2

Mạch nguyên lý của Driver LMD18200 dùng ở chế độ điều biến xung

Ở đây, tín hiệu PWM và DIR được MCU P89LPC922 tạo ra.
Xử lý khối PWM: (lý thuyết)
„ PWM(Pulse width modulation) là q trình điều biến tín hiệu xung nhằm thực hiện
biến đổi áp DC-DC.
„ Gọi Tm là chu kì điều biến xung,
thời gian ON: Ton, thời gian
OFF: Toff, ta có mối quan hệ về
áp ra và khoảng Ton, Toff, Tm như
T
sau: V0 = on ×VDC . Hình vẽ bên
T
minh họa.
Trang IV.7



(IV.2.2) Thuật tốn PWM
„ Với Driver, có một số kết quả đáng quan tâm sau:

Dòng điều chế khi ấy:

b) Sơ qua về phần cứng của MCU P89LPC922: Mơ hình Timer1 ở Mode 6.

Hình IV.2.2.3
c) Giải thuật:

Timer 1 ở mode 6 với chức năng PWM

<Code here>
Ghi chú: Source code có tại />Trang IV.8


DC Motor Control Module
IV. Giải quyết vấn đề:
IV.1.
Định hướng chương trình:
IV.2.
Phác thảo giải thuật
IV.2.1. Đọc Encoder:
IV.2.2. Điều xung
IV.2.3. Khâu điều khiển kinh điển PID:
IV.2.3.1 Khâu PID rời rạc:
1. P (proportional): Gp(z)=Kp
kT

1
2. I (integrate) : GI ( z ) = K I T
Với ∫
e(t ) dt ≈ Te( kT ) (xấp xỉ theo hình chữ
−1
k −1)T
(
1− z
nhật tới)
K z −1 KD
3. D (derivative): GD ( z ) = D
(1 − z −1 )
=
T z
T
„ Kết hợp ba điều trên ta được khâu PID số với hàm truyền rời rạc:
K
1
1
G( z) = K p + K I T
+ D (1 − z −1 ) ⇔ G ( z ) = K p + K i
+ K d (1 − z −1 )
−1
−1
1− z
1− z
T
„ Qua phép biến đổi ta được:
U c ( z)
1

= K p + Ki
+ K d (1 − z −1 )
−1
E( z)
1− z
⇔ U c ( z )(1 − z −1 ) = E ( z )( K p (1 − z −1 ) + K i + K d (1 − z −1 ) 2 )
⇔ uk − uk −1 = K p (ek − ek −1 ) + K i ek + K d (ek − 2ek −1 + ek − 2 )
⇔ uk = uk −1 + control _ value
(*)
„ (*) chính là giải thuật mà ta sẽ sử dụng trong chương trình điều khiển PID bằng C.
„ Nếu tích phân được xấp xỉ theo hình chữ nhật lùi thì ta sẽ có kết quả như sau:
z −1
+ K d (1 − z −1 ) .
G( z) = K p + Ki
−1
1− z
„ Tương tự ta cũng có thể xấp xỉ theo hình thang, tuy nhiên thuật tốn lập trình rất phức
tạp và chứa thành phần sai số tương lai(dự báo).
„ Từ cơ sở lý thuyết trên, ta thấy sẽ phải dùng đến 3 giá trị sai lệch và một giá trị điều
khiển quá khứ cho mỗi tín hiệu điều khiển hiện tại, nếu các số trên đều ở định dạng
float, sẽ cần 3 phép nhân và 3 phép cộng số float (sử dụng khoảng 2500 lệnh máy tức
khoảng 550us<sử dụng thạch anh 11.0592MHz>) để có kết quả. Tính ln thời gian ở
các lệnh khác, tổng cộng khoảng 1ms để hoàn thành việc cập nhật giá trị hiệu chỉnh
PID ở mỗi lần.
„ Ta viết gọn lại kết quả trên như sau:
uk = uk −1 + control _ value

control _ value = ( K p + Ki + K d ) ek − ( K p + 2 K d ) ek −1 + K d ek − 2 = K nowek + K last ek −1 + K last _ last ek − 2

Với các thông số Know, Klast, Klast_last đều là những hằng số từ bộ ba KP,KI,KD được

tính nhờ Matlab.
Tại sao lại dùng bộ PID?
„ Tăng tốc độ đáp ứng đối với vịng kín của bộ điều khiển.
„ Tăng độ chính xác của đáp ứng xác lập.
„ Giảm độ vọt lố.
„ Bộ PID là khâu hiệu chỉnh tương đối dễ thiết kế và đa dụng.

Trang IV.9


(IV.2.3.1)Khâu PID số
Nguyên tắc hoạt động của bộ điều khiển PID:
ƒ
Dựa trên sai số giữa tín hiệu đặt và tín hiệu phản hồi, lúc đầu, ta đặt tín hiệu
mong muốn, ngay lúc ấy, tín hiệu phản hồi là 0 nên sai lệch bằng chính tín hiệu đặt, bộ
thơng số PID sẽ khuyếch đại sai lệch này để tạo tín hiệu điều khiển đối tượng, với tín hiệu
điều khiển ấy, đối tượng sẽ chưa thể nào đáp ứng đúng như yêu cầu ngay lập tức, nên sai
lệch sẽ vẫn còn và do đó, tín hiệu điều khiển mới sẽ kết hợp tín hiệu điều chỉnh sai lệch
mới và tín hiệu điều khiển trước (uk) để tiến dần tới giá trị điều khiển đúng mà tại đó, đối
tượng sẽ cho ra giá trị phản hồi đúng như yêu cầu (hoặc gần đúng như yêu cầu với một độ
chính xác chấp nhận được do chính phần mềm và/hoặc phần cứng của hệ thống quy định).
ƒ
Vậy thật sự, bộ điều khiển PID hoạt động dựa trên tín hiệu sai số và “tích lũy
giá trị điều khiển đúng” chứ khơng phải tín hiệu u cầu. Mặc dù tín hiệu sai số do tín
hiệu yêu cầu và tín hiệu phản hồi về gây ra. (hiệu của sigcommand và sigfeedback).
ƒ
Khái niệm “tích lũy giá trị điều khiển đúng” dùng để thay thế cho uk-1 trong
biểu thức: uk = uk −1 + control _ value , giá trị control_value sẽ tiến tới 0 khi sai số khơng
cịn, và giá trị điều khiển khi ấy chỉ còn uk=uk-1, đấy là tín hiệu điều khiển đúng với tín
hiệu yêu cầu.

ƒ
Trong hầu hết các hệ thống có điều khiển bây giờ, khâu PID đều là khâu PID
số, vậy nên ảnh hưởng của thời gian lấy mẫu tương đối lớn lên hệ thống điều khiển.
o Để tìm bộ thơng số Kp, KI, KD ta phải khảo sát được đặc tính động học của động
cơ hoặc tìm bằng thử sai. Có thể sử dụng phương pháp Zeigler-Nichols để khảo
sát. Trong đề tài này tìm đáp ứng bước của động cơ, từ đó tìm được hàm truyền
vòng hở để thiết kế khâu điều khiển dùng thuật toán GA dựa trên ‘lời khuyên của
chuyên gia’.
o Lấy đáp ứng bước của động cơ:
ƒ Phân tích:
• Đáp ứng bước của động cơ có được khi ta cấp áp dạng Step và lấy
đáp ứng từng thời điểm của động cơ sau đó.

PID: (Tìm các thơng số nhờ Matlab)

Hình IV.2.3.1

Tìm các thơng số cho PID nhờ Matlab

Trang IV.10


(IV.2.3.1)Khâu PID số

Hình IV.2.3.2

Sơ đồ giải thuật khảo sát đặc tính động cơ

Dựa trên sơ đồ giải thuật trên, ta sẽ có các hàm sau:
Khởi tạo: init()

o timer_init();
o watchdog_init(Ts);
o watchdogrtc_isrinit();
o uart_init();
Khởi động: start();
o PWM_status=1;
o Dir=1;
o Brake=0;
o timers_starttimer0();
o watchdog_start();
o EA=1;
Xử lý trung tâm: chờ và khơng làm gì cả<central processing: wait and do nothing>
o while(1);
Sự biến: chỉ có ngắt từ WDT và ngắt ấy cưỡng bức sinh ra ngắt Counter 0.
o watchdogrtc_isr();
o timers_isr0();

Trang IV.11


(IV.2.3.1)Khâu PID số
Kết thúc lấy mẫu: khi có 250 mẫu liên tiếp có giá trị sai lệch nhau chỉ ±1 xung.
o compare();
o timers_stoptimer0();
o watchdog_stop();
o stop();
//stop=printf(“\nQua trinh lay mau ket thuc”);

Kết quả thu được: dùng Hyper Terminal (baud rate=115200,DTR=1,RTS=1,No
parity) sẽ là một ma trận cột có giá trị chỉ số vạch encoder đọc được trong thời gian lấy mẫu

TS và số mẫu được lấy chính là số hàng của vector đó.
Cách lấy đặc tính vịng hở của động cơ:
Xác định áp toàn thang của nguồn là bao nhiêu? (Vs) ta đặt áp ấy vào động cơ:
1. Cho thời gian lấy mẫu lớn (1giây-2giây) để lấy tốc độ xác lập của động cơ? Lấy khoảng
100 mẫu.
1.1. Vcc=12V
1.2. ωxl=sum(ω)/length(ω)≈7800(xung/2.5s)≈1900(v/phút)
Xác định đặc tính quá độ của động cơ:
2. Giữ nguyên áp đặt vào, thay khoảng thời gian lấy mẫu xuống TS(ms.)
2.1. Vcc=12V
ω (t )
K
b
a
2.2. Đặc tính q độ:
, tìm
e − at +
e − bt tức H ( s ) =
= 1+
ω0
( s + a )( s + b )
(a − b)
(b − a )
các giá trị a,b thường khó khăn vì độ phân giải của encoder không cao nên không cho
ta thấy điểm uốn của đồ thị, vì thế, ta sẽ xấp xỉ mơ hình động cơ là bậc nhất:
ω (t )
K
a
H (s) =


= 1 + e − at
ω0
ω0
(s + a)
>>>General model Exp1:
f1(x) = a*exp(b*x)
P

Tìm thơng số đáng tin cậy:
ω (t )
a
Giá trị:
= 1 + e − at , (khơng đơn vị); thử tìm bằng thống kê xem kết quả có hội tụ hay

ω0

ω0

khơng? Matlab cho ta mơ hình động cơ là: H ( s ) =

K
25
=
.
( s + a ) ( s + 25)

Trang IV.12


(IV.2.3.1)Khâu PID số


Hình IV.2.3.3
Sau 10 mẫu thử, ta thu được hình:

Hình IV.2.3.4

Biểu diễn kết quả với Ts=9ms

Xấp xỉ các kết quả khảo sát bằng một hàm truyền không đơn vị
Trang IV.13


(IV.2.3.1)Khâu PID số

Kết quả là chấp nhận được!
Có 2 nguyên nhân gây sai lệch chính: thời gian lấy mẫu và sự đáp ứng trong Ts của
encoder. Khi thời gian lấy mẫu giảm, sự lệch 1 xung cũng gây ra sai số hệ thống tương đối
lớn, khi thời gian lấy mẫu tăng, số mẫu lấy trong thời gian quá độ quá ít khơng đủ để thể hiện
đặc tính động cơ ỈThơng số gần đúng của động cơ mà ta chọn sẽ là: a=25.
K
25
=
Từ đó: H ( s ) =
( s + a ) ( s + 25)
Hình vẽ với giá trị Vmax chính là ngưỡng đáp ứng trên của động cơ, ta không thể qua
được bên trái mặt phẳng quy định bởi hàm truyền H(s).
Hàm truyền H(s) xây dựng trên không dùng một đơn vị nào để chuẩn hóa cả! Để
điều khiển vận tốc, ta có thể nhân H(s) với một hệ số K nào đó. Ví dụ như:
o Nếu đầu vào H(s) là vận tốc yêu cầu và đầu ra H(s) là áp mong muốn thì ta có
quan hệ: <Hiểu 1 vịng tức 2π>

V ×s
)=0.060 (V × s ) .
ƒ U=12VDC Ỉ v=31.7(v/g) ỈK=12/31.7=0.378 (

o Tuy nhiên, trong phạm vi đề tài này, người viết lại có chủ định dùng một hàm
truyền khơng đơn vị. Bởi vậy, sẽ chuẩn hóa các tín hiệu vào và ra!

Trang IV.14


DC Motor Control Module
IV. Giải quyết vấn đề:
IV.1.
Định hướng chương trình:
IV.2.
Phác thảo giải thuật
IV.2.1. Đọc Encoder:
IV.2.2. Điều xung
IV.2.3. Khâu điều khiển kinh điển PID:
IV.2.3.1 Khâu PID rời rạc:
IV.2.3.2 Thiết kế khâu điều khiển mờ PID rời rạc dùng MATLAB(Tìm bộ
thơng số Kp,Ki,Kd bằng thuật toán GA kết hợp neural):
Trong matlab, ta xây dựng lại mơ hình động cơ và các tính năng của MCU để mơ phỏng:

Hình IV.2.3.1
Sơ đồ mơ phỏng động cơ DC xây dựng trong Matlab
Trong đó, khối chức năng của MCU P89LPC922 là:

Hình IV.2.3.2
Chức năng của MCU P89LPC922 mơ phỏng trong Matlab

Với khóa mờ là cơng tắc được xây dựng theo quy luật:

Hình IV.2.3.3

Khóa mờ xây dựng luật điều khiển

Trang IV.15


(IV.2.3.2) Thuật tốn GA-Neural để tìm bộ thơng số PID
Khối PID rời rạc được xây dựng như sau:

Hình IV.2.3.4
Khối PID rời rạc xây dựng trong Matlab
Cách tìm bộ thơng số PID bằng thuật tốn GA:
– Trong thời đại máy tính số hiện nay, cách sử dụng vòng lặp hoặc khởi tạo
nhiều mẫu thử ngẫu nhiên để tìm giá trị tốt nhất thỏa mãn yêu cầu đặt ra thường
được dùng khi mà cách giải bằng lý thuyết toán học kinh điển quá phức tạp, hoặc
không cho lời giải tường minh.
– Thuật toán GA (Genetic algorithm) khai sinh dựa trên thuyết tiến hóa của
Darwin, định luật di truyền của Mendel đặt cơ sở rất lớn trên máy tính số.
– Trong phạm vi ứng dụng của đề tài, với công cụ hỗ trợ Matlab, ta sẽ kết hợp
một mạng Neural (nếp nhăn của võ não hay tri thức) với luật lựa chọn cá thể trong
quần thể chỉ định, bằng các phép lai tạo ngẫu nhiên và chọn lọc các cá thể để tìm
ra cá thể trội nhất sống sót sau phép đào thải của hàm phạt ta xây dựng!
a) Nếp nhăn vỏ não:
ƒ Nguồn gốc tri thức: Cơ sở toán học xây dựng dựa trên lý thuyết đưa ra của các
tác giả: Guillermo J. Silva, Aniruddha Datta, S. P. Bhattacharyya: Vùng khả
tồn của bộ thông số KP, KI, KD, trong không gian số thực ( \3 )(8) và (11)> Đấy chính là quần thể được chọn trong thuật toán GA.

ƒ Thuật xấp xỉ:
ƒ Xấp xỉ thứ 1:Với hàm truyền đã tìm được, so sánh với dạng hàm truyền
chuẩn của các tác giả trên đưa ra, ta có thể lấy L=0.001s (tức 1/10 thời
gian lấy mẫu).
ƒ Xấp xỉ thứ 2: ta giả định đang làm trên mơ hình liên tục chứ khơng
phải rời rạc.
Kết quả với hàm truyền không đơn vị: T=0.04,L=0.001: quần thể được chọn trục z, KI trục x, KD trục y>

Hình IV.2.3.5

Quần thể được chọn nhờ lời khuyên của chuyên gia

Trang IV.16


(IV.2.3.2) Thuật tốn GA-Neural để tìm bộ thơng số PID
b) Phép chọn lọc và lai tạo:
– Tìm cá thể thích nghi bằng tái sinh chọn lọc ngẫu nhiên: Trong quần thể chỉ
định, các cá thể tồn tại là độc lập và xác xuất tồn tại như nhau khi chưa có biến cố
đào thải của tự nhiên, khi xảy ra biến động về điều kiện sinh tồn, những cá thể
thích nghi được sẽ tiếp tục tồn tại, các cá thể không thích nghi hoặc sẽ bị đào thải,
hoặc phải tiến hóa thành dạng khác, phép chọn lọc đầu sa thải toàn bộ những cá
thể khơng thích nghi. Ta giữ lại phần quần thể đã thích nghi ban đầu hoặc sẽ chọn
trong quần thể đấy một vài cá thể tốt nhất để lai ghép.
ƒ Thuật GA tái sinh: Lấy ngẫu nhiên một lượng lớn cá thể(bộ thông số
KP, KI, KD) trong quần thể được chọn, thử độ thích nghi của chúng với
hàm phạt: min(ITAE(closeloop(PID.HS))) cá thể tốt nhất sẽ được
chọn.
– Lai tạo cá thể trội để tìm cá thể mạnh: Từ cá thể tìm được bằng hàm phạt trên,

ta xây dựng thêm luật sinh tồn: L(POT,steady_state_error,settling_time), cá thể
sinh ra bằng cách giữ cố định KP, lặp vịng KI và KD, tìm cá thể tốt nhất trong
quần thể lai mới. Đấy có thể là cá thể được chọn nếu đã thỏa yêu cầu đặt ra của ta.
Nếu không, phải cho KP thay đổi, hoặc bắt đầu lại thuật tóan tái sinh để tìm cá thể
trội mới! Có thể gặp trường hợp xấu, trong quần thể khơng có cá thể nào đáp ứng
nổi với luật sinh tồn, lúc đó, buộc ta chấp nhận phải thay đổi lại luật để tìm cá thể
thích nghi, nếu khơng như thế, tồn bộ cấu trúc lồi bị diệt vong! Bài tốn vơ
nghiệm!
ƒ Thuật GA lai tạo: Lấy cá thể tồn tại sau biến cố ban đầu, cho phép nó
sinh sản thành những tập đồn cá thể mới, thử độ thích nghi của chúng
với luật sinh tồn: f(POT,state_error,settling_time), cá thể nào đáp ứng
được các yêu cầu đặt ra sẽ tồn tại, và tất cả các cá thể khác bị bỏ đi,
không xét tới nữa, thuật lai tạo kết thúc.
Ghi chú: Các hàm ITAE, POT, state_error, settling_time có trên trong
phần Matlab>
Đáp ứng của hệ thống với bộ thông số: (2,1,0.0005)

Hình IV.2.3.6
kì lệnh 1 giây

Đáp ứng của hệ thống khi tín hiệu thử là 1000+500sin(0.02t) (v/p) chu

Trang IV.17


×