วงจรควบคุมมอเตอร์กระแสสูงโดยใช้ Arduino

ลองใช้เครื่องมือของเราเพื่อกำจัดปัญหา





ในโครงการนี้เราจะพูดถึงวิธีการ ควบคุมความเร็วมอเตอร์ การใช้วงจร Arduino PWM และวิธีใช้การย้อนกลับไปข้างหน้าหรือการควบคุมทิศทางในมอเตอร์กระแสตรงโดยใช้ Arduino ผ่านสวิตช์ปุ่มกดสองปุ่ม สามารถควบคุมมอเตอร์กระแสสูงได้ถึง 30 แอมป์โดยใช้การตั้งค่านี้

โดยAnkit Negi



มอเตอร์เป็นส่วนประกอบที่สำคัญมากในระบบไฟฟ้าและอิเล็กทรอนิกส์เนื่องจากใช้เป็นตัวกระตุ้นในหลาย ๆ ด้าน

เราต้องการมอเตอร์สำหรับการใช้งานขนาดเล็กเช่นหุ่นยนต์รวมถึงในพื้นที่ที่ใช้มอเตอร์หนัก (อุตสาหกรรม ฯลฯ )



ตอนนี้มอเตอร์ที่ใช้สำหรับการใช้งานขนาดเล็กสามารถควบคุมได้ง่ายเนื่องจากไม่ใช้กระแสไฟฟ้ามาก (น้อยกว่า 2 แอมป์)

และมอเตอร์เหล่านี้สามารถควบคุมได้ง่ายโดยใช้ไมโครคอนโทรลเลอร์เช่น arduino ด้วย ic ของไดรเวอร์มอเตอร์เช่น L298 หรือ L293D .

แต่มอเตอร์ที่ใช้งานหนัก (มากกว่า 10 แอมป์) ไม่สามารถควบคุมได้ โดยใช้ ic เหล่านี้ เนื่องจากสามารถจ่ายกระแสไฟฟ้าได้ จำกัด (สูงสุด 2 แอมป์) แล้วมอเตอร์เหล่านี้ควบคุมได้อย่างไร?

คำตอบนั้นง่ายมาก: ใช้รีเลย์ ซึ่งทำหน้าที่เป็นสวิตช์เช่นเปลี่ยนกระแสไฟฟ้าขนาดใหญ่โดยใช้กระแสไฟฟ้าขนาดเล็ก ด้วยวิธีนี้สองสิ่งที่สามารถทำได้:

1. ใช้มอเตอร์กระแสสูงของเราเอง

2. การแยกวงจรจึงป้องกันการกระแทก

ตอนนี้ไมโครคอนโทรลเลอร์สามารถใช้สลับรีเลย์เหล่านี้ได้ เราจะใช้ arduino UNO ที่นี่

ส่วนประกอบที่จำเป็นสำหรับโครงการนี้:

1. ARDUINO UNO: เพื่อให้อินพุตตรรกะแก่ด้านหลักของรีเลย์

2. SPDT RELAY -2: ต้องใช้รีเลย์สองตัวสำหรับการหมุนทั้งสองทิศทาง ผู้ติดต่อต้องได้รับการจัดอันดับเพื่อรองรับข้อกำหนดมอเตอร์กระแสสูง

ภาพรีเลย์สีฟ้า รีเลย์แสดง N / O N / C และรายละเอียดเสา3. Power Mosfet: คุณสามารถใช้ IRF1010 mosfet ไมโครสวิตช์ปุ่มกด

4. BATTERY (12v): เพื่อจ่ายพลังงานให้กับมอเตอร์

5. สอง PUSHBUTTONS: เพื่อให้อินพุตแก่ arduino (เช่นเมื่อกดและเมื่อไม่ได้กด)

ตัวต้านทาน 10k 1/4 วัตต์

6. ตัวต้านทาน 10K สองตัว: สำหรับ debouncing (อธิบายด้านล่าง)

วงจรควบคุมมอเตอร์กระแสสูงโดยใช้ Arduino

7. การเชื่อมต่อสายไฟ: สำหรับการเชื่อมต่อ

กำหนดการ:

วงจรควบคุมมอเตอร์ PWM Arduino

ทำการเชื่อมต่อดังแสดงในรูป

1. เชื่อมต่อขั้วที่เปิดตามปกติของรีเลย์ทั้งสองเข้ากับขั้วบวกของแบตเตอรี่และขั้วปิดตามปกติกับขั้วลบของแบตเตอรี่

2. เชื่อมต่อมอเตอร์ระหว่างขั้วที่เหลือ (จากสามตัว) ของรีเลย์แต่ละตัว

3. เชื่อมต่อเทอร์มินัลหนึ่งของด้านหลักของรีเลย์เข้ากับขาเอาต์พุตของ arduino ตามที่ระบุไว้ในรหัสและขั้วอื่นกับกราวด์

4. เชื่อมต่อเทอร์มินัลหนึ่งของปุ่มกดทั้งสองเข้ากับพิน 5v ของ arduino และเทอร์มินัลอื่นเข้ากับพินอินพุตตามที่ระบุในรหัส

