PDA

View Full Version : Điều khiển PID


falleaf
09-12-2005, 04:01 AM
http://dientuvietnam.net/board/showthread.php?t=594&page=1&pp=10

Đây là một bài viết rất hay của NHB. Tôi sẽ gom các bài viết hay mà tôi đọc được phù hợp với nội dung của diễn đàn về đây để các bạn tham khảo.

Chúc vui.

falleaf
09-12-2005, 04:01 AM
Bài viết của Ngô Hải Bắc

Các bác ạ. Em xin mạn phép nói một chút về GUI sau một số chương trình em làm được.
Một bạn điện tử đưa cho em chuyển giao diện từ Visual Basic 6.0 sang GUI( Graphic User Interface) trong Matlab. Em thấy được một số mặt như sau so với VB:
- Do Matlab là công cụ tích hợp mạnh các công cụ tính toán nên trong Gui cũng được kế thừa rất là hay như tính toán với ma trận, vecto,.. Do đó dùng GUI ta không phải viết hàm con yêu cầu tính toán nhiều như tích phân, vi phân, tính toán với ma trận( với VB thì chịu thua, viết mã dài chết).
Thứ nhất là thiết kế trực tiếp trên GUI( gõ lệnh gui trong Matlab) ta có thể nhúng các điều khiển ActiveX, biểu thị Simulink, các hệ trục,..Dùng mô phỏng như thật ấy, các bác có thể xem mấy cái Demo( nhớ cài JRE: Java Runtime
Evironment nhé) :
- Việc thiết kế các khung gắp thả như trong VB, lập trình cho các đối tượng cũng tương đối đơn giản với việc đặt tên cho các đối tượng trong thuộc tính Tag, tên hiển thị trên biểu mẫu với thuộc tính String, ngoài ra còn có nhiều thuộc tính cũng giống như VB như Position, Visiable,..Khi chúng ta tạo một đối tượng, thì sẽ có một hàm Callback được thêm tự động, ví dụ với đối tượng là Edit1 thì tương ứng sẽ có một hàm là Edit1_Callback được tạo ra đáp ứng sự kiện của đối tượng. Với Callback của đối tượng đó ta thao tác với đối tượng thông qua hObject và lấy thuộc tính dùng get, áp đặt thuộc tính thì dùng set:
Ví dụ: f=get(hObject,'String');% Lay sau nhap vao Edit1
f=str2double(f);% chuyen sau thanh kieu Double
set(hObject,'String','');
Còn nếu muốn lấy thuộc tính của đối tượng khác thì dùng handles.nhan
Ví dụ nếu muốn lấy thuộc tính của Edit2 trong hàm Edit1_callback thì dùng: f2=get(handles.Edit2,'String');
set(handles.Edit2,'String',' ');
Để lấy kết quả từ một hàm nào đó bạn có thể dùng lệnh Save để lưu vào Mfile, hoặc dùng biến toàn cục nhưng nên dùng lệnh Save, sau đó muốn láy kết quả thì dùng Load. Cách này rất tốt cho cả các form khác nhau và các ứng dụng như giữa Simulink và GUI.
Thứ nữa là nếu muốn lập trình cho menu thì tôi thấy là khi ta tạo lên một cái menu như là để mở một cái Form khác thì nếu dùng lệnh form với tên form là tên của form mà bạn cần mở ra. Nếu muốn cho form này luôn hiển thị trên các form khác thì dùng lệnh uiwait(form). Rất đơn giản phải không?Các bác có thể chạy được mấy cái đó trong môi trường Gui thôi( mở Gui và Open Browes đến file cần chạy). Hoặc là dùng lệnh trong command như trên.
Thứ hai, thiết kế bằng tay: bạn chỉ cần phải thiết kế giao diện ban đầu hơi vất, sau đó là có thể cho thuộc tính Callback gọi một số hàm dưới dạng Mfile riêng rẽ( tức là viết riêng ra). Do đó khi minh gọi dùng cho Callback của các menu thì sẽ ổn thôi. Các bác khi thiết kế thì dùng cái thuộc tính mở Gui ra mà xem, còn thiết kế thì hoàn toàn trong Mfile: ví dụ như: edi1=uicontrol('style','radiobutton',..); Viết mã này cũng hơi dài yêu cầu phải kiên trì. Rất dễ báo lỗi.
Trên đây là một số nhận xét của tôi không biết có ổn không nhưng chắc phần nào giải quyết cho các bác làm quen với Gui.

Mình đã sửa lại bài viết cho đúng với thế mạnh của nó. Nếu viết sai thì chết. Thực ra chẳng khó nếu bạn tìm được giải pháp cho đúng. Nó có thể toàn diện ngang với VB có khi còn mạnh hơn về khả năng tính toán. Còn lập trình cấp thấp thì thua là cái chắc.

