Bộ UART giao tiếp máy tính theo chuẩn RS-232

Một phần của tài liệu nghiên cứu thiết kế điều khiển động cơ điện một chiều bằng bộ điều khiển pid (Trang 90 - 102)

Bộ UART trong AVR được khai báo như sau:

#define RXB8 1 #define TXB8 0 #define UPE 2 #define OVR 3

GVHD: Ths. Nhữ Khải Hoàn SVTH: Trần Thanh Toàn #define FE 4

#define UDRE 5 #define RXC 7

#define FRAMING_ERROR (1<<FE) #define PARITY_ERROR (1<<UPE) #define DATA_OVERRUN (1<<OVR)

#define DATA_REGISTER_EMPTY (1<<UDRE) #define RX_COMPLETE (1<<RXC)

// USART Receiver buffer #define RX_BUFFER_SIZE 8

char rx_buffer[RX_BUFFER_SIZE];

#if RX_BUFFER_SIZE<256

unsigned char rx_wr_index,rx_rd_index,rx_counter; #else

unsigned int rx_wr_index,rx_rd_index,rx_counter; #endif

// This flag is set on USART Receiver buffer overflow bit rx_buffer_overflow;

GVHD: Ths. Nhữ Khải Hoàn SVTH: Trần Thanh Toàn // USART Receiver interrupt service routine

interrupt [USART_RXC] void usart_rx_isr(void) {

char status,data; status=UCSRA; data=UDR;

if ((status & (FRAMING_ERROR | PARITY_ERROR | DATA_OVERRUN))==0)

{

rx_buffer[rx_wr_index]=data;

if (++rx_wr_index == RX_BUFFER_SIZE) rx_wr_index=0; if (++rx_counter == RX_BUFFER_SIZE) { rx_counter=0; rx_buffer_overflow=1; }; }; } #ifndef _DEBUG_TERMINAL_IO_

// Get a character from the USART Receiver buffer #define _ALTERNATE_GETCHAR_

GVHD: Ths. Nhữ Khải Hoàn SVTH: Trần Thanh Toàn #pragma used+ char getchar(void) { char data; while (rx_counter==0); data=rx_buffer[rx_rd_index];

if (++rx_rd_index == RX_BUFFER_SIZE) rx_rd_index=0; #asm("cli") --rx_counter; #asm("sei") return data; } #pragma used- #endif

// USART Transmitter buffer #define TX_BUFFER_SIZE 8

char tx_buffer[TX_BUFFER_SIZE];

#if TX_BUFFER_SIZE<256

unsigned char tx_wr_index,tx_rd_index,tx_counter; #else

GVHD: Ths. Nhữ Khải Hoàn SVTH: Trần Thanh Toàn unsigned int tx_wr_index,tx_rd_index,tx_counter;

#endif

// USART Transmitter interrupt service routine interrupt [USART_TXC] void usart_tx_isr(void) {

if (tx_counter) {

--tx_counter;

UDR=tx_buffer[tx_rd_index];

if (++tx_rd_index == TX_BUFFER_SIZE) tx_rd_index=0; };

}

#ifndef _DEBUG_TERMINAL_IO_

// Write a character to the USART Transmitter buffer #define _ALTERNATE_PUTCHAR_

#pragma used+ void putchar(char c) {

while (tx_counter == TX_BUFFER_SIZE); #asm("cli")

GVHD: Ths. Nhữ Khải Hoàn SVTH: Trần Thanh Toàn if (tx_counter || ((UCSRA & DATA_REGISTER_EMPTY)==0))

{

tx_buffer[tx_wr_index]=c;

if (++tx_wr_index == TX_BUFFER_SIZE) tx_wr_index=0; ++tx_counter; } else UDR=c; #asm("sei") } #pragma used- #endif

GVHD: Ths. Nhữ Khải Hoàn SVTH: Trần Thanh Toàn

Chương 6: KẾT QUẢ NGHIÊN CỨU 6.1. Hình ảnh thực tế đồ án:

6.1.1.Mạch công suất:

GVHD: Ths. Nhữ Khải Hoàn SVTH: Trần Thanh Toàn

6.1.3.Giao diện VB:

GVHD: Ths. Nhữ Khải Hoàn SVTH: Trần Thanh Toàn

6.1.5.Toàn mạch đồ án:

Mặt trước:

GVHD: Ths. Nhữ Khải Hoàn SVTH: Trần Thanh Toàn

6.2. Kết quả đạt được