4. ** อย่าลืมเชื่อมต่อตัวต้านทานเนื่องจากมีความสำคัญมากสำหรับการทำงานที่เหมาะสมของวงจรนี้ดังที่อธิบายไว้ด้านล่าง:

ทำไมจึงมีการเชื่อมต่อตัวต้านทาน

คุณอาจพบว่าไม่มีอะไรเชื่อมต่อกับพินอินพุตของ Arduino แต่ไม่ได้หมายความว่าพินเหล่านี้อาจเป็นศูนย์ลอจิกเมื่อสวิตช์ที่ระบุเปิดอยู่

ค่อนข้างเป็นนัยว่าเมื่อเปิดสวิตช์ arduino สามารถรับค่าสุ่มใด ๆ ระหว่างลอจิก 0 และลอจิก 1 ซึ่งไม่ดีเลย (เรียกว่าการตีกลับ)

ดังนั้นสิ่งที่เราต้องการตรงนี้ก็คือเมื่อไม่มีอะไรเชื่อมต่อกับขาอินพุตนั่นคือปุ่มกดเปิดอยู่ arduino จะรับอินพุต 0 จากพิน

และเพื่อให้บรรลุสิ่งนี้พินจะเชื่อมต่อโดยตรงกับกราวด์ก่อนปุ่มกดผ่านตัวต้านทาน หากเชื่อมต่อโดยตรงกับกราวด์โดยไม่มีตัวต้านทานมีโอกาสดีที่มันจะไหม้เนื่องจากพินจะลัดลงกราวด์และกระแสจำนวนมากจะไหล เพื่อป้องกันสิ่งนี้มีการเชื่อมต่อตัวต้านทานระหว่าง

ตัวต้านทานนี้เรียกว่าตัวต้านทานแบบดึงลงเนื่องจากกำลังดึงลอจิกที่พินเป็น 0 และกระบวนการนี้เรียกว่า debouncing

รหัส:

เบิร์นโค้ดนี้ลงใน arduino ของคุณ

int x// initialise variables
int y
int z
int w
void setup() {
pinMode(6,OUTPUT)//initialise pin 6 as output to RL1
pinMode(9,OUTPUT)//initialise pin 9 as output to RL2
pinMode(3,INPUT)//initialise pin 3 as input
pinMode(4,INPUT)//initialise pin 4 as input
pinMode(10,OUTPUT)//initialise PWM pin 8 as output to gate of mosfet
pinMode(A0,INPUT)//initialise pin A0 as input from pot.
Serial.begin(9600)
}
void loop() {
z=analogRead(A0)// read values from potentiometer in terms of voltage
w= map(z,0,1023,0,255)// map those values from 0 to 255
analogWrite(10,w)// write the mapped value to 10thpin as output
delay(1)//on time period of mosfet
analogWrite(10,w)
delay(1)//off time period of ,mosfet
Serial.println(z)//print value from pot to serial monitor
Serial.println(w)//print mapped value to serial monitor
x= digitalRead(3)
y= digitalRead(4)
if(x==0 && y==0){digitalWrite(6,LOW)//hault motor
digitalWrite(9,LOW)}
if(x==1 && y==0){digitalWrite(6,HIGH)// clockwise rotation of motor
digitalWrite(9,LOW)}
if(x==0 && y==1){digitalWrite(6,LOW)// anticlockwise rotation of motor
digitalWrite(9,HIGH)}
if(x==1 && y==1){digitalWrite(6,LOW)//hault motor
digitalWrite(9,LOW)
}
}

การทำงาน (การทำความเข้าใจรหัส):

•การควบคุมทิศทาง:

A. เมื่อไม่ได้กดปุ่มทั้งสอง:

ในเงื่อนไขนี้ arduino รับอินพุต 0 จากพินทั้งสอง ตามที่ระบุไว้ในรหัสในเงื่อนไขนี้ทั้งขาออกให้ตรรกะ 0 (LOW):

ถ้า (x == 0 && y == 0) {digitalWrite (6, LOW)

digitalWrite (9, LOW)}

เนื่องจากแรงดันไฟฟ้าอินพุตไปยังหลักของรีเลย์ทั้งสองจึงเป็นศูนย์ขั้วรองของทั้งสองจึงยังคงอยู่ที่ตำแหน่งปิดตามปกติ ดังนั้นจึงมีศูนย์โวลต์ที่ขั้วทั้งสองของมอเตอร์ทำให้ไม่มีการหมุน

B. เมื่อกดปุ่ม X แต่ไม่ได้กด Y:

ในเงื่อนไขนี้ arduino รับอินพุต 0 จากพิน 4 แต่อินพุต 1 จากพิน 3 ตามที่ระบุไว้ในรหัสในเงื่อนไขนี้พิน 6 ควรอยู่ที่ลอจิก 1 (สูง) ในขณะที่พิน 9 ที่ลอจิก 0 (ต่ำ):

ถ้า (x == 1 && y == 0) {digitalWrite (6, HIGH)

digitalWrite (9, LOW)}

เนื่องจากแรงดันไฟฟ้าอินพุตไปยังรีเลย์ # 1 สูงสวิตช์ของรีเลย์นี้จึงถูกส่งไปยังสภาวะเปิดตามปกติในขณะที่แรงดันไฟฟ้าขาเข้าไปยังรีเลย์ 2 อยู่ในระดับต่ำสวิตช์ของรีเลย์นี้จะยังคงอยู่ในสภาพปิดตามปกติทำให้เกิด 12v และ 0v ตามลำดับบนขั้วมอเตอร์ทำให้เกิด การหมุนของมอเตอร์ในทิศทางเดียว

C. เมื่อกดปุ่ม Y แต่ไม่ได้กด X:

ในเงื่อนไขนี้ arduino รับอินพุต 1 อินพุตจากพิน 4 แต่ input0 จากพิน 3 ตามที่ระบุไว้ในรหัสในเงื่อนไขนี้พิน 6 ควรอยู่ที่ลอจิก 0 (ต่ำ) ในขณะที่พิน 9 ที่ลอจิก 1 (สูง):

ถ้า (x == 1 && y == 0) {digitalWrite (6, LOW)

digitalWrite (9, สูง)}

เนื่องจากแรงดันไฟฟ้าอินพุตไปยังรีเลย์ # 2 สูงในครั้งนี้สวิตช์ของรีเลย์นี้จึงถูกส่งไปยังสภาวะเปิดตามปกติในขณะที่แรงดันไฟฟ้าขาเข้าไปยังรีเลย์ # 1 อยู่ในระดับต่ำสวิตช์ของรีเลย์นี้จะยังคงอยู่ในสภาพปิดตามปกติทำให้เกิด 12v และ 0v ตามลำดับระหว่างมอเตอร์ ขั้วทำให้มอเตอร์หมุนไปในทิศทางอื่น

D. เมื่อกดปุ่มทั้งสอง:

ในเงื่อนไขนี้ arduino รับอินพุต 1 อินพุตจากพินทั้งสอง ตามที่ระบุไว้ในรหัสในเงื่อนไขนี้ทั้งขาออกให้ตรรกะ 0 (LOW):

ถ้า (x == 0 && y == 0) {digitalWrite (6, LOW)

digitalWrite (9, LOW)}

เนื่องจากแรงดันไฟฟ้าอินพุตไปยังหลักของรีเลย์ทั้งสองจึงเป็นศูนย์ขั้วรองของทั้งสองจึงยังคงอยู่ที่ตำแหน่งปิดตามปกติ ดังนั้นจึงมีศูนย์โวลต์ที่ขั้วทั้งสองของมอเตอร์ทำให้ไม่มีการหมุน

• ควบคุมความเร็ว:

สมมติว่าโพเทนชิออมิเตอร์อยู่ที่ตำแหน่งดังกล่าวเมื่อให้ 0 โวลต์เป็นอินพุตไปยังขา A0 ของ arduino ด้วยเหตุนี้ arduino จึงจับคู่ค่านี้เป็น 0 และให้ 0 เป็นเอาต์พุต PWM บนพิน # 10 เช่น

analogWrite (10,0) // เขียนค่าที่แมปไปที่พินที่ 10 เป็นเอาต์พุต

ดังนั้นประตูของ mosfet จึงได้รับกระแส 0 เนื่องจากยังคงปิดอยู่และมอเตอร์อยู่ในตำแหน่งปิด

อย่างไรก็ตามเมื่อหม้อถูกหมุนและค่าของหม้อแตกต่างกันแรงดันไฟฟ้าบนขา A0 ก็แตกต่างกันไปและค่านี้จะถูกจับคู่กับพิน # 10 ด้วยความกว้าง PWM ที่เพิ่มขึ้นตามสัดส่วนทำให้กระแสไหลผ่านมอเตอร์และมอสเฟตมากขึ้น ท่อระบายน้ำซึ่งจะช่วยให้มอเตอร์ได้รับความเร็วมากขึ้นตามสัดส่วนและในทางกลับกันก็เกิดขึ้นเช่นเดียวกัน

ดังนั้นจากการสนทนาข้างต้นเราจะเห็นว่า Arduino สามารถใช้ควบคุมความเร็วและทิศทาง (ย้อนกลับไปข้างหน้า) ของมอเตอร์กระแสตรงกระแสสูงได้อย่างไรโดยการปรับหม้อที่ระบุและผ่านปุ่มกดสองปุ่ม

อัปเดต : สำหรับมอเตอร์กระแสสูงโปรดใช้รีเลย์ 12V / 30 แอมป์และขั้นตอนไดรเวอร์ BJT สำหรับการใช้งานรีเลย์กำลังสูงเหล่านี้ตามที่ระบุในแผนภาพที่แก้ไขต่อไปนี้:




คู่ของ: วงจรเซ็นเซอร์ถอยจอดรถพร้อมสัญญาณเตือน ถัดไป: วงจรกำเนิดสัญญาณ Arduino PWM