ประเภท: วงจรไมโครคอนโทรลเลอร์
จำนวนการดู: 19709
ความเห็นเกี่ยวกับบทความ: 0
ควบคุมมอเตอร์และเซอร์โวด้วย Arduino
ในการออกแบบระบบอัตโนมัติที่เรียบง่ายมันเป็นสิ่งที่จำเป็นไม่เพียง แต่จะอ่านค่าการอ่านเซ็นเซอร์เท่านั้น แต่ยังรวมถึงกลไกการเคลื่อนไหวด้วย สำหรับเรื่องนี้มีการใช้มอเตอร์ไฟฟ้าที่หลากหลาย ตัวเลือกที่ง่ายและเป็นที่นิยมที่สุดคือมอเตอร์กระแสตรง เขาได้รับความรักจากคนรักด้วยการเข้าถึงได้ง่ายปรับความเร็วได้ง่าย หากภารกิจคือการย้ายกลไกใด ๆ ไปยังมุมหรือระยะทางที่กำหนดจะสะดวกในการใช้เซอร์โวไดรฟ์หรือสเต็ปเปอร์มอเตอร์
ในบทความนี้เราจะดูเซอร์โวและมอเตอร์กระแสตรงขนาดเล็กเชื่อมต่อกับบอร์ด Arduino และปรับ DCT

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

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

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

เมื่อเชื่อมต่อกับแหล่งจ่ายไฟมอเตอร์ DC จะเริ่มหมุนด้วยความเร็วที่กำหนด เพื่อลดความเร็วคุณจำเป็นต้อง จำกัด กระแส ในการทำเช่นนี้จะมีการแนะนำตัวต้านทานบัลลาสต์ แต่จะช่วยลดประสิทธิภาพของการติดตั้งโดยรวมและแหล่งความร้อนส่วนเกินจะปรากฏขึ้น เพื่อให้การควบคุมแรงดันและกระแสมีประสิทธิภาพยิ่งขึ้นจึงใช้วิธีอื่น - การควบคุม PWM.

วิธีการควบคุมสัญญาณมอดูเลตความกว้างพัลส์ (แรงดันไฟฟ้า) คือการสร้างค่าแรงดันไฟฟ้าที่ต้องการโดยการเปลี่ยนความกว้างพัลส์ด้วยช่วงเวลาคงที่ของช่วงเวลา (ความถี่)
นั่นคือช่วงเวลาแบ่งออกเป็นสองส่วน:
1. เวลาแรงกระตุ้น
2. หยุดเวลา
อัตราส่วนของเวลาพัลส์ต่อเวลาทั้งหมดของรอบระยะเวลาเรียกว่ารอบการทำงาน:
Ks = ti / tper
ส่วนกลับซึ่งเรียกว่า "รอบการทำงาน":
D = 1 / KZ = tper / t และ
เพื่ออธิบายโหมดการทำงานของคอนโทรลเลอร์ PWM จะใช้แนวคิดทั้งสอง: รอบการทำงานและรอบการทำงาน
การใช้กระแสไฟฟ้าของมอเตอร์ขึ้นอยู่กับกำลังของมอเตอร์ จำนวนของการปฏิวัติดังที่ได้กล่าวไปแล้วนั้นขึ้นอยู่กับกระแส กระแสสามารถปรับได้โดยการเปลี่ยนปริมาณของแรงดันไฟฟ้าที่ใช้กับขดลวด ในความเป็นจริงเมื่อขับเคลื่อนด้วยแรงดันไฟฟ้าที่เกินค่าเล็กน้อยตามหนังสือเดินทางมอเตอร์ความเร็วของมันก็จะเกินความเร็วที่กำหนด อย่างไรก็ตามโหมดการทำงานดังกล่าวมีอันตรายสำหรับมอเตอร์เนื่องจากกระแสไฟฟ้าที่มากขึ้นในขดลวดซึ่งทำให้ความร้อนเพิ่มขึ้น
หากความเสียหายให้กับเครื่องยนต์จากแรงกระตุ้นระยะสั้นหรือโหมดการทำงานระยะสั้นซ้ำ ๆ น้อยที่สุดจากนั้นในระหว่างการดำเนินการเป็นเวลานานด้วยแรงดันสูงและ revs มันจะเผาไหม้หรือแบริ่งของมันจะร้อนขึ้นและลิ่มแล้วขดลวดจะเผาไหม้
หากแรงดันไฟฟ้าอินพุตต่ำเกินไปมอเตอร์ขนาดเล็กอาจมีกำลังไม่เพียงพอที่จะเคลื่อนที่ ดังนั้นจึงมีความจำเป็นที่จะต้องทำการทดลองหาความเร็วและแรงดันไฟฟ้าปกติสำหรับเครื่องยนต์ที่ต้องการไม่เกินค่าที่กำหนด
เราเชื่อมต่อกับ arduino
ฉันมีมอเตอร์เล็ก ๆ นอนอยู่ดูเหมือนว่าจากเครื่องเล่นเทปคาสเซ็ตซึ่งหมายความว่าแรงดันไฟฟ้าของมันจะต่ำกว่า 5 โวลต์จากนั้นพลังงานเอาต์พุตของอาร์ดิโนจะเพียงพอ ฉันจะใช้พลังงานจากเข็ม 5V เช่น จากการส่งออกของโคลงเชิงเส้นที่อยู่บนกระดาน ตามรูปแบบที่คุณเห็นด้านล่าง
ฉันไม่รู้กระแสของมอเตอร์นี้ดังนั้นฉันจึงเชื่อมต่อมันเข้ากับพลังงานและฉันได้ติดตั้งทรานซิสเตอร์ภาคสนามระหว่างมอเตอร์และหมุดไฟที่ประตูซึ่งมีสัญญาณจากเอาต์พุต PWM ถูกนำไปใช้

