- มอเตอร์กระแสตรงคืออะไร?
- ส่วนประกอบที่จำเป็น
- แผนภูมิวงจรรวม
- การเขียนโปรแกรม Atmega16 สำหรับการควบคุมมอเตอร์กระแสตรง
มอเตอร์กระแสตรงเป็นมอเตอร์ที่ใช้กันอย่างแพร่หลาย มอเตอร์เหล่านี้สามารถพบได้เกือบทุกที่ตั้งแต่โครงการขนาดเล็กไปจนถึงหุ่นยนต์ขั้นสูง ก่อนหน้านี้เราได้เชื่อมต่อ DC Motor กับไมโครคอนโทรลเลอร์อื่น ๆ เช่น Arduino, Raspberry pi และใช้ในโครงการหุ่นยนต์จำนวนมาก วันนี้เราเรียนรู้ที่จะควบคุมมอเตอร์ DC ด้วยไมโครคอนโทรลเลอร์ตระกูล AVR ATmega16 แต่ก่อนที่จะไปเรามาทำความรู้จักกับมอเตอร์กระแสตรงกันก่อน
มอเตอร์กระแสตรงคืออะไร?
DC Motor เป็นอุปกรณ์ที่เปลี่ยนพลังงานไฟฟ้าเป็นพลังงานกล โดยเฉพาะมอเตอร์กระแสตรงใช้กระแสไฟฟ้ากระแสตรงเพื่อเปลี่ยนพลังงานไฟฟ้าเป็นพลังงานกล หลักการพื้นฐานของมอเตอร์คือปฏิสัมพันธ์ระหว่างสนามแม่เหล็กและกระแสเพื่อสร้างแรงภายในมอเตอร์ซึ่งช่วยให้มอเตอร์หมุน ดังนั้นเมื่อกระแสไฟฟ้าถูกส่งผ่านขดลวดในสนามแม่เหล็กแรงแม่เหล็กจะถูกสร้างขึ้นซึ่งก่อให้เกิดแรงบิดส่งผลให้เกิดการเคลื่อนที่ของมอเตอร์ ทิศทางของมอเตอร์ถูกควบคุมโดยการย้อนกลับของกระแส นอกจากนี้ความเร็วของมันสามารถเปลี่ยนแปลงได้ตามแรงดันไฟฟ้าที่ให้มา เนื่องจากไมโครคอนโทรลเลอร์มีพิน PWM ดังนั้นจึงสามารถใช้เพื่อควบคุมความเร็วของมอเตอร์ได้
ในการกวดวิชานี้การดำเนินการ DC มอเตอร์จะแสดงให้เห็นด้วยATmega16ตัวขับมอเตอร์ L293D จะใช้เพื่อย้อนกลับทิศทางของกระแสดังนั้นทิศทางการเคลื่อนที่ ไดรเวอร์มอเตอร์ L293D ใช้การกำหนดค่าวงจร H-Bridge ซึ่งส่งกระแสไฟฟ้าที่ต้องการไปยัง Motor สองปุ่มกดจะใช้ในการเลือกทิศทางของมอเตอร์ปุ่มกดปุ่มใดปุ่มหนึ่งใช้เพื่อเลือกการหมุนอย่างชาญฉลาดของนาฬิกาและอีกปุ่มหนึ่งใช้เพื่อเลือกการต่อต้านนาฬิกาของมอเตอร์กระแสตรง
ส่วนประกอบที่จำเป็น
- มอเตอร์กระแสตรง (5V)
- L293D ขับมอเตอร์
- Atmega16 ไมโครคอนโทรลเลอร์ IC
- 16Mhz คริสตัลออสซิลเลเตอร์
- ตัวเก็บประจุ 100nF สองตัว
- ตัวเก็บประจุ 22pF สองตัว
- ปุ่มกด
- สายจัมเปอร์
- เขียงหั่นขนม
- USBASP v2.0
- LED (สีใดก็ได้)
แผนภูมิวงจรรวม
การเขียนโปรแกรม Atmega16 สำหรับการควบคุมมอเตอร์กระแสตรง
Atmega16 ได้รับการตั้งโปรแกรมโดยใช้ USBASP และ Atmel Studio7.0 หากคุณไม่ทราบวิธีการตั้งโปรแกรม Atmega16 โดยใช้ USBASP ให้ไปที่ลิงค์ โปรแกรมที่สมบูรณ์จะได้รับเมื่อสิ้นสุดโครงการ เพียงแค่อัปโหลดโปรแกรมใน Atmega16 และใช้ปุ่มกดสองปุ่มเพื่อหมุนมอเตอร์กระแสตรงตามเข็มนาฬิกาและทวนเข็มนาฬิกามอเตอร์กระแสตรงเชื่อมต่อโดยใช้ไดรเวอร์มอเตอร์ L293D มอเตอร์กระแสตรงจะหมุนสองทิศทางเมื่อกดปุ่มตามลำดับ ปุ่มกดปุ่มเดียวจะใช้เพื่อหมุนมอเตอร์กระแสตรงในทิศทาง Clock Wise และปุ่มกดอีกปุ่มจะใช้เพื่อหมุนมอเตอร์ DC ในทิศทางที่ชาญฉลาดของ Counter Clock ประการแรกกำหนดความถี่ของ CPU ไมโครคอนโทรลเลอร์และรวมถึงห้องสมุดที่จำเป็นทั้งหมด
#define F_CPU 16000000UL # รวม # รวม
จากนั้นใช้หนึ่งตัวแปรในการติดตามการกดปุ่มกดสถานะตัวแปรนี้จะใช้เพื่อกำหนดทิศทางของมอเตอร์
int ฉัน;
เลือกโหมดอินพุต / เอาต์พุตของ GPIO ใช้ลงทะเบียนทิศทางข้อมูล เริ่มแรกให้เอาท์พุทของขามอเตอร์ให้ต่ำเพื่อหลีกเลี่ยงการสตาร์ทมอเตอร์โดยไม่ต้องกดปุ่ม
DDRA = 03; ปอร์ตา & = ~ (1 << 1); ปอร์ตา & = ~ (1 << 0);
ตรวจสอบว่ากดปุ่ม1 stเชื่อมต่อกับ PORTA4 ของ Atmega16 หรือไม่และจัดเก็บสถานะของปุ่มกดในตัวแปร
ถ้า (! bit_is_clear (PINA, 4)) { i = 1; ปอร์ตา & = ~ (1 << 1); _delay_ms (1,000); }
ตรวจสอบในทำนองเดียวกันว่ากดปุ่ม2 ndเชื่อมต่อกับ PORTA5 ของ Atmega16 หรือไม่และเก็บสถานะของปุ่มกดในตัวแปร
อื่นถ้า (! bit_is_clear (PINA, 5)) { i = 2; ปอร์ตา & = ~ (1 << 0); _delay_ms (1,000); }
หากสถานะของปุ่ม1 stเป็นจริงให้หมุนมอเตอร์กระแสตรงไปในทิศทางที่ชาญฉลาดของนาฬิกาและหากสถานะของปุ่มกดที่สองเป็นจริงให้หมุนมอเตอร์กระแสตรงด้วยการป้องกันนาฬิกาอย่างชาญฉลาด
ถ้า (i == 1) { PORTA - = (1 << 0); ปอร์ตา & = ~ (1 << 1); } else if (i == 2) { PORTA - = (1 << 1); ปอร์ตา & = ~ (1 << 0); }
คุณสามารถเชื่อมต่อหมุดมอเตอร์เข้ากับพิน GPIO ใดก็ได้ขึ้นอยู่กับ GPIO ที่ใช้ นอกจากนี้สิ่งสำคัญคือต้องใช้ Motor Driver IC เพื่อลดภาระของไมโครคอนโทรลเลอร์เนื่องจากไมโครคอนโทรลเลอร์ไม่สามารถจ่ายกระแสที่ต้องการเพื่อใช้งานมอเตอร์กระแสตรงได้ สำหรับรายละเอียดเพิ่มเติมและโครงการอื่น ๆ ที่ใช้มอเตอร์กระแสตรงโปรดไปที่ลิงค์ที่ระบุ
รหัสที่สมบูรณ์และวิดีโอสาธิตได้รับด้านล่าง