在本項目中,我們將繼電器與PIC微控制器PIC16F877A連接。繼電器是一種機械設(shè)備,用于從較低的電壓電平控制高電壓、大電流電器的“ON”或“OFF”。繼電器在兩個電壓電平之間提供隔離,通常用于控制交流電器。從機械繼電器到固態(tài)繼電器,電子產(chǎn)品中有各種類型的繼電器可供選擇。在這個項目中,我們將使用機械繼電器。
在這個項目中,我們將做以下事情-
我們將接口一個開關(guān),用于用戶的輸入。
用 5V 繼電器控制220V 交流燈泡。
為了控制繼電器,我們將使用 BC547 NPN 晶體管,晶體管將由PIC16F877A控制。LED 將通知繼電器打開或關(guān)閉條件。
所需組件:
PIC16F877A
20兆赫晶體
2 個 33pF 陶瓷
3 個 4.7K 電阻器
1k 電阻器
1 個發(fā)光二極管
BC547 晶體管
1N4007 二極管
5V 立方繼電器
交流燈泡
面包板
用于連接零件的電線。
繼電器及其工作:
繼電器的工作原理與典型開關(guān)相同。機械繼電器使用由電磁線圈制成的臨時磁鐵。當(dāng)我們通過這個線圈提供足夠的電流時,它就會通電并拉動手臂。因此,連接在繼電器上的電路可以是閉合的,也可以是斷開的。輸入和輸出沒有任何電氣連接,因此它隔離輸入和輸出。
繼電器可以在不同的電壓范圍內(nèi)找到,如5V、6V、12V、18V等。在這個項目中,我們將使用5V 繼電器,因為我們的工作電壓在這里是5 伏。這款5V 立方繼電器能夠在240VAC時切換7A負(fù)載或110VAC時切換10A負(fù)載。然而,代替巨大的負(fù)載,我們將使用一個 220VAC 燈泡并使用繼電器進行切換。
這是我們在本項目中使用的5V 繼電器。額定電流明確規(guī)定了兩個電壓電平,120VAC 時為 10A,240VAC 時為 7A。我們需要連接小于指定額定值的繼電器負(fù)載。
該繼電器有5 個引腳。如果我們看到引腳排列,我們可以看到-
L1 和L2是內(nèi)部電磁線圈的引腳。我們需要控制這兩個引腳來打開繼電器“ON”或“OFF”。接下來的三個引腳是極點、常開和常閉。極與內(nèi)部金屬板連接,當(dāng)繼電器打開時,金屬板會改變其連接。在正常情況下,極點與常閉短路。NC代表常態(tài)連接。當(dāng)繼電器打開時,極改變其位置并與常開連接。NO代表常開。
在我們的電路中,我們已經(jīng)與晶體管和二極管進行了繼電器連接。帶晶體管和二極管的繼電器在市場上可作為繼電器模塊使用,因此當(dāng)您使用繼電器模塊時,您無需連接其驅(qū)動電路(晶體管和二極管)。
繼電器用于所有家庭自動化項目,以控制交流家用電器。
電路圖:
下面給出了用于將繼電器與PIC微控制器連接的完整電路:
在上面的原理圖中,使用了pic16F877A,其中在端口B上連接LED和晶體管,使用RBO處的TAC開關(guān)進一步控制。R1為晶體管提供偏置電流。R2是一個下拉電阻,用于輕觸開關(guān)兩端。當(dāng)未按下開關(guān)時,它將提供邏輯 0。1N4007是一個箝位二極管,用于繼電器的電磁線圈。當(dāng)繼電器關(guān)閉時,可能會出現(xiàn)高壓尖峰,二極管會抑制它。晶體管是驅(qū)動繼電器所必需的,因為它需要超過50mA的電流,而微控制器無法提供。我們也可以使用ULN2003代替晶體管,如果應(yīng)用需要兩個或三個以上的繼電器,這是一個更明智的選擇,請檢查繼電器模塊電路。端口 RB2上的LED將通知“繼電器已打開”。
最后的賽道會是這樣的——
代碼說明:
在main.c文件的開頭,我們添加了pic16F877A的配置行,并定義了跨 PORTB的引腳名稱。
與往常一樣,首先,我們需要在圖片微控制器中設(shè)置配置位,定義一些宏,包括庫和晶體頻率。您可以在最后給出的完整代碼中檢查所有這些代碼的代碼。我們制作了RB0作為輸入。在此引腳中,開關(guān)已連接。
#include
/*
Hardware related definition
*/
#define _XTAL_FREQ 200000000 //Crystal Frequency, used in delay
#define SW PORTBbits.RB0
#define RELAY PORTBbits.RB1
#define LED PORTBbits.RB2
之后,我們調(diào)用了 system_init() 函數(shù),在其中初始化引腳方向,并配置了引腳的默認(rèn)狀態(tài)。
在 system_init() 函數(shù)中,我們將看到
void system_init(void){
TRISBbits.TRISB0 = 1; // Setting Sw as input
TRISBbits.TRISB1 = 0; // setting LED as output
TRISBbits.TRISB2 = 0; // setting relay pin as output
LED = 0;
RELAY = 0;
}
在主功能中,我們不斷檢查開關(guān)按下,如果我們通過檢測RB0上的邏輯高電平來檢測開關(guān)按下;我們等待一段時間,看看開關(guān)是否仍然被按下,如果開關(guān)仍然被按下,那么我們將反轉(zhuǎn)繼電器和 LED 引腳的狀態(tài)。
void main(void) {
system_init(); // System getting ready
while(1){
if(SW == 1){ //switch is pressed
__delay_ms(50); // debounce delay
if (SW == 1){ // switch is still pressed
LED = !LED; // inverting the pin status.
RELAY = !RELAY;
}
}
}
return;
}
/*
* File: main.c
* Author: Sourav Gupta
* By:- circuitdigest.com
* Created on May 30, 2018, 2:26 PM
*/
// PIC16F877A Configuration Bit Settings
// 'C' source line config statements
// CONFIG
#pragma config FOSC = HS // Oscillator Selection bits (HS oscillator)
#pragma config WDTE = OFF // Watchdog Timer Enable bit (WDT disabled)
#pragma config PWRTE = OFF // Power-up Timer Enable bit (PWRT disabled)
#pragma config BOREN = ON // Brown-out Reset Enable bit (BOR enabled)
#pragma config LVP = OFF // Low-Voltage (Single-Supply) In-Circuit Serial Programming Enable bit (RB3/PGM pin has PGM function; low-voltage programming enabled)
#pragma config CPD = OFF // Data EEPROM Memory Code Protection bit (Data EEPROM code protection off)
#pragma config WRT = OFF // Flash Program Memory Write Enable bits (Write protection off; all program memory may be written to by EECON control)
#pragma config CP = OFF // Flash Program Memory Code Protection bit (Code protection off)
#include
/*
Hardware related definition
*/
#define _XTAL_FREQ 200000000 //Crystal Frequency, used in delay
#define SW PORTBbits.RB0
#define RELAY PORTBbits.RB1
#define LED PORTBbits.RB2
/*
Other Specific definition
*/
void system_init(void);
void main(void) {
system_init(); // System getting ready
while(1){
if(SW == 1){ //switch is pressed
__delay_ms(50); // debounce delay
if (SW == 1){ // switch is still pressed
LED = !LED; // inverting the pin status.
RELAY = !RELAY;
}
}
}
return;
}
/*
This Function is for system initialisations.
*/
void system_init(void){
TRISBbits.TRISB0 = 1; // Setting Sw as input
TRISBbits.TRISB1 = 0; // setting LED as output
TRISBbits.TRISB2 = 0; // setting relay pin as output
LED = 0;
RELAY = 0;
}
-
繼電器
+關(guān)注
關(guān)注
132文章
5320瀏覽量
148569 -
PIC16F877A
+關(guān)注
關(guān)注
2文章
43瀏覽量
21781 -
PIC微控制器
+關(guān)注
關(guān)注
0文章
17瀏覽量
7390
發(fā)布評論請先 登錄
相關(guān)推薦
評論