Nhận tín hiệu và điều khiển – vi điều khiển

Một phần của tài liệu Điều khiển cơ cấu từ xa sử dụng sự trợ giúp của máy tính (Trang 98)

c. Biến hằng và toán tử

3.2.2 Nhận tín hiệu và điều khiển – vi điều khiển

Vi điều khiển sử dụng là Atmega16. Của AVR, chức năng chính của mạch điều khiển là nhận tín hiệu điều khiển từ máy tính.

Đặc tính của Atmega16 các tính năng

• là dòng vi điều khiển 8 bit có hiệu suất cao, công suất thấp của Atmel ® - 16 Kbytes trong hệ thống tự lập trình bộ nhớ chƣơng trình Flash

- 512 Bytes EEPROM - 1 Kbyte SRAM nội bộ

- Nạp / Xoá bỏ chu kỳ : 10.000 Flash/100 , 000 EEPROM - Duy trì dữ liệu: 20 năm ở 85 ° C/100 năm ở 25 ° C - Tùy chọn khởi động Đoạn độc lập với Khóa Bits

Trong hệ thống lập trình bởi Chƣơng trình khởi động On-chip Đúng Read- Trong khi - Viết hoạt động

- Lập trình Khóa cho phần mềm bảo mật

• JTAG (IEEE std . 1149,1 Compliant ) Giao diện - Khả năng biên - quét Theo JTAG tiêu chuẩn - Mở rộng On-chip gỡ lỗi Hỗ trợ

- Lập trình Flash, EEPROM , cầu chì , và Khóa Bit thông qua giao diện JTAG • Các tính năng ngoại vi

- Hai 8-bit Timer / Counters với prescalers riêng biệt và so sánh các chế độ - Một 16-bit Timer / Counter với riêng Prescaler , So sánh chế độ , và Capture chế độ

99

- Bốn kênh PWM - 8 kênh , 10-bit ADC 8 kênh đơn đã kết thúc

7 kênh sai trong TQFP gói Chỉ

2 kênh phân biệt với lập trình Gain tại 1x , 10x, hoặc 200x - Byte định hƣớng hai dây Giao diện nối tiếp

- Lập trình nối tiếp USART

- Master / Slave SPI Giao diện nối tiếp

- Lập trình Watchdog Timer với On-chip riêng biệt Oscillator - On-chip Analog Comparator

• Tính năng đặc biệt Vi điều khiển

- Power-on Reset và lập trình Brown-out phát hiện - Nội hiệu chuẩn RC Oscillator

- Bên ngoài và nội bộ ngắt nguồn

- Sáu chế độ sleep: Chờ, giảm ADC Tiếng ồn, Power- tiết kiệm, điện xuống, chờ và mở rộng ở chế độ chờ

• I / O và các gói

- 32 lập trình I / O dòng

- 40-pin PDIP , 44 - dẫn TQFP , và 44 -pad QFN / MLF • Điện áp hoạt động - 2.7V - 5.5V cho ATmega16L - 4.5V - 5.5V cho ATmega16 • Tốc độ các lớp - 0-8 MHz cho ATmega16L - 0-16 MHz cho ATmega16

• Công suất tiêu thụ 1 MHz, 3V, và 25 ° C trong ATmega16L - Active : 1,1 mA

- Chế độ nhàn rỗi : 0,35 mA - Công suất xuống Mode: < 1 μA

Đọc và dịch tín hiệu điều khiển sang các chức năng mà ta đã định trƣớc, thực thi điều khiển các cơ cấu chấp hành.

100

Sơ đồ cổng kết nối với máy tính:

Hình 52. Sơ đồ kết nổi cổng COM

101

Khởi tạo cổng UART của Atmega16 trên máy tính - chƣơng trình lập trình cho AVR CodevisionAVR.