falleaf
09-12-2005, 04:02 AM
Mình thấy các bạn mới học về Lý thuyết điều khiển tự động mà muốn hiểu rõ sự ảnh hưởng của các hệ số Kpid,Ti,Td với hệ thống chắc hẳn nếu dùng bằng Matlab khi thiết kế sẽ rất mất công thay thế các tham số. Mình chọn giải pháp là dùng GUI trong Matlab để thiết kế. Khi ta thay đổi các tham số của bộ điều khiển thì ấn vào Plot thì sẽ cho ngay đặc tính của hàm quá độ để biết xem hệ có đáp ứng chỉ tiêu chất lượng như có độ quá điều chỉnh phù hợp hay không? Mình nghĩ là cái này dùng rất là trực quan. các bạn down cái này giải nén các file vào thư mục /work trong thư mục cài đặt. Vào Matlab gõ lệnh PIDSystem thì bạn sẽ xem được chương trình. Hoặc mở GUI ra sau đó Open đến filel PIDSystem.fig.
Lưu ý là tôi làm trên Matlab 7.0 nhưng mà trên bản 6.5 của bạn tôi thì không thể chạy được. Các bác cứ chạy trên bản 7 nhé.

falleaf
09-12-2005, 04:07 AM
à tôi quên là nếu mà bạn lập trình GUI thì bạn có thể chạy nó bằng của sổ command của Matlab với tên giống như tên của m file đó.
Với lại nếu mà lập trình menu thì bạn có thể dùng cái đó để lập trình tức là gọi các form khác ra.
Ảnh minh họa của bài trên tôi không up lên được mong các bác thông cảm

falleaf
09-12-2005, 04:15 AM
Lần này tôi sẽ giới thiệu cho các bạn cách lập trình GUI cho ứng dụng Simulink: dùng GUI để thiết lập tham số cho các khối chức năng Function Block (FB), chạy mô phỏng hiển thị ra Scope.Lần tiếp theo tôi sẽ giới thiệu cách lấy dữ liệu đã mô phỏng sử dụng vào các mục đích khác như để ghi vào file hoặc là hiển thị ra một hệ trục tọa độ khác.
Còn đây là chi tiết về vấn đề hôm nay: Tôi dùng ví dụ điều chỉnh tốc độ của động cơ( có hàm truyền là bậc 1/bậc 2: là khâu dao động). Động cơ chính là đối tượng, còn ta sẽ bộ PID là bộ điều khiển để điều khiển tốc độ động cơ.
- Trước hết, muốn điều khiển được ứng dụng Simulink thì bạn phải tự thiết kế một modul .mdl trong Simulink bao gồm các khối chức năng, phải nối sẵn các khối đó với nhau( không cần điều chỉnh thông số cho các bộ đó). Lưu tên file vào trong thư mục Work với phần mở rộng là .mdl. Ở đây tôi chọn DCMotor. Sơ đồ các bạn có thể tham khảo ở dưới.
- Thứ hai, thiết lập trong GUI:
+ Tạo giao diện như hình dưới bằng cách kéo thả. Đặt tên cho các đối tượng: nhấp đúp chuột, hiện Properties chọn thuộc tính Tag để đặt tên( tương ứng Caption trong VB). Các bạn nên đặt tên sao cho dễ nhớ( như nút bấm thì đặt có Button ở cuối,...). Có các edittext,statictext, plushbutton : ExitButton,SimulateButton, editP, editI,editD,..

+ Viết chưong trình: Các bạn lưu ý ở đây tôi dùng bộ PID rất là đơn giản đạng : P+ I/s+ D*s thôi. Các bạn có thể dùng bộ PID khác phức tạp hơn như bộ nhân,.. Khi đó các tham số P,I,D có thể thay bằng Kp,Ki,.. Bạn hoàn toàn có thể chuyển hóa các cái này với nhau bằng cách lấy thuộc tính String của nó sau đó chuyển sang dạng Double để tính toán sau đó lại truyền tham số vào các khối PID,.. dùng str2double(string) chuyển str -> double, num2str(num) chuyển num->str. Thế là vấn đề về tham số là không có vấn đề gì.
++ Với các nút bấm, edittext,.. bạn có các hàm Callback như Callback,CreateFcn,.. dùng CreateFcn để thiết lập tham số khi khởi tạo.
---------------------------------
Mọi thứ râu ria đã xong bây giớ tôi sẽ giới thiệu cách thiết lập tham số cho bộ điều khiển. Để biết được tham số của các FB bạn vào Help theo chỉ dẫn của tôi ở dưới hình để biết chi tiết tham số. DCMotor.mdl có các khối tên là :
Sum,Scope,Transfer Fcn,PID Controller,Step.
Ở đây tôi dùng một hàm là model_open(handles) để thiết lập tham số và lấy thông tin từ các editP,editI,editD chuyển vào bộ PID, các khối khác cũng tương tự nếu cần;

