Đề tài Lý thuyết mạng nơron

Tài liệu Đề tài Lý thuyết mạng nơron: LỜI NÓI ĐẦU Con người luôn ngạc nhiên về khả năng lưu trữ, nhận dạng và xử lý thông tin của bộ não con người. Từ lâu, các nhà khoa học đã tìm hiểu, nghiên cứu và sáng tạo các giải pháp cho các bài toán kỹ thuật theo phương pháp xử lý của bộ não. Mạng nơron nhân tạo đã ra đời từ đó. Hiện nay, mạng nơron được ứng dụng trong nhiều lĩnh vực như nhận dạng, xử lý thông tin, dự báo và điều khiển. Đồ án của nhóm nghiên cứu khía cạnh ứng dụng trong điều khiển của mạng nơron. Không giống các lĩnh vực ứng dụng khác là việc tính toán mạng nơron được thực hiện bằng máy tính, khi áp dụng vào điều khiển, mọi tính toán của mạng nơron đều được thực hiện bằng vi điều khiển có tốc độ thấp hơn tốc độ máy tính rất nhiều nên yêu cầu thiết kế cấu trúc mạng gọn nhẹ để phù hợp với vi điều khiển và tối ưu thời gian điều khiển được đặt lên hàng đầu. Khi ứng dụng trong điều khiển cấu trúc mạng nơron sẽ bao gồm luôn cả đối tượng điều khiển nên không thể sử dụng các luật học thông thường như luật học lan truyền n...

doc94 trang | Chia sẻ: hunglv | Lượt xem: 1570 | Lượt tải: 2download
Bạn đang xem trước 20 trang mẫu tài liệu Đề tài Lý thuyết mạng nơron, để tải tài liệu gốc về máy bạn click vào nút DOWNLOAD ở trên
LỜI NÓI ĐẦU Con người luôn ngạc nhiên về khả năng lưu trữ, nhận dạng và xử lý thông tin của bộ não con người. Từ lâu, các nhà khoa học đã tìm hiểu, nghiên cứu và sáng tạo các giải pháp cho các bài toán kỹ thuật theo phương pháp xử lý của bộ não. Mạng nơron nhân tạo đã ra đời từ đó. Hiện nay, mạng nơron được ứng dụng trong nhiều lĩnh vực như nhận dạng, xử lý thông tin, dự báo và điều khiển. Đồ án của nhóm nghiên cứu khía cạnh ứng dụng trong điều khiển của mạng nơron. Không giống các lĩnh vực ứng dụng khác là việc tính toán mạng nơron được thực hiện bằng máy tính, khi áp dụng vào điều khiển, mọi tính toán của mạng nơron đều được thực hiện bằng vi điều khiển có tốc độ thấp hơn tốc độ máy tính rất nhiều nên yêu cầu thiết kế cấu trúc mạng gọn nhẹ để phù hợp với vi điều khiển và tối ưu thời gian điều khiển được đặt lên hàng đầu. Khi ứng dụng trong điều khiển cấu trúc mạng nơron sẽ bao gồm luôn cả đối tượng điều khiển nên không thể sử dụng các luật học thông thường như luật học lan truyền ngược mà cần tìm 1 luật học khác phù hợp hơn. Sau một thời gian dài tìm kiếm, nhóm đã tìm ra được thuật toán Brandt-Lin làm giải pháp cho việc huấn luyện mạng nơron. Thuật toán Brandt-Lin là sản phẩm do 2 nhà khoa học Robert D. Brandt và Feng Lin đưa ra. Trong đồ án này, ngoài việc thực hiện tốt các mô phỏng, nhóm đã tiến hành điều khiển thực tế được động cơ 1 chiều có công suất nhỏ và với các yêu cầu điều khiển không cao. Do hạn chế về dụng cụ thí nghiệm nên bộ điều khiển dựa trên mạng nơron của nhóm mới chỉ ứng dụng điều khiển 1 đối tượng ở điều kiện đơn giản nên chưa thể khẳng định sẽ điều khiển thành công với các loại đối tượng khác. Đồ án của nhóm chắc hẳn còn nhiều sai sót mà bản thân các thành viên trong nhóm chưa phát hiện ra. Do vậy nhóm rất hy vọng nhận được sự chỉ bảo của thầy cô, bạn bè và người đọc. Chúng em, những thành viên trong nhóm làm đồ án xin gửi lời cảm ơn đến phó giáo sư, tiến sĩ Phan Xuân Minh đã tận tình hướng dẫn chúng em hoàn thành đồ án này. Ngay từ ban đầu cô đã đặt ra mục tiêu rõ ràng và cao giúp cả nhóm thấy rõ những việc mình cần hoàn thành. Cô cung cấp cho nhóm những lời khuyên mang tính định hướng đúng đắn khi nhóm gặp khó khăn trong quá trình nghiên cứu. Nhóm cám ơn những người bạn đã hỗ trợ, cung cấp những tài liệu về mạng nơron quý giá và giúp đỡ về mặt thiết kế, nhờ đó mà đồ án này được hoàn thành đúng hạn. Hà Nội, ngày 30 tháng 5 năm 2007 Nhóm thực hiện đồ án Nguyễn Ngọc Hải Cao Thế Phong Võ Đoàn Quế Anh CHƯƠNG 1: LÝ THUYẾT MẠNG NƠRON 1.1 Nơron tự nhiên Thành phần cấu thành cơ bản của hệ thần kinh trung ương là nơron. Tế bào sinh học này nhận và xử lý thông tin và sau đó giao tiếp với các phần khác của cơ thể con người. Hình 1.1 trình bày một mô hình đơn giản các nơron sinh học và hình 1.2 mô tả một nơron sinh học. Thân tế bào thần kinh được gọi là soma và được bao quanh bởi một lớp mạng huyết tương mỏng. Hình 1.1: Sơ đồ 5 nơron liên kết với nhau Hình 1.2: Sơ đồ một nơron sinh học Mỗi tế bào thần kinh nhận nhiều đầu vào thông qua các dendrite và sau khi xử lý sẽ tạo một đầu ra dọc theo axon. Điểm nối giữa một axon và một dendrite được gọi là synapse. Thông tin do một tế bào thần kinh tạo ra được truyền dọc theo axon của nó. Một axon kết thúc ở mối nối khớp của một nơron khác. Về mặt xử lý thông tin, một nơron với nhiều dendrite như nhiều đầu vào và một axon đại diện một đầu ra có thể được xem như một hệ MISO. Các hàm xử lý thông tin trong hệ MISO này được chia thành 4 loại. Hình 1.3 mô tả một nơron đơn giản. Hình 1.3: Mô hình một nơron đơn giản có nhiều đầu vào và một đầu ra Dendrites: Chúng bao gồm một cây nhiều nhánh, đóng vai trò như các đầu vào của nơron. Trung bình có dendrite trên một nơron. Synapse: Đây là vùng chứa đựng các kinh nghiệm trong quá khứ. Nó cung cấp bộ nhớ dài hạn cho các kinh nghiệm được thu thập trong quá khứ. Vùng này nhận thông tin từ các giác quan hay từ các nơron khác và cung cấp đầu ra thông qua axon. Soma: Thân tế bào thần kinh được gọi soma. Nó nhận thông tin từ synapse và sau đó xử lý thông tin. Hầu như tất các các chức năng logic của nơron được thực hiện ở soma. Axon: Đầu ra của nơron được gọi là axon. 1.2 Nơron nhân tạo Hình 1.4: Nơ-ron nhân tạo Cấu trúc một nơron nhân tạo (xem hình 1.4) bao gồm các thành phần sau: Đầu vào : Các đầu vào nhân với các trọng số . Một đầu vào có giá trị bằng 1 được gọi là 1 bias và được ký hiệu là . Hàm số đầu vào f tính tập hợp các tín hiệu đầu vào cho nơron , trong đó x và w lần lượt là các vectơ đầu vào và trọng số. Thông thường chọn f là hàm tổng . Hàm kích thích s tính toán mức độ kích thích của nơron a=s(u). Hàm đáp ứng tính toán giá trị tín hiệu đầu ra của nơron o=g(a). Tín hiệu đầu ra của tín hiệu thông thường bằng mức độ kích thích của nơron o=a. Tùy theo sự khác nhau của từng tham số ở trên mà sinh ra các kiểu nơron khác nhau. Các giá trị đầu vào và đầu ra của 1 nơron có thể số nhị phân {0,1}, số lai {-,1}, giá trị liên tục trong đoạn [0,1], hoặc các số rời rạc trong 1 khoảng được định nghĩa trước. Hình 1.5: Các hàm kích thích hay được sử dụng nhất: (a) Hàm chặn cứng; (b-1), (b-2) Các hàm chặn tuyến tính ; (c) Các hàm sigma: hàm logsig (c-1), hàm logsig 2 cực (c-2); (d) hàm gaussian (hàm hình quả chuông) Hình trên mô tả các loại hàm kích thích hay được sử dụng nhất. Hàm chặn cứng (hình 1.5[a]). Nếu giá trị đầu vào của mạng lớn hơn 1 giá trị chặn nào đó thì nơron trở nên tích cực (giá trị kích thích bằng 1), ngược lại nó sẽ không tích cực (giá trị kích thích bằng 0). Hàm chặn tuyến tính. Giá trị kích thích sẽ tăng tuyến tính cùng với sự tăng của tín hiệu đầu vào và khi đến một ngưỡng nào đó đầu ra sẽ bão hòa. Các kiểu hàm chặn tuyến tính khác nhau phụ thuộc vào phạm vi của giá trị đầu ra nơron (hình 1.5[b-1], 1.5[b-2]). Hàm sigma. Hàm sigma là hàm truyền phi tuyến hình chữ S được đặc trưng bởi các yếu tố sau. Bị chặn, các giá trị của nó bị hạn chế giữa 2 ngưỡng, ví dụ như [0 1], [-1 1]. Đơn điệu tăng, nghĩa là các giá trị của g(u) không bao giờ giảm khi u tăng. Liên tục và tăng, do đó có thể đạo hàm ở mọi điểm trong miền của hàm xác định của hàm. Các kiểu hàm sigma khác nhau được sử dụng trong thực tế là: hàm logsig (hình 1.5[c-1]) trong đó c là hằng số. Một hình thức khác của hàm logsig là hàm logsig 2 cực: (hình 1.5[c-1]) và hàm tansig: . Hàm gaussian (hàm hình quả chuông, hình 1.5[d]). 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 Mạng nơron nhân tạo là tập hợp các nơron nhân tạo được liên kết với nhau theo một quy luật nhất định nhằm phục vụ nhu cầu của người thiết kế mạng. Có 2 loại mạng nơron thường được sử dụng là mạng truyền thẳng và mạng hồi tiếp. Hình 1.6 mô tả mạng truyền thẳng và mạng hồi tiếp. Dù cấu trúc của mạng nơron thuộc loại nào thì mạng nơron đều có cấu tạo chung là được cấu thành từ các lớp. Lớp đầu tiên được gọi là lớp đầu vào (input layer), lớp cuối cùng được gọi là lớp đầu ra (output layer), các lớp giữa được gọi là các lớp ẩn (hidden layer). Hình 1.6 : (a) Mạng truyền thẳng ; (b) Mạng hồi tiếp Khi ứng dụng đối với một hệ động học, yêu cầu tính toán nhanh luôn được lên hàng đầu. Mạng hồi tiếp tốn nhiều thời gian để tính toán nên trong nội dung đồ án này, chúng em sử dụng mạng truyền thẳng. Sau đây sẽ xem xét một mạng nơron truyền thẳng và tính toán đầu ra của mạng. Ví dụ xét mạng nơron 2 lớp sau: Hình 1.7: Mạng nơron 2 lớp Gọi là trọng số của nơron thứ i, có đầu vào là j, thuộc lớp thứ k. là đầu vào thứ i, i=1,2,3 là đầu ra của nơron thứ i thuộc lớp ẩn, i=1,2,3. o là đầu ra của lớp đầu ra. , lần lượt là hàm truyền của lớp ẩn, lớp đầu ra. Tính đầu ra của các lớp: Lớp ẩn: Lớp đầu ra: 1.3.2 Thuật toán Brandt-Lin Tư tưởng của thuật toán Brandt-Lin chia nhỏ một hệ thống phức tạp thành N hệ thống con gọi là các nút. Mỗi nút có 1 tín hiệu đầu ra khả tích và nhiều tín hiệu đầu vào khả tích . Đầu vào và đầu ra của các nút được nối với nhau thông qua các trọng số. . Đặc tính động học của mỗi trạm được mô tả bằng một hàm nhân quả trong đó và là không gian đầu vào và đầu ra. Như vậy, đầu ra của nút thứ n được xác định bằng phương trình sau Hình 2.1: Phân tích 1 hệ thống theo thuật toán Brandt-Lin Định lý. Đối với một hệ thống có tính động học cho bởi (1) nếu các trọng số liên kết được thích nghi theo (2) thì chỉ số chất lượng sẽ giảm dần theo thời gian. Nói tóm lại là phương trình sau luôn thỏa mãn: (3) trong đó là hệ số thích nghi. Trong đó là trọng số liên kết của nút thứ j thuộc lớp l xuất phát từ nút thứ i. là đầu ra của nút thứ thứ j thuộc lớp l. là đầu vào của nút thứ j thuộc lớp l xuất phát từ nút thứ i. q là số lượng nhánh ra xuất phát từ nút thứ j của lớp l Chứng minh. Hình 2.2: Một phần của mạng nơron CHƯƠNG 2: GIỚI THIỆU ATMEGA 128 2.1 Đặc điểm của Atmega 128 Khả năng thực thi cao, công suất tiêu thụ thấp, bộ vi xử lý 8 bit Bộ vi xử lý với cấu trúc RISC : Có thể tính toán 16 triệu lệnh trên 1s ở tần số 16MHz Tạo ra đầy đủ các trạng thái 32 thanh ghi với mục đích làm việc và điều khiển thiết bị ngoại vi Bộ nhớ chương trình không đổi và bộ nhớ dữ liệu : Bộ nhớ dữ liệu chương trình là 128K Bytes với chu kì tẩy xóa cho bộ nhớ là 10 000 lần Bộ nhớ EEPROM là 4 K bytes với chu kỳ tẩy xóa là 100 000 lần Có 4 K Bytes bộ nhớ SRAM nội Có thể lựa chọn mở rộng không gian bộ nhớ ngoài lên 64 K Bytes Có chế độ khóa để bảo mật chương trình Giao tiếp SPI trong lập trình trong hệ thống Giao tiếp JTAG (theo chuẩn IEEE 1149.1) : Có khả năng quét danh giới theo chuẩn JTAG Mở rộng khả năng Debug trên chíp Bộ nhớ chương trình, EEPROM, các cầu chì, khóa các bit thông qua giao tiếp JTAG Các ngoại vi : Hai bộ Timer/Counter 8 bit hoạt động riêng rẽ và có chế độ so sánh Hai bộ Timer/Counter mở rộng 16 bit hoạt động riêng rẽ, chế độ so sánh và chế độ lưu trữ Bộ đếm thời gian thực với tần số dao động riêng Hai kênh PWM 8 bit Sáu kênh PWM với khả năng thay đổi được từ 2 đến 16 bit Khối so sánh đầu ra Tám kênh ADC 10 bit Hai khối giao tiếp USART có thể lập trình Giao tiếp nối tiếp SPI master/slave Watchdog và Timer có thể lập trình nhờ xung nhịp trên chip. Tự động reset khi treo máy Khối so sánh tương tự trên chip Các đặc trưng đặc biệt của vi điều khiển : Có nguồn ngắt bên trong và mở rộng Có khả năng lựa chọn xung clock bằng phần mềm Có sáu chế độ nghỉ : Idle, ADC noise Reduction, Power–save, Power–down, Standby, Standby mở rộng Có khả năng định cỡ xung dao động thời gian thực bên trong Các cổng vào ra : Gồm 53 chân có thể lập trình Chip có 64 chân Giải điện áp làm việc từ 4.5 V – 5.5 V Dải tốc độ từ 0 – 16 MHz Atmega128 là bộ vi điều khiển CMOS 8 bit tiêu thụ điện năng thấp dựa trên kiến trúc RISC. Công nghệ này cho phép các lệnh thực thi chỉ trong một chu kì nhịp xung, vì thế tốc độ xử lý dữ liệu có thể đạt đến 1 triệu lệnh trên giây ở tần số 1 Mhz. Vi điều khiển này cho phép người thiết kế có thể tối ưu hoá mức độ tiêu thụ năng lượng mà vẫn đảm bảo tốc độ xử lí. Phần cốt lõi của AVR kết hợp tập lệnh phong phú về số lượng với 32 thanh ghi làm việc đa năng. Toàn bộ 32 thanh ghi đều được nối trực tiếp với ALU (Arithmetic Logic Unit), cho phép truy cập 2 thanh ghi độc lập bằng một chu kì xung nhịp. Kiến trúc đạt được có tốc độ xử lý nhanh gấp 10 lần vi điều khiển dạng CISC thông thường. Atmega128 cung cấp những đặc tính sau: 128 K bytes bộ nhớ chương trình, 4K bytes bộ nhớ EEPROM, 4K bytes SRAM, 52 chân với mục đích vào ra thông thường, 32 thanh ghi làm việc với mục đích thông thường, bộ đếm thời gian thực (RTC), 4 bộ Timer/Counter với chế độ so sánh và PWM, 2 USARTs, 8 kênh ADC 10 bit với khả năng lựa chọn đầu vào và lập trình được hệ số khuếch đại, Watchdog timer có khả năng lập trình nhờ bộ tạo dao động bên trong, giao tiếp SPI, bộ giao tiếp kiểm tra lỗi theo chuẩn IEEE 1149.1, chỉ dùng để debug hệ thống và chương trình trên chip và khả năng lựa chọn 6 chế độ tiết kiệm năng lượng. chế độ Idle ngừng hoạt động của CPU trong khi cho phép SRAM, Timer/Counter, cổng SPI, hệ thống ngắt tiếp tục gọi hàm, chế độ power-down tiết kiệm lượng thanh ghi nhưng ổn định cho xung giao động, ko hoạt động các hàm khác cho đến khi có ngắt tiếp theo hoặc reset phần cứng. Ở chế độ power-save, Timer không đồng thời tiếp tục hoạt động, mà cho phép người sử dụng dùng một Timer cơ sở trong khi các thiết bị đang ở chế độ nghỉ. Chế độ giảm nhiễu cho ADC ngừng CPU và các module vào ra ngoại trừ timer và ADC, để giảm nhiễu xuống thấp nhất trong quá trình biến đổi ADC. Ở chế độ standby thạch anh dao động đang chạy trong khi các thiết bị khác ở chế độ nghỉ. Ở chế độ standby mở rộng bộ dao động chính và timer không đồng bộ tiếp tục chạy. 2.2 Mô tả các chân VCC : chân nguồn +5V GND: chân đất Port A Port B Port C Port D Port E Port F Port G Reset : dùng để reset lại hệ thống XTAL1 và XTAL2 : là hai chân để tạo dao động ngoài khi nối với thạch anh AVCC là chân nguồn cho cổng F và dùng để biến đổi ADC. Khi kết nối với VCC thì quá trình biến đổi ADC là chính xác hơn AREF là chân điện áp so sánh phục vụ cho quá trình biến đổi ADC PEN là chân enable cho chế độ giao tiếp SPI Hình 2.1 : Sơ đồ chân của Atmega128 Hình 2.2: Sơ đồ khối bên trong của Atmega 128 2.3 Kiến trúc tổng quan của Atmega128 Hình 2.3 : Biểu đồ khối cấu trúc của AVR 2.3.1 Bộ nhớ của Atmega128 Atmega 128 chứa 128 Kbytes chương trình và có chu kỳ tẩy xóa là 10 000 lần. Bộ đếm của Atmega 128 là 16 bit. Có thể nạp chườn trình cho chip qua cổng SPI, JTAG hoặc cổng song song Atmega 128 sử dụng kiến trúc Harvard với bộ nhớ dữ liệu và bộ nhớ chương trình tách biệt nhau. Hình 3.4 minh họa phác thảo kiến trúc bên trong của bộ điều khiển Atmega 128. Bus dữ liệu dùng cho bộ nhớ dữ liệu là một bus 8 bit, cho phép nối hầu hết các bộ phận ngoại vi với tệp thanh ghi. Bus dữ liệu dùng cho bộ nhớ chương trình có độ rộng 16 bit và chỉ nối với thanh ghi lệnh. Bộ nhớ chương trình là loại bộ nhớ Flash. Bộ nhớ chương trình được truy nhập theo từng chu kỳ đồng hồ, và một lệnh được nạp vào thanh ghi lệnh. Thanh ghi lệnh nối với tệp thanh ghi bằng cách lựa chọn xem thanh ghi nào sẽ được ALU sử dụng để thực thi lệnh. Lối ra của thanh ghi lệnh được giải mã bằng bộ giải mã lệnh để quyết định chọn tín hiệu điều khiển nào sẽ được kích hoạt để hoàn tành lệnh hiện tại. Bộ nhớ SRAM bên trong được sử dụng cho ngăn xếp cũng như để lưu trữ các biến. Trong thời gian có ngắt và gọi đoạn chương trình, giá trị hiện tại của bộ đếm chương trình được lưu tữ trong ngăn xếp. Vị trí của ngăn xếp được chỉ thị bởi con trỏ ngăn xếp. Hình 2.4 : Định dạng bộ nhớ của Atmega128 Atmega 128 cung cấp hai cấu hình khac nhau cho bộ nhớ SRAM, có thế sử dụng 4096 Bytes bộ nhớ ram trong hoặc 64 k Bytes bộ nhớ ram ngoài Hình 2.5 : Không gian địa chỉ bộ nhớ SRAM Bộ nhớ dữ liệu EEPROM của Atmega 128 là 4k Bytes, với chu kỳ tẩy xóa là 100 000 nghìn lần. sự truy nhập giữa EEPROM và MCU được mô tả như sau, nó được chỉ rõ trong các thanh ghi địa chỉ, thanh ghi dữ liệu và thanh ghi điều của EEPROM. 2.3.2 Tệp thanh ghi : Atmega 128 có 32 thanh ghi đa chức năng. Một số trong các thanh ghi này còn có các chức năng riêng, bổ sung . Các thanh ghi này được được đặt tên từ R0 đến R31.tất cả các lệnh thao tác trên thanh ghi đều có thể truy nhập 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:

  • doc[webtailieu.net]-DDientu11.doc