Trong tab USART check vào các ô Receiver để cho phép nhận dữ liệu; Rx Interrupt để nhận dữ liệu sử dụng ngắt; Transmitter để cho phép truyền dữ liệu; Tx Interrupt để truyền dữ liệu sử dụng ngắt.

Các thông số còn lại: Receiver Buffer và Transmitter Buffer là bộ nhớ đệm nhận và đệm truyền. Trong ứng dụng đơn giản chúng ta để mặc định là 8, trong các ứng dụng truyền số lƣợng thông tin lớn ta có thể tăng bộ đệm để tránh mất thông tin. Tốc độ baud mặc định là 9600 (bit/s). Các thông số của bộ truyền: 8 bit, 1 bit dừng(stop), không ƣu tiên. Chế độ truyền không đồng bộ.

Để kết nối với mạch ngoài, mạch lực chúng ta phải sử dụng Port A, B, D của AVR. Atmega 16 đƣợc kết nối với LCD 16x2 qua PORT A và PORT B.

Hình 54. Sơ đồ chân LCD 16x2

Text LCD là các loại màn hình tinh thể lỏng nhỏ dùng để hiển thị các dòng chữ hoặc số trong bảng mã ASCII. Không giống các loại LCD lớn, Text LCD đƣợc chia sẵn thành từng ô và ứng với mỗi ô chỉ có thể hiển thị một ký tự ASCII. Cũng vì lý do chỉ hiện thị đƣợc ký tự ASCII nên loại LCD này đƣợc gọi là Text LCD (để phân biệt với Graphic LCD có thể hiển thị hình ảnh). Mỗi ô của Text LCD bao gồm các “chấm” tinh thể lỏng, việc kết hợp “ẩn” và “hiện” các chấm này sẽ tạo thành một ký tự cần hiển thị. Trong các Text LCD, các mẫu ký tự đƣợc định nghĩa sẵn. Kích thƣớc của Text LCD đƣợc định nghĩa bằng số ký tự có thể hiển thị trên 1 dòng và tổng số dòng mà LCD có. Ví dụ LCD 16x2 là loại có 2 dòng và mỗi dòng có thể hiển thị tối đa 16 ký tự. Một số kích thƣớc Text LCD thông thƣờng gồm 16x1, 16x2, 16x4, 20x2, 20x4.

102

Dƣới đây là giải thích chân của LCD

Nguyên tắc hoạt động của LCD 16x2 nhƣ sau:

-Các chân 1,2,3 là các chân VSS , VDD, VEE trong đó VSS chân nối đất , VEE chân chọn độ tƣơng phản chân này dc chọn qua 1 biến trở 5K một đầu nối VCC , một đầu nối mát . Chân VDD nối dƣơng nguồn .

- Chân chọn thanh ghi RS (Register Select): Có hai thanh ghi trong LCD, chân RS(Register Select) đƣợc dùng để chọn thanh ghi, nhƣ sau: Nếu RS = 0 ở chế độ ghi lệnh nhƣ xóa màn hình , bật tắt con trỏ… Nếu RS =1 ở chế độ ghi dữ liệu nhƣ hiển thị ký tự , chữ số lên màn hình .

-Chân đọc/ ghi (R/W): Đầu vào đọc/ ghi cho phép ngƣời dùng ghi thông tin lên LCD khi R/W = 0 hoặc đọc thông tin LCD khi R/W = 1.

-Chân cho phép E (Enable): Chân cho phép E đƣợc sử dụng bởi LCD để chốt dữ liệu của nó. Khi dữ liệu đƣợc đến chân dữ liệu thì cần có 1 xung từ mức cao xuống mức thấp ở chân này để LCD chốt dữ liệu , xung này phải có độ rộng tối thiểu 450ns.

Chân D0 – D7: Đây là 8 chân dữ liệu 8 bít, đƣợc dùng để gửi thông tin lên LCD hoặc đọc nội dung của các thanh ghi trong LCD. Để hiển thị các chữ cái và các con số chúng ta gửi các mã ASCII của các chữ cái và các con số tƣơng ứng đến các chân này khi bật RS =1; Ngoài cách sử dụng 8 chân dữ liệu, chúng ta cũng có thể sử dụng 4 chân dữ liệu để đƣa tín hiệu là LCD.