% begin code
function model_open(handles)
open_system('DCMotor'); % mở bộ DCMotor phải đúng tên của file
%nếu không thì chẳng làm được gì đâu
set_param('DCMotor/PID Controller','P',get(handles.editP,'String'),'I',ge t(handles.editI,'String')...
,'D',get(handles.editD,'String'));
set_param('DCMotor/Transfer Fcn','Numerator','[15]','Denominator','[1 0.5 1]');
set_param('DCMotor/Sum','Inputs','|+-');
set_param('DCMotor/Step','Time','0');
set_param('DCMotor/Scope','Open','on','Decimation','1','NumInputPorts ','1');
% mớ scope để xem mô phỏng.


**************
như các bạn thấy rất là đơn giản đúng không. Các khối chức năng như là một phần nhỏ của DCMotor do đó bạn dùng DCMotor/Sum để lấy tên của bộ Sum, tương tụ với các bộ khác, tham số thì tham khảo trong Help . Với khối PID lấy từ các edit.
--->thế là xong phần mở bộ điều khiển.

Phần tiếp theo là mô phỏng: khi ấn nút Simulate thì quá trình mô phỏng sẽ xảy ra. Thực hiện trong SimulateButton_Callback. có mấy cách để thực hiện có thể dùng hàm sim('DCMotor'), hoặc là set_param('DCMotor', 'SimulationCommand', 'start') để thiết lập tham số bắt đầu 'start', 'stop'. Từ đó bạn có thể cho thêm nút dừng mô phỏng trong GUI.
:

