Ứng dụng lý thuyết hiện đại thiết kế Modul điều khiển động cơ DC
Trang 1
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
THIẾT KẾ MODUL ĐIỀU KHIỂN ĐỘNG CƠ DC
-¾?½ -
Sinh viên thực hiện:
Bùi Trung Hiếu
Trang 2Index – 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.1 Mạch phần cứng
Hình III.1 Mạch giao tiếp MCU P89LPC922 với PC qua cổng COM
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 <dự định-đang
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ố K p ,K i ,K d bằng thuật toá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 3DC 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:
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 4(I) Khái quát – Giới thiệu sơ lược về nội dung đề tài
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ế luôn 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 5(II) Thuật toá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 toá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 độ yêu
cầu thì mở toà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 Mô hình điều khiển hệ thống khi chưa có khâu tự 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
Trang 6(III) Phần cứng và phần mềm
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 <Sử dụng bộ nguồn
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 7‘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 8(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 9(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 <sử dụng động 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 10DC 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 ltiếp của encoder, từ đó cũng suy ra được vận tốc trung bình của động 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 quá 65535xung/Ts <được khống chế trong đề tài bằng phần mềm>
Trang 11(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) <Khi khai báo Flash User Configuration Byte 1 (UCFG1) chọn UCFG1.0-UCFG1.1-
Trang 12(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
WDCON, IE,IP <Xem thêm ở
http://www.khvt.com/traodoi/P89LPC922/Timer/Timer.html> Ở đâ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 13(IV.2.1)Phác thảo giải thuật – Đọc Encoder
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)+ , với PRE=0÷7, WDL=0÷255 ta thấy rằng:
• Khi chọn PLCK=11.0592M/2 thì (Ts)min=6µs, (Ts)max=189.6ms
• Khi chọn 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:
PRE s
WDL tclks
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) //Phai be thua 2500ms {
WDCON = 0xE5;
WDL = 25*time/256-1;
} //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 http://www.robotics.khvt.com/dcmotor/code/openloop.zip
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 toá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 quá nhỏ, không phải chỉ vì thời gian đáp ứng của thuật toá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:
(min
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: ωminST s =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 14(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à: 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:
(min 6 v p/
→ = ), giới hạn trên này không cần xét tới trong đề tài này
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ốc<vận tốc hiện tại, ta mở hàm Vmin, đạt sai số gần 20% chuyển sang
dù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 15DC 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×PCLK≈44µsÆfpwm≈22kHz gây khá nhiều phiền phức về phần cứng <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:
Mạch nguyên lý:
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
áp ra và khoảng Ton, Toff, Tm như sau: 0 on
DC
T V T
= ×V Hình vẽ bên minh họa
Trang 16(IV.2.2) Thuật toá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
c) Giải thuật:
<Code here>
Ghi chú: Source code có tại http://www.robotics.khvt.com/dcmotor/code/openloop.zip
Trang 17DC 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:
(*) 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:
1
1 1
Ta viết gọn lại kết quả trên như sau:
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 18(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 yê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: , 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 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)