Ở đây em sử dụng LCD 16x2. Để hiển thị tên đề tài và trạng thái của hệ thống, ở đây em chỉ đặt là Online hoặc Offline.

Bộ mạch lực điều khiển cơ cấu chấp hành.

Do số chân của Atmega16 có hạn mà lại sử dụng nhiều chức năng, chính vì thế nếu chỉ sử dụng chân vật lý của Atmega16 thì sẽ không thực hiện đƣợc các chức năng điều khiển các khối mà bài toán đặt ra.

103

Hình 55. Mạch mở rộng chân

Trong mạch điều khiển sử dụng 2 IC ghi dịch 74HC595. IC chuyển tín hiệu điều khiển từ Atmega16 ra từng chân điều khiển nếu muốn.

Một số tính năng của mạch điều khiển nhƣ sau: - Sử dụng điện áp 5V

- 16 kênh Output ( Đầu ra)

- Led báo hiển thị nguồn

- Led báo hiển thị tín hiệu ra ( 16 Led)

- Chân mở rộng 74HC595 : Input( SH, ST, SD) và output ( SH, ST, SD)

- Sử dụng Conector KF7.62 ( 300mil)

- Sử dụng TIP41C.

- Mạch có tính năng mở rộng số cổng cho mạch công suất.

104

Hình 56. Sơ đồ đấu nối chân của 74HC 595 và Atmega16.

3.2.3 Chương trình cho vi điều khiển

Sau khi sử dụng và kết nối tất cả các chức năng nhƣ trên. Ta sử dụng chƣơng trình CodevisionAVR để lập trình truyền nhận và điều khiển các chức năng điều khiển của chƣơng trình.

Đoạn chƣơng trình khởi tạo và điều khiển cổng truyền nhận UART của Atmega16: #define FRAMING_ERROR (1<<FE)

#define PARITY_ERROR (1<<UPE) #define DATA_OVERRUN (1<<DOR)

#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;

105 // 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_BUFFER_SIZE == 256

// special case for receiver buffer size=256 if (++rx_counter == 0)

{ #else

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

// Get a character from the USART Receiver buffer #define _ALTERNATE_GETCHAR_ #pragma used+ char getchar(void) { char data; while (rx_counter==0); data=rx_buffer[rx_rd_index++]; #if RX_BUFFER_SIZE != 256

if (rx_rd_index == RX_BUFFER_SIZE) rx_rd_index=0; #endif #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

unsigned int tx_wr_index,tx_rd_index,tx_counter; #endif

106 // 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_BUFFER_SIZE != 256

if (tx_rd_index == TX_BUFFER_SIZE) tx_rd_index=0; #endif

} }

#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")

