ถ่ายทอดการเชื่อมต่อกับไมโครคอนโทรลเลอร์ PIC
ที่ฝัง
ในโครงการนี้เราจะอินเตอร์เฟซRelay กับไมโครคอนโทรลเลอร์ PIC PIC16F877A รีเลย์เป็นอุปกรณ์ทางกลเพื่อควบคุมแรงดันไฟฟ้าสูง, เครื่องใช้ไฟฟ้าในปัจจุบันสูง ' เปิด ' หรือ ' ปิด ' จากระดับแรงดันไฟฟ้าที่ต่ำกว่า รีเลย์ให้แยกระหว่างสองระดับแรงดันไฟฟ้าและมันก็เป็นเรื่องปกติที่ใช้ในการควบคุมอุปกรณ์ไฟฟ้ากระแสสลับ ตั้งแต่รีเลย์เชิงกลถึงโซลิดสเตตมีรีเลย์หลายแบบให้เลือกในอุปกรณ์อิเล็กทรอนิกส์ ในโครงการนี้เราจะใช้รีเลย์เชิงกล
ในโครงการนี้เราจะทำสิ่งต่อไปนี้ -
- เราจะเชื่อมต่อสวิตช์สำหรับอินพุตจากผู้ใช้
- ควบคุมหลอดไฟ AC 220Vพร้อมรีเลย์ 5V
- เพื่อควบคุมการถ่ายทอดเราจะใช้ BC547 ทรานซิสเตอร์ NPN และทรานซิสเตอร์จะถูกควบคุมจากPIC16F877A ไฟ LED จะแจ้งให้ทราบสภาพการเปิดหรือปิดรีเลย์
ถ้าคุณยังใหม่กับไมโครคอนโทรลเลอร์ PIC แล้วเริ่มต้นด้วยการเริ่มต้นกับไมโครคอนโทรลเลอร์ PIC
องค์ประกอบที่ต้องการ:
- PIC16F877A
- คริสตัล 20MHz
- 2 ชิ้น 33pF เซรามิก
- ตัวต้านทาน 4.7k 3 ตัว
- ตัวต้านทาน 1k
- 1 LED
- BC547 ทรานซิสเตอร์
- 1N4007 ไดโอด
- 5V รีเลย์ลูกบาศก์
- หลอดไฟ AC
- เขียงหั่นขนม
- สายสำหรับเชื่อมต่อชิ้นส่วน
- อะแดปเตอร์ 5V หรือแหล่งจ่ายไฟ 5V ใด ๆ ที่มีความสามารถอย่างน้อย 200mA ในปัจจุบัน
รีเลย์และการทำงาน:
รีเลย์ทำงานเหมือนสวิตช์ทั่วไป รีเลย์กลใช้แม่เหล็กชั่วคราวที่ทำจากขดลวดแม่เหล็กไฟฟ้า เมื่อเราให้กระแสไฟฟ้าผ่านขดลวดนี้มากพอมันก็กลายเป็นพลังงานและดึงแขน เนื่องจากวงจรที่เชื่อมต่อข้ามรีเลย์สามารถปิดหรือเปิดได้ อินพุทและเอาท์พุทไม่มีการเชื่อมต่อทางไฟฟ้าใด ๆ ดังนั้นจึงแยกอินพุทและเอาท์พุท เรียนรู้เพิ่มเติมเกี่ยวกับการถ่ายทอดและการก่อสร้างของที่นี่
รีเลย์สามารถพบได้ในช่วงแรงดันไฟฟ้าที่แตกต่างกันเช่น5V, 6V, 12V, 18Vเป็นต้นในโครงการนี้เราจะใช้รีเลย์ 5Vเนื่องจากแรงดันใช้งานของเราคือ5 โวลต์ที่นี่ นี้5V ลูกบาศก์ถ่ายทอดความสามารถในการสลับ7Aโหลดที่240VACหรือ10Aโหลดที่110VAC อย่างไรก็ตามแทนที่จะโหลดขนาดใหญ่เราจะใช้หลอดไฟ 220VACและเปลี่ยนมันโดยใช้รีเลย์
นี่คือรีเลย์ 5V ที่เราใช้ในโครงการนี้ การให้คะแนนในปัจจุบันมีการระบุไว้อย่างชัดเจนสำหรับสองระดับแรงดันไฟฟ้า10A ที่ 120VACและ7A ที่ 240VAC เราจำเป็นต้องเชื่อมต่อโหลดข้ามรีเลย์น้อยกว่าคะแนนที่ระบุ
การถ่ายทอดนี้มี5 ขา ถ้าเราเห็นข้อผิดพลาดเราสามารถเห็น -
L1และL2เป็นขาขดลวดแม่เหล็กไฟฟ้าภายใน เราต้องควบคุมสองพินเหล่านี้เพื่อเปิดรีเลย์ ' เปิด ' หรือ ' ปิด ' ถัดไปสามหมุดเป็นเสา NOและNC ขั้วต่อเชื่อมกับแผ่นโลหะภายในซึ่งจะเปลี่ยนการเชื่อมต่อเมื่อรีเลย์เปิด ในสภาพปกติPOLEเป็น shorted กับNC NCยืนสำหรับการเชื่อมต่อได้ตามปกติ เมื่อรีเลย์เปิดเสาเปลี่ยนตำแหน่งและกลายเป็นที่เชื่อมต่อกับNO NOย่อมาจากปกติ เปิด
ในวงจรของเราเราได้ทำการเชื่อมต่อรีเลย์กับทรานซิสเตอร์และไดโอด รีเลย์พร้อมทรานซิสเตอร์และไดโอดมีวางจำหน่ายในตลาดเป็นโมดูลรีเลย์ดังนั้นเมื่อคุณใช้รีเลย์โมดูลคุณไม่จำเป็นต้องเชื่อมต่อวงจรไดรเวอร์ (ทรานซิสเตอร์และไดโอด)
แผนภูมิวงจรรวม:
วงจรที่สมบูรณ์สำหรับการเชื่อมต่อรีเลย์ด้วย PIC ไมโครคอนโทรลเลอร์ได้รับด้านล่าง:
ในแผนผังดังกล่าวข้างต้นpic16F877Aถูกนำมาใช้ซึ่งในพอร์ต B LEDและทรานซิสเตอร์มีการเชื่อมต่อซึ่งถูกควบคุมเพิ่มเติมได้โดยใช้สวิทช์ TACที่RBO R1ให้อคติปัจจุบันทรานซิสเตอร์ R2เป็นตัวต้านทานแบบดึงลงที่ใช้กับสวิทช์สัมผัส มันจะให้ตรรกะ 0เมื่อไม่ได้กดสวิทช์1N4007เป็นไดโอดยึดที่ใช้สำหรับขดลวดแม่เหล็กไฟฟ้ารีเลย์ของ เมื่อรีเลย์ปิดการทำงานจะมีโอกาสเกิดแรงดันไฟฟ้าสูงและไดโอดจะหยุดการทำงาน ทรานซิสเตอร์จำเป็นสำหรับการขับรีเลย์เนื่องจากต้องการกระแสมากกว่า50mAซึ่งไมโครคอนโทรลเลอร์ไม่สามารถให้ได้นอกจากนี้เรายังสามารถใช้ULN2003แทนทรานซิสเตอร์มันเป็นทางเลือกที่ฉลาดถ้ามากกว่าสองหรือสามรีเลย์ที่จำเป็นสำหรับการประยุกต์ใช้ให้ตรวจสอบวงจรโมดูลRelay LEDทั่วพอร์ต RB2จะแจ้งให้ทราบ“ ถ่ายทอดอยู่บน”
วงจรสุดท้ายจะมีลักษณะเช่นนี้ -
คุณสามารถเรียนรู้การควบคุมรีเลย์กับ Arduino ที่นี่และถ้าคุณสนใจจริงๆในการถ่ายทอดจากนั้นตรวจสอบทุกวงจรรีเลย์ที่นี่
คำอธิบายรหัส:
ที่จุดเริ่มต้นของmain.cไฟล์เราเพิ่มสายการกำหนดค่าสำหรับpic16F877Aและกำหนดชื่อพิทั่วPORTB
เช่นเคยก่อนอื่นเราต้อง ตั้งค่าบิตการกำหนดค่าในไมโครคอนโทรลเลอร์ picกำหนดมาโครบางตัวรวมถึงไลบรารี่และความถี่คริสตัล คุณสามารถตรวจสอบรหัสสำหรับทุกคนในรหัสที่สมบูรณ์ได้รับในตอนท้าย เราได้ทำให้RB0เป็นอินพุท ในพินนี้สวิตช์เชื่อมต่ออยู่
#include <xc.h> / * คำจำกัดความที่เกี่ยวข้องกับฮาร์ดแวร์ * / #define _XTAL_FREQ 200000000 // ความถี่คริสตัลที่ใช้ในการหน่วงเวลา #define SW PORTBbits.RB0 # กำหนด PORTBbits.RB1 # กำหนดนิยาม PORTBbits.RB1 #
หลังจากนั้นเราเรียกว่า system_init () ฟังก์ชั่นที่เราเริ่มต้นทิศทางของพินและกำหนดค่าสถานะเริ่มต้นของพิน
ในฟังก์ชั่น system_init () เราจะเห็น
เป็นโมฆะ system_init (เป็นโมฆะ) { TRISBbits.TRISB0 = 1; // การตั้งค่า Sw เป็นอินพุต TRISBbits.TRISB1 = 0; // การตั้งค่า LED เป็นเอาต์พุต TRISBbits.TRISB2 = 0; // การตั้งค่า pin relay เป็น LED output = 0; RELAY = 0; }
ในฟังก์ชั่นหลักเราทำการตรวจสอบการกดสวิตช์อย่างต่อเนื่องหากเราตรวจจับการกดสวิตช์โดยการตรวจจับตรรกะสูงทั่วRB0 ; เรารอสักครู่และดูว่าสวิตช์ยังกดอยู่หรือไม่ถ้าสวิตช์ยังกดอยู่เราจะสลับสถานะ RELAY และ LED ของขา
เป็นโมฆะ main (void) { system_init (); // ระบบเตรียมพร้อม ในขณะที่ (1) { ถ้า (SW == 1) {// สวิตช์ถูกกด __delay_ms (50); // debounce delay ถ้า (SW == 1) {// สวิตช์ยังคงกด LED =! LED; // การกลับสถานะหมุด RELAY =! RELAY; } } } return; }
รหัสที่สมบูรณ์และวิดีโอสาธิตสำหรับการเชื่อมต่อรีเลย์นี้ได้รับด้านล่าง
รหัส
/ *
* ไฟล์: main.c
* ผู้แต่ง: Sourav Gupta
* โดย: - circuitdigest.com
* สร้างเมื่อ 30 พฤษภาคม 2018, 2:26 PM
* /
* ไฟล์: main.c
* ผู้แต่ง: Sourav Gupta
* โดย: - circuitdigest.com
* สร้างเมื่อ 30 พฤษภาคม 2018, 2:26 PM
* /
// PIC16F877A การตั้งค่าบิตการกำหนดค่า
// คำสั่งการกำหนดค่าบรรทัดซอร์ส 'C'
// CONFIG
#pragma config FOSC = HS // บิตการเลือก Oscillator (HS oscillator)
#pragma config WDTE = OFF // ตัวจับเวลา Watchdog เปิดใช้งานบิต (ปิดใช้งาน WDT)
#pragma config PWRTE = OFF // ตัวจับเวลาเปิดใช้งานบิต (PWRT) ปิดใช้งาน)
#pragma config BOREN = ON // รีเซ็ต Brown-out เปิดใช้งานบิต (เปิดใช้งาน BOR)
#pragma config LVP = OFF // แรงดันไฟฟ้าต่ำ (Single-Supply) การเขียนโปรแกรมอนุกรมในวงจรเปิดใช้งานบิต (pin RB3 / PGM PGM มี PGM ฟังก์ชั่นการตั้งโปรแกรมแรงดันต่ำเปิดใช้งาน
#pragma config CPD = ปิด // ข้อมูล EEPROM บิตการป้องกันรหัสหน่วยความจำ (การป้องกันรหัส EEPROM ข้อมูลปิด)
#pragma config WRT = ปิด // โปรแกรมแฟลชหน่วยความจำเขียนเปิดใช้งานบิต (ป้องกันการเขียนออก; หน่วยความจำอาจถูกเขียนถึงโดยการควบคุม EECON)
#pragma config CP = OFF // โปรแกรมแฟลชบิตการป้องกันโค้ดหน่วยความจำ (การป้องกันโค้ดปิด)
#pragma config FOSC = HS // บิตการเลือก Oscillator (HS oscillator)
#pragma config WDTE = OFF // ตัวจับเวลา Watchdog เปิดใช้งานบิต (ปิดใช้งาน WDT)
#pragma config PWRTE = OFF // ตัวจับเวลาเปิดใช้งานบิต (PWRT) ปิดใช้งาน)
#pragma config BOREN = ON // รีเซ็ต Brown-out เปิดใช้งานบิต (เปิดใช้งาน BOR)
#pragma config LVP = OFF // แรงดันไฟฟ้าต่ำ (Single-Supply) การเขียนโปรแกรมอนุกรมในวงจรเปิดใช้งานบิต (pin RB3 / PGM PGM มี PGM ฟังก์ชั่นการตั้งโปรแกรมแรงดันต่ำเปิดใช้งาน
#pragma config CPD = ปิด // ข้อมูล EEPROM บิตการป้องกันรหัสหน่วยความจำ (การป้องกันรหัส EEPROM ข้อมูลปิด)
#pragma config WRT = ปิด // โปรแกรมแฟลชหน่วยความจำเขียนเปิดใช้งานบิต (ป้องกันการเขียนออก; หน่วยความจำอาจถูกเขียนถึงโดยการควบคุม EECON)
#pragma config CP = OFF // โปรแกรมแฟลชบิตการป้องกันโค้ดหน่วยความจำ (การป้องกันโค้ดปิด)
#include <xc.h>
/ *
คำจำกัดความที่เกี่ยวข้องกับฮาร์ดแวร์
* /
#define _XTAL_FREQ 200000000 // ความถี่คริสตัลที่ใช้ในการหน่วงเวลา
#define SW PORTBbits.RB0
# กำหนด PORTBbits.RB1
# กำหนดนิยาม PORTBbits.RB1 #
/ *
คำจำกัดความที่เกี่ยวข้องกับฮาร์ดแวร์
* /
#define _XTAL_FREQ 200000000 // ความถี่คริสตัลที่ใช้ในการหน่วงเวลา
#define SW PORTBbits.RB0
# กำหนด PORTBbits.RB1
# กำหนดนิยาม PORTBbits.RB1 #
/ *
คำจำกัดความเฉพาะอื่น ๆ
* /
void system_init (void);
คำจำกัดความเฉพาะอื่น ๆ
* /
void system_init (void);
เป็นโมฆะ main (void) {
system_init (); // ระบบเตรียมพร้อม
ในขณะที่ (1) {
ถ้า (SW == 1) {// สวิตช์ถูกกด
__delay_ms (50); // debounce delay
ถ้า (SW == 1) {// สวิตช์ยังคงกด
LED =! LED; // การกลับสถานะหมุด
RELAY =! RELAY;
}
}
}
return;
}
/ *
ฟังก์ชั่นนี้มีไว้สำหรับการเริ่มต้นระบบ
* /
system_init (); // ระบบเตรียมพร้อม
ในขณะที่ (1) {
ถ้า (SW == 1) {// สวิตช์ถูกกด
__delay_ms (50); // debounce delay
ถ้า (SW == 1) {// สวิตช์ยังคงกด
LED =! LED; // การกลับสถานะหมุด
RELAY =! RELAY;
}
}
}
return;
}
/ *
ฟังก์ชั่นนี้มีไว้สำหรับการเริ่มต้นระบบ
* /
เป็นโมฆะ system_init (เป็นโมฆะ) {
TRISBbits.TRISB0 = 1; // การตั้งค่า Sw เป็นอินพุต
TRISBbits.TRISB1 = 0; // การตั้งค่า LED เป็นเอาต์พุต
TRISBbits.TRISB2 = 0; // การตั้งค่า pin relay เป็น
LED output = 0;
RELAY = 0;
}
TRISBbits.TRISB0 = 1; // การตั้งค่า Sw เป็นอินพุต
TRISBbits.TRISB1 = 0; // การตั้งค่า LED เป็นเอาต์พุต
TRISBbits.TRISB2 = 0; // การตั้งค่า pin relay เป็น
LED output = 0;
RELAY = 0;
}
วีดีโอ
ความคิดเห็น
22 มิ.ย. 2018- เข้าสู่ระบบหรือลงทะเบียนเพื่อแสดงความคิดเห็น
สวัสดีเพื่อน ๆ คุณใช้คอมไพเลอร์อะไร CCS, mplab XC8, MikroC, Hi-tech C?
Hi, it's a very interesting blog. Thank you for sharing it will be helpful for engineering students to develop their own academic projects. I have found interesting projects in this Embedded Projects Using Matlab
ตอบลบ