đến những thiết bị lớn như ôtô,tàu thủy, xe lửa, máy bay, hệ thống mạng điện thoại, các bộ điều khiển tự độngtrong nhà máy, các bộ điều chỉnh trong nhà máy điện hạt nhân, trong các hệ th
Trang 1ĐỒ ÁN TỐT NGHIỆP:
Đo điện áp xoay chiều hiển thị lên LCD
Trang 2MỤC LỤC
Trang
PHẦN 1: CẤU TRÚC VI ĐIỀU KHIỂN 8051 VÀ ADC0804, LCD,
EEPROM 24C02,RELAY,……….
4
LCD………
9
Trang 3Ngày nay, các vi điều khiển đã thâm nhập vào mọi lĩnh vực vủa đời sống từdân sự , quân sự đến an ninh quốc phòng, có mặt trong hầu hết các ứng dụng hàngngày từ những thiết bị nhỏ như điện thoại di động, máy nhắn tin, trò chơi điện tử,các thiết bị gia dụng(máy giặt, điều hòa, tủ lạnh….) đến những thiết bị lớn như ôtô,tàu thủy, xe lửa, máy bay, hệ thống mạng điện thoại, các bộ điều khiển tự độngtrong nhà máy, các bộ điều chỉnh trong nhà máy điện hạt nhân, trong các hệ thốngđiều khiển ánh sáng…
Với một loạt các ứng dụng thú vị trên, ở đây chúng em xin giới thiệu một ứngdụng nhỏ dùng vi điều khiển 8051(cụ thể là vi điều khiển AT89S52) để thiết kế:
“Thiết kế hệ thống rơ le số để bảo vệ quá dòng cho thiết bị điện, đo dòng từ
0÷20A, định và lưu được giá trị dòng cắt, hiển thị lên LCD” Đây là một ứng
dụng nhỏ của vi điều khiển nhưng thực tế sử dụng rất nhiều trong các hệ thống đolường điện, điện tử như volt mét, ampe mét điện tử…vv
Đề tài gồm 2 phần:
Phần 1:Cấu trúc vi điều khiển 8051 và ADC 0804, LCD, EEPROM 24C02, RELAY.
Phần 2:Thiết kế hệ thống và code chương trình
Mục đích của đề tài hướng đến: Tạo ra bước đầu cho sinh viên thử nghiệmnhững ứng dụng của vđk trong thực tiễn để rồi từ đó tìm tòi, phát triển nhiều ứngdụng khác trong đời sống hàng ngày cần đến
Mặc dù chúng em rất cố gắng để hoàn thành đồ án này đúng thời hạn ,nhưngkhông thể tránh khỏi những thiếu sót mong quí thầy cô thông cảm.Chúng em mongđược sự đóng góp ý kiến của các thầy cô và các bạn
Chúng em xin chân thành cám ơn!
Trang 4
PHẦN 1: CẤU TRÚC VI ĐIỀU KHIỂN 8051 VÀ ADC0804, LCD, EEPROM
Bộ vi điều khiển AT89S52 gồm các khối chức năng chính sau đây:
CPU( Central Processing Unit) bao gồm:
- Thanh ghi tích luỹ A
- Thanh ghi tích luỹ phụ B, dùng cho phép nhân và phép chia
- Đơn vị logic học( ALU: Arithmetic Logical Unit)
- Từ trạng thái chương trình( PSW: Progam Status Word)
- Bốn băng thanh ghi
- Con trỏ ngăn xếp
Bộ nhớ chương trình( Bộ nhớ ROM) gồm 8Kb Flash.
Bộ nhớ dữ liệu( Bộ nhớ RAM) gồm 256 bytes.
Bộ UART( Universal Ansynchronous Receiver and Tranmitter) làm chức năng
truyền nhận nối tiếp, nhờ khối này, AT89S52 có thể giao tiếp với máy tính quacổng COM
3 bộ Timer /Counter 16 bít thực hiện các chức năng định thời và đếm sự kiện.
WDM( Watch Dog Timer) được dùng để phục hồi lại hoạt động của CPU khi nó
bị treo bởi một nguyên nhân nào đó WDM ở AT89S52 gồm một bộ Timer 14 bít,một bộ Timer 7 bít, thanh ghi WDTPRG( WDT programable) điều khiển Timer 7bit và một thanh ghi chức năng WDTRST( WDM register) Bình thường WDTkhông hoạt động( bị cấm), để cho phép WDT, các giá trị 1EH và E1H cần phảiđược ghi liên tiếp vào thanh ghi WDTRST Timer 14 bit của WDT sẽ đếm tăngdần sau mỗi chu kỳ đồng hồ cho đến giá trị 16383 thì xảy ra tràn Khi xảy ra tràn,chân RTS sẽ được đặt ở mức cao trong thời gian 96.Tosc (Tossc=1/Fosc) vàAT89S52 sẽ được reset Khi WDT hoạt động, ngoại trừ reset phần cứng và reset doWDT tràn thì không có cách nào cấm được WDT, vì vậy khi sử dụng WDT thì cácđoạn mã chương trình phải được đặt trong các khe thời gian từ khi giữa các lầnWDT được khởi tạo lại
Trang 5II- Sơ đồ các chân và chức năng
1 Port 0(P0.0-P0.7 hay từ chân 32 đến chân 39):
Gồm 8 chân, ngoài chức năng xuất nhập ra, Port 0 còn là Bus đa hợp dữ liệu vàđịa chỉ
(AD0-AD7), chức năng này sẽ được sử dụng khi AT89S52 giao tiếp với thiết bịngoài có kiến trúc Bus
Trang 6
2 Port 1( P1.0-P1,7 hay từ chân 1 đến chân 8) :
Có chức năng xuất nhập theo bit và byte Ngoài ra, 3 chân P1.5, P1.6, P1.7 đượcdùng để nạp ROM theo chuẩn ISP, 2 chân P1.0 và P1.1 được dùng cho bộ Timer 2
3 Port 2( P2.0- P2.7 hay từ chân 21 đến chân 28):
Là một port có công dụng kép: là đường xuất nhập hoặc là byte cao của bus địa chỉđối với các thiết kế dùng bộ nhớ mở rộng
Trang 7
4 Port 3( P3.0- P3.7 hay từ chân 10 đến chân 17):
Mỗi chân trên port 3 ngoài chức năng xuất nhập ra còn có một chức năng riêng:
Bit Tên Chức năng
P3.0 RXD Dữ liệu nhận cho port nối tiếp
P3.1 TXD Dữ liệu phát cho port nối tiếp
P3.3 INT1 sNgắt 1 bên ngoài
5 RST( Reset- chân 9):
Trang 8Mức tích cực của chân này là mức 1, để reset ta phải đưa mức 1(5V) đến chân nàyvới thời gian tối thiểu 2 chu kỳ máy( tương đương 2uS đối với thạch anh 12MHz).
6 XTAL1, XTAL2:
AT89S52 có một bộ dao động trên chip, nó thường được nối với một bộ dao độngthạch anh có tần số lớn nhất là 33MHz, thông thường là 12MHz
7 EA( External Access):
EA thường được mắc lên mức cao(+5V) hoặc mức thấp( GND) Nếu ở mức cao,
bộ vi điều khiển thi hành chương trình từ ROM nội Nếu ở mức thấp, chương trìnhchỉ được thi hành từ bộ nhớ mở rộng
8 ALE( Address Latch Enable):
ALE là tín hiệu để chốt địa chỉ vào một thanh ghi bên ngoài trong nửa đầu của chu
kỳ bộ nhớ Sau đó các đường port 0 dùng để xuất hoặc nhập dữ liệu trong nửa chu
kỳ sau của bộ nhớ
9 PSEN( Program Store Enable):
PSEN là điều khiển để cho phép bộ nhớ chương trình mở rộng và thường được nốiđến chân /OE ( Output Enable) của một EPROM để cho phép đọc các bytes mãlệnh
PSEN sẽ ở mức thấp trong thời gian đọc lệnh Các mã nhị phân của chương trìnhđược đọc từ EPROM qua Bus và được chốt vào thanh ghi lệnh của bộ vi điềukhiển để giải mã lệnh Khi thi hành chương trình trong ROM nội, PSEN sẽ ở mứcthụ động( mức cao)
10.Vcc, GND:
AT89S52 dùng nguồn một chiều có dải điện áp từ 4V-5.5V được cấp qua chân40(+) và chân 20(-)
B- Bộ biến đổi tương tự sang số ADC0804.
Bộ ADC0804 là một thiết bị CMOS tích hợp với một bộ chuyển đổi tương tự sang
số 8 bit, một bộ logic điều khiển tương thích Bộ chuyển đổi tương tự sang số này
sử dụng phương pháp chuyển đổi xấp xỉ, các lối ra dữ liệu song song, các lối ranày đều tương thích TTL Thiết bị này loại trừ khả năng cần thiết để điều chỉnhđiểm zero bên ngoài và khả năng điều chỉnh tỉ số làm cho ADC dễ dàng giao tiếpvới các bộ vi xử lý
Trang 9Các đặc điểm của ADC0804
- Nguồn nuôi 5 V, hiệu suất cao
- Dãi tín hiệu lối vào tương tự 5V khi nguồn nuôi là +5V Có thể mở rộng thang
đo bằng các giải pháp kỹ thuật cho từng mạch cụ thể
- Dễ dàng giao tiếp với vi xữ lý vì đầu ra co bộ đệm 3 trạng thái nên có thể ghéptrực tiếp vào kênh dữ liệu của hệ VXL
- Tổng sai số chưa chỉnh là ½ LSB
- Thời gian chuyển đổi 100s
- Bus dữ liệu 8 bit
- Các tín hiệu đều tương thích TTL
- Tần số xung clock 10khz-1208khz
- Đảm bảo sai số tuyến tính trong dãi nhiệt độ từ -40 0C - 85 0C
- Bộ phát xung nhịp nằm trên chip
- Không cần điều chỉnh điểm 0
- /RD chân tác động từ bên ngoài để IC thực hiện quá trình chuyển đổi.
- CLKin : Đầu vào xung clock.
- REF (+) : điện áp vào chuẩn +5V
Trang 10- REF (-) :điện áp vào chuẩn 0v
- AGND, RGND: chân nối đất.
- Vref/2 : ½ điện áp chuẩn.
Hoạt động chuyển đổi:
Quá trình biến đổi được bắt đầu bằng mộ xung thấp ngắn hạn ở lối vào /WR.Muốn thề điều kiện cần có là một mức thấp của tín hiệu /CS Sau thời gian biến đổi100s, lối ra /INTR chuyển sang mức thấp và báo hiệu việc kêt thúc quá trình biếnđổi Sau đó qua một mức thấp ở lối vào /RD có thể đọc ra các bit số liệu Sự truynhập để đọc sẽ dẫn đến hậu quả là tín hiệu /INTR sẽ chuyển trở lại mức cao Khi
mà lối vào /RD được chuyển sang mức thấp, thì lối ra /INTR chuyển sang thấp sauquá trình biến đổi kéo dài 8 chu kì giữ nhịp của bộ giữ nhịp bên trong, ở tần số giữnhịp là 640khz, chi kì này là 12.5Пss
C-LCD
1- Sơ đồ chân LCD:
Trang 111 Vss - Mass
RS=1 chon thanh ghi dữ liệu
2- Sơ đồ ghép nối LCD với vi điều khiển:
3- Nguyên lí hoạt động của LCD
- Chân VCC, Vss, và VEE: các chân VCC và VSS cáp dương nguồn 5v và mass tương ứng Chân VEE được dùng để điều khiển độ tương phản
- Chân chọn thanh ghi RS(Register Select): có 2 thanh ghi trong LCD chân RS được dùng để chọn thanh ghi nếu RS=0 thì thanh ghi mã lệnh được chọn để cho phép người dùng gửi 1 lệnh lên chẳng hạn như xoá màn hình, đưa con trỏ về đầu dòng… Nếu RS=1 thì thanh ghi dữ liệu được chọn cho phép người dùng gửi dữ liệu cần hiển thị lên LCD
Trang 12- Chân đọc/ghi (R/W): đầu vào đọc/ghi cho phép người dùng đọc thông tin từ LCD khi R/W=1 hoặc ghi thông tin lên LCD
- Chân cho phép E(Enable): chân cho phép được sử dụng bởi LCD để chốt dữ liệu của nó Khi dữ liệu được cấp đến chân dữ liệu thì 1 xung mức cao xuống thấp phải được áp đến chân này để LCD chốt dữ liệu trên các chân dữ liệu Xung này có
độ rộng tối thiểu 450ns
- Chân DB0-DB7: đây là đường dữ liệu 8 bít, được dùng để gửi thông tin lên LCD hoặc đọc nội dung các thanh ghi trong LCD Để hiển thị các chữ cái và các con số, chúng ta gửi mã ASCII của các chữ cái từ A đến Z , a đến z và các chữ số
từ 0 đến 9 đến các chân này khi bật RS=1
- Bảng mã lệnh của LCD:
SCL là xung đầu vào và được sử dụng để đồng bộ hóa EEPROM với vi điều khiển cho các hoạt động khác nhau Khi dữ liệu là để được đọc hoặc viết, lần đầu tiên một điều kiện bắt đầu được tạo ra tiếp theo địa chỉ điện thoại, địa chỉ byte và các
dữ liệu chính nó Cuối cùng, một điều kiện dừng được cung cấp Điều kiện bắt đầu xảy ra khi SDA và SCL nhận được cao đến thấp đồng thời Điều kiện dừng là khi SDA vẫn còn thấp trong khi SCL đi từ cao xuống thấp Dữ liệu được đọc hoặc bằng văn bản giữa các điều kiện bắt đầu và dừng lại trên tất cả các quá trình
Trang 13chuyển đổi của SCL từ cao đến thấp Để biết thêm chi tiết về các hoạt động khác nhau và giải quyết, hãy tham khảo 24C02 interfacing với 8051.
Tổng cộng có 8 EEPROMs có thể được kết nối thông qua một bus Có ba chân địa chỉ vào AT24C02 để lựa chọn một con chip đặc biệt Thiết bị này có thể được giải quyết serially bởi phần mềm Nó làm cho việc sử dụng của một đăng ký nội bộ củaEEPROM có 4 MSB bit 1010, tiếp theo là các bit địa chỉ EEPROM và LSB nghĩa cho dù dữ liệu sẽ được đọc hoặc bằng văn bản Bit cuối cùng là 1 cho viết và 0 chohoạt động đọc
Ví dụ, nếu một EEPROM tất cả các bit địa chỉ là có căn cứ, sau đó cho hoạt động viết một giá trị hex 0xA1 (1010 0001) sẽ được gửi Đây 000, bit cuối cùng, địa chỉ EEPROM và 1 trong LSB cho thấy một hoạt động viết Tương tự đối với hoạt động đọc địa chỉ thiết bị được gửi 0xA0 (1010 0000)
Tiếp theo, địa chỉ byte hoặc trang được gửi bởi byte dữ liệu Byte dữ liệu này phải được viết hoặc đọc bởi vi điều khiển
1 Địa chỉ chân đầu vào; Cung cấp địa chỉ nhiều hơn
một EEPROM là để giao tiếp với một vi điều khiển đơn
Chân nối đất khi chỉ có một EEPROM được sử dụng
AD0
4 Chân nối đất (0V) Ground
5 Bi-directional pin để chuyển dữ liệu nối tiếp Serial
Trang 14Sơ đồ rơ le 8 chân
PHẦN 2: THIẾT KẾ HỆ THỐNG VÀ CODE CHƯƠNG TRÌNH.
I- Nguyên lý đo dòng điện bằng điện trở Shunt.
Điện trở Shunt để tạo ra một sụt áp tỷ lệ với dòng điện đi ngang qua nó, sau đó ta dựa trên sự sụt áp đo để tính toàn dòng điện cần đo
Sơ đồ khối đo dòng điện:
Trang 15Dòng điện xoay chiều.
(điện áp xoay chiều) Chỉnh lưu
Qua điện trở shunt
Chân +IN của ADC0804
- Ngoài ra còn 1 số linh kiện khác như điện trở, tụ điện, nút bấm, biến trở,
diode cầu chỉnh lưu,…
2- Mạch nguyên lý
3- Lưu đồ chương trình
Trang 16
start
Đo dòng Định dòng cắt
End
4- Chương trình
Chương trình viết bằng ngôn ngữ C ( sử dụng phần mềm Kile C)
unsigned int i; //dung de doc ADC trong 5 lan lien tiep
delay_us(50); // doi chuyen doi xong
if(ADC_DATA_PORT>adc_data_max) // Lay gia tri MAX{
}if(ADC_DATA_PORT<adc_data_min) //Lay gia tri MIN{
adc_data_min = ADC_DATA_PORT;
}
Trang 17char lcd_buff[33]; //bo dem du lieu dung de hien thi ra LCD
unsigned int phan_nguyen,phan_thap_phan; //dung de lay phan nguyen va phan thap phan
unsigned long nguong_cat = 15; //1A
char qua_tai = 0; //co bao qua tai
lcd_init();
lcd_clear();
CONTROL = 0;
TANG = 1; //xuat ra muc 1
GIAM = 1; //xuat ra muc 1
RESET = 1; //xuat ra muc 1
nguong_cat = (unsigned long)eeprom_read(0x10);
nguong_cat = nguong_cat+10; //moi lan tang 100mAdelay_ms(100);
if(nguong_cat>150) //gioi han toi da cua mach la 20Ampe{
nguong_cat=150;
}eeprom_write(0x10,(unsigned char)nguong_cat); //ghi vao
bo nho eeprom
} if(GIAM == 0)
Trang 18nguong_cat=1;
}eeprom_write(0x10,(unsigned char)nguong_cat); //ghi vao bo nho eeprom
}
phan_nguyen = nguong_cat/10; //doi don vi la ampe Aphan_thap_phan = nguong_cat%10; //lay phan thap phan sau dau phay 2 chu so, vi du I = 3,543A se lay la 54
lcd_gotoxy(0,0);
sprintf(lcd_buff,"NGUONG CAT=%d
%dA",phan_nguyen,phan_thap_phan); //hien thi ra lcd
lcd_puts(lcd_buff);
if(RESET == 0){
CONTROL = 0; //dong relay qua_tai = 0; //het bao qua tai}
ADC_DATA = ADC_DATA*4990; //tinh theo don vi la mV de tranh mat du lieu
ADC_DATA = ADC_DATA>>8; //bo chuyen doi ADC 8 bit co gia tri toi da la 255
ADC_DATA = ADC_DATA/sqrt(2); //lay gia tri hieu dung I ADC_DATA = ADC_DATA/18; //chuyen doi sang dong dien
do duoc theo thuc te
lcd_puts(" Qua tai ");
qua_tai = 1; //bao hieu la dang qua tai}
else if(qua_tai==0) //che do hien thi binh thuong{
phan_nguyen = ADC_DATA/10; //doi don vi la ampe A
Trang 19phan_thap_phan = ADC_DATA%10; //lay phan thap phan sau
lcd_gotoxy(0,1);
sprintf(lcd_buff,"I= %d.%d A
",phan_nguyen,phan_thap_phan);
lcd_puts(lcd_buff);
}
extern void delay_ms(unsigned int ms);
extern void delay_us(unsigned int us);
unsigned char i2c_start( void );
unsigned char i2c_stop( void );
unsigned char i2c_write_byte(unsigned char byte);
unsigned char i2c_write(unsigned char Data);
unsigned char i2c_read(unsigned char ack);
unsigned char eeprom_read(unsigned char add);
void eeprom_write(unsigned char add, unsigned char Data);
unsigned char i2c_start( void )
Trang 21Data <<=1;//dich trai mot bit
if(SDA) //bit hight
/* -write a byte or multi byte to eeprom -*/
/* add: address cell eeprom
data: du lieu can ghi ra
len: lenght of data
*/
Trang 22void eeprom_write(unsigned char add, unsigned char Data)
/* Writing value to DATA pins */
#define LCD_DATA_OUT LCD_PORT
/*================= HAM GUI 4 BIT
THAP======================================*/
void set_lsb(unsigned char Data);
/*==================HAM GUI 4 BIT
CAO======================================*/
void set_msb(unsigned char Data);
/*================= GUI LENH LEN
LCD======================================*/
void put_cmd(unsigned char cmd);
/*================== GUI 1 KI TU
====================================*/
Trang 23void lcd_gotoxy(unsigned char x,unsigned char y);
void lcd_put_byte(unsigned char b);
void delay_(unsigned long t);
//tao tre cho LCD
void delay_(unsigned long t)
//ham gui 4 bit thap
void set_lsb(unsigned char Data)
{
LCD_DATA_OUT=Data&0x0F;
}
//ham gui 4 bit cao
void set_msb(unsigned char Data)
{
LCD_DATA_OUT=Data>>4;
}
// ham gui lenh len lcd
void put_cmd(unsigned char cmd)
{
LCD_RS=0; // chon thanh ghi lenh
set_msb(cmd);
enable();
Trang 24put_cmd(0x28); // che do 4 bit,lcd 2 dong, co chu 5x7
put_cmd(0x0D); // bat hien thi,tat con tro 0x0C
Trang 25void lcd_put_byte(unsigned char b)
Trang 26Tài liệu tham khảo:
Họ vi điều khiển 8051 – Tống Văn On
Cấu trúc và lập trình học Vi điều khiển 8051 – Nguyễn Tăng Cường
Ngoài ra chúng em còn thu thập tài liệu và thông tin trên internet
……