Tìm hiểu tổng quang lý thuyết điều khiển tự động từ đó làm cơ sở cho việc xây dựng bộ điều khiển PID ứng dụng cho động cơ một chiều.

Các kết quả của việc xây dựng bộ điều khiển PID gồm:

- Xây dựng được mạch công suất, mạch điều khiển ATMEGA16.

- Xây dựng được mạch giao tiếp giữa ATMEGA16 và máy tính bằng RS232. - Xây dựng được mạch đọc tín hiệu từ Encoder để xác định tốc độ động cơ. - Lắp thành công mạch thực tế hoạt động tốt, đúng như yêu cầu đặt ra. Tuy nhiên một số vấn đề tồn tại, hạn chế cần giải quyết:

- Bộ điều khiển PID có tính đa dạng chưa cao vì phạm vi điều khiển chỉ ứng dụng cho động cơ một chiều.

- Bộ lập mã quang 2500 xung/vòng trong khi điện áp điều khiển chỉ có 24V nên làm giảm chu kỳ PID nên quá trình điều khiển PID chưa thực sự chính xác khi áp dụng cho các bộ điều khiển có yêu cầu chính xác cao hơn.

- Với mạch thực tế đang có thì điều khiển PID được thực hiện thông qua việc tìm các chỉ số KP, KI, KD bằng phương pháp thực nghiệm nên quá trình điều khiển PID chưa được tối ưu.

6.3.Hướng phát triển của đề tài:

Với những kết quả trên, và để đáp ứng yêu cầu điều khiển thực tế, một số hướng phát triển của đề tài sẽ là:

- Xây dựng các bộ điều khiển PID cho các hệ thống quá trình khác như: điều khiển vị trí…

- Sử dụng các bộ lập mã quang có độ phân giải cao hơn để tăng hiệu quả điều khiển PID.

GVHD: Ths. Nhữ Khải Hoàn SVTH: Trần Thanh Toàn

- Nghiên cứu các phương pháp tìm hệ số KP, KI, KD tối ưu nhằm tối ưu hoá việc điều khiển.

- Kết hợp với việc nghiên cứu các động cơ công suất lớn trong thực tế để áp dụng điều khiển PID cho các ứng dụng cụ thể trong sản xuất và đời sống…

GVHD: Ths. Nhữ Khải Hoàn SVTH: Trần Thanh Toàn

Tài liệu tham khảo Tài liệu tiếng Việt:

[1]. Đặng Hoài Bắc. Cơ sở điều khiển tự động. Học Viện Công Nghệ Bưu Chính Viễn

Thông, 2006

[2]. Nguyễn Duy Cương, Đào Bá Phong, Phan Xuân Minh. Một số phương pháp thiết kế

bộ điều khiển. Đại học Kỹ thuật Công Nghiệp Thái Nguyên, Đại học Bách Khoa Hà Nội.

[3]. Lê Vũ Hà. Giáo trình Kỹ thuật điều khiển, Trường Đại Học Công Nghệ, Đại Học Quốc Gia Hà Nội.

[4]. Huỳnh Thái Hoàng. Lý thuyết điều khiển tự động. Đại học Bách Khoa TP. Hồ Chí

Minh.

[5]Vi điều khiển PsoC. Bản dịch: Nguyễn Xuân Sơn.ĐHBK. HN.

[6]. Tài liệu lập trình hệ thống – giao tiếp cổng nối tiếp. Biên soạn: Phạm Hùng Kim

Khánh.

[7] Luận văn: Ứng dụng lý thuyết hiện đại thiết kế MODUL điều khiển động cơ . Sinh viên: Bùi Trung Hiếu. ĐHBK Tp HCM thực hiện

[8]. Kỹ thuật điện tử. Biên soạn: Đỗ Xuân Thụ. NXBGD. HN

Tài liệu tiếng Anh:

[9]. Robert A. Paz. 2001. The Design of the PID Controller. Klipsch School of Electrical

and Computer Engineering.

[10]. Dr M.J. Willis. 1999. Proportional-Integral-Derivative Control. Dept. of Chemical and Process Engineering University of Newcastle.

GVHD: Ths. Nhữ Khải Hoàn SVTH: Trần Thanh Toàn

Tài liệu trang web:

[11]. http://www.dieukhien.net [12]. http://dientuvietnam.net [13]. http://picvietnam.com

Một phần của tài liệu nghiên cứu thiết kế điều khiển động cơ điện một chiều bằng bộ điều khiển pid (Trang 90 - 102)