ในการปรับความเร็วฉันเพิ่มตัวต้านทานผันแปรไปยังวงจรโดยเชื่อมต่อกับอินพุตอนาล็อก A0 สำหรับการเชื่อมต่อที่รวดเร็วฉันใช้เขียงหั่นขนมแบบไม่มีบัดกรีซึ่งเรียกว่าเขียงหั่นขนม
ฉันติดตั้งตัวต้านทานที่ จำกัด กระแสในการเดินสายทรานซิสเตอร์ (เพื่อลดค่าประจุกระแสไฟฟ้าของประตูสิ่งนี้จะช่วยพอร์ตจากการเผาไหม้และแหล่งจ่ายไฟของไมโครคอนโทรลเลอร์จากการทรุดตัวและการแช่แข็ง) โดย 240 โอห์มและดึงลงสู่พื้นด้วยตัวต้านทาน 12 kOhm ถังชัตเตอร์ทำงานและปล่อยเร็วขึ้น
รายละเอียดเกี่ยวกับทรานซิสเตอร์สนามแม่เหล็กอธิบาย ในบทความในเว็บไซต์ของเรา. ฉันใช้ mosfet ที่ทรงพลังธรรมดาและไม่แพงจนเกินไปด้วย n-channel และ reverse diode IRF840 ในตัว

นี่คือสิ่งที่แอสเซมบลีที่ตั้งห้องปฏิบัติการของฉันดูเหมือนว่า:

ฟังก์ชั่นการควบคุม PWM จะถูกเรียกใช้เมื่อทำการเขียนไปยังเอาต์พุตที่เกี่ยวข้อง (3, 5, 6, 9, 10, 11) จาก 0 ถึง 255 ด้วยคำสั่ง AnalogWrite (พิน, ค่า) ตรรกะของงานของเธอนั้นปรากฎในกราฟด้านล่าง

สัญญาณดังกล่าวถูกนำไปใช้กับประตูทรานซิสเตอร์:

