Nội dụng báo cáo bao gồm: mạch sạc ác quy 12V, mạch cảnh báo sụt áp trên acquy, mạch báo tình trạng acquy, thuật toán và code phần lập trình chương trình cảnh báo và hiển thị LCD. Nằm trong đề tài nghiên cứu thực tập công nhân Khoa Điện Tử Viễn Thông Đại học Bách Khoa ĐÀ Nẵng.
Trang 1BÁO CÁO THỰC TẬP CÁ NHÂN
I. GIỚI THIỆU ĐỀ TÀI
1. Đề tài :
Thiết kế và thi công mạch giám sát lò vi sinh.
2. Nhiệm vụ cá nhân:
• Làm mạch: Thiết kế mạch sạc ác quy và mạch cảnh báo ác quy
12 v
• Lập trình: lập trình chương trình cảnh báo và hiển thị LCD.
II. LÀM MẠCH:
1. Thiết kế và thi công mạch sạc ác quy 12v:
-Có nhiệm vụ nạp nguồn điện dự trữ, phòng ngừa khi mất điện, để cung cấp cho các thiết bị hoạt động
a. Sơ đồ mạch:
accu (+) accu (-)
R3
1K
R4
1K
D4
DIODE
D5
DIODE
R5
0.1
R8
2K
R11
2.7K
VI
U5
7808
Q5
2N3055
C12
2.7K
D9
1N4372A
R13
10k
D11
DIODE
D12
DIODE
5
6 7
4 U8:B
LM358
D13
DIODE
3
2 1
4 U8:A
LM358
R14
2
RV2
2K
R15
0.1
D14
1N4372A
R17
10k
R22
4.7K
D15
1N4372A
2
RV4
2K
R35
1K
R36
1K
Q6
d468
Q7
c1815
BR2
GSIB1580 1
J6
CONN-H2
45% 1 3
RV5
10k
R37
1k
R38
2k
CAUCHI
1A
C13
470
C14
1
C15
1
C16
100u
C17
1
C18
1
1
J9
CONN-H2
b. Nguyên lý làm việc:
Trang 2- Q1 là transistor công suất 2N3055, tản nhiệt kỹ (100 gr nhôm)
mắc darlington với Q2 là D468 để khuếch đại dòng nạp với phân cực chung của bộ darlington này là 4K7 Q3 là
C1815 làm nhiệm vụ thường trực bảo vệ, có tác dụng mở và đóng dòng nạp
- 1/2 của con Op-Amp đôi (phía trên) đặt cổng (-) điện áp mẫu 6V với Zenner và tụ lọc 1 MF, cổng (+) biến trở phối hợp với cầu điện trở để kiểm tra điện áp accu, chỉnh thế nào để điện áp accu được 14V thì Op-Amp đổi trạng thái ngõ ra lên 8V (cấp bởi 7808), điện áp này qua diod đổ vào base của Q3 làm nó dẫn mạnh -> ngắt nguồn nạp khi bình đạt đến 14V
- 1/2 của con Op-Amp (phía dưới) nhận điện áp mẫu tại cổng (+), còn cổng (-) thì nhận điện áp rơi trên điện trở công suất R1
= 1 Ohm cộng với điện áp 3V zenner cho dễ so sánh Khi nạp thì điện áp trên điện trở này tăng cao Khi bình đầy thì dòng nạp thấp xuống, ta chĩnh biến trở 10K để điện áp mẫu cao hơn điện
áp rơi + 3V, Op-Amp đổi trạng thái ngõ ra lên cao > dòng đổ qua diod vào base của Q3 > ngắt dòng nạp Như vậy khi nạp đầy > dòng nạp giảm đến mức tới hạn theo chỉ định thì ngắt nguồn
2.Mạch cảnh báo sụt điện áp ac quy 12v:
-Có nhiệm vụ cảnh báo nếu ác quy sụt điện áp.
a Sơ đồ mạch:
D16
LED
D17
DIODE
R39
10k
D18
11v
R40
330
R41
10k
1
J7
CONN-H2
R42
470
mach canh bao sut dien ap acquy 12v
Q10
2sc1815
Q11
2sc1815
C19
1u
Trang 3b.Nguyên lý làm việc:
-Khi lấy nguồn từ ác quy ở J7, nếu điện áp lớn hơn 12V sẽ làm cho zenner dẫn, như vậy sẽ kích thích cho Q11 dẫn, tương tự thì Q10 sẽ dẫn làm cho led sáng lên
- Do đó chúng ta có thể cảnh báo ác quy khi nó giảm xuống dưới 12V
3.Mạch báo tình trạng ác quy 12V
-Có nhiệm vụ báo tình trạng ac quy ở mức điện áp bao nhiêu Volt, để để kiểm soát
và sạc ac quy
Trang 4a Sơ đồ mạch:
R43
150
D19
6V
D20
5V
R44
10k
R45
1k
D21
LED-RED
D22
DIODE
D23
DIODE
R46
470
D24
LED-GREEN
D25
DIODE
D26
LED-BLUE
Q8
2sc1815
R47
470
D27
12V
R48
10k
1
2
J8
CONN-H2
Q9
2sc1815
b.Nguyên lý làm việc:
-Khi lấy nguồn từ ac quy vào J8, nếu điện áp nhỏ hơn 10V thì chỉ có một mình
led-đỏ sáng và không thể kích dẫn các diode zenner D19, D20,D27
- Khi điện áp ac quy lớn hơn 11V thì sẽ kích dẫn được các diode D19,D20 làm cho Q9 dẩn , vì vậy led-green sẽ sáng
Trang 5-Khi điện áp ac quy lơn hơn 12V thì sẽ kích dẫn được diode zenner D27 vì vậy sẽ làm cho Q8 dẫn, vì vây Led-blue sẽ sáng
4 Mạch in:
*Quá trình làm mạch in và rửa mạch:
phần mạch đồng
sử dụng bút xóa để sửa lại
*Quá trình khoan mạch:
trở thanh, BJT thường chọn mũi khoan 0.6mm và 0.8mm Đối với BJT công suất thì chọn mũi 1.2mm
Trang 65.Kiểm tra linh kiện:
-Kiểm tra BJT: Đặt thang đo x1, nếu đo từ B sang C và B sang E ( que đen vào
B ) thì tương đương như đo hai diode thuận chiều => kim lên , tất cả các trường hợp đo khác kim không lên
-Kiểm tra diode.Đặt thang đo ở vị trí x1 Đặt que đen vào cực âm, que đỏ vào cực
âm thì kim lên, ngược lại kim không lên
-Kiểm tra tụ điện phân cực.Đặt thang đo ở vị trí x1k, đặt que đen ở cực âm, que
đỏ ở cực dương Ta thấy kim lên sau đó xuống lại từ từ
1) Lưu đồ thuật toán:
a, Hiển thị LCD :
Trang 7
S
Đ
b, Báo Động:
Bắt Đầu
Khởi tạo LCD
Kiểm tra đầu vào
Hiển thị lên LCD
Kết thúc
Bắt Đầu
Nhập điều kiện báo động: nhiệt độ, độ ẩm, Vch(V cửa hở)
Trang 8
S S
S
Đ
S
Đ
Đọc dữ liệu
Nhiệt độ = điều kiện Loa, led-red
Hiển thị lên LCD Nhiệt độ=?
Độ ẩm = điều kiện
Loa,led-green
Hiển thị lên LCD
Độ ẩm=?
Vch = điều kiện Loa, led-yellow
Hiển thị lên LCD Vch=?
Trang 92) Chương trình:
a. Chương trình cảnh báo:
#include "regx51.h"
#define bat 0
#define tat 1
#define nhietdo P1^0
#define doam P1^1
#define cuaho P1^2
sbit Leddo = P2^7;
sbit Ledxanh = P2^6;
sbit Ledvang = P2^5;
sbit loa = P2^0;
void delay(unsigned int time)
{
unsigned int i,j;
for(i=0;i<time;i++)
{for(j=0;j<125;j++);}
}
void main(void)
{
while(1) {
P3_6 = 0;
if(28 >nhietdo> 24)
{Leddo = bat;
delay(1000);
Kết thúc
Trang 10Leddo = bat;
delay(1000);
Leddo= tat;
delay(1000);
loa = bat;
delay(1000);}
else Leddo= tat;
if(78 >doam>82)
{Ledxanh = bat;
delay(1000);
Ledxanh=tat ;
delay(1000);
Ledxanh = bat;
delay(1000);
loa = bat;
delay(1000);}
else Ledxanh=tat;
if( cuaho < 3.6)
{Ledvang = bat;
delay(1000);
Ledvang=tat;
delay(1000);
Ledvang = bat;
delay(1000);
loa = bat;
delay(1000);
else Ledvang=tat;
}
}
b. Chương trình hiển thị LCD:
#include <REGX52.H>
#include <stdio.h>
//Dinh nghia LCD
#define LINE_1 0x80
#define LINE_2 0xC0
#define CLEAR_LCD 0x01
//Dinh nghia chan su dung giao tiep LCD Sbit LCD_D4 = P2^3;
Trang 11Sbit LCD_D5 = P2^2;
Sbit LCD_D6 = P2^1;
Sbit LCD_D7 = P2^0;
Sbit LCD_E = P2^5;
Sbit LCD_RW = P2^6;
Sbit LCD_RS = P2^7;
sbit DQ = P1^0 ;
sbit relay = P3^6;
sbit sw1 =P0^0;
sbit sw2 =P0^1;
//Ham tre thoi gian
void delay_ms(unsigned int Time)
{unsigned int i,j,t;
t=Time;
for(i=0;i<t;i++)
{
for(j=0;j<125;j++);
}
}
void delay_us(unsigned int Time)
{unsigned int i,j;
for(i=0;i<Time;i++)
{for(j=0;j<2;j++);
}
}
// Ham tao xung ENABLE
void lcd1602_enable(void)
{P3_7=0;
LCD_E=1;
delay_us(3);
LCD_E=0;
delay_us(5);
}
// Ham Gui 4 Bit Du Lieu Ra LCD
void lcd1602_send_4bit_data ( unsigned char cX ) { P3_7=0;
LCD_D4 = cX & 0x01;
LCD_D5 = (cX>>1)&1;
LCD_D6 = (cX>>2)&1;
LCD_D7 = (cX>>3)&1;
Trang 12// Ham Gui 1 Lenh Cho LCD
void lcd1602_send_command (unsigned char cX ) {P3_7=0;
lcd1602_send_4bit_data ( cX >>4 );
lcd1602_enable() ;
lcd1602_send_4bit_data ( cX );
lcd1602_enable() ;
}
// Ham Khoi Tao LCD
void lcd1602_init ( void )
{P3_7=0;
lcd1602_send_4bit_data ( 0x00 );
delay_ms(200);
LCD_RS=0;
LCD_RW=0;
LCD_E=0;
lcd1602_send_4bit_data ( 0x03 );
lcd1602_enable() ;
lcd1602_enable () ;
lcd1602_enable () ;
lcd1602_send_4bit_data ( 0x02 );
lcd1602_enable() ;
lcd1602_send_command( 0x2C
lcd1602_send_command( 0x80);
lcd1602_send_command( 0x0C);
lcd1602_send_command( 0x06 );
lcd1602_send_command( CLEAR_LCD );
}
// Ham Thiet Lap Vi Tri Con Tro
void lcd1602_gotoxy(unsigned char x, unsigned char y) {unsigned char address;
if(!y)
address = (LINE_1+x);
else
address = (LINE_2+x);
delay_ms(3);
lcd1602_send_command(address);
delay_ms(1);
}
Trang 13// Ham Xoa Man Hinh LCD
void lcd1602_clear(void)
{P3_7=0;
lcd1602_send_command( CLEAR_LCD ); //delay_us(300);
}// Ham Gui 1 Ky Tu Len LCD
void lcd1602_putchar ( unsigned int cX ) {P3_7=0;
LCD_RS=1;
lcd1602_send_command( cX );
LCD_RS=0;
}
// Ham Gui 1 Chuoi Ky Tu Len LCD
void lcd1602_puts(char *s)
while (*s)
{lcd1602_putchar(*s);
s++;
}
}
int xung,dem,frequency;
void delay_18B20(unsigned int i)
{
while(i );}
void Init_DS18B20(void)
{ unsigned char x=0;
DQ = 1;
DQ = 0;
delay_18B20(80);
DQ = 1;
delay_18B20(14);
x=DQ;
delay_18B20(20);
}
unsigned char ReadOneChar(void)
{
unsigned char i=0;
unsigned char dat = 0;
for (i=8;i>0;i )
Trang 14{DQ = 0;
dat>>=1;
DQ = 1;
if(DQ)
dat|=0x80;
delay_18B20(4);
}
return(dat);
}
void WriteOneChar(unsigned char dat)
unsigned char i=0;
for (i=8; i>0; i )
{DQ = 0;
DQ = dat&0x01;
delay_18B20(5);
DQ = 1;
dat>>=1;
}}
int ReadTemp(void)
{unsigned char a=0;
unsigned char b=0;
unsigned char t=0;
int nhiet_thuc;
Init_DS18B20();
WriteOneChar(0xCC);
WriteOneChar(0x44);
delay_18B20(100);
Init_DS18B20();
WriteOneChar(0xCC);
delay_18B20(100);
a=ReadOneChar();
b=ReadOneChar();
nhiet_thuc=b<<4;
nhiet_thuc+=(a&0xf0)>>4;
return(nhiet_thuc);
}
code int HS1101_Table[101]={
Trang 15
8109,8090,8070,8051,8033,8015,7997,7979,7961,7944,
7927,7910,7894,7878,7862,7846,7830,7815,7799,7784,
7769,7755,7740,7726,7711,7697,7683,7669,7655,7641,
7628,7614,7600,7587,7574,7560,7547,7534,7521,7507,
7494,7481,7468,7455,7442,7429,7416,7403,7390,7377,
7364,7350,7337,7324,7311,7298,7284,7271,7257,7244,
7230,7216,7203,7189,7175,7161,7147,7132,7118,7103,
7089,7074,7059,7045,7029,7014,6999,6984,6968,6952,
6936,6920,6904,6888,6872,6855,6838,6821,6804,6787,
6770,6752,6735,6717,6699,6680,6662,6644,6625,6606,
int HS1101_GetHumi(int frequency)
{int i;
for(i=0;i<101;i++)
{
if((frequency+25)>HS1101_Table[i])return i;
}
return 100;
}
void ngat0(void) interrupt 0
{
xung++;
}
void ngat_timer_0(void) interrupt 1
{P3_7=0;
dem++;
if(dem >= 4000)
Trang 16dem=0;
frequency = xung-2600;
xung=0;
}}
void main(void)
{
int
humi,nhiet_do,nhiet_do2,nhiet_do3,nhiet_do_khong_che=40,fr; char str[20];
TMOD = 0x02;
TH0=TL0=-250;
IT0=1;
IE=0x83;
TR0=1;
lcd1602_init();
lcd1602_clear();
while(1)
{P3_7=0;
if(sw1 == 0){nhiet_do_khong_che++;
if(nhiet_do_khong_che>=150) nhiet_do_khong_che=0; }
if(sw2 == 0){nhiet_do_khong_che ;
if(nhiet_do_khong_che<=0) nhiet_do_khong_che=150; }
nhiet_do = ReadTemp();
nhiet_do2 = ReadTemp();
nhiet_do3 = ReadTemp();
fr = frequency;
if((nhiet_do2 >= nhiet_do-4)&&(nhiet_do2 <=
nhiet_do+4)&&(nhiet_do3 >= nhiet_do2-4)&&(nhiet_do3 <= nhiet_do2+4))
relay=0;
humi=HS1101_GetHumi(frequency);
sprintf(str,"Do Am: %d %% ,humi");
lcd1602_gotoxy(1,0);
lcd1602_puts(str);
sprintf(str,"Nhiet do: %doC ,nhiet_do");
lcd1602_gotoxy(1,1)
lcd1602_puts(str);
Trang 17delay_ms(100); }
}