ประเภท: วงจรไมโครคอนโทรลเลอร์
จำนวนการดู: 19709
ความเห็นเกี่ยวกับบทความ: 0

ควบคุมมอเตอร์และเซอร์โวด้วย Arduino

 

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

ในบทความนี้เราจะดูเซอร์โวและมอเตอร์กระแสตรงขนาดเล็กเชื่อมต่อกับบอร์ด Arduino และปรับ DCT

ควบคุมมอเตอร์และเซอร์โวด้วย Arduino

มอเตอร์กระแสตรง

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

มอเตอร์กระแสตรง

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

สมอมอเตอร์สะสม

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


การควบคุมความเร็ว

มอเตอร์ไฟฟ้ากระแสตรง

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

การควบคุม PWM

วิธีการควบคุมสัญญาณมอดูเลตความกว้างพัลส์ (แรงดันไฟฟ้า) คือการสร้างค่าแรงดันไฟฟ้าที่ต้องการโดยการเปลี่ยนความกว้างพัลส์ด้วยช่วงเวลาคงที่ของช่วงเวลา (ความถี่)

นั่นคือช่วงเวลาแบ่งออกเป็นสองส่วน:

1. เวลาแรงกระตุ้น

2. หยุดเวลา

อัตราส่วนของเวลาพัลส์ต่อเวลาทั้งหมดของรอบระยะเวลาเรียกว่ารอบการทำงาน:

Ks = ti / tper

ส่วนกลับซึ่งเรียกว่า "รอบการทำงาน":

D = 1 / KZ = tper / t และ

เพื่ออธิบายโหมดการทำงานของคอนโทรลเลอร์ PWM จะใช้แนวคิดทั้งสอง: รอบการทำงานและรอบการทำงาน

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

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

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


เราเชื่อมต่อกับ arduino

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

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

ไดอะแกรมการเชื่อมต่อมอเตอร์ DC Arduino

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

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

รายละเอียดเกี่ยวกับทรานซิสเตอร์สนามแม่เหล็กอธิบาย ในบทความในเว็บไซต์ของเรา. ฉันใช้ mosfet ที่ทรงพลังธรรมดาและไม่แพงจนเกินไปด้วย n-channel และ reverse diode IRF840 ในตัว

ผู้บริหารและการกำหนดส่วนหนึ่งของวงจร

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

มอเตอร์กระแสตรงและ Arduino

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

ฟังก์ชั่นการควบคุม PWM

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

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

รหัสโปรแกรมไปยังความอับอายนั้นสั้นและง่ายโดยมีรายละเอียดฟังก์ชั่นเหล่านี้ทั้งหมดได้รับการอธิบาย ในบทความก่อนหน้าเกี่ยวกับ 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 ที่ค่าแรงดันไฟฟ้าต่ำสุดมีการได้ยินเสียงของความถี่ที่สอดคล้องกันจากมอเตอร์ขดลวด

Arduino และเซอร์โว

Servo

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

เซอร์โวเป็นมอเตอร์ขับเคลื่อนตอบรับเชิงลบ

โดยทั่วไปแล้วสายสามเส้นออกมาจากไดรฟ์เซอร์โว:

  • บวกกับพลัง

  • พลังงานน้อยลง

  • สัญญาณควบคุม

ไดรฟ์ servo ประกอบด้วย:

  • มอเตอร์ DC (หรือมอเตอร์ไร้แปรง);

  • ค่าธรรมเนียมการจัดการ

  • เครื่องส่งสัญญาณตำแหน่ง (เข้ารหัสสำหรับเซอร์โวที่มีมุมการหมุน 360 °หรือโพเทนชิออมิเตอร์สำหรับเซอร์โวที่มีมุมการหมุน 180 °);

  • การลดเกียร์ (ลดความเร็วของเครื่องยนต์และเพิ่มแรงบิดบนเพลาขับเคลื่อน)

หน่วยควบคุมเปรียบเทียบสัญญาณในเซ็นเซอร์ตำแหน่งในตัวและสัญญาณที่ผ่านสายควบคุมหากมีความแตกต่างกันจะมีการหมุนในมุมที่ความแตกต่างระหว่างสัญญาณถูกปรับระดับ

หลักการทำงานของเซอร์โว

ลักษณะสำคัญของเซอร์โว:

  • ความเร็วในการหมุน (เวลาที่เพลาหมุนผ่านมุม 60 °)

  • แรงบิด (กก. / ซม. นั่นคือกี่กิโลกรัมเครื่องยนต์สามารถทนต่อคันโยก 1 ซม. จากเพลา);

  • แรงดันไฟฟ้า

  • การบริโภคในปัจจุบัน

  • โดยวิธีการควบคุม (อนาล็อกหรือดิจิตอลไม่มีความแตกต่างอย่างมีนัยสำคัญ แต่ดิจิตอลนั้นเร็วกว่าและเสถียรกว่า)

โดยทั่วไประยะเวลาของสัญญาณคือ 20 ms และระยะเวลาของพัลส์ควบคุม:

  • 544 μs - สอดคล้องกับ 0 °;

  • 2,400 μs - สอดคล้องกับมุม 180 °

ในบางกรณีความยาวพัลส์อาจแตกต่างกันเช่น 760 และ 1520 μsตามลำดับข้อมูลนี้สามารถอธิบายได้ในเอกสารทางเทคนิคสำหรับไดรฟ์ หนึ่งในเซอร์โวที่เป็นที่นิยมมากที่สุดคือ Tower Pro SG90 และรุ่นอื่นที่คล้ายคลึงกันมันไม่แพง - ประมาณ 4 ดอลลาร์

Sevroprivod สำหรับ arduino

มันถือ 1.8 กก. / ซม. บนเพลาและสมบูรณ์ด้วยมันคือการติดตั้งสกรูและคันโยกที่มีเส้นโค้งสำหรับเพลา ในความเป็นจริงแล้วเด็กคนนี้มีความแข็งแรงและเป็นปัญหาอย่างมากที่จะหยุดมันด้วยนิ้วเดียว - ไดรฟ์ตัวเองเริ่มหลุดออกจากนิ้ว - นั่นคือความแข็งแกร่ง


การควบคุมเซอร์โวและ Arduino

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

การควบคุมเซอร์โวและ Arduino

การเชื่อมต่อกับ 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 สำหรับสิ่งนี้ซึ่งเหมือนกัน

ห้องสมุด 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

ข้อสรุป

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

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

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

ในการใช้อัลกอริทึมดังกล่าวคุณสามารถใช้หลาย ๆ photoresists หรืออุปกรณ์ optoelectronic อื่น ๆ สำหรับการวัดปริมาณของแสงตกกระทบและขึ้นอยู่กับการอ่านของพวกเขากำหนดมุมของการหมุนของแผงเซลล์แสงอาทิตย์

ดูได้ที่ e.imadeself.com:

  • วิธีการจัดเรียงและการทำงานของเซอร์โว
  • Arduino และ stepper motor: พื้นฐาน, โครงร่าง, การเชื่อมต่อและการควบคุม
  • คุณสมบัติการเชื่อมต่ออุปกรณ์กับ Arduino
  • วิธีการแยกมอเตอร์เหนี่ยวนำออกจากมอเตอร์กระแสตรง
  • วิธีการเชื่อมต่อตัวเข้ารหัสแบบเพิ่มหน่วยกับ Arduino

  •