รหัสโปรแกรมไปยังความอับอายนั้นสั้นและง่ายโดยมีรายละเอียดฟังก์ชั่นเหล่านี้ทั้งหมดได้รับการอธิบาย ในบทความก่อนหน้าเกี่ยวกับ arduino.
int sensorPin = A0; // อินพุตจากโพเทนชิออมิเตอร์
int motorPin = 3; // เอาต์พุต PWM ไปที่เกตของกล้อง
การตั้งค่าเป็นโมฆะ () {
pinMode (motorPin, OUTPUT);
}
void loop () {
analogWrite (motorPin, แผนที่ (analogRead (sensorPin), 0, 1023, 0, 256));
}
ในฟังก์ชั่น analogWrite ฉันกำหนดค่าให้กับเอาต์พุต PWM ผ่านคำสั่ง map การใช้งานช่วยให้คุณสามารถลบรหัสหลายบรรทัดและตัวแปรเดียว
นี่เป็นรูปแบบการทำงานและเหมาะอย่างยิ่งสำหรับการสังเกตกระบวนการเมื่อทำการปรับกำลังไฟฟ้า, ความสว่างของไฟ LED, ความเร็วรอบเครื่องยนต์, คุณเพียงแค่เชื่อมต่อโหลดที่ต้องการแทนเครื่องยนต์ ในขณะเดียวกันแทนที่จะเป็น 5V แรงดันไฟฟ้าใด ๆ ที่สามารถนำไปใช้กับโหลดเช่น 12V อย่าลืมที่จะเชื่อมต่อกับแหล่งจ่ายไฟลบเพื่อติดต่อเช่น 12V อย่าลืมที่จะเชื่อมต่อแหล่งจ่ายไฟลบกับขา GND บนไมโครคอนโทรลเลอร์
ใน arduino ความถี่ PWM เมื่อเรียกใช้ผ่านฟังก์ชั่น analogWrite มีค่าเพียง 400 Hz ที่ค่าแรงดันไฟฟ้าต่ำสุดมีการได้ยินเสียงของความถี่ที่สอดคล้องกันจากมอเตอร์ขดลวด

Servo
เครื่องยนต์ที่สามารถอยู่ในตำแหน่งที่กำหนดไว้ล่วงหน้าและเมื่อสัมผัสกับปัจจัยภายนอกเช่นการบังคับทิศทางของเพลาทำให้ตำแหน่งไม่เปลี่ยนแปลง - เรียกว่าเซอร์โวไดรฟ์ โดยทั่วไปแล้วคำจำกัดความเสียงแตกต่างกันเล็กน้อย:
เซอร์โวเป็นมอเตอร์ขับเคลื่อนตอบรับเชิงลบ
โดยทั่วไปแล้วสายสามเส้นออกมาจากไดรฟ์เซอร์โว:
-
บวกกับพลัง
-
พลังงานน้อยลง
-
สัญญาณควบคุม
ไดรฟ์ servo ประกอบด้วย:
-
มอเตอร์ DC (หรือมอเตอร์ไร้แปรง);
-
ค่าธรรมเนียมการจัดการ
-
เครื่องส่งสัญญาณตำแหน่ง (เข้ารหัสสำหรับเซอร์โวที่มีมุมการหมุน 360 °หรือโพเทนชิออมิเตอร์สำหรับเซอร์โวที่มีมุมการหมุน 180 °);
-
การลดเกียร์ (ลดความเร็วของเครื่องยนต์และเพิ่มแรงบิดบนเพลาขับเคลื่อน)
หน่วยควบคุมเปรียบเทียบสัญญาณในเซ็นเซอร์ตำแหน่งในตัวและสัญญาณที่ผ่านสายควบคุมหากมีความแตกต่างกันจะมีการหมุนในมุมที่ความแตกต่างระหว่างสัญญาณถูกปรับระดับ

