Thứ Hai, 29 tháng 2, 2016

BÀI 33 : ỨNG DỤNG LM35 PIC16F877A CCS

1) Định nghĩ rơ le (relay):
Rơ le (relay) là một công tắc chuyển đổi hoạt động bằng điện. Nói là một công tắc vì rơ le có 2 trạng thái ON và OFF. Rơ le ở trạng thái ON hay OFF phụ thuộc vào có dòng điện chạy qua rơ le hay không

hình ảnh thực tế relay
Hình trên là hình ảnh thực tế của rơ le trong kỹ thuật. Còn về ý nghĩa kí hiệu thì phần tiếp theo sẽ giải thích.
2) Nguyên tắc hoạt động: 
Khi có dòng điện chạy qua rơ le, dòng điện này sẽ chạy qua cuộn dây bên trong và tạo ra một từ trường hút. Từ trường hút này tác động lên một đòn bẩy bên trong làm đóng hoặc mở các tiếp điểm điện và như thế sẽ làm thay đổi trạng thái của rơ le. Số tiếp điểm điện bị thay đổi có thể là 1 hoặc nhiều, tùy vào thiết kế.
sơ đồ cấu tạo của relay
Rơ le có 2 mạch độc lập nhau họạt động. Một mạch là để điều khiển cuộn dây của rơ le: Cho dòng chạy qua cuộn dây hay không, hay có nghĩa là điều khiển rơ le ở trạng thái ON hay OFF. Một mạch điều khiển dòng điện ta cần kiểm soát có qua được rơ le hay không dựa vào trạng thái ON hay OFF của rơ le.
Dòng chạy qua cuộn dây để điều khiển rơ le ON hay OFF thường vào khoảng 30mA với điện áp 12V hoặc có thể lên tới 100mA. Và bạn thấy đó, hầu hết các con chip đều không thể cung cấp dòng này, lúc này ta cần có một BJT để khuếch đại dòng nhỏ ở ngõ ra IC thành dòng lớn hơn phục vụ cho rơ le.
Chú ý: Tuy vậy, IC 555 có dòng điện ngõ ra có thể lên tới 200mA, vì thế với IC 555 thì không cần một BJT để khuếch đại dòng.
Hình bên chỉ ra cách hoạt động của rơ le với cuộn dây và các tiếp điểm điện. Khi có dòng điện chạy qua cuộn dây, cuộn dây hút một đòn bẩy và làm mở các tiếp điểm điện, vì thế dòng điện cần kiểm soát không thẩy đi qua rơ le. Và ngược lại. Bạn cũng thấy đó, dòng điện chạy qua cuộn dây không hề có liên quan gì đến dòng điện cần kiểm soát.
Trên rơ le có 3 kí hiệu là: NO, NC và COM.
+ COM (common): là chân chung, nó luôn được kết nối với 1 trong 2 chân còn lại. Còn việc nó kết nối chung với chân nào thì phụ thuộc vào trạng thái hoạt động của rơ le.
+ NC (Normally Closed): Nghĩa là bình thường nó đóng. Nghĩa là khi rơ le ở trạng thái OFF, chân COM sẽ nối với chân này.
+ NO (Normally Open): Khi rơ le ở trạng thái ON (có dòng chạy qua cuộn dây) thì chân COM sẽ được nối với chân này.
=> Kết nối COM và NC khi bạn muốn có dòng điện cần điều khiển khi rơ le ở trạng thái OFF. Và khi rơ le ON thì dòng này bị ngắt.
=> Ngược lại thì nối COM và NO.
3) Cách chọn rơ le phù hợp:
Bạn cần phải quan tâm đến kích thước và kiểu chân để chọn một rơ le phù hợp với mạch điện của mình.
Bạn cần phải quan tâm đến điện áp điều khiển cuộn dây của rơ le. Có thể là 5V, 12V hoặc 24V. Mạch bạn thiết kế cung cấp điện áp nào?
Bạn phải quan tâm đến điện trở của cuộn dây. Vì điều này sẽ ảnh hưởng đến dòng cần cung cấp cho cuộn dây hoạt động I = U / R.
Ví dụ: Bạn chọn một rơ le có điện áp hoạt động là 12V, cuộn dây có điện trở là 400 Ohm thì dòng cần thiết cung cấp là 30mA. Dòng này thì IC 555 có thể đáp ứng được, nhưng hầu hết các IC khác thì không, nên cần một BJT để khuếch đại dòng.
Ngoài ra, bạn cần tìm rơ le có số tiếp điểm đóng mở phù hợp.
4) Diod bảo vệ rơ le:
Như đã đề cập ở bài viết về cuộn cảm. Rơ le hoạt động dựa trên dòng điện chảy qua cuộn cảm đề tạo lực hút điền khiển đóng, mở các tiếp điểm. Và sự OFF đột ngột của cuộn cảm sẽ là nguyên nhân làm hỏng BJT hoặc IC.
Chú ý: Vì sự an toàn thì luôn luôn gắng một diod kèm theo một rơ le.
- Đây là ảnh mô phỏng protues.
lm35 pic16f877a

- Đây là code chương trình.
#include <16f877a.h>
#device 16f877a*16ADC=10
#use delay(clock=4000000)
#include <lcd_lib_4bit.c>
unsigned int x,z = 40;
void docADC();
void main()
{
LCD_Init();
set_tris_a(0xFF);
set_tris_d(0x00);
LCD_PutCmd(0x80);
LCD_PutChar("   Demo LM35");
delay_ms(500);
LCD_PutCmd(0x01);
while(true)
{
docADC();
x=read_ADC();
x=x/2.049;
LCD_PutCmd(0xC1);
printf(LCD_PutChar,"TEMP DO :%u",x);
LCD_PutChar(223);
LCD_PutChar("C");
LCD_PutCmd(0x81);
printf(LCD_PutChar,"TEMP DAT :%u",z);
LCD_PutChar(223);
LCD_PutChar("C");
if(x<z)
{
output_high(PIN_A1);
output_low(PIN_A2);
}
if(x==z)
{
output_low(PIN_A1);
output_low(PIN_A2);
}
if(x>z)
{
output_low(PIN_A1);
output_high(PIN_A2);
}
}
}
void docADC()
{
setup_ADC(ADC_clock_internal);
setup_ADC_ports(AN0);
set_ADC_channel(0);
delay_us(100);
}
- Link download project Click here


EmoticonEmoticon