function SimulateButton_Callback(hObject, eventdata, handles)
% hObject handle to SimulateButton (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
%Insert code
model_open(handles);
set_param('DCMotor', 'SimulationCommand', 'start')
% --- Executes during object creation, after setting all properties.

Còn với nút Exit đơn giản chỉ cần dùng hàm Close(' tên figure');
close(ControlDCMotor);

Xong! Các bạn thấy thế nào/.
Chúc thành công.

Ở dưới tôi upload cả mấy file minh họa và file chương trình . Các bác cho giải nén cho vào thư mục Work của Matlab. Gõ lệnh ControlDCMotor trong CommandWindow

falleaf
09-12-2005, 04:16 AM
Giao diện này cho phép bạn có thể ấn vào Simulate để bắt đầu mô phỏng, ấn vào Plot để hiển thị ra đồ thị. Ấn vào Help để xem hướng dẫn. Ấn vào Exit để thoát. Nó sẽ hỏi bạn xem có muốn thoát không. Bạn đọc kĩ code để xem nhé.
Để làm được điều đó thì mình đã cho một Block: tofile vào khâu ra. Khi đó dữ liệu sẽ được ghi vào file do mình thiết lập trong model_open, sau đó dùng file này để lấy dữ liệu hiển thị lên đồ thị( dùng Plot): dùng command: load tênfile tếnbiến. Thế là xong.
Hi vọng là thỏa mãn sự đòi hỏi của các bạn về điều khiển chạy mô phỏng Simulink với các tham số tự cho, và đưa ra đồ thị.( lưu ý: các bạn nên đánh đúng tên file để chạy ứng dụng này: giải nén hết vào thư mục Work, đánh lệnh ControlDCMotor để chạy)
Ngoài ra các bạn có thể cải tiến thêm ứng dụng này cho phù hợp với bản thân mình.
Chúc thành công

falleaf
09-12-2005, 04:18 AM
Trên đây là toàn bộ bài hướng dẫn của Ngô Hải Bắc về sử dụng GUI của Matlab để thực hiện bài toán mô phỏng điều khiển động cơ dùng bộ điều khiển PID.

Thay mặt www.picvietnam.com chân thành cảm ơn Ngô Hải Bắc

Các bài hướng dẫn này được trích từ luồng:

http://dientuvietnam.net/board/showthread.php?t=594&page=1&pp=10

Trân trọng

Đoàn Hiệp

Mecha
10-12-2005, 10:55 PM
Bài viết rất hay và chi tiết!

Cách đây khoảng 2 năm tôi cũng đã dùng GUI của Matlab 5.0 để viết giao diện cho chương trình đo và xử lý rung động cho máy phay CNC. Sau đó không dùng lần nào nữa vì viết code mất nhiều thời gian quá mà cũng chỉ có tác dụng tăng thêm phần hoành tráng khi đi báo cáo hội nghị thôi.

Mecha
10-12-2005, 11:21 PM
Về vấn đề điều khiển PID:

Bộ điều khiển PID xuất hiện vào khoảng năm 197x. Vì ra đời lâu như vậy nên PID thuộc nhóm các bộ điều khiển kinh điển. Mặc dù hiện nay ra đời nhiều phương pháp điều khiển mới như điều khiển mờ, mở-nơron và nhiều thuật toán điều khiển phi tuyến,... nhưng PID vẫn hiện đang được dùng rất nhiều trong các bài toán điều khiển (nhiệt độ, tốc độ, điều khiển bám,...) vì tính đơn giản trong thiết kế và chất lượng điều khiển khá tốt.

Trên cơ sở đối tượng cần điều khiển, ta xây dựng được mô hình toán học cho ĐT (nếu đối tượng thuộc một số dang đặc biệt như khâu quán tính bậc nhất, bậc hai, khâu dao động, đối tượng có trễ,...). Nếu đối tượng phức tạp, ta phải dùng phương pháp thực nghiệm + nhận dạng để tìm ra mô hình của đối tượng.

Sau khi đã có mô hình đối tượng, bước tiếp theo là chọn thông số cho PID theo một phương pháp nào đó (có khoảng gần 10 phương pháp).

Tiếp theo dùng Simulink để test và chỉnh định thông số PID để đạt chất lượng tốt hơn. Tuy nhiên, đây chỉ là bước thiết kế trên lý thuyết. Mang bộ PID này lắp vào đối tượng thât đảm bảo 100% là chất lượng điều khiển kém xa lý thuyết. Vì đối tượng mà ta mô hình hóa không thể chính xác 100% được nên bộ PID thiết kế khi dùng cho đối tượng thực sẽ cần phải hiệu chỉnh rất nhiều. Hiệu chỉnh nhanh hay chậm phụ thuộc vào kinh nghiệm của người thiết kế.

falleaf
11-12-2005, 02:32 AM
Anh có thể viết một bài tương đối chi tiết về PID không? Ở dạng tutorial chẳng hạn?

Chúng ta sẽ cùng thảo luận về vấn đề này, bởi vì PID là một bộ điều khiển kinh điển, và hiện nay trên thế giới khoảng 60% dùng điều khiẻn PID và 20% dùng đièu khiển mờ, 20% còn lại dành cho tất tần tật các bộ điều khiển khác..

Nếu làm chủ (hiểu được tường tận, và có các công cụ làm việc) được PID, thì có thể nói là chúng ta đã sang trang mới về điều khiển được rồi đấy. Vì vậy, rất cần sự đóng góp của anh.

Em có kinh nghiệm làm việc với PID trên động cơ DC, con lắc ngược và haptic device.

Nếu anh có thời gian, đầu tiên chúng ta sẽ dẫn dắt sinh viên đi từ lý thuyết và ý nghĩa vật lý của bộ điều khiển PID, sau đó giới thiệu một số đề tài PID quen thuộc, thực hành với Matlab và GUI matlab như trên.

Sau đó, chúng ta sẽ mở ra một đề tài con lắc ngược, đặc trưng PID phương trình trạng thái 2 chiều. Nếu làm được với biến trạng thái 2 chiều, thì việc áp dụng vào N chiều cũng sẽ trở nên dễ hiểu. Bởi vì PID một chiều thì bài toán động cơ đã quá quen thuộc, và em cũng đã cung cấp source code dùng trên PIC rồi.

Em rất ngại mở ra luồng này, nếu không có những người kinh nghiệm giúp một tay. Trong tay em cũng có một số đề tài đã làm với PID, nhưng làm thực nghiệm nhiều hơn, và nói chung nó khá đơn giản, chủ yếu là nhiệt độ, biến một chiều.

Nếu đi sâu hơn về lý thuyết, có thể hướng dẫn Identification cho sinh viên... Từ những công cụ này, có thể phát triển thành một cơ sở về thực hành điều khiển.

Không biết ý kiến của anh thế nào, và ý kiến của những người kinh nghiệm trong vấn đề này thế nào.

Cùng bắt tay vào làm từ bây giờ chứ?

Chúc vui.

falleaf
11-12-2005, 02:34 AM
Lưu ý ở luồng

http://picvietnam.com/showthread.php?t=243

Bài toán con lắc ngược đã được bạn Minh Cường (hiện học Thạc Sĩ tại Kaist - Hàn Quốc) thực hiện. Mọi người có thể tham khảo trước nội dung bài toán trong phần này.

Chúc vui.

minhpic
20-02-2006, 04:03 PM
Chao cac ban!
Minh la ngươi dang quan tam, cung nhu dang lam ve pid. Cong viec cua minh dang trien khai la dieu khien toc do va vi tri cua dong co DC, nhung minh co rat it kinh nghiem ve van de nay. Xem tren dien dan minh thay rat it ngươi quan tam ve van de nay, rat mong cac ban da va dang nghien cưu ve van de nay co the len dien dan de cung trao doi nhieu hon, cac ban da co nhung thanh cong nhat dinh trong cong viec nay co the post len de anh em co the hoc tap. Xin chan thanh cam on!

minhpic
20-02-2006, 04:18 PM
Cac ban a, cac ban viet cac bai lap trinh gui trong matlab ban than minh thay rat co ich, bai toan dieu khien trong thuc te la thanh cong neu nam dươc toan bo dac tinh cua doi tương, tu do tuy thươc vao nhiem vu cua bai toan ta moi co the chi ra dươc cac tham so PID, dieu nay minh cho la cot loi cua van de, va la diem phan biet giua cac doi tương dieu khien cung nhu bai toan dieu khien. Cac ban da hoc ve dieu khien chac han da biet cac phương phap khao sat doi tương DK, tuy nhien voi mot doi tương can DK neu ta chua biet ve doi tương thi pp khao sat no nhu the nao? mot cach ly thuyet thi toi cung biet motvai phương phap, nhung kha nang trong thuc te thi rat khong kha quan, chang han doi voi mot dong co DC muon tim dươc ham truyen ma ta chi moi biet dong DC 24V ngoai ra khong biet them thm so nao thi cach khao sat nhu the nao? Rat mong cac ban da co kinh nghiem trong van de nay co the giup do minh, minh dang ra can.

falleaf
20-02-2006, 08:50 PM
Do mod điều khiển có việc riêng gia đình, F trả lời thay câu hỏi này:

1) Như F sử dụng, có 2 phương pháp, một là mở động cơ chạy, lấy dữ liệu truyền vào máy tính, vẽ đặc tính max của động cơ, tìm hàm truyền xấp xỉ của động cơ. Cách thứ hai, đó là đo các thông số của động cơ bằng thực nghiệm. Phương pháp này F hay sử dụng hơn. Cách 3 là cách dường như nhảm = tra datasheet lấy thông số, nhưng ở VN kíêm ra cái động cơ mới thì cũng chỉ có dân nhà giàu chơi :D

2) http://www.ecircuitcenter.com/Circuits/dc_motor_model/DCmotor_model.htm
đây là mô hình của động cơ.

Mục tiêu là xác định các thông số: K, J, R, L của hệ động cơ, J = moment quán tính của tải + rotor.

Xác định J oki, không vấn đề.

K Xác định bằng cách áp điện áp cố định, treo vật nặng dần đến khi động cơ không thể quay được. >> I theo V và tải >> từ nhiều điểm I, K là hằng số, có I, có tải, tính ra K. Dùng linear fit data, hoặc nói đơn giản là giải phương trình bậc 1 tìm ra k, rồi thử lại các giá trị k khác.

R = lấy ôm kế để đo

L = để nguyên động cơ đo L (có máy đo). Thầy Nguyễn Phùng Quang bảo, khi đo L, lúc đầu F làm sai là rút ruột động cơ ra đo cuộn cảm không thôi, nhưng thầy bảo để nguyên, vì còn đặc tính từ ảnh hưởng đến L.

F thường làm cách này. Xác định b à??? Hic... F chưa đủ công lực. Cho b = 0.1 hoặc 0.01 đi, chẳng chết ai.

Chúc vui.

minhpic
22-02-2006, 01:08 AM
Cam on cau F a! Ban co the noi dung dung cu gi de do dươc L khong? neu F da lam ve van de nay cau co the cho minh tham khao cong viec cau da lam roi khong?

falleaf
22-02-2006, 01:42 AM
Nó có máy do L, bạn có thể mua máy đó để đo, cũng như các máy thông thường để đo R, C, V, I, thì nó có máy đo L. Cũng bình thường thôi, nhưng máy đo L hơi mắc một tí, và nó chỉ có chức năng đo L thôi.

Khi đo xong, mình chỉ giữ lại các kết quả, việc tính toán K, mình dùng một chương trình riêng, cho nên có thể lấy kết quả tính toán ngay lập tức. Bạn tìm hiểu về best fit data sẽ rõ. Đơn giản chỉ là một cái chương trình tìm tương quan tuyến tính. Bạn có thể dùng Excel để làm chuyện này, lâu quá rồi mình không làm thống kê nên không nhớ dùng Excel làm như thế nào.

Vì vậy, các thao tác thì mình chẳng có lưu lại tài liệu nào. Các bước làm thì mình đã mô tả hết rồi, bạn cứ theo đó mà làm là được.

Chúc vui

minhpic
22-02-2006, 11:28 AM
Cam on F!
minh da tim duoc may do L, co dieu viec tim cac tai chuan la rat kho do do minh khong chon giai phap thay tai ma bang cach thay doi dien ap dau vao, giu nguyen tai de co duoc Kt. Con do minh dieu khien bang do rong xung nen thay doi dien ap dau vao thong qua do rong xung la dieu thuc hien duoc chinh xac hon. Cam on ban.

falleaf
22-02-2006, 12:25 PM
Khi thay đổi điện áp, phải thay đổi tải thì mới có I_max trong trường hợp đó. Tải thay đổi bằng cách đặt động cơ trên cạnh bàn, làm một cái đĩa có moment quán tính đã biết, quấn dây treo vật thả xuống, sau đó mới cân và tính.

F không hề nói cách làm này không công phu, kể cả cái việc lấy tuyến tính, thì như F nói, F có cái tool để làm cái này rồi, chứ bạn làm excel thì cũng phài mày mò học cách tìm hồi quy tuyến tính bằng lệnh excel. Chuyện này cũng thường thôi mà. Còn nếu không bạn lại giải tay (có phương pháp giải đơn giản). Bạn thấy nói ra như vậy nó không khó, nhưng để một người đang học và làm từ A đến Z mọi thứ cứ nhỏ nhỏ như vậy mà không có tool thì :).

Cũng còn khá nhiều cái mẹo nhỏ để làm được dễ. Vd tôi quay lại chuyện đo tải của bạn. Nếu tải treo là nặng, thì bạn chỉ cần lấy một cục nhựa nhỏ, đường kính xác định, tiện chính xác, thì khối lượng thay đổi lớn, tải thay đổi nhỏ (do đường kính nhỏ), moment quán tính của đĩa gắn thêm nhỏ (làm bằng nhựa, khối lượng nhẹ) so với tải gắn thêm, khi đo quen mắt, nhìn gần đúng, biết là treo bao nhiêu thì đúng là tải max...

Khồng dùng PWM mà phải dùng điện áp tuyến tính... tất cả những cái này đều phải sử dụng khi làm thí nghiệm. Nhưng mà làm rất dài dòng, và nhiều vấn đề để làm từng cái. Vậy nên F nghĩ rằng, bạn nên tự làm rồi tự khám phá ra những cái hay ho khi làm thực tế. Nó sẽ rất hữu ích cho bạn về sự sáng tạo và kinh nghiệm.

F luôn luôn làm lý thuyết chán chê, rồi sau đó làm lý thuyết thực hành, rồi mới thực hành. Vì vậy, thời gian F ngồi nói nhảm nhiều lắm, làm thì chẳng làm mấy, nhưng đến khi làm thì chỉ làm thí nghiệm rất nhanh và đơn giản.

Một ví dụ là khi F làm cái phần tuyến tính, thì F cũng lục lại à làm thế nào, rồi tìm tool ra sao, ... chứ không có bắt tay vào làm ngay. F luôn chuẩn bị những cái tool, sau đó mới chiến đấu. :D

Chúc vui.

nhh
12-03-2006, 11:57 AM
Giao diện GUI điều khiển PID,cho phép xem đồng thời đáp ứng Impulse và Step !Hàm truyền của Plant :
(b0.s^2 + b1.s + b2)/(a0.s^2 + a1.s + a2)

http://www.freewebtown.com/bantoi/Matlab/PID_Control.gif

falleaf
12-03-2006, 02:12 PM
Hic, F đã nói nhiều lần rồi, có cái máy đo L, thế bình thường cái máy đo điện trở là Ohm kế, thế cái máy đo tụ là cái gì kế? Vậy đến cái đo L thì....

F cũng không biết giải thích thế nào, nhưng nó y hệt như cái máy đo đa năng, chỉ nhỏ như vậy thôi. F không làm về đo lường, nên không thể giải thích nguyên lý của nó cho bạn được...

Chúc vui.

HaiAu2005
26-05-2006, 09:00 AM
Xin gửi bù lại message này! Các bạn đọc một số trao đổi của tôi với NgoHaiBac về GUI và MATLAB ở địa chỉ sau:

http://dientuvietnam.net/forums/showthread.php?t=594&page=5

-------
H.A.

HaiAu2005
04-06-2006, 06:54 AM
Sau khi thí nghiệm xong có dữ liệu, để xác định các tham số thì có thể dùng phương pháp bình phương nhỏ nhất (LSA = least squares algorithm) - một trong những phương pháp curve fitting phổ biến nhất. LSA có được trình bày trong cuốn Toán cao cấp của bác Nguyễn Đình Trí (nếu tôi nhớ không nhầm tên). Bạn có thể dùng Excel để tính. Còn nếu bạn dùng MATLAB và có Optimization Toolbox bạn có thể khai thác hàm 'lsqcurvefit' (least squares curve fitting), dùng lệnh > help lsqcurvefit để xem cách sử dụng hàm này. Còn nếu dùng MATLAB mà không có Optimization Toolbox bạn có thể làm theo cách "thủ công" là thiết lập hệ phương trình tuyến tính rồi dùng MATLAB giải hệ phương trình tuyến tính. Tuy nhiên cách "thủ công" này thì phải dùng nhiều dòng lệnh. Một cách làm ngắn gọn hơn và có thể dùng để lập chương trình cho nhiều trường hợp được trình bày như sau:

Giả sử mối quan hệ giữ y (output) và u (input) được biểu diển bằng một hàm xung số (discrete-time) như sau:

y = a_1y(k-1) + b_0u(k) + b_1u(k-1)

(có thể coi mối quan hệ tuyến tính y = ax + b là trường hợp đặc biệt của hàm xung số khi
a_1 = 0,
u(k-1) = 1 và
x = u).

Phương trình này có thể viết theo dạng véc tơ:

y = \phi^T\theta

(Chú ý nếu trong các phương trình viết theo mã MATLAB, dấu ' có nghĩa là 'transpose').

trong đó:
y là output,
\phi = \begin{bmatrix} y(k-1) & u(k) & u(k-1) \end{bmatrix}^T - véc tơ số liệu đo được và
\theta = \begin{bmatrix} a_1 & b_0 & b_1 \end{bmatrix}^T - véc tơ tham số.

Với kết quả thí nghiệm chúng ta đo được mỗi lần, chúng ta có phương trình biểu diễn sai số:

y(k) = \phi^T\theta + e(k), trong đó e(k) là sai số

Nếu đo N lần chúng ta có thể biểu diễn kết quả đo thành dạng sau:

Y = \Phi^T\theta + \mathbf{E}

trong đó:
\Phi = \begin{bmatrix} \phi^T(1) & \phi^T(2) & ... & \phi^T(N) \end{bmatrix}^T,
\theta = véc tơ tham số ở trên, và
Y = \begin{bmatrix} y(1)&y(2)&...&y(N) \end{bmatrix}^T và
\mathbf{E} = \begin{bmatrix} e(1)&e(2)&...&e(N) \end{bmatrix}^T - véc tơ sai số.

Từ phương trình này áp dụng thuật toán bình phương nhỏ nhất chúng ta có kết quả tính véc tơ tham số như sau :

\theta = (\Phi^T\Phi)^{-1}(\Phi^TY) (để tính inverse matrix trong MATLAB chúng ta dùng hàm inv)

(Tôi xin lược phần diễn giải tìm ra công thức này. Hint: bạn nào quan tâm có thể dùng công thức Y = PHI' * theta, vì có sai số nên có thể viết thành dạng Y = PHI' * theta + E, E là véc tơ sai số có N phần tử, rồi tính tổng bình phương sai số J = sum of error squares tức là J = E' * E = Y - PHI' * theta, áp dụng tính cực tiểu cho hàm bình phương sai số sẽ rút được ra công thức tính theta.)

Nếu dùng MATLAB, chúng ta chỉ việc nhập số liệu đo được rồi sắp xếp số liệu theo các véc tơ và ma trận ở trên (tức là Y và PHI, phụ thuộc vào hàm xung số chúng ta chọn), rồi áp dụng công thức cuối cùng là có kết quả các tham số (véc tơ THETA).

Để tìm tham số trong phương trình vi phân, chúng ta phải tìm được phương trình hệ xung số tương đương với phương trình vi phân (dùng phép rời rạc hóa - discretization) và áp dụng phương pháp trên tính.

Từ thuật toán bình phương nhỏ nhất trình bày ở trên, các bạn có thể tự lập cho mình một chương trình tính tham số tiện lợi hơn cho nhiều mô hình xung số khác nhau bằng cách nhập số các tham số trong véc tơ tham số theta.

H.A.

falleaf
04-06-2006, 05:13 PM
Em sửa lại một số công thức anh viết, không biết có chính xác không, anh sử dụng thẻ

và nhớ thêm phẩn vào phía sau

Bởi vì lần trước anh thêm cái thẻ [\latex], nó không phải là thẻ của diễn đàn, khác nhau cái dấu / và \ thôi anh.

http://picvietnam.com/forum/showthread.php?t=407
Anh xem thêm luồng này để sử dụng bộ công cụ toán của diễn đàn. Nó cũng giống y chang bên dieukhien.net, nhưng chỉ khác là anh dùng thẻ tex, còn ở đây dùng thẻ latex, và thay vì viết dùng ngoặc < thì chúng ta dùng ngoặc [ ở trong diễn đàn này.

Chúc vui.

candykitty
12-11-2006, 10:45 PM
Máy đo tụ C hay đo cuộn L thường đều dùng nguyên lý cầu cân bằng để đo.

vanhuynh_247
10-04-2007, 02:08 AM
chao moi nguoi minh cung dang lam mot bai tap lon ve thiet ke mot BDK PID de dieu khien nhiet do trong mot phong . minh co rat it kinh nghiem trong viec khao sat ve mot doi tuong nhiet .minh rat mong cac ban chi cho mot so kinh nghiem.

bluepine
11-04-2007, 03:22 PM
Do mod điều khiển có việc riêng gia đình, F trả lời thay câu hỏi này:

1) Như F sử dụng, có 2 phương pháp, một là mở động cơ chạy, lấy dữ liệu truyền vào máy tính, vẽ đặc tính max của động cơ, tìm hàm truyền xấp xỉ của động cơ. Cách thứ hai, đó là đo các thông số của động cơ bằng thực nghiệm. Phương pháp này F hay sử dụng hơn. Cách 3 là cách dường như nhảm = tra datasheet lấy thông số, nhưng ở VN kíêm ra cái động cơ mới thì cũng chỉ có dân nhà giàu chơi :D

2) http://www.ecircuitcenter.com/Circuits/dc_motor_model/DCmotor_model.htm
đây là mô hình của động cơ.

Mục tiêu là xác định các thông số: K, J, R, L của hệ động cơ, J = moment quán tính của tải + rotor.

Xác định J oki, không vấn đề.

K Xác định bằng cách áp điện áp cố định, treo vật nặng dần đến khi động cơ không thể quay được. >> I theo V và tải >> từ nhiều điểm I, K là hằng số, có I, có tải, tính ra K. Dùng linear fit data, hoặc nói đơn giản là giải phương trình bậc 1 tìm ra k, rồi thử lại các giá trị k khác.