ลักษณะสำคัญของเซอร์โว:
-
ความเร็วในการหมุน (เวลาที่เพลาหมุนผ่านมุม 60 °)
-
แรงบิด (กก. / ซม. นั่นคือกี่กิโลกรัมเครื่องยนต์สามารถทนต่อคันโยก 1 ซม. จากเพลา);
-
แรงดันไฟฟ้า
-
การบริโภคในปัจจุบัน
-
โดยวิธีการควบคุม (อนาล็อกหรือดิจิตอลไม่มีความแตกต่างอย่างมีนัยสำคัญ แต่ดิจิตอลนั้นเร็วกว่าและเสถียรกว่า)
โดยทั่วไประยะเวลาของสัญญาณคือ 20 ms และระยะเวลาของพัลส์ควบคุม:
-
544 μs - สอดคล้องกับ 0 °;
-
2,400 μs - สอดคล้องกับมุม 180 °
ในบางกรณีความยาวพัลส์อาจแตกต่างกันเช่น 760 และ 1520 μsตามลำดับข้อมูลนี้สามารถอธิบายได้ในเอกสารทางเทคนิคสำหรับไดรฟ์ หนึ่งในเซอร์โวที่เป็นที่นิยมมากที่สุดคือ Tower Pro SG90 และรุ่นอื่นที่คล้ายคลึงกันมันไม่แพง - ประมาณ 4 ดอลลาร์

มันถือ 1.8 กก. / ซม. บนเพลาและสมบูรณ์ด้วยมันคือการติดตั้งสกรูและคันโยกที่มีเส้นโค้งสำหรับเพลา ในความเป็นจริงแล้วเด็กคนนี้มีความแข็งแรงและเป็นปัญหาอย่างมากที่จะหยุดมันด้วยนิ้วเดียว - ไดรฟ์ตัวเองเริ่มหลุดออกจากนิ้ว - นั่นคือความแข็งแกร่ง
การควบคุมเซอร์โวและ Arduino
ตามที่ได้กล่าวไปแล้วการควบคุมจะดำเนินการโดยการเปลี่ยนระยะเวลาการเต้นของชีพจร แต่อย่าสับสนระหว่างวิธีการนี้กับ PWM (PWM) ชื่อที่ถูกต้องคือ PDM (Pulse Duration Modulation) เบี่ยงเบนเล็กน้อยในความถี่สัญญาณ (20 ms - ระยะเวลา, ความถี่ 50 Hz) ไม่ได้มีบทบาทพิเศษ แต่อย่าเบี่ยงเบนจากความถี่มากกว่า 10 Hz, เครื่องยนต์สามารถทำงานได้อย่างกระตุกหรือไหม้

การเชื่อมต่อกับ Arduino นั้นค่อนข้างง่ายคุณยังสามารถจ่ายไฟให้กับไดรฟ์จาก 5v pin แต่ไม่ต้องการ ความจริงก็คือที่เริ่มมีกระแสกระโดดเล็ก ๆ นี้อาจทำให้เกิดการเบิกพลังงานและ เอาต์พุตไมโครคอนโทรลเลอร์เท็จ. แม้ว่า 1 ไดรฟ์ขนาดเล็ก (ประเภท SG90) เป็นไปได้ แต่ไม่มาก
ในการควบคุมเซอร์โวด้วย arduino คุณมีไลบรารี Servo ที่สร้างไว้ใน IDE มันมีชุดคำสั่งขนาดเล็ก:
-
แนบ () - เพิ่มตัวแปรในพิน ตัวอย่าง: drive name.attach (9) - เชื่อมต่อเซอร์โวกับพิน 9 หากไดรฟ์ของคุณต้องการความยาวของพัลส์ควบคุมที่ไม่ได้มาตรฐาน (544 และ 2400 μs) พวกเขาสามารถระบุได้โดยคั่นด้วยเครื่องหมายจุลภาคหลังหมายเลขพินตัวอย่างเช่น: servo.attach (พินมุมมิน (μs), มุมสูงสุดใน ISS)
-
เขียน () - ตั้งค่ามุมการหมุนของเพลาเป็นองศา;
-
writeMicroseconds () - ตั้งค่ามุมผ่านความยาวพัลส์ในหน่วยไมโครวินาที
-
อ่าน () - กำหนดตำแหน่งปัจจุบันของเพลา;
-
พ่วง () - ตรวจสอบว่ามีการตั้งพินที่เชื่อมต่อกับเซอร์โวหรือไม่
-
detach () - ยกเลิกคำสั่งแนบ
ห้องสมุดนี้ให้คุณควบคุมเซอร์โว 12 ตัวจาก UNO, Nano และบอร์ดที่คล้ายกัน (mega368 และ 168) ในขณะที่ความสามารถในการใช้ PWM บนพิน 9 และ 10 หายไป หากคุณมี MEGA คุณสามารถควบคุมเซิร์ฟเวอร์ที่ 48 แต่ PWM บนพิน 11 และ 12 จะหายไปหากคุณใช้เซอร์โวถึง 12 เซอร์เวอร์ PWM จะยังคงทำงานได้อย่างสมบูรณ์ในที่อยู่ติดต่อทั้งหมด
หากคุณเชื่อมต่อไลบรารีนี้คุณจะไม่สามารถทำงานกับเครื่องรับ / ส่งสัญญาณ 433 MHz มีไลบรารี Servo2 สำหรับสิ่งนี้ซึ่งเหมือนกัน

