LỜI NÓI ĐẦU
CHƯƠNG 1: LÝ THUYẾT MẠNG NƠRON
1.1 Nơron tự nhiên
1.2 Nơron nhân tạo
1.3 Mạng truyền thẳng và huấn luyện mạng theo thuật toán Brandt-Lin
1.3.1 Mạng truyền thẳng
1.3.2 Thuật toán Brandt-Lin
CHƯƠNG 2: GIỚI THIỆU ATMEGA 128
2.1 Đặc điểm của Atmega 128
2.2 Mô tả các chân
2.3 Kiến trúc tổng quan của Atmega128
2.3.1 Bộ nhớ của Atmega128
2.3.2 Tệp thanh ghi :
2.3.3 Port (cổng) vào ra
2.3.4 Giao tiếp với SRAM ngoài
2.3.5 Cấu trúc ngắt của Atmega 128
2.3.6 Bộ biến đổi A/D bên trong
2.3.7 Bộ truyền/nhận UART
2. 3.8 Bộ định thời
CHƯƠNG 3: MÔ PHỎNG HỆ THỐNG ĐIỀU KHIỂN ĐƯỢC THIẾT KẾ DỰA TRÊN MẠNG NƠRON
3.1 Thiết kế bộ điều khiển PID-Neural có chỉnh định thích nghi trọng số của mạng
3.1.1 Thuật toán chỉnh định trọng số
3.1.2 Kết quả mô phỏng
3.2 Thiết kế bộ điều khiển sử dụng sai lệch làm đầu vào
3.2.1 Thuật toán chỉnh định trọng số
3.2.2 Kết quả mô phỏng
CHƯƠNG 4 : ỨNG DỤNG ĐIỀU KHIỂN ĐỐI TƯỢNG THỰC
4.1 Động cơ điện một chiều
4.1.1. Cấu tạo của động cơ một chiều
4.1.2. Encoder gắn trên động cơ một chiều
4.1.3. Động cơ sử dụng để thử nghiệm
4.2. Thiết kế bộ điều khiển trên nền vi điều khiển Atmega 128
4.2.1. Khối điều khiển trung tâm
4.2.2. Giao tiếp với LCD
4.2.3. Phương thức truyền nhận dữ liệu qua RS232 trên PC
4.2.3.1 Cấu trúc vật lý của cổng RS232
4.2.3.2 Quá trình truyền và nhận dữ liệu của cổng COM của PC
4.2.3.3 Các loại truyền thông nối tiếp
4.2.4. Khối driver điều khiển động cơ
4.2.4.1. Giới thiệu về IC cầu H MC33886
4.2.4.2. Sơ đồ nguyên lý của driver điều khiển động cơ
4.2.5. Giao tiếp với bàn phím
4.3 Thiết kế giao diện bảng điều khiển
4.3 Thiết kế hệ thống điều khiển trên nền bộ điều khiển PID-Neural
4.3.1 Mô hình điều khiển
4.3.2 Chỉnh định các trọng số và tính toán đầu ra
4.5 Đánh giá kết quả thực nghiệm
Chương 5: KẾT LUẬN
Tài liệu tham khảo
94 trang |
Chia sẻ: banmai | Lượt xem: 2078 | Lượt tải: 0
Bạn đang xem trước 20 trang tài liệu Mô phỏng hệ thống điều khiển được thiết kế dựa trên mạng Nơron, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
trực tiếp và truy nhập trong chu trình đơn đến tất cả các thanh ghi. Nhưng một ngoại lệ là các lệnh SBCI, SUIB, CPI, ANDI và ORI cũng như WI, các lệnh nay chỉ tác động đến các thanh ghi R16 đến R31.
Các thanh ghi từ R26 đến R31 có các chức năng bổ xung thanh ghi R0 được sử dụng trong các lệnh lạp bộ nhớ chương trình LPM, trong khi các thanh ghi R26 đến R31 được sử dụng làm các thanh ghi con trỏ như được minh họa trên hình 2.6
Hình 2.6: Tệp thah ghi của Atmega 128
2.3.3 Port (cổng) vào ra
Atmega 128 có tất cả là 7 Port từ PortA đến PortG. Tất cả các Port của AVR đều có trở treo bên trong và được lựa chọn cho mỗi bit và có thể được đọc-chỉnh sửa-ghi khi sử dụng như một Port xuất nhập thông thường. Điều này có nghĩa là đường dữ liệu của các chân sẽ được thay đổi hướng không định trước nếu như không đặt lệnh cho nó. Mỗi bộ đệm đầu ra đều có những tính chất đối xứng cho việc nhập và xuất dữ liệu. Tất cả các chân đều có điện trở kéo lên độc lập không thay đổi. Tất cả đều được bảo vệ bằng diode đối với cả nguồn và đất
Hình 2.7: Sơ đồ bên trong mỗi chân
Port A : dùng để mở rộng bộ nhớ Ram ngoài bảng sau mô ta chức năng của các chân ở Port A
Pin
Chức năng
PA7
AD7 (mở rộng bộ nhớ ngoài với bit dữ liệu là bit 7)
PA6
AD6 (mở rộng bộ nhớ ngoài với bit dữ liệu là bit 6)
PA5
AD5 (mở rộng bộ nhớ ngoài với bit dữ liệu là bit 5)
PA4
AD4 (mở rộng bộ nhớ ngoài với bit dữ liệu là bit 4)
PA3
AD3 (mở rộng bộ nhớ ngoài với bit dữ liệu là bit 3)
PA2
AD2 (mở rộng bộ nhớ ngoài với bit dữ liệu là bit 2)
PA1
AD1 (mở rộng bộ nhớ ngoài với bit dữ liệu là bit 1)
PA0
AD0(mở rộng bộ nhớ ngoài với bit dữ liệu là bit 0)
Port B : chức năng các chân của port B được trình bày dưới bảng
Pin
Chức năng của các chân
PB7
OC2/OC1C (đầu ra so sánh và đầu ra của PWM cho timer/counter2 hoặc đầu ra so sánh và PWM C của timer/counter1
PB6
OCB1 (đầu ra so sánh và PWM B của timer/counter1)
PB5
OC1A (đầu ra so sánh và PWM A của timer/counter1)
PB4
OCO ( đầu ra so sánh và PWM của timer/counter0
PB3
MISO (bus giao tiếp SPI vào master hoặc ra slave)
PB2
MOSI ( bus giao tiếp SPI vào slave hoặc ra master)
PB1
SCK (quy định tốc độ đông hồ khi giao tiếp)
PB0
(chọn SPI là slave hay master)
Port C : ngoài chức năng vào ra thông thường, Port C còn có thêm chức năng mở rộng bộ nhớ ngoài chân ở Port C
Pin
Chức năng
PC7
AD15 (mở rộng bộ nhớ ngoài với bit dữ liệu là bit 15)
PC6
AD14 (mở rộng bộ nhớ ngoài với bit dữ liệu là bit 14)
PC5
AD13 (mở rộng bộ nhớ ngoài với bit dữ liệu là bit 13)
PC4
AD12 (mở rộng bộ nhớ ngoài với bit dữ liệu là bit 12)
PC3
AD11 (mở rộng bộ nhớ ngoài với bit dữ liệu là bit 11)
PC2
AD10 (mở rộng bộ nhớ ngoài với bit dữ liệu là bit 10)
PC1
AD9 (mở rộng bộ nhớ ngoài với bit dữ liệu là bit 9)
PC0
AD8(mở rộng bộ nhớ ngoài với bit dữ liệu là bit 8)
Port D : ngoài chức năng vào ra thông thường, Port D còn có thêm chức năng mở rộng bộ nhớ ngoài chân ở Port D
Pin
Chức năng
PD7
T2 (đầu vào bộ đếm timer/counter2)
PD6
T1 (đầu vào bộ đếm timer/counter1)
PD5
XCK1 (dùng khi giao tiếp USART1 cần dùng bộ dao động riêng)
PD4
ICP1
PD3
INT3/TXD1 (Ngắt mở rộng hoặc chân truyền tín hiệu của UART1)
PD2
INT2/RXD1 (Ngắt mở rộng hoặc nhận tín hiệu của UART1)
PD1
INT1/SDA (Ngắt mở rộng hoặc chân địa chỉ của giao tiếp I2C)
PD0
INT0/SCL (Ngắt mở rộng hoặc chân địa dao động của giao tiếp I2C)
Port E : ngoài chức năng vào ra thông thường, Port E còn có thêm chức năng mở rộng bộ nhớ ngoài chân ở Port E
Pin
Chức năng
PE7
INT7/ICP3 (ngắt ngoài hoặc đầu vào Capture của timer/counter3)
PE6
INT6/T3 (ngắt ngoài hoặc đầu vào timer/counter3)
PE5
INT5/OC3C (ngắt ngoài hoặc đầu ra PWM C của timer/counter3)
PE4
INT4/OC3B ( ngắt ngoài hoặc đầu ra PWM của timer/counter3)
PE3
AIN1/OC3A (đầu vào so sánh tương tự âm và đầu ra PWM A của timer/counter3)
PE2
AINO/XCKO (đầu vào so sánh tương tự dương
PE1
PDO/TXD0 ( chân truyền dữ liệu của UART0)
PE0
PDI/RXD0 (chân nhận dữ liệu của UART0)
Port F : ngoài chức năng vào ra thông thường, Port F còn có thêm chức năng mở rộng bộ nhớ ngoài chân ở Port F
Pin
Chức năng
PF7
ADC7/TDI (đầu vào ADC kênh 7 hoặc kiểm tra dữ liệu đầu vào của JTAG)
PF6
ADC6/TDO (đầu vào ADC kênh 6 hoặc kiểm tra dữ liệu đầu ra của JTAG)
PF5
ADC5/TMS (đầu vào ADC kênh 5 hoặc chọn chế độ cho JTAG)
PF4
ADC4/TCK ( đầu vào ADC kênh 4 hoặc kiểm tra dao động của JTAG)
PF3
ADC3 (đầu vào ADC kênh 3)
PF2
ADC2 (đầu vào ADC kênh 2)
PF1
ADC1 (đầu vào ADC kênh 1)
PF0
ADC0 (đầu vào ADC kênh 0)
Port G : ngoài chức năng vào ra thông thường, Port G còn có thêm chức năng mở rộng bộ nhớ ngoài chân ở Port G
Pin
Chức năng
PG4
TOSC1 (tạo xung dao động riêng cho bộ timer/counter0)
PG3
TOSC2 (tạo xung dao động riêng cho bộ timer/counter0)
PG2
ALE ( chân cho phép chốt địa chỉ với bộ nhớ mở rộng)
PG1
( chân cho phép đọc với bộ nhớ ngoài)
PG0
( chân cho phép ghi với bộ nhớ ngoài)
2.3.4 Giao tiếp với SRAM ngoài
Atmega 128 có thể mở rộng bộ nhớ ngoài lên 64k. Khả năng này được minh họa trên hình 2.8. Để cho phép truy nhập bộ nhớ SRAM ngoài trên PORTA và PORTC
Hình 2 .8: Giao tiếp với bộ nhớ ngoài
2.3.5 Cấu trúc ngắt của Atmega 128
Ngắt là một cơ cấu điều khiển dòng lệnh, cơ cấu này được thiết kế trên hầu hết các bộ điều khiển. Trong quá trình giao tiếp của hệ thống bộ xử lý với thế giới bên ngoài, nhiều sự việc xảy ra theo cách không đồng bộ, chẳng hạn người dùng có thể đã nhấn một công tắc để thực hiện một công việc nào đó, trong khi một byte dữ liệu có thể đã đến cổng nối tiếp. Điều này gây khó khăn cho hoạt động của bộ xử lý khi mà nó phải kiểm tra tất cả các thiết bị để giám sát sự di chuyển của dữ liệu. Ngược lại mọi việc sẽ trở nên tốt hơn nếu các thiết bị này có thể loan báo sự đến nơi của dữ liệu. Đây là tất cả những gì mà cơ chế ngắt phải thực hiện. Thiết bị ngoại vi sẽ ngắt việc thực thi của chương trình chính, và bộ xử lý tạm ngừng việc thực thi chương trình chính, và bộ xử lý tạm ngừng việc thực thi chương trình bình thường để thẩm tra nguồn ngắt và để thực hiện các thao tác đáp ứng cần thiết, việc thực thi chương trình đã bị ngắt lại tiếp tục. Chương trình ngắt chỉ đơ giản giống hệt như một chương trình con (subrountine), ngoại trừ một đặc điểm là việc thực thi của đoạn chương trình ngắt này không bị bộ xử lý đoán trước là sẽ xuất hiện ở một thời điểm cụ thể nào. Bộ vi điều khiển AVR có rất nhiều cấu trúc ngắt sau đây em chỉ trình bày về các loại ngắt mà mình sẽ dùng.
a )Ngắt (USART)
Đối với một loại vi điều khiển sẽ có nhiều vectơ ngắt để phục vụ cho chương trình như vectơ ngắt ngoài, ngắt nối tiếp, ngắt định thời. Sau đây là các nguyên nhân gây ngắt của AVR
Reset : Chân ngoài, Preset, Brown-out reset và Watchdog reset
INT0 : Ngắt ngoài yêu cầu 0
INT1 : Ngắt ngoài yêu cầu 1
Timer1 CAPT : Ngắt do sự kiện Đếm/Định thời 1
Timer1 COMPA : Ngắt do đạt giá trị so sánh A Đếm/Định thời 1
Timer1 COMPB : Ngắt do đạt giá trị so sánh B Đếm/Định thời 1
Timer1 OVF: Ngắt do tràn bộĐếm/Định thời 1
Timer0 OVF: Ngắt do tràn bộĐếm/Định thời 0
SPI,STC : Giao tiếp nối tiếp xong
USART, RXC : Nhận nối tiếp xong
USART, UDRE : Thanh ghi dữ liệu nối tiếp rỗng
USART, TXC : Truyền nối tiếp xong
ANA_COMP : So sánh tương tự
INT2 : Yêu cầu ngắt ngoài 2
TIMER0 COMP : Đạt giá trị đếm bộ Đếm/Định thời 0
EE_RDY : EEPROM sẵn sàng
SPM_RDY : Bộ nhớ chương trình sẵn sàng
Trong chương trình dành cho mạch giao tiếp có sử dụng đến hai loại vectơ ngắt là ngắt do định thời và ngắt do nối tiếp. Vì vậy, trong phần này chỉ giới thiệu hai loại vectơ ngắt này.
b )Giao tiếp nối tiếp
Bộ truyền nhận đồng bộ và không đồng bộ nối tiếp (USART) là một thiết bị giao tiếp nối tiếp có tính tương thích cao có các tính chất chính:
Chức năng kép (Bộ truyền và nhận độc lập)
Chức năng truyền đồng bộ hoặc không đồng bộ
Chức năng xung đồng bộ chính và phụ
Cung cấp định dạng nối tiếp với 4,5,6 hoặc 7 bits dữ liệu và 1 hoặc 2 bits stop
Tạo ra và kiểm tra cờ chẵn lẽ bởi phần cứng
Phát hiện lỗi tràn
Phát hiện lỗi dạng dữ liệu
Chống nhiễu bằng bit start và bộ lọc thông thấp
3 vectơ ngắt do truyền TX xong, thanh ghi truyền TX rỗng, nhận RX xong
Chế độ truyền thông đa xử lý
Chế độ xung đồng bộ gấp đôi
Bộ tạo tốc độ Baud nhiều giải pháp
Chế độ tăng gấp đôi tốc độ dao tiếp
c )Bộ đếm/định thời
TIMER/COUNTER0 là một module đếm/định thời 8-bits, đơn kênh, đa mục đích với các tính chất sau
Bộ đếm đơn kênh
Xoá timer khi đạt được giá trị so sánh (Tự động nạp lại)
Xung tự do được tự động chữa bởi bộ điều chế độ rộng chuỗi xung (PWM)
Tạo tần số
Đếm sự kiện bên ngoài
Bước đếm 10 bits
Cung cấp ngắt khi đạt được giá trị so sánh (T0V0 và 0CF0)
Cho phép tạo xung mở rộng từ bộ dao động thạch anh ngoài 32 kHz
d ) Bộ đếm/định thời
TIMER/COUNTER1 là bộ Đếm/định thời 16-bit thiết kế để cho phép chương trình định thời một cách chính xác (quản lý sự kiện), tạo sóng và đếm tín hiệu thời gian với các tính chất chính như sau:
Thiết kế 16-bit thực ( ví dụ cho phép 16-bit PWM)
Ba đơn vị so sánh ra độc lập
Gấp đôi bộ đệm so sánh ra
Xoá bỏ nhiễu đầu vào được phát hiện
Xoá bộ đếm khi đạt giá trị so sánh (Tự động nạp lại)
Xung tự do được tự động chữa bởi bộ điều chế độ rộng chuỗi xung (PWM)
Khoảng PWM thay đổi
Tạo tần số
Đếm sự kiện bên ngoài
nguồn ngắt độc lập (TOV1, OCF1A, OCF1B, v à ICF1)
2.3.6 Bộ biến đổi A/D bên trong
Atmega 128 cung cấp bộ biến đổi tương tự số với độ phân giải 10 bit. Ngoài ra, bên cạnh bên cạnh bộ biến đổi ADC còn có một bộ dồn kênh 8 nối vào, mỗi lối có thể được dẫn riêng lẻ tới bộ hiển thị ADC. Bộ biến đổi ADC được sử dụng ở PORTF. Nó có khả năng kết hợp 16 đầu vào điện áp khác nhau. Hai đầu vào khác là ( ADC0 với ADC1 và ADC2 với ADC3) là có thể lập trình được hệ số khuếch đại, nó cung cấp các bước hệ số khuếch đại 0 dB(1x), 20 dB(10x) hoặc 46 dB(200x) điện áp đầu vào khác nhau trước khi biến đổi A/D. Nếu 1x hoặc 10x được chọn thì nên chọn độ phân giải là 8 bit còn nếu 200x được chọn thi độ phân giải nên là 7 bit. Hình 2.9 biểu diễn sơ đồ khối của bộ biến đổi A/D.
Hình 2.9 : Sơ đồ khối của bộ biến đổi A/D
2.3.7 Bộ truyền/nhận UART
Hình 2.10 minh họa sơ đồ khối của bộ truyền/nhận UART. Việc truyền dữ liệu được khởi tạo bằng cách ghi dữ liệu vào thanh ghi dữ liệu I/O USART, ký hiệu là UDR. Dữ liệu được truyền từ UDR đến thanh ghi dịch truyền khi :
Hình 2.10 : Sơ đồ khối của bộ truyền/nhận UART
Một ký tự mới đã được ghi vào UDR sau khi bit stop từ ký tự trước đó đã dịch chuyển ra. Thanh ghi dich chuyển ra được nạp ngay lập tức. Ở thời điểm này bit UDRE trong thanh ghi trạng thái USART, USR, được đặt khi bit này đặt thành “1”, bộ USART đã sẵn sàng nhận ký tự tiếp theo. Vào cùng thời điểm khi dữ liệu được truyền từ UDR đến thanh ghi dịch bộ truyền 10 (11) bit, bit 0 của thanh ghi dịch bị xóa (start bit) và bit 9 (10) được đặt (stop bit). Nếu như một dữ liệu 9 bit được lựa chọn (bit CHR9 trong thanh ghi điều khiển USART, UCR được đặt), bit TXB8 trong thanh ghi UCR được truyền vào bit 9 trong thanh ghi dịch bộ truyền. Theo nhịp của đồng hồ tốc độ baud sẽ diễn ra cuộc truyền đến thanh ghi dịch, bit start bị dịch chuyển ra chân TXD. Sau đó kế tiếp là dữ liệu, LSB trước tiên. Khi bit stop đã được dịch chuyển ra, thanh ghi dich được nạp nếu bất kỳ dữ liệu nào đã được ghi vào thanh ghi UDR trong khoảng thời gian truyền. Trong thời gian nạp, bit UDRE được đặt thanh “1”. Nếu như không có dữ liệu mới trong thanh ghi UDR để truyền di khi bit stop được dịch chuyển ra, cờ UDRE sẽ giữ nguyên trạng thái được đặt cho đến khi thanh ghi UDR được ghi một lần nữa. Khi không có dữ liệu mới cần được ghi, và bit stop đã có mặt trên TxD đối với một chiều dài bit, cờ TX complete, TXC, trong thanh ghi USR được đặt thành “1”. Khi bit này được xóa thành “0”, thì chân PDI có thể được sử dụng cho thao tác I/O chung. Khi đặt thành “1”, bộ truyền trong USART sẽ được nối với PDI, chân này bị bắt buộc trở thành một chân nối ra không đếm xỉa gì đến việc đặt của bit 1 trong DDRD. Một ký tự mới đã được ghi vào UDR trước khi bit stop từ ký tự trước đã được dịch đi. Thanh ghi dịch được nạp khi bit stop của ký tự đang được truyền đã được dich chuyển ra. Nếu bộ truyền 10 (11) bit đang trống thì thì dữ liệu được truyền UDR đến thanh ghi dịch.
2. 3.8 Bộ định thời
Bộ định thời trong Atmega128 có chức năng giống như một bộ định thời hoặc một bộ đếm. Giống như một bộ định thời, tín hiệu giữ nhịp bên trong hoặc dẫn xuất của tín hiệu giữ nhịp đó được sử dụng để giữ nhịp bộ định thời, trong khi giống như một bộ đếm, một tín hiệu từ bên ngoài ở chân của một cổng được sử dụng để giữ nhịp bộ định thời/bộ đếm. hình 3.14 minh họa bộ dồn kênh (multiplexer), đóng vai trò lựa chọn một trong nhiều nguồn tín hiệu đồng hồ dùng cho bộ timer/counter. Bộ chia tần số dùng cho cả bộ timer/counter 0, timer/counter 1, và timer/counter 2 được minh họa trên hình 2.11.
Hình 2.11 : Bộ dồn kênh
Sơ đồ của bộ timer/counter 0 8 bit được minh họa trên hình 2.12
Hình 2.12 : Sơ đồ của bộ timer/counter0 8 bit
Sơ đồ của bộ timer/counter 1 16 bit được biểu diễn trên hình 2.13
Hình 2.13 : Sơ đồ của bộ timer/counter1 16 bit
Sơ đồ của bộ timer/counter 2 8 bit được biểu diễn trên hình 2.14
Hình 2.14 : Sơ đồ của bộ timer/counter2 8bit
CHƯƠNG 3: MÔ PHỎNG HỆ THỐNG ĐIỀU KHIỂN ĐƯỢC THIẾT KẾ DỰA TRÊN MẠNG NƠRON
3.1 Thiết kế bộ điều khiển PID-Neural có chỉnh định thích nghi trọng số của mạng
3.1.1 Thuật toán chỉnh định trọng số
Trong phần này sẽ trình bày việc vận dụng thuật toán tương tác thích nghi vào việc chỉnh định các trọng số của bộ điều khiển PID-Neural. Hình 2.1 là sơ đồ khối của hệ thống điều khiển với bộ điều khiển PID-Neural có chỉnh định thích nghi trọng số của mạng.. Hình 2.2 là sơ đồ bộ điều khiển PID-Neural có chỉnh định thích nghi trọng số của mạng.
Hình 3.1: Hệ thống điều khiển PID-Neural
Mạng nơron được dùng để thiết kế bộ điều khiển là mạng 1 lớp có 3 đầu vào. Mạng chỉ có 1 nơron và hàm truyền của nơron là hàm purelin.
Hình 3.2: Neural network controller
Theo thuật toán Brandt-Lin, hệ thống trên được chia thành 3 lớp, 5 nút. Nút 11 là khâu P có hệ số khuếch đại bằng 1, nút 12 là khâu I, nút 13 là khâu D, nút 21 gồm phần mạng nơron không chứa các trọng số đối tượng, nút 31 là đối tượng. Các trọng số là . Hình 2.3 mô tả sự phân tích hệ thống theo thuật toán Brandt-Lin. Trọng số liên kết giữa nút 21 và nút 31 là bằng hằng số nên . Do vậy công thức tính các trọng số sẽ còn là:
Hình 3.3: Phân tích hệ thống theo thuật toán Brandt-Lin
chính là đạo hàm đầu ra của đối tượng theo đầu vào.
Chuyển sang miền Laplace:
= hàm truyền đối tượng.
Do vậy với một hệ động học ổn định, có thể xấp xỉ về 1 hằng số. Các kết quả mô phỏng bằng Matlab/Simulink và kết quả điều khiển thực tế cho thấy sự xấp xỉ này không ảnh hưởng xấu đến việc điều khiển. Hằng số này được đưa vào trong hệ số bước học nên sai lệch trọng số sẽ là:
Tính toán tương tự thu được:
3.1.2 Kết quả mô phỏng
Sau đây là các kết quả mô phỏng bộ điều khiển PID-Neural có chỉnh định thích nghi trọng số của mạng với các loại đối tượng và điều kiện mô phỏng khác nhau. Các kết quả này được so sánh với các kết quả điều khiển từ bộ PID truyền thống. Tín hiệu mẫu là tín hiệu mức 1.Các mô phỏng được thực hiện bằng Matlab/Simulink.
a) Đối tượng ổn định
Đối tượng điều khiển là đối tượng tuyến tính ổn định bậc 2 có hàm truyền G(s) là
Bộ điều khiển PID-Neural:
Bộ điều khiển có hệ số thích nghi và các trọng số có giá trị ban đầu là .
Mô hình điều khiển:
Hình 3.4: Mô hình điều khiển với đối tượng ổn định
Bộ điều khiển PID truyền thống với các hệ số được tính theo phương pháp hằng số thời gian tổng của Kuhn:
Hàm truyền của đối tượng được viết lại như sau:
;;
Kết quả mô phỏng:
Hình 3.5: (a) Tín hiệu đặt và các tín hiệu đầu ra; (b)Trọng số ;
(c)Trọng số ; (d) Trọng số
Nhận xét: So với bộ PID truyền thống, bộ điều khiển PID-Neural cho tín hiệu đầu ra tốt hơn nhiều, không có độ quá điều chỉnh, tốc độ xác lập nhanh.
b) Đối tượng có nhiễu
Nghiên cứu trường hợp có nhiễu, đưa vào hệ thống nhiễu ồn trắng có cường độ noise power =0.01 và nhiễu được cộng thêm vào đầu vào của đối tượng. Đối tượng nghiên cứu không đổi.
Bộ điều khiển PID-Neural:
Bộ điều khiển có hệ số thích nghi và các trọng số có giá trị ban đầu là .
Mô hình điều khiển:
Hình 3.6: Khi có nhiễu
Bộ điều khiển PID truyền thống với các hệ số được tính theo phương pháp hằng số thời gian tổng của Kuhn:
Hàm truyền của đối tượng được viết lại như sau:
;;
Kết quả mô phỏng:
Hình 3.7: (a) Tín hiệu đặt và các tín hiệu đầu ra; (b)Trọng số;
(c)Trọng số ; (d) Trọng số
Nhận xét: Khi có nhiễu bộ điều khiển PID-Neural cho tín hiệu đầu ra bám theo tín hiệu đặt, không có độ quá điều chỉnh trong khi ở bộ PID truyền thống có xảy ra hiện tượng quá điều chỉnh.
c) Đối tượng có trễ
Để tạo ra đối tượng có trễ, ta thêm vào 1 khâu trễ trước đối tượng điều khiển. Thời gian trễ là 0.2 giây. Đối tượng điều khiển có hàm truyền là:
Bộ điều khiển PID-Neural:
Bộ điều khiển có hệ số thích nghi và các trọng số có giá trị ban đầu là .
Mô hình điều khiển:
Hình 3.8: Đối tượng có trễ
Bộ điều khiển PID truyền thống với các hệ số được tính theo phương pháp hằng số thời gian tổng của Kuhn:
Hàm truyền của đối tượng được viết lại như sau:
;
;;
Kết quả mô phỏng:
Hình 3.9: (a) Tín hiệu đặt và các tín hiệu đầu ra; (b)Trọng số ;
(c)Trọng số ; (d) Trọng số
Nhận xét: Với đối tượng có trễ, tín hiệu ra của hệ thống ở bộ điều khiển PID-Neural tốt hơn so với bộ điều khiển PID truyền thống, có xảy ra độ quá điều chỉnh nhưng rất nhỏ.
d) Đối tượng có thành phần tích phân
Đối tượng có thành phần tích phân được sử dụng là đối tượng có hàm truyền sau:
Hệ số thích nghi không đổi vẫn bằng 0.003. Các trọng số có giá trị ban đầu là:
Mô hình điều khiển:
Hình 3.10: Đối tượng có thành phần tích phân
Kết quả mô phỏng:
Hình 3.11: (a) Tín hiệu đặt và tín hiệu đầu ra; (b)Trọng số ; (c)Trọng số ; (d) Trọng số
Nhận xét: Với đối tượng có thành phần tích phân, chất lượng tín hiệu đầu ra của hệ thống không được tốt, độ quá điều chỉnh lớn, thời gian xác lập dài. Nguyên nhân là do với đối tượng có thành phần tích phân, đạo hàm của đối tượng không thể xấp xỉ về hằng số vì đối tượng không ổn định.
e) Đối tượng phi tuyến
Đối tượng phi tuyến được sử dụng có hàm truyền như sau:
Hệ số thích nghi bằng 0.5. Các trọng số có giá trị ban đầu là:
Việc mô phỏng được thực hiện bằng M-file.
Kết quả mô phỏng:
Hình 3.12: (a) Tín hiệu đặt và tín hiệu đầu ra; (b)Trọng số ;
(c)Trọng số ; (d) Trọng số
Nhận xét: Với đối tượng phi tuyến, để sử dụng bộ điều khiển PID truyền thống thì cần phải tuyến tính hóa đối tượng. Công việc này tạo ra chất lượng điều khiển không cao do sự sai lệch giữa đối tượng thực và đối tượng sau khi tuyến tính hóa. Nhưng với bộ điều khiển PID-Neural, chất lượng tín hiệu đầu ra của hệ thống rất tốt, thời gian xác lập ngắn, không xảy ra hiện tượng quá điều chỉnh.
3.2 Thiết kế bộ điều khiển sử dụng sai lệch làm đầu vào
3.2.1 Thuật toán chỉnh định trọng số
Mạng nơron được coi là một bộ nhớ nhưng là bộ nhớ ngắn hạn nên cần đưa các dữ liệu trong quá khứ làm đầu vào của mạng nơron để tăng độ chính xác của đầu ra. Số lượng các tín hiệu trong quá khứ là tùy ý. Ở đây ta chọn 1 sai lệch ở hiện tại và 2 sai lệch ở trong quá khứ. Đối tượng điều khiển xét ở đây là đối tượng tuyến tính và ổn định. Hình 3.13 là sơ đồ khối mô hình điều khiển với 3 đầu vào đã chọn.
Hình 3.13: Sơ đồ khối hệ thống điều khiển
Hình 3.14 mô tả cấu tạo bộ điều khiển dựa trên mạng nơron. Mạng nơron được chọn là mạng 2 lớp có 3 đầu vào và 1 đầu ra. Lớp đầu vào có 3 nơron, lớp đầu ra có 1 nơron. Hàm truyền của 3 nơron lớp đầu vào là hàm logsig , hàm truyền của nơron lớp đầu ra là hàm tuyến tính (purelin) .
Hình 3.14: Mạng nơron 2 lớp
Hệ thống điều khiển trên được chia thành 4 lớp và 8 nút. Nút 11 là khâu có hệ số khuếch đại bằng 1, nút 12 là khâu trễ thứ nhất, nút 13 là khâu trễ thứ 2, nút 21, 22, 23, 31 lần lượt là phần nơron 1,2,3,4 không chứa các trọng số. Nút 41 là đối tượng. Các trọng số liên kết là . Hình 3.15 mô tả sự phân tích hệ thống điều khiển.
Hình 3.15: Phân tích hệ thống điều khiển
Tính toán mạng nơron:
và
và
và
và
Huấn luyện mạng:
mà:
(do theo biện luận ở trên với đối tượng tuyến tính ổn định thì đạo hàm của đối tượng có thể xấp xỉ về 1 hằng số)
Hằng số được đưa vào trong hằng số thích nghi .
Tương tự như trên:
Do nên:
Mô hình mạng nơron của bộ điều khiển cùng với các thuật toán học được diễn giải ở trên được trình bày bằng Matlab/Simulink ở hình 3.16.
Hình 3.16: Cấu trúc bộ điều khiển ANN và thuật toán học.
3.2.2 Kết quả mô phỏng
Sau đây là các kết quả mô phỏng bộ điều khiển dựa trên mạng nơron được trình bày ở trên với các loại đối tượng và điều kiện mô phỏng khác nhau. Tín hiệu mẫu là tín hiệu mức 1. Các mô phỏng được thực hiện bằng Matlab/ Simulink.
a) Đối tượng ổn định
Đối tượng điều khiển là đối tượng tuyến tính ổn định bậc 2 có hàm truyền G(s) là
Hệ số thích nghi là . Các trọng số ban đầu là:
Mô hình điều khiển:
Hình 3.17: Đối tượng bậc 2 ổn định
Tín hiệu đầu ra:
Hình 3.18: Tín hiệu đầu ra và tín hiệu đặt với đối tượng ổn định
Nhận xét: Tín hiệu đầu ra rất tốt. Dù là đối tượng bậc 2 nhưng không xảy ra hiện tượng quá điều chỉnh hay dao động.
b) Đối tượng có nhiễu
Nhiễu được sử dụng là nhiễu ồn trắng có cường độ noise power = 0.01. Đối tượng nghiên cứu và hệ số thích nghi không đổi. Các trọng số ban đầu là:
Mô hình điều khiển:
Hình 3.19: Đối tượng có nhiễu
Tín hiệu đầu ra:
Hình 3.20: Tín hiệu đầu ra và tín hiệu đặt trong trường hợp có nhiễu
Nhận xét: Ảnh hưởng của nhiễu chỉ có tác động nhỏ đến chất lượng hệ thống
d) Đối tượng có trễ
Thời gian trễ là 0.4 giây. Đối tượng điều khiển không đổi. Hệ số thích nghi là 2. Các trọng số ban đầu là:
Mô hình điều khiển:
Hình 3.21: Đối tượng có trễ
Tín hiệu đầu ra:
Hình 3.22: Tín hiệu đầu ra và tín hiệu đặt trong trường hợp có nhiễu
Nhận xét: Sai lệch giảm dần theo quá trình học của mạng nơron.
c) Đối tượng có thành phần tích phân
Đối tượng có thành phần tích phân được sử dụng là đối tượng có hàm truyền sau:
Hệ số thích nghi bằng 0.1. Các trọng số có giá trị ban đầu là:
Mô hình điều khiển:
Hình 2.22: Đối tượng có thành phần tích phân
Tín hiệu đầu ra:
Hình 2.23: Tín hiệu đầu ra và tín hiệu đặt với đối tượng có thành phần tích phân
Nhận xét: Với đối tượng có thành phần tích phân, việc lựa chọn bộ điều khiển theo mô hình này sẽ cho tín hiệu đầu ra tốt hơn nhiều so với bộ điều khiển PID-Neural, độ quá điều chỉnh nhỏ, thời gian xác lập nhanh, sai lệch tĩnh bé.
e) Đối tượng phi tuyến
Đối tượng phi tuyến được sử dụng có hàm truyền như sau:
Hệ số thích nghi bằng 0.1. Các trọng số có giá trị ban đầu là:
Việc mô phỏng được thực hiện bằng M-file.
Tín hiệu đầu ra:
Hình 2.24: Tín hiệu đầu ra và tín hiệu đặt với đối tượng phi tuyến
Nhận xét: Với đối tượng phi tuyến, việc lựa chọn bộ điều khiển theo mô hình này sẽ cho tín hiệu đầu ra tốt hơn bộ điều khiển PID-Neural,thời gian xác lập nhanh hơn.
CHƯƠNG 4 : ỨNG DỤNG ĐIỀU KHIỂN ĐỐI TƯỢNG THỰC
4.1 Động cơ điện một chiều
4.1.1. Cấu tạo của động cơ một chiều
Động cơ điện một chiều gồm có 3 thành phần cơ bản : Stato của động cơ là một nam châm vĩnh cửu, cuộn dây phần ứng lắp trên Roto và cặp chổi than. Nguyên lý hoạt động của động cơ một chiều có thể trình bày tóm tắt như sau: từ trường cố định sinh ra bởi nam châm vĩnh cửu gắn trên stato gây ra lực tác dụng lên cuộn dây trên rô to khi cuộn dây có dòng điện chạy qua (định luật Ampe). Lực từ sinh ra mô men tác dụng lên rô to . Mô men này biểu diễn theo phương trình :
Tm = Ke . Φ . Ie . sinθ
Trong đó : Te = mô men động cơ
Ke = hệ số động cơ
Φ = mật độ dòng từ
Ie = dòng điện phần ứng
θ = góc giữa vectơ từ trường cố định
Hình 4.1: Một động cơ một chiều thông thường
Từ công thức trên có thể thấy momen trên trục động cơ tăng dần từ θ = 0o và đạt lớn nhất khi θ = 90o. Tức là khi θ = 90o, vectơ từ trường cố định vuông góc với vectơ dòng phần ứng thì momen trên trục động cơ là lớn nhất và khi θ = 0o, vectơ dòng phần ứng song song với vectơ từ trường cố định, momen trên trục là bé nhất. Để đảm bảo momen trên trục động cơ luôn đạt được giá trị lớn nhất cần thiết người ta bố trí không phải một vòng dây mà rất nhiều vòng dây đặt kế tiếp nhau trên đường tròn. Như vậy tại mỗi thời điểm bất kỳ luôn tồn tại một vòng dây có lực từ tác dụng lên nó là cực đại. Do Roto của động cơ quay nên dòng điện một chiều được đưa vào các cuộn dây thông qua chổi than cố định quét trên các cuộn dây. Cũng vì lý do này mà loại động cơ này được gọi là động cơ có chổi than .
Hình 4.2: Nguyên lý hoạt động động cơ một chiều
Trong động cơ một chiều cần chú ý nhất 2 thông số: momen và tốc độ của động cơ. Momen và tốc độ của động cơ DC có thể mô tả bằng hai phương trình sau:
Tdc = Km . Iu
Eb = Kb . w
Trong đó:
Tdc = momen từ đơn vị Nm
Iu = dòng điện trong cuộn dây phần ứng đơn vị A
Eb = điện áp phản điện V
Km = hệ số momen đơn vị kgm/A
Kb = hệ số điện đơn vị V/vòng.phút
w = vận tốc quay của động cơ vòng/phút
Từ 2 phương trình trên có thể thấy: Momen của động cơ tỉ lệ với dòng điện, tuy nhiên do sức phản điện tỉ lệ với vận tốc mà sức phản điện làm giảm dòng điện nên không thể duy trì động cơ với tốc độ cao và momen lớn được .
4.1.2. Encoder gắn trên động cơ một chiều
Encoder gồm một mắt phát và một mắt thu. Giữa mắt phát và mắt thu là một đĩa tròn có khắc vạch. Đĩa tròn được gắn lên trục động cơ. Khi đĩa chắn mất tín hiệu giữa mắt phát và mắt thu thì tín hiệu ra có mức logic 1. Khi đĩa không chắn tin hiệu giữa mắt phát và mắt thu thì tín hiệu ra có mức logic 0. Động cơ quay cũng sẽ làm đĩa quay theo với cùng tốc độ. Vì trên đĩa có khắc 200 vạch, cho nên khi động cơ quay được 1 vòng sẽ tạo ra 200 xung. Vi điều khiển đếm số xung này sẽ biết được tốc độ động cơ.
Hình 4.3: Cấu tạo của encoder
Giả thiết:
Số xung đếm được trong 1s là: n
Số vạch khắc trên đĩa là: no
Tốc độ động cơ là: v (vòng/phút)
Ta sẽ có
4.1.3. Động cơ sử dụng để thử nghiệm
Loại động cơ sử dụng là Encoder gắn luôn trên đuôi của động cơ. Encoder có 5 đầu ra, hai dây đất, một dây nguồn, hai dây phase A và B. độ phân giải của Encoder là 200 xung. Để tăng độ chính xác trong việc đo tốc độ về ta sử dụng cả hai pha của encoder đếm sườn lên và xuống của hai phase A và phase B ta có độ chính xác tăng gấp 8 lần. Đây là loại động cơ một chiều 24V có tốc độ tối đa là 2000v/p.
Hình 4.4: Động cơ điện một chiều
4.2. Thiết kế bộ điều khiển trên nền vi điều khiển Atmega 128
Atmega
128
Máy Tính
LCD
Bàn Phím
Driver
điều khiển
động cơ
Động cơ
Encoder
Hình 4.5: Sơ đồ khối của bộ điều khiển.
4.2.1. Khối điều khiển trung tâm
Khối điều khiển trung tâm sử dụng vi điều khiển Atmega 128 được mở rộng bộ nhớ sram ngoài, 64K bytes. Cổng com giao tiếp với máy tính theo chuẩn RS232, giao tiếp với LCD. Cổng nạp ngay trên khối điều khiển trung tâm theo chuẩn Jtag. Các cổng vào ra dùng để điều khiển động cơ và nhận tín hiệu của encoder.
Hình 4.6: Sơ đồ nguyên lý mạch điều khiển trung tâm
4.2.2. Giao tiếp với LCD
Hình 4.7: Sơ đồ mạch LCD
Để điều khiển LCD ta dùng Port E của Atmega128. Kiểu truyền dữ liệu ở đây ta chuyền 4 bit một, ta sử dụng các bit dữ liệu D4, D5, D6, D7 của LCD. Biến trở dùng để điều chỉnh độ tương phản cho LCD. Do Atmega 128 có các hàm có sẵn dùng cho LCD nên rất tiện cho người dùng trong việc lập trình. Một số hàm viết cho LCD có sẵn trong Atmega 128
void _lcd_ready(void); // hàm sẵn sàng cho LCD
void _lcd_write_data(unsigned char data); // ghi một byte dữ liệu lên LCD
// ghi một byte ký tự đến LCD hoặc vào RAM
void lcd_write_byte(unsigned char addr, unsigned char data);
// đọc một byte ký tự từ LCD hoặc từ RAM
unsigned char lcd_read_byte(unsigned char addr);
// dịch chuyển con trỏ đến hàng x cột y
void lcd_gotoxy(unsigned char x, unsigned char y);
// xóa LCD
void lcd_clear(void);
void lcd_putchar(char c);
// ghi một chuỗi kí tự từ trong RAM tới LCD
void lcd_puts(char *str);
// ghi một chuỗi kí tự từ bộ nhớ FLASH tới LCD
void lcd_putsf(char flash *str);
// khởi tạo cho LCD
unsigned char lcd_init(unsigned char lcd_columns);
4.2.3. Phương thức truyền nhận dữ liệu qua RS232 trên PC
4.2.3.1 Cấu trúc vật lý của cổng RS232
Hình 4.8: Cổng đực
Hình 4.9: Cổng cái
Hình 4.10 : Kích thước của cổng COM
Trong máy tính cổng COM của máy là cổng nối tiếp theo chuẩn RS232
Chân
Tên gọi
Mục đích
3
TD (Transmit data)Truyền dữ liệu
Truyền dữ liệu đến một thiết bị khác
2
RD (Receive data)Nhận dữ liệu
Nhận dữ liệu từ một thiết bị khác
7
RTS (Request to send)Yêu cầu truyền dữ liệu
Cho biết là thiết bị đã sẵn sàng để truyền dữ liệu ra
8
CTS (Clear to send )
Cho biết thiết bị đã sẵn sàng để nhận dữ liệu.
6
DSR (Data set ready)
Cho biết thiết bị nhận dữ liệu đã được kết nối và sẵn sàng để nhận dữ liệu
5
GND (Signal ground)
Xác định cả hai thiết bị đều sử dụng cùng một hiệu điện thế cho truyền dữ liệu.
4
DTR (Data terminal ready)
Cho biết là thiết bị đầu cuối ( DTE ) đã sắn sàng cho việc sử dụng
1
DCD (Data Carrier Detect)
Tách tín hiệu mang dữ liệu
9
RI (Ring Indicator )
Báo chuông
Bảng 4.1: Chức năng của các chân cổng RS232
4.2.3.2 Quá trình truyền và nhận dữ liệu của cổng COM của PC
Truyền dữ liệu là quá trình đưa dữ liệu ra cổng nối tiếp từ máy tính. Khi máy tính muốn truyền một byte dữ liệu ra cổng để truyền ra cáp bên ngoài, máy tính sẽ gửi byte này trên bus dữ liệu bên trong máy tính. ra tới địa chỉ vào ra của cổng COM. Cổng COM sẽ giữ byte này, và gửi nó ra ngoài từng bit một (dòng truyền bit dữ liệu) qua chân truyển của cổng. Byte này được đưa vào một thanh ghi dịch bên trong cổng. Các bit trên thanh ghi cổng này được lấy từng byte một và được truyền từng bit một trên đường truyền nối tiếp. Khi bit cuối cùng được truyền đi thì thanh ghi dịch cần byte khác để truyền thì nó có thể yêu cầu CPU gửi cho nó một byte khác. Công việc có vể như đơn giản, song nó yêu cầu phải có thời gian trễ bởi vì CPU không thể đưa ra byte ngay lập tức do nó còn phải làm mốt số công việc khác không thể chỉ có việc quản lý cổng COM. Có một cách để giải quyết việc trễ thời gian này đó là sắp xếp lại mọi thứ để cho CPU gửi byte vào bộ đệm của cổng COM(trong phần cứng) trước khi thanh ghi dịch cần nó. Nhờ vậy khi thanh ghi dịch truyền byte của nó ra ngoài và đang cần một byte mới thì phần cứng của cổng COM chuyển byte tiếp theo từ bộ đệm của nó cho thanh ghi dịch mà không cần gọi CPU phát lệnh truyền một byte mới.
Kích thước của bộ đệm (phần cứng) của cổng COM trước đây chỉ là một byte, nhưng hiện nay thông thường có 16 byte. Hiện này vẫn tồn tại vấn đề về giữ bộ đệm cung cấp đầy đủ byte để khi thanh ghi dịch cần byte để truyền nó sẽ luôn tìm thấy (trừ khi không có byte nào để gửi đi nữa). Điều này được thực hiện bằng việc kết nối với CPU bằng việc sử dụng “ngắt”. Ngắt ở đây có thể hiểu là sự dừng công việc đang thực hiện để thực hiện một công việc ở vị trí khác, và sẽ trở lại làm công việc này sau khi hoàn thành công việc ở ngắt. Ở đây có thể xem công việc của ngắt là quá trình cung cấp dữ liệu cho bộ đệm của cổng COM. CPU khi có ngắt gọi sẽ tạm dừng công việc mà nó đang làm để cung cấp dữ liệu cho bộ đệm cổng COM. Sau khi cung câp xong dữ liệu thì nó sẽ trở lại công việc của nó.
Với trường hợp của cổng COM cũ với 8 bit trong bộ đệm. Khi thanh ghi dịch lấy byte ra khỏi bộ đệm và nó yêu cầu một byte khác. Lúc này nó sẽ gửi ngắt tới CPU bằng cách đưa một điện áp lên dây chức năng chuyên dụng lên bus của máy tính. Trừ khi CPU đang làm một công việc gì cực kỳ quan trọng mà không cho phép ngắt này được thực hiện, còn trong các trường hợp còn lại thì ngắt sẽ tác động đến CPU để nó dừng công việc đang thực hiện và bắt đầu thực hiện một chương trình dùng để cung cấp một byte khác cho bộ đệm của cổng COM. Mục đích của bộ đệm này là dữ một byte dự trữ trong hàng đợi (trờ để truyền) trong phần cứng để không bị trống trong quá trình truyền các byte dữ liệu ra cáp của cổng COM.
Đối với CPU, một khi nhận được ngắt, nó sẽ biết ai đã gửi ngắt cho nó vì có một dây ngắt đặc thù cho mỗi cổng COM (trừ khi các ngắt bị chia sẻ). Tiếp đó CPU sẽ chạy thiết bị nối tiếp để kiểm tra địa chỉ của cổng gửi ngắt. Nó sẽ thấy bộ đệm của cổng này bị trống và đang đợi một byte gửi vào. Vì vậy nếu có byte để gửi thì nó sẽ chuyển byte kế tiếp để truyền vào trong bộ đệm. Byte sẽ được kế tiếp có thể được đưa vào bộ đệm trong khi byte trước nó đang ở trong thanh ghi dịch truyền dữ liệu và đang trong quá trình truyền dữ liệu từng bit một.
Tóm lại khi một byte đã truyền hoàn toàn ra đường truyền của cổng COM và thanh ghi dịch đang trống thì sẽ có 3 vấn đề xảy ra gần như là đồng thời:
Byte kế tiếp sẽ được chuyển từ bộ đệm truyền của cổng COM vào thanh ghi dịch truyền dữ liệu.Quá trình truyền dữ liệu từng bit một của byte mới bắt đầu Một ngắt khác được phát ra để báo cho cho thiết bị biết để gửi một byte khác tới bộ đệm hiện thời đang trống.
Vì vậy có thể coi cổng COM là một thiết bị hoạt động có ngắt. Mỗi khi cổng COM phát ra một ngắt thì CPU sẽ truyền cho nó một byte khác. Một khi một byte được gửi tới bộ đệm bởi CPU, CPU sẽ tiếp tục tự do để thực hiện hàng động khác cho tới khi nó nhận được một ngắt khác. Cổng COM sẽ truyền dữ liệu các bit với tốc độ thích hợp với tốc độ được chọn bởi người sử dụng (hoặc một trình ứng dụng nào đó). Tốc độ này được gọi là baudrate. Ngoài ra cổng COM cũng thêm các bit như bit start, stop, đôi khi cả parity vì vậy thường có tới 1 bit được gửi trong mỗi byte dữ liệu. Ở tốc độ 19200 bps sẽ có 1920 byte/sec (và cùng có tới 1920 ngắt/sec).
Để thực hiện tất cả các công việc này thì CPU phải làm rất nhiều việc. Đầu tiên là gửi 8 byte 8 bit trong một lần trong khi bus dữ liệu của máy tính là 32 bit (hoặc có thể lên tới 64 bit). Việc này đã không sử dụng hiệu quả độ rộng của bit dữ liệu. Tiếp đó là có quá nhiều các ngắt cần xử lý và việc xử lý các ngắt cũng yêu cầu nhiều việc. Khi một ngắt được nhận vào, thiết bị điều khiển chỉ biết là có ngắt ở cổng mà không biết đó là ngắt yêu cầu thêm ký tự vào chỗ ký tự đã được truyền đi. Thiết bị điều khiển phải làm rất nhiều sự kiểm tra để phát hiện ra cái gì đã xảy ra dẫn đến ngắt. Bởi khi một ký tự được nhận cũng có cùng ngắt như vậy cộng thêm đường điều khiển thay đổi trạng thái…Với tốc độ truyền chậm thì việc có bộ đệm nhận 1 byte không là vấn để gì nhưng khi tốc độ cao hơn thì sẽ có thể đẫn đển việc CPU không thể thực hiện công việc của UART đúng lúc gây ra sự ghi đè dữ liệu (trong khi nhận dữ liệu) gây ra các lỗi “overrun” hay “overflow”.
Một sự tiến bộ lớn đó là tăng dung lượng bộ đệm của cổng COM từ 1 byte lên tới 16 byte. Điều này nghĩa là khi CPU nhận được ngắt nó có thể đưa vào bộ đệm tới 16 byte tiếp để truyền. Nó làm cho ngắt ít hơn để làm các công việc khác trong khi dữ liệu vẫn được gửi từng byte trên một độ rộng bit. Với 16 byte không những bộ đệm có thể đợi nhiều byte hơn mà có thể nhận tới 16 byte một lúc. Bộ đệm 16 byte thực sự là một hàng đợi kiểu FIFO (First In First Out)- vào trước ra trước.
application 8k-byte 16-byte 1k-byte tele-
BROWSER ------- MEMORY -------- FIFO --------- MODEM -------- phone
program buffer buffer buffer line
Quá trình nhận dữ liệu từ các byte bởi cổng COM cũng giống như việc truyền chúng chỉ khác là có chiều ngược lại. Nó cũng cần gọi ngắt. Với loại cổng COM kiểu cũ, khi một byte được nhận đầy đủ. từ cáp bên ngoài nó được được chuyển vào bộ đệm nhận 1 byte. Tiếp đó cổng sẽ đưa cho CPU một ngắt để báo rằng nó nhận được một byte yêu cầu lấy byte đó đi để nó có thể có chỗ trống cho byte tiếp theo đang được nhận về. Với cổng COM mới thì ngắt sẽ đươc đưa ra khi có tới 14 byte được nhận vào trong bộ đệm. Khi đó CPU sẽ thực hiện việc lấy 14 hoặc 16 byte ra khỏi bộ đệm. Trong quá trình thực hiện ngắt có thể có thêm 2 byte nữa được nhận vào trong bộ đệm. Nếu như có tới 3 byte được đưa vào trong thời gian này thì sẽ gây ra lỗi Overrun. Để chắc chắn không xảy ra lỗi này, có thể phát tín hiệu gọi ngắt khi bộ đệm có ít hơn 14 byte. Việc đặt bao nhiêu phần trăm bộ đệm thì phát tín hiệu ngắt cho CPU lấy dữ liệu ra tùy thuộc vào người phần mềm bên trong. Nếu đặt 1 byte thì nó sẽ hoạt động như cổng COM kiểu cũ (trừ trường hợp trong bộ đệm đã có 15 byte đầy).
Tại sao bộ đệm FIFO lại nhỏ như vậy, tại sao không làm nó lớn. Lý do có phải là do giá làm bộ nhớ đắt hay không? Đây chắc chắn sẽ là thắc mắc đối với người biết về cấu trúc của bộ đêm FIFO. Câu trả lời đó là không phải bởi vì giá bộ nhớ rất rẻ nên không có vấn đề gì về giá khi tăng bộ đệm này lên kilobyte. Vấn đề ở đây chính là do việc điều khiển đường truyền trong quá trình truyền nhận dữ liệu. Chế độ điều khiển đường truyền có thể làm dừng lại dòng chảy của dữ liệu trên đường truyền nối tiếp khi thấy cần thiết. Nếu một tín hiệu stop được ra cổng COM, tiếp đó việc yêu cầu dừng lại được giữ bởi chế độ Software phần cứng của cổng COM không biết về điều khiển đường truyền. Nếu bộ đệm của cổng COM chứa 64 byte sẵn sàng để truyền đi khi nó nhận tín hiệu điều khiển đường truyền để dừng quá trình truyền lại, nó sẽ gửi 64 byte ra một cách lộn xộn trong khi bị bắt dừng lại. Sẽ không có sự dừng lại quá trình gửi vì nó không biết về chế độ điều khiển này. Nếu như bộ đệm lớn hơn thì sẽ có nhiều byte hơn bị gửi trong khi bị yêu cầu bắt buộc dừng của chế độ điều khiển đường truyền.
Mặc dù không để cho bộ đệm truyền ở phần cứng lớn nhưng trong chế độ truyền thông nối tiếp cũng có các bộ đệm nối tiếp lớn hơn 16 byte. Đó là các bộ đệm được lấy trong bộ nhớ chính. Chúng được sử dụng như sau:
Khi CPU lấy được các byte từ bộ đệm 16 byte nó đặt các byte này vào bộ đệm lớn hơn lấy trong bộ nhớ chính (Khoản 8k-byte). Tiếp đó chương trình lấy dữ liệu từ cổng COM sẽ lấy dữ liệu từ bộ đệm lớn hơn này. Đối với truyền dữ liệu cũng tương tự. Khi CPU cần phải nạp một số byte để truyền nó lấy chúng ra khỏi một bộ đệm truyền lớn (8k-byte) trong bộ nhớ chính và đưa chúng vào trong bộ đệm truyền 16 byte trong phần cứng.
4.2.3.3 Các loại truyền thông nối tiếp
Có hai loại truyền thông nối tiếp đó là đồng bộ và không đồng bộ. Truyền thông đồng bộ cho phép tốc độ truyền dữ liệu nhanh hơn phương thức không đồng bộ. Bởi vì các bit thêm để đánh dấu đầu và cuối byte là không yêu cầu. Cổng COM của máy tính là thiết bị không truyền thông không đồng bộ cho nên nó chỉ hỗ trợ cho truyền thông nối tiếp không đồng bộ.
Truyền thông không đồng bộ không yêu cầu truyền hay nhận các ký tự vô nghĩa. Tuy nhiên nó yêu cầu có các bit đánh đấu đầu và cuối của mỗi byte dữ liệu được gửi đó là các bit start, stop.Cổng nối tiếp (COM) thường là RS-232-C, EIA-232-D hoặc EIA-232-E. Chuẩn RS232 là chuẩn điện áp ±12V không tương thích với TTL, trong khi vi điều khiển chỉ tương thích với chuẩn TTL. Vì vậy, cần có mạch chuyển đổi giữa RS232 sang TTL. Các vi mạch chuyển đổi từ RS232 sang TTL rất thông dụng trên thị trường như DS275 hoặc MAX232. Phần này chỉ đề cập đến giải pháp sử dụng MAX232 làm bộ chuyển đổi . Cấu tạo của MAX232 được trình bày trên hình 4.11.
Hình 4.11: MAX232
Trên MAX232 có 2 bộ chuyển đổi RS232. Các chân Tout và Rin là các chân đầu ra chuẩn tương thích với chuẩn RS232 còn các chân Tin và Rout là các chân tương thích với TTL. Nguyên lý hoạt động của MAX232 có thể mô tả như sau: Khi có mức 1 (5V) trên chân Tin, tụ C2 và C4 đảo ngựơc điện áp 5V và nhân đôi nó lên trở thành mức -10V. Khi có mức 0 trên chân Tin, tụ C1 và C3 nhân đôi điện áp 5V lên thành 10V. Giá trị các tụ C1, C2, C3, C4 thông thường được chọn là 10uF. Mạch chuyển đổi sử dụng MAX232 tỏ ra ổn định ở toàn bộ dải truyền của chuẩn RS232.
4.2.4. Khối driver điều khiển động cơ
4.2.4.1. Giới thiệu về IC cầu H MC33886
Để điều khiển động cơ một chiều ta cần phải thiết kế Driver cho động cơ. Ta sẽ sử dụng IC cầu H MC33886 để điều khiển. MC33886 là một cầu H đơn dùng để điều khiển động cơ một chiều. Có nguồn logic bên trong, sau khi đã cấp nguồn cho cầu H từ 5V – 30V nó tự động tạo ra nguồn logic ở bên trong cầu H. Một đầu ra báo lỗi hiển thị dưới dạng điện áp, báo trạng thái quá dòng, quá điều kiện nhiệt độ cho phép. Hai đầu vào độc lập để điều khiển cầu H. MC33886 có dải nhiệt độ làm việc từ đến và giải điện áp làm việc từ 5V đến 30V.
Tổng quan về IC cầu H MC 33886
MC 33886 có 20 chân
Giải điện áp làm việc từ 5V đến 30V
Đầu váo so sánh TTL/CMOS
Tần số PWM là 10 kHz
Tự động giới hạn quá dòng PWM
Bảo vệ ngắn mạch đầu ra
Báo lỗi trạng thái
Hình 4.12: Sơ đồ ghép nối đơn giản giữa MC33886 với bộ điều khiển
Hình 4.13: Sơ đồ khối bên trong của MC33886
Hình 4.14: Sơ đồ chân của MC33886
Môt tả chức năng của các chân:
Chân
Tên chân
Mô tả
1
AGND
Chân đất
2
FS
Báo lỗi trạng thái
3
IN1
Điều khiển đầu ra 1
4,5,16
PWR
Kết nối với nguồn dương
6,7
OUT1
Đầu ra 1 của cầu H
8,20
DNC
Không nối
9,12
PGND
Nối đất
14,15
OUT2
Đầu ra 2 của cầu H
19
IN2
Điều khiển đầu ra 2
Đặc tính
Ký hiệu
min
typ
max
Đơn vị
Tần số PWM
-
10
-
kHz
Tần số giới gạn trong quá trình hoạt động
-
-
20
kHz
Thời gian trễ khi bật đầu ra
-
-
18
Thời gian trễ khi tắt đầu ra
-
-
18
4.2.4.2. Sơ đồ nguyên lý của driver điều khiển động cơ
IC cầu H MC 33886 có 2 chân IN1 và IN2 để có thể điều khiển đảo chiều động cơ. Do ở đây chúng em chỉ điều khiển tốc độ nên chỉ sử dụng chân IN1 để điều khiển tốc độ. Chân IN1 của IC cầu H MC33886 được nối với chân PWM thuộc timer1 của vi điều khiển. Sơ đồ nguyên lý được trình bày dưới hình 4.15.
Hình 4.15: Sơ đồ nguyên lý mạch driver điều khiển động cơ
Hình 4.16: Mạch driver điều khiển động cơ sau khi đã thiết kế
4.2.5. Giao tiếp với bàn phím
Bàn phím cần điều khiển sẽ được bố trí thành một ma trận gồm 8 hàng x 8 cột. Các hàng và các cột được nối với nhau qua các phím. Cứ mỗi khi có một phím được nhấn thì 2 chân của nó sẽ được nối với nhau tức là sẽ có một hàng nối với một cột. Khi đó hàng và cột này sẽ có cùng một giá trị logic. Như vậy nếu giữ nguyên giá trị logic của hàng đó thì giá trị của cột phụ thuộc vào phím có được nhấn hay không. Từ đó một phím được nhấn sẽ có thể được phát hiện bằng cách quét lần lượt các hàng và xem xét có sự thay đổi nào không trên các cột. Lúc đầu các hàng và các cột sẽ được kéo lên mức cao. Lần lượt một (và chỉ một) hàng sẽ bị kéo xuống mức thấp và giá trị của các cột sẽ được kiểm tra ngay sau đó. Nếu có phím được nhấn thì lập tức cột tương ứng sẽ nhảy xuống mức thấp. Còn nếu không có phím nào được nhấn thì giá trị của các cột vẫn ở mức cao. Từ đó sẽ nhận được giá trị hàng và cột có mức thấp tương ứng với phím được nhấn. Thời gian quét sẽ được chọn hợp lý để
không bỏ qua bất kỳ một phím nào được nhấn và sẽ không quét quá nhanh sẽ không tốt cho mạch và chương trình.
Hình 4.17: Sơ đồ bàn phím
4.3 Thiết kế giao diện bảng điều khiển
Việc sử dụng cổng COM đi kèm với một giao diện phù hợp tiện dụng cộng thêm khả năng tùy biến hiệu quả và linh động với yêu cầu tương thích cao với máy tính và với hệ điều hành khác nhau của Window nên lựa chọn VB 6.0 là một lựa chọn phù hợp.
Hình 4.18: Giao diện đầu tiên của bảng điều khiển
Hình 4.18 mô tả giao diện trang đầu tiên ngay khi mở ra chỉ bao gồm một nút duy nhất là nút PID-NEURAL và các lời giới thiệu về ứng dụng đang sử dụng, những thành viên tham gia xây dựng ứng dụng này. Từ giao diện này sau khi bấm nút PID-NEURAL chương trình sẽ đưa chúng ta tới với trang thứ 2 là một cửa sổ làm việc thông qua hai lệnh cơ bản của VB6.0 . Kế đó ngay lập tức chương trình sẽ đưa ta tới cửa sổ làm việc được mô tả ở hình 4.19.
Hình 4.19: Cửa sổ làm việc
Cửa sổ làm việc có tất cả 4 nút bấm là các nút Gui, Ghi file, Tro lai menu chinh và Ve lai. Có 3 ô hiển thị số dưới dạng text là các ô VAN TOC DAT, VAN TOC THUC, SAI SO cùng với một cửa sổ đồ họa để vẽ lại hình ảnh 2D mà các thông số của hệ thống đang thiết lập.
Nút Gui dùng để tải dữ liệu từ máy tính xuống mạch phần cứng trực tiếp chạy bộ điều khiển PID-NEURAL thông qua cổng Com được nối từ Com1 của máy tính và USART1 của chíp ATMEGA128. Việc gửi dữ liệu này thực chất là việc gửi 6 Byte liên tiếp nhau trong đó có 1 Byte chứa mã dữ liệu gửi xuống và 5 Byte chứa nội dung của dữ liệu.
Nút Ghi file dùng để lưu lại toàn bộ các giá trị tốc độ thực gửi lên dưới dạng một file text. Đây là giải pháp để lưu trữ thông tin dùng cho những việc mô phỏng và nhận dạng đối tượng điều khiển thông qua một công cụ rất mạnh hiện thời đó là MATLAB
Nút Ve lai là nút yêu cầu xóa toàn bộ những gì đã vẽ được trên giao diện đồ họa và vẽ lại từ đầu.
Nút Tro lai menu chinh là nút quay trở lại giao diện đầu tiên khi chương trình mới được bật và cũng là nút để chấm dứt việc sử dụng cổm com nhằm tránh xẩy ra tranh chấp khi các ứng dụng khác cũng sử dụng cổng này.
Ba ô hiển thị số thì người dùng chỉ có thể tương tác và thay đổi nội dung duy nhất tại ô VAN TOC DAT, các ô kia là các ô thu thập dữ liệu và tự động hiển thị nên người dùng không nên và không được phép thay đổi là việc làm hợp lý. Ô VAN TOC DAT là nơi người dùng đánh vào tốc độ mà đối tượng điều khiển (DC motor) cần phải đạt được. Ô TOC DO THUC là ô sẽ tự động cập nhật các vận tốc thực thông qua các dữ liệu nhận được khi ATMEGA gửi lên. Còn ô SAI SO là ô tính toán phần trăm sai số thông qua các thông tin của hệ thống.
Giao diện đồ họa để vẽ đồ thị là một đối tượng NTGraph rất thông dụng và được cộng đồng Intenet xây dựng. Trên đồ thị sẽ vẽ hai đường trong đó có một đường mầu vàng là đường hiện thị giá trị đặt và đường mầu đỏ là đường để hiện thị giá trị thực. Các giá trị này được vẽ liên tục thông qua tập hợp các điểm và các đoạn thẳng rất nhỏ bằng việc cứ sau 0.1s sẽ được vẽ một lần nên nhìn hình ảnh hiển thị ta sẽ thấy như là một đường liên tục.
Đây là hình ảnh khi hệ thống đang chạy:
Hình 4.20: Mô tả hoạt động của hệ thống từ giao diện
4.3 Thiết kế hệ thống điều khiển trên nền bộ điều khiển PID-Neural
4.3.1 Mô hình điều khiển
Hình 4.21: Sơ đồ khối hệ thống điều khiển
Bộ điều khiển dùng để điều khiển là bộ điểu khiển PID-Neural có chỉnh định thích nghi trọng số. Hình 4.1 là hệ thống điều khiển sử dụng bộ điều khiển PID-Neural. Hình 4.2 là sơ đồ mạng nơron của bộ điều khiển. Bộ điều khiển sử dụng mạng nơron 2 lớp, 3 đầu vào, 1 đầu ra. Lớp đầu vào có 2 nơron, lớp đầu ra có 1 nơron.
Hình 4.22: Cấu trúc mạng nơron của bộ điều khiển
Hàm truyền của mạng nơron đầu tiên của lớp đầu vào có 2 đầu vào là . Hàm truyền của nơron là hàm tansig: . Hàm truyền của mạng nơron
thứ 2 của lớp đầu vào là . Hàm truyền của nơron này là hàm gaussian: . Hàm truyền của nơron lớp ra là hàm purelin: .
Theo yêu cầu của việc điều khiển, khi là số lớn thì cần tăng độ lớn của tín hiệu điều khiển, khi là số nhỏ thì cần giảm tín hiệu điều khiển nên chọn hàm truyền của nơron thứ nhất là hàm tansig. Ban đầu sai lệch tích lũy nhỏ cần tăng tín hiệu điều khiển, sau đó theo thời gian điều khiển sai lệch này tăng dần thì cần giảm tín hiệu điều khiển nên chọn chọn hàm truyền của nơron thứ hai là hàm gaussian. Hình 4.23 và 4.24 lần lượt là đồ thị các hàm tansig và gaussian.
Hình 4.23: Hàm tansig
Hình 4.24: Hàm gaussian
4.3.2 Chỉnh định các trọng số và tính toán đầu ra
Việc chỉnh định các trọng số hay còn gọi là huấn luyện mạng nơron được thực hiện theo thuật toán Brandt-Lin. Áp dụng thuật toán Brandt-Lin tương tự như chương 2, các trọng số được chỉnh định như sau:
và
và
Với
Với:
Đầu ra của bộ điều khiển:
4.5 Đánh giá kết quả thực nghiệm
Động cơ 1 chiều được sử dụng dùng nguồn 24 V, có gắn encoder với độ phân dải là 200 xung/vòng. Tín hiệu điều khiển là tín hiệu mức. Ban đầu mức điều khiển là 1000 vòng/phút, sau đó giảm mức điều khiển xuống 800 vòng/phút và lại
quay lại với tốc độ là 1000 vòng/phút. Công thức tính tốc độ động cơ theo số xung đo được từ encoder là:
(vòng/phút)
Kết quả điều khiển:
Hình 4.25: Kết quả thử nghiệm với động cơ điện một chiều
Nhận xét: Ở mức 1000 vòng/phút, động cơ đạt được xác lập ở giá trị này với sai số trên dưới 1.5%, khi giá trị đặt là thấp thì sai số lớn hơn. Do độ phân giải encoder của động cơ thấp
Chương 5: KẾT LUẬN
Quá quá trình nghiên cứu lý thuyết về mạng nơron, thấy được nhiều ưu điểm nên chúng em đã sử dụng mạng nơron để ứng dụng vào trong điều khiển. Sau khi tiến hành mô phỏng với nhiều đối tượng, quán tính bậc 2, đối tượng có thành phần tích phân, không ổn định và đối tượng phi tuyến chúng em đã quyết định sử dụng động cơ một chiều làm đối tượng thử nghiệm cho bộ điều khiển.
Qua quá trình nghiên cứu và kiểm chứng bằng thực tế với động cơ điện một chiều. Em thấy kết quả khá tốt, với bộ vi xử lý 8 bit sau một khoảng thời gian học khoảng 2 tiếng thời gian xác lập giảm xuống khoảng 1,5s, không có độ quá điều chỉnh, khả năng tự chỉnh định khi có tải, nhiễu tải nhưng sự thích ứng là hơi chậm do tốc độ phản hồi đầu ra vì vậy mà mà có trễ trong qua trình chỉnh định tham số của mạng. Với việc sử dụng bộ vi xử lý 8 bit như hiện nay vẫn còn một số hạn chế về mặt tốc độ, thời gian tính toán các thông số của mạng là van còn chậm và quá trình học còn dài.
Hướng phát triển sắp tới của chúng em là sẽ ứng dụng trên một vi xử lý có tốc độ cao hơn để có thể tăng tốc độ tính toán của mạng cũng như áp dụng cho đối tượng lớn hơn như động cơ xoay chiều 3 fa
Ứng dụng mạng nơron trong điều khiển là khá mới mẻ vì vậy em mong muốn mạng nơron có thể được ứng dụng rộng rãi hơn ở Việt Nam đặc biệt là trong lĩnh vực điều khiển.
Tài liệu tham khảo
[1] Phan Xuân Minh và Nguyễn Doãn Phước, “Lý thuyết điều khiển mờ”, Nhà xuất bản Khoa học và Kỹ thuật, 2004.
[2] Phạm Công Ngô, “Lý thuyết điều khiển tự động”, Nhà xuất bản Khoa học và Kỹ thuật , 2001.
[3] Ngô Diên Tập, “Kỹ thuật vi điều khiển với AVR”, Nhà xuất bản Khoa học và Kỹ thuật, 2003.
[4] R. D. Brandt, F. Lin, “Adaptive Interaction and Its Application to Neural Networks”, Elsevier, Information Science 121, pp 201-215 1999.
[5] F. Lin, R. D. Brandt, G. Saikalis, “Self-Tuning of PID Controllers by Adaptive Interaction”, IEEE control society, 2000 American Control Conference, Chicago, 2000.
[6] Madan M.Gupta, Liang Jin and Noriyasu Homma, “Static and Dynamic Neural Networks: From Fundamentals to Advanced Theory”, John Wiley & Sons, 2003.
[7] Nikola K.Kasabov, “Foundation of Neural Networks, Fuzzy Systems, and Knowledge Engineering”, A Bradford Book, The MIT Press,1998.
[8] Atmega128, Datasheet.
Các file đính kèm theo tài liệu này:
- [webtailieu.net]-DDientu11.doc