R = lấy ôm kế để đo

L = để nguyên động cơ đo L (có máy đo). Thầy Nguyễn Phùng Quang bảo, khi đo L, lúc đầu F làm sai là rút ruột động cơ ra đo cuộn cảm không thôi, nhưng thầy bảo để nguyên, vì còn đặc tính từ ảnh hưởng đến L.

F thường làm cách này. Xác định b à??? Hic... F chưa đủ công lực. Cho b = 0.1 hoặc 0.01 đi, chẳng chết ai.

Chúc vui.
Chào mọi người,
anh Falleaf cho em hỏi thêm phương pháp "mở động cơ chạy, lấy dữ liệu truyền vào máy tính, vẽ đặc tính max của động cơ, tìm hàm truyền xấp xỉ của động cơ.", là như thế nào anh giải thích rõ hơn được không? theo em nghĩ thì dữ liệu truyền về máy tính là tốc độ xung của động cơ phải không. vậy ứng với mỗi cục tải ta phải lấy dữ liệu lại để tìm hàm truyền phải không anh.
Vấn đề em đang gặp hơi củ chuối: em dùng cầu tích hợp điều khiển động cơ một chiều có gắn tải, khi lắp mạch trên bread board thì chạy ok, sai số rất thấp, rất ổn định. nhưng khi làm mạch in xong, hàn linh kiện vào thì nó chạy không tốt nữa, sai số tăng lên (đến 15%), dù có thay đổi thông số PID như thế nào cũng không thể giảm sai xuống được. Ai có kinh nghiệm xin cho ý kiến.
Thân

falleaf
11-04-2007, 06:01 PM
1) Câu 1 đúng. Khi có đặc tính của động cơ, với một đáp ứng ngõ vào bất kỳ, hoàn toàn có thể xác định lại được (identify) hàm truyền động cơ một cách ước lượng. Với những người có kinh nghiệm (điều mà F rất muốn các bạn thực hành trong phần "Tìm người làm bài toán điều khiển PID"), thì có thể tìm thấy khả năng điều khiển và dò ra hệ số bộ PID nhanh.

2) Vấn đề giữa mạch in và mạch test của bạn chạy sai, có trời mà biết được. Nghiêm chỉnh đấy. Bạn chỉ có cách tháo hết các linh kiện ra, kiểm tra chân, gắn linh kiện trên mạch test để test kỹ lại.

Nếu như gặp trục trặc nào đó, F nghĩ bạn có thể tìm ra.

Chúc vui

vuthao
12-10-2007, 01:14 AM
em đang làm về bộ điều khiển PID số điều khiển van có phản hồi vị trí van cho đầu ra điều khiển ON/OFF
CÁC BÁC GIÚP EM MỚI NGHEN

nguyenbahai
08-06-2009, 03:14 AM
Em nói rõ hơn điều khiển van gì được không? em định dùng công cụ gì để điều khiển?
Chúc em vui vẻ!

blue_rose
04-10-2009, 08:27 PM
Mình vừa được giao một đề tài điều khiển động cơ bằng bộ điều khiển PID để thay đổi góc quay của cánh quạt nhưng mình chưa hiểu rõ về bộ PID cũng như mô phỏng bằng Matlab nên rất mong sự giúp đỡ của mọi người. Thanhks mọi người rất nhiều. Mọi người có thể gửi tài liệu vào mail cho mình : dieulinh.ho@gmail.com.

yukinohana
19-05-2010, 12:52 PM
Lưu ý ở luồng

http://picvietnam.com/showthread.php?t=243

Bài toán con lắc ngược đã được bạn Minh Cường (hiện học Thạc Sĩ tại Kaist - Hàn Quốc) thực hiện. Mọi người có thể tham khảo trước nội dung bài toán trong phần này.

Chúc vui.

Thấy cái này rất hay nè, mà sao ko vào xem được. Anh xem lại link giúp em được ko.

beunin899
10-11-2010, 04:52 PM
minh cung dang tim hieu ve simulink cua matlap .cac bac cho em hoi ty
trong phan dieu khien mo thick nghi bang simulink ngoai cac khoi dieu khien mo ra thi con co ung dung hay đuoc thiet lap khac nua ko?
cam on cac bac nhieu nhe!!!

JohnnyNguyen
05-06-2011, 10:08 PM
mình sử dụng bộ điều khiển PI để điều khiển 1 đối tượng có hàm truyền dạng khâu tích phân lý tưởng,với hệ số phản hồi k.khi mô phỏng đặc tính đầu ra trên simulink,thấy tín hiệu đầu ra có điểm xuất phát từ tín hiệu đặt là 400V,rồi giảm xuống rồi mới tăng lên và dao động quanh giá trị đặt là 400V.
mình có thắc mắc là sao điểm xuất phát nó ko pải là từ điểm 0 nhỉ.ai biết giải đáp hộ cái.