นี่คือตัวอย่างของรหัสที่ฉันใช้สำหรับการทดลองกับไดรฟ์ servo มันอยู่ในชุดตัวอย่างมาตรฐาน:
#include
Servo myservo; // ประกาศชื่อตัวแปรสำหรับ myservo servo
int potpin = 0; // pin สำหรับเชื่อมต่อ potentiometer การตั้งค่า
int val; // ตัวแปรเพื่อบันทึกผลลัพธ์ของการอ่านสัญญาณจากโพเทนชิออมิเตอร์
การตั้งค่าเป็นโมฆะ () {
myservo.attach (9); // ตั้งค่า 9 pin เป็นเอาท์พุทควบคุมสำหรับ servo
}
void loop () {
val = analogRead (potpin); // ผลลัพธ์ของการอ่านโพเทนชิออมิเตอร์ที่บันทึกในทรานส์ val พวกเขาจะอยู่ในช่วงตั้งแต่ 0 ถึง 1023
val = map (val, 0, 1023, 0, 180); // แปลช่วงการวัดจากอินพุตอนาล็อก 0-1023
// ในช่วงของงานสำหรับเซอร์โว 0-180 องศา
myservo.write (val); // ผ่านการแปลง สัญญาณจาก pot-ra เพื่อควบคุม อินพุตเซอร์โว
ล่าช้า (15); // ล่าช้าเป็นสิ่งจำเป็นสำหรับการทำงานที่เสถียรของระบบ

ข้อสรุป
การใช้มอเตอร์ไฟฟ้าที่ง่ายที่สุดที่จับคู่กับ arduino นั้นเป็นงานที่ค่อนข้างง่ายขณะที่การเรียนรู้เนื้อหานี้จะขยายขีดความสามารถของคุณในด้านระบบอัตโนมัติและหุ่นยนต์ หุ่นยนต์ที่ง่ายที่สุดหรือรถยนต์ที่ควบคุมด้วยวิทยุประกอบด้วยมอเตอร์ดังกล่าวและเซอร์โวใช้เพื่อควบคุมการหมุนของล้อ
ในตัวอย่างที่พิจารณาจะใช้โพเทนชิออมิเตอร์เพื่อกำหนดมุมของการหมุนหรือความเร็วในการหมุนแหล่งสัญญาณอื่นใดสามารถใช้แทนได้เช่นการหมุนหรือการเปลี่ยนแปลงความเร็วอาจเกิดขึ้นจากข้อมูลที่ได้รับจากเซ็นเซอร์
ตัวอย่างของการใช้เซอร์โวในพลังงานทางเลือก: การติดตามมุมของการตกกระทบของแสงแดดและการปรับตำแหน่งของแผงโซลาร์เซลล์ในโรงไฟฟ้า
ในการใช้อัลกอริทึมดังกล่าวคุณสามารถใช้หลาย ๆ photoresists หรืออุปกรณ์ optoelectronic อื่น ๆ สำหรับการวัดปริมาณของแสงตกกระทบและขึ้นอยู่กับการอ่านของพวกเขากำหนดมุมของการหมุนของแผงเซลล์แสงอาทิตย์
ดูได้ที่ electro-th.tomathouse.com
: