Để giới thiệu mơ hình phần mềm dùng trong luận văn tơi tóm tắt một số khái niệm các gói phần mềm đã sử dụng trong phần mềm MATLAB:
- MATLAB Simulink là gói phần mềm dùng để mơ hình hóa, mơ phỏng, và phân tích những hệ thống động. Nó hỗ trợ hệ thống tuyến tính, phi tuyến, hệ liên tục, rời rạc hoặc cả hai. Giao diện MATLAB Simulink cung cấp các mơ hình dạng hộp block và dùng chuột để nối các block. Ta sẽ thiết kế thuật tốn trong mơi trường này.
- Real-Time Workshop (RTW): là gói phần mềm tạo code C (C code generation) từ mơ hình Simulink. RTW tạo code C trực tiếp từ mơ hình Simulink và code này có thể dùng trực tiếp cho vi điều khiển hay DSP… Đây là một gói phần mềm cực kì hữu dụng của MATLAB. Trong trường hợp thuật tốn phức tạp ta có thể xây dựng trên MATLAB Simulink để mơ phỏng trước sau đó dùng RTW để tạo ra code C và kết hợp phần mềm dưới vi điều khiển để chạy. Trong luận văn này RTW có tác dụng tạo code C từ MATLAB Simulink để có thể chạy trực tiếp trên máy tính PC.
- Real-Time Window Target (RTWT): là gói phần mềm cho phép chạy code C đã tạo từ RTW trên PC trong thời gian thực. Lúc này PC đóng vai trị là host cho MATLAB, Simulink, và RTW.
Để sử dụng RTWT ta phải cài đặt dùng lệnh (vì thơng thường nó khơng được cài đặt ban đầu): rtwintgt –install
Để kiểm tra lại đã cài đặt RTWT trong MATLAB chưa ta dùng lệnh: rtwho. Ngồi ra ta phải cài đặt trình dịch C cho MATLAB sử dụng để build code C tạo ra từ RTW. Ta dùng lệnh: mex –setup
Ngoài phần tạo code như trên MATLAB cịn hỗ trợ các hàm và code để có thể truy xuất tới phần cứng kết nối với máy tính (trong trường hợp này là board giao tiếp qua cổng song song LPT). Ta sẽ vào Real-Time Workshop trong Configuration Parameters của Simulink để hiện thực phần giao tiếp giữa PC và phần cứng.
Đầu tiên vào phần header file để khai báo các địa chỉ, các hàm sẽ dùng giao tiếp board như sau:
// printer port registers definition #define LPT_BASE 888U
#define LPT_CTRL 890U #define LPT_ADDR 891U #define LPT_DATA 892U #define LPT_ECPR 1914U #define EPP_CTRL 0 #define EPP_ADDR 1 #define EPP_DATA 2 #define EPP_ECPR 3
// IO module: Digital Input (1) and Digital Output (1) #define IO_INOUT 0x01 // 0x00 // J6-J8 // ENCODER module (4) #define ENC_CH1 0x10 // J5 #define ENC_CH2 0x13 // J5 #define ENC_CH3 0x16 // J5 #define ENC_CH4 0x19 // J5 #define ENC_RESET 0x1C // SPEED module #define SPD_CH1 0x20 // J5 #define SPD_CH2 0x22 // J5 #define SPD_CH3 0x24 // J5 #define SPD_CH4 0x26 // J5 // PWM module #define PWM_DATAL 0x50 // J7 #define PWM_DATAH 0x51 // J7 #define PWM_FDIV 0x52 // J7 #define PWM_CTRL 0x53 // J7 #define PWM_ENA 0x54 // J7 // functions
real_T inport (real_T address);
void outport (real_T address, real_T data); void encoder_reset (real_T channel);
real_T encoder_read (real_T channel); real_T speed_read (real_T channel);
void pwm_enable (void); void pwm_disable (void);
void pwm_write (real_T channel, real_T Ton);
void board_init(void);
Hình 5. 15: Viết code cho các hàm đã khai báo
/* list of Real-Time Windows Target boards */ const int RTWinBoardCount = 4;
RTWINBOARD RTWinBoards[4] = {
{ "Standard_Devices/Generic_8-bit_Port", LPT_CTRL, 0, NULL }, { "Standard_Devices/Generic_8-bit_Port", LPT_ADDR, 0, NULL }, { "Standard_Devices/Generic_8-bit_Port", LPT_DATA, 0, NULL }, { "Standard_Devices/Generic_8-bit_Port", LPT_ECPR, 0, NULL }, };
int32_T Channels = 0;
int32_T BitMode = 1; /*
* Ham doc muc logic tu port DIN o J6 * Gia tri tra ve 8bit tuong ung DI7-DI0 * address: dia chi giai ma
*/
real_T inport (real_T address) {
real_T addrval, dataval; addrval = address;
RTBIO_DriverIO(EPP_ADDR, DIGITALOUTPUT, IOWRITE, 1, &Channels, &addrval, &BitMode); RTBIO_DriverIO(EPP_DATA, DIGITALINPUT, IOREAD, 1, &Channels, &dataval, &BitMode);
return dataval;
}
Ngồi ra Real-Time Window Target cịn cho phép người dùng giao tiếp với nó ngay trong khi chạy (on-the-fly) ví dụ như: lưu dữ liệu, thay đổi thơng số… bằng
cách dùng External Mode Operation. Vào giao diện cài đặt External Mode Control Panel:
Hình 5. 16: Cài đặt External Mode Operation
Chọn Data Archiving để lưu dữ liệu trong file.
Hình 5. 17: Data Archiving
Sau khi lập trình trong RTW các hàm giao tiếp phần cứng, và thiết lập các thông số đầy đủ, ta dùng các block Simulink để khởi tạo và đưa các hàm này vào trong vòng lặp chạy cùng với giải thuật:
Hình 5. 18: Viết các hàm sử dụng trong chương trình
Cuối cùng là tạo code C từ mơ hình Simulink dùng RTW: dùng phím tắt
Ctrl+B . Nếu mơ hình khơng có lỗi ta sẽ được MATLAB thơng báo là tạo code
thành cơng và tồn bộ code C sẽ lưu trong thư mục có đi là –rtwin. Khi này thuật toán từ Simulink đã sẵn sàng để chạy real-time cùng với phần cứng để điều khiển hệ quạt và tấm phẳng.
….
###Compiling
D:\INSTAL~1\ENGINE~1\MATLAB71\rtw\c\src\ext_mode\common\ext_svr.c
wcc386 -wcd=1180 -zq -ei -zp8 -6r -fpi87 -zl -wx -oneatxh -DEXT_MODE -DMODEL=FanPlate_PID1 -DRT -DNUMST=2 -DTID01EQ=1 -DNCSTATES=1- DMT=0 D:\INSTAL~1\ENGINE~1\MATLAB71\rtw\c\src\ext_mode\common\ext_svr.c Creating linker response file FanPlate_PID1.lnk
wlink NAME ..\FanPlate_PID1.rwd @FanPlate_PID1.lnk ### Created Real-Time Windows Target module FanPlate_PID1.rwd.
### Successful completion of Real-Time Workshop build procedure for model: FanPlate_PID1
CHƯƠNG 6. Kết quả và hướng phát triển