if (tx_counter || ((UCSRA & DATA_REGISTER_EMPTY)==0)) {

tx_buffer[tx_wr_index++]=c; #if TX_BUFFER_SIZE != 256

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

Chƣơng Trình nhận dữ liệu và truyền tín hiệu điều khiển ra mạch mở rộng

temp=getchar(); lcd_gotoxy(i,1); lcd_putchar(temp); switch (temp) { case '1': if(j[1]<1) { k+=0x01; } else { break; } j[1]++; break;

107 case '2': if(j[2]<1) { k+=0x02; } else { break; } j[2]++; break; ……. hc595(0,0,0,l,n,k); 3.2.4 Mạch động lực

Hình 57. Sơ đồ khối của hệ thống.

Từ máy tính chƣơng trình mô tả bên trên sẽ đƣa ra lệnh điều khiển, tới mạch điều khiển. Sau đó mạch điều khiển sẽ chuyển tín hiệu điều khiển tới mạch mở rộng chân. Nhƣ sơ đồ miêu tả bên trên. Mạch mở rộng chân đƣợc đấu nối qua hệ thống mạch lực trung gian, để điều khiển các cơ cấu có điện áp cao, và dòng lớn. để bảo vệ mạch mở rộng và mạch điều khiển.

Trong mạch lực sử dụng 2 cấp Rơ le. Từ mạch mở rộng chân là các Transitor khả năng chịu tải tối đa là 800mA. Để nâng cao công suất lên, ở đây sử dụng tiếp các Rơ le bảo vệ 5V. từ cấp bảo vệ này tiếp tục sử dụng 1 lớp bảo vệ là Rơ le 24V. Sau rơ le 24V có thể điều khiển các Contactor để điều khiển động lực các phòng, với sức chịu tải vài Ampe đến hàng chục Ampe.

108

Hình 58. Sơ đồ đấu nối qua các cấp Rơ le bảo vệ

Cụm rơ le 5V. khi có tín hiệu điều khiển – tín hiệu này đƣợc đƣa ra từ mạch điều khiển qua mạch mở rộng chân và đƣa đến cuộn hút của rơ le 5V. tại chân Com của tiếp điểm rơ le đấu nối với nguồn 12V, khi có tín hiệu điều khiển vào cuộn hút của rơ le này, từ tiếp điểm thƣờng đóng, chân com sẽ đƣợc chuyển mạch sang tiếp điểm thƣờng mở, chân ra 12V có nguồn 12 V. tại chân ra này tiếp tục đấu nối vào cuộn hút của rơ le lớn hơn đó la rơ le 12V. tƣơng tự nhƣ rơ le 5V chân com đƣợc nối với nguồn 220V, khi có tín hiệu điều khiển, cuộn hút hút và nguồn 220 V đƣợc chuyển mạch sang chân thƣờng mở, đƣa tín hiệu điện 220V ra chân ra. Với nguồn 220V này có thể cung cấp cho hầu hết các Contactor, để điều khiển đóng mở Contactor.

Sau khi có chƣơng trình đầy đủ thực hiện các modul của bài toán, ta tiến hành ghép nối và hoàn tất yêu cầu.

Sau khi hoàn tất chƣơng trình thực hiện đƣợc các yêu cầu nhƣ sau: Đăng nhập hệ thống.

Kết nối cổng truyền nhận tín hiệu Điều hiển ON-OFF các cơ cấu

Hiển thị LCD 16x2 trên mạch điều khiển. Giao tiếp giữa máy tính và mạch điều khiển. Mạch điều khiển và mạch động lực.

109

CHƢƠNG IV KẾT LUẬN

Qua luận văn em đã nghiên cứu mở rộng đƣợc một số kiến thức rất có ích. Điều khiển giám sát đang là một lĩnh vực đang dần đƣợc sử dụng nhiều trong thời đại công nghệ thông tin và điện tử phát triển mạnh nhƣ ngày nay. Từ các nghiên cứu về điều khiển giám sát trong và ngoài nƣớc, em đã ứng dụng và xây dựng cho mình cơ sở và kiến thức khung để xây dựng hệ thống điều khiển. Nhƣng em đã phát triển riêng cho mình, em lấy cơ sở từ thực tế công việc, điều khiển công nghiệp, điều khiển có kiểm soát các phòng trong sản xuất. Do thời gian, vốn kiến thức và tài chính hạn hẹp nên trong luận văn chỉ có thể nghiên cứu đƣợc một mảng nhỏ của điều khiển giám sát đó là điều khiển cơ cấu từ xa sử dụng sự trợ giúp của máy tính, tuy đây chỉ là một mảng nhỏ nhƣng kết thúc luận văn đã làm đƣợc các công việc sau:

- Thiết kế giao diện và môi trƣờng điều khiển trên máy tính. - Giao tiếp máy tính với mạch điều khiển.

- Điều khiển các cơ cấu từ máy tính.

- Lập trình hƣớng đối tƣợng, mô phỏng trực quan.

- Lập trình vi điều khiển, tính toán điều khiển các cơ cấu.

Tuy kết thúc đề tài ở một góc nhỏ nhƣng đề tài còn có thể mở rộng thêm rất nhiều.Ví nhƣ cơ cấu truyền tín hiệu chuyển sang truyền không dây. Mô phỏng chƣơng trình hoàn thiện hơn. Kết hợp với các hệ thống giám sát điện tử hiện đại…

110

TÀI LIỆU THAM KHẢO

- Hệ thống quản trị tòa nhà – Internet

http://eere.vn/quan-ly-nang-luong/he-thong-quan-ly-nang-luong/632- bms-he-thong-quan-ly-toa-nha.htmlhttp://www.udictech.vn/vi/index.php?option=com_content&view=articl e&id=16&Itemid=13http://htsv.com.vn/homeon/tin-tuc/1-tin-tuc/63--cau-hinh-cho-he-thong- bms-quan-ly-toa-nha-.html

- Nhà thông minh – Internet

- Điều khiển giám sát – Internet

- Vi điều khiển AVR – HocAVR.com, vagam.com, dientuvienam.net

- Giao tiếp nối tiếp – Internet

http://4tech.com.vn/forums/showthread.php/244-RS232-giao-

ti%E1%BA%BFp-n%E1%BB%91i-ti%E1%BA%BFp

- Visual Studio2012 – Internet

- Lập trình hướng đối tượng – Internet

- CodervisionAVR – Internet

- Lập trình AVR – Internet

http://www.atmel.com/

111 PHỤ LỤC I. DataSheet 1. Atmega16 2. 74HC595 3. LCD 16x2

II. Code chƣơng trình 1. Code vi điều khiển

/***************************************************** This program was produced by the

CodeWizardAVR V2.05.0 Professional Automatic Program Generator

© Copyright 1998-2010 Pavel Haiduc, HP InfoTech s.r.l. http://www.hpinfotech.com Project : Version : Date : 3/12/2014 Author : NeVaDa Company : Comments:

Chip type : ATmega16 Program type : Application

AVR Core Clock frequency: 8.000000 MHz Memory model : Small

External RAM size : 0 Data Stack size : 256

*****************************************************/ #include <mega16.h>

#include <alcd.h> #include <delay.h> unsigned char i,j,temp;

unsigned char ma[8]={0x00,0x01,0x02,0x04,0x08,0x10,0x20,0x40}; #define Clock PORTD.5

#define Data PORTD.6 #define Storage PORTD.7 #ifndef RXB8

#define RXB8 1 #endif

#ifndef TXB8 #define TXB8 0

112 #endif #ifndef UPE #define UPE 2 #endif #ifndef DOR #define DOR 3 #endif #ifndef FE #define FE 4 #endif #ifndef UDRE #define UDRE 5 #endif #ifndef RXC #define RXC 7 #endif

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

#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;

// 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) {

113

#if RX_BUFFER_SIZE == 256

// special case for receiver buffer size=256 if (++rx_counter == 0)

{ #else

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

// Get a character from the USART Receiver buffer #define _ALTERNATE_GETCHAR_ #pragma used+ char getchar(void) { char data; while (rx_counter==0); data=rx_buffer[rx_rd_index++]; #if RX_BUFFER_SIZE != 256

if (rx_rd_index == RX_BUFFER_SIZE) rx_rd_index=0; #endif #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

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) {

114

--tx_counter;

UDR=tx_buffer[tx_rd_index++]; #if TX_BUFFER_SIZE != 256

if (tx_rd_index == TX_BUFFER_SIZE) tx_rd_index=0; #endif

Một phần của tài liệu Điều khiển cơ cấu từ xa sử dụng sự trợ giúp của máy tính (Trang 98)

Tải bản đầy đủ (PDF)

(134 trang)