เอกสารประกอบการสอนวิชาไมโครคอนโทรลเลอรเ์ บ้อื งต้น 1 หนว่ ยที่ 8 การควบคุมดีซีมอเตอรแ์ ละสเตปมอเตอร์ด้วย ARDUINO สาระสาคัญ มอเตอร์ไฟฟ้าเป็นอุปกรณ์ที่นิยมใช้กันอย่างแพร่หลายในโรงงานอุตสาหกรรม เป็นอุปกรณ์ท่ีใช้ควบคุม เครือ่ งจักรกลในงานอุตสาหกรรม มอเตอร์มหี ลายแบบหลายชนิดท่ีใช้ให้เหมาะสมกับงาน ดังน้ันเราจึงต้องทราบถึง ความหมายและชนิดของมอเตอร์ไฟฟ้า ตลอดถึงคุณสมบัติการใช้งานของมอเตอร์แต่ละชนิด เพื่อให้เกิด ประสิทธภิ าพสูงสดุ ในการใช้งานของมอเตอร์นน้ั ๆ มอเตอร์มอเตอรไ์ ฟฟา้ (Motor) หมายถึงเครื่องกลไฟฟ้าชนิดหนึ่ง ท่เี ปล่ยี นแปลงพลังงานไฟฟา้ มาเป็นพลังงานกล เนอ้ื หาสาระการเรยี นรู้ 8.1 ความรเู้ บ้อื งตน้ เกีย่ วกับมอเตอร์ไฟฟา้ 8.2 การควบคุมดซี ีมอเตอร์ด้วย Arduino 8.3 การควบคุมสเตปมอเตอร์ด้วย Arduino จดุ ประสงค์การเรยี นรู้ จดุ ประสงค์ทั่วไป 1. เพ่อื ให้มีความรู้ความเข้าใจเก่ยี วกบั การควบคมุ ดซี มี อเตอร์และคุมสเตปมอเตอรด์ ้วย Arduino 2. เพื่อให้สามารถนาความรู้ไปประยุกต์ใช้ในการเขียนโปรแกรมกาหนดการทางานด้วย Arduino 3. เพื่อใหต้ ระหนักถึงความสาคัญของการควบคุมดีซีมอเตอรแ์ ละคมุ สเตปมอเตอร์ดว้ ย Arduino หนว่ ยท่ี 8 การควบคมุ ดีซีมอเตอรแ์ ละสเตปมอเตอร์ด้วย Arduino เรียบเรียงโดยครทู ันพงษ์ ภรู่ กั ษ์
เอกสารประกอบการสอนวิชาไมโครคอนโทรลเลอร์เบอ้ื งตน้ 2 จุดประสงคเ์ ชงิ พฤตกิ รรม 1. อธบิ ายความรเู้ บอ้ื งต้นเกย่ี วกบั มอเตอรไ์ ฟฟา้ ได้ 2. เชื่อมต่อดีซมี อเตอรด์ ้วย Arduino ได้ 3. ควบคมุ ดีซีมอเตอร์ดว้ ย Arduino ได้ 4. เชื่อมตอ่ สเตปมอเตอรด์ ้วย Arduino ได้ 5. ควบคมุ สเตปมอเตอร์ดว้ ย Arduino ได้ หนว่ ยที่ 8 การควบคมุ ดซี ีมอเตอร์และสเตปมอเตอรด์ ้วย Arduino เรยี บเรียงโดยครูทนั พงษ์ ภ่รู ักษ์
เอกสารประกอบการสอนวิชาไมโครคอนโทรลเลอรเ์ บอ้ื งตน้ 3 แบบทดสอบก่อนเรียน หน่วยที่ 8 เร่อื ง การควบคุมดีซีมอเตอรแ์ ละสเตปมอเตอรด์ ว้ ย Arduino เร่อื ง การควบคมุ ดซี แี ละสเตปมอเตอรด์ ว้ ย Arduino ใชเ้ วลา 20 นาที วชิ า ไมโครคอนโทรลเลอร์เบอื้ งต้น รหสั วิชา (2127-2107) ระดับชั้น ประกาศนยี บตั รวิชาชพี (ปวช.) สาขาวิชา เมคคาทรอนกิ ส์ ********************************************************************************** คาช้ีแจง 1. แบบทดสอบมีท้งั หมด 10 ขอ้ (10 คะแนน) 2. ให้ผู้เรียนเลือกคาตอบทถ่ี กู ท่ีสุดแล้วกาเคร่อื งหมายกากบาท () ลงในกระดาษคาตอบ 1. มอเตอรม์ อเตอรไ์ ฟฟา้ (Motor) หมายถึง ก. เครื่องกลไฟฟ้าที่เปล่ยี นแปลงพลงั งานกลเปน็ พลงั งานไฟฟ้า ข. เคร่อื งกลไฟฟ้าทีเ่ ปลย่ี นแปลงพลงั งานไฟฟา้ เป็นพลังงานแสง ค. เครื่องกลไฟฟ้าทเ่ี ปลย่ี นแปลงพลังงานกลเปน็ พลงั งานแสง ง. เครอ่ื งกลไฟฟา้ ท่เี ปลี่ยนแปลงพลงั งานไฟฟ้าเป็นพลงั งานกล 2. มอเตอรไ์ ฟฟา้ กระแสตรงเป็นตน้ กาลงั ขบั เคล่ือนทสี่ าคัญอยา่ งหนงึ่ ในโรงงานอตุ สาหกรรมเพราะ ก. ทนทาน ข. ราคาถูก ค. ปรับความเร็วได้ ง. ประหยดั ไฟฟ้า 3. กระแสไฟฟา้ ในขดลวดสนามแมเ่ หล็ก (Field Coil) จะสรา้ งขวั้ แมเ่ หล็กแบบใด ก. ขว้ั สูง-ตา่ ข. ข้ัวเหนือ-ใต้ ค. ขวั้ ซา้ ย-ขวา ง. ขวั้ บน-ลา่ ง 4. DC Motor ประกอบดว้ ย 2 ส่วนหลกั ๆ ไดแ้ ก่ ก. ขั้วแม่เหลก็ เหนอื / ใต้ ข. ทุ่นอารม์ าเจอร์ / สเตเตอร์ ค. มอเตอร์ไฟฟ้ากระแสสลบั / มอเตอร์ไฟฟา้ กระแสตรง ง. ขดลวดอาร์มาเจอร์ / ขดลวดสนามแม่เหล็ก หนว่ ยท่ี 8 การควบคุมดีซีมอเตอร์และสเตปมอเตอรด์ ้วย Arduino เรยี บเรยี งโดยครทู ันพงษ์ ภู่รกั ษ์
เอกสารประกอบการสอนวิชาไมโครคอนโทรลเลอร์เบ้อื งต้น 4 5. หลักการทางานของ DC Motor คอื ก. แรงดันสลบั ตัดผา่ นสนามแมเ่ หลก็ เกิดทอร์กขึ้นในทศิ ทเ่ี หมาะสม ข. กระแสสลับตดั ผา่ นสนามแม่เหล็ก เกิดทอรก์ ข้ึนในทิศทเ่ี หมาะสม ค. แรงดันสลบั ตัดผ่านสนามแม่เหลก็ เกดิ ทอร์กข้นึ ในทิศท่ีเหมาะสม ง. กระแสตรงตัดผ่านสนามแมเ่ หลก็ เกิดทอรก์ ขน้ึ ในทิศท่เี หมาะสม 6. วงจร H-Bridge สามารถควบคมุ มอเตอรไ์ ด้อย่างไร ก. ควบคมุ ความเร็วรอบของมอเตอร์ ข. ควบคมุ ทิศทางของมอเตอร์ ค. ควบคุมทศิ ทาง และความเร็วรอบของมอเตอร์ ง. ควบคุมการเดินหน้าและถอยหลงั ของมอเตอร์ 7. หากตอ้ งการให้หมุนตามเขม็ (Clockwise :CW) ใหส้ วิตซ์ทางานอย่างไร ก. S2 และ S3 ปิดวงจร และ S1 และ S4 เปิดวงจร ข. S1 และ S4 ปดิ วงจร ค. S2 และ S3 เปดิ วงจร ง. S1 และ S4 ปิดวงจร และ S2 และ S3 เปิดวงจร 8. อุปกรณ์สารกึงตวั นาทน่ี ิยมใช้ในวงจร H-Bridge คอื ก. DIODE หรอื ZENERDIODE ข. TRIAC หรือ DIAC ค. TRANSISTER ง. MOSFET หรอื IGBT 9. หลกั การของการทางานของ Stepper Motor คือ ก. การมอดูเลตสญั ญาณเฟสเซอร์ ข. การมอดูเลตสัญญาณตามแอมพลิจูด ค. การมอดเู ลตสัญญาณตามความถ่ี ง. การจ่ายไฟเขา้ ไปทลี ะขดตามลาดบั 10. วงจร Darlington เป็น IC สาเร็จรูปมชี ื่อเรยี กว่า ก. L298P ข. 7812 ค. 1N4001 ง. ULN2003AN หนว่ ยท่ี 8 การควบคุมดีซมี อเตอร์และสเตปมอเตอรด์ ้วย Arduino เรียบเรียงโดยครูทันพงษ์ ภู่รกั ษ์
เอกสารประกอบการสอนวิชาไมโครคอนโทรลเลอรเ์ บอื้ งต้น 5 หนว่ ยที่ 8 การควบคุมดซี มี อเตอร์และสเตปมอเตอรด์ ้วย Arduino 8.1 ความร้เู บอ้ื งตน้ เก่ียวกับมอเตอรไ์ ฟฟ้า มอเตอร์ไฟฟ้าเป็นอปุ กรณ์ทน่ี ิยมใช้กันอย่างแพร่หลายในโรงงาน เป็นอุปกรณ์ท่ีใช้ควบคุมเคร่ืองจักรกลใน งานอุตสาหกรรม มอเตอร์มีหลายแบบหลายชนดิ ทีใ่ ชใ้ หเ้ หมาะสมกับงาน ดังนั้นเราจึงต้องทราบถึงความหมายและ ชนิดของมอเตอร์ไฟฟา้ ตลอดถงึ คุณสมบัตกิ ารใชง้ านของมอเตอรแ์ ต่ละชนดิ เพอ่ื ให้เกิดประสิทธิภาพสูงสุดในการใช้ งานของมอเตอร์นั้นๆ มอเตอร์มอเตอร์ไฟฟ้า (Motor) หมายถึงเคร่ืองกลไฟฟ้าชนิดหนึ่งที่เปล่ียนแปลงพลังงานไฟฟ้ามาเป็น พลงั งานกล มอเตอร์ไฟฟ้าที่ใช้พลังงานไฟฟ้าเปล่ียนเป็นพลังงานกล มีท้ังพลังงานไฟฟ้ากระแสสลับ และพลังงาน ไฟฟ้ากระแสตรง 8.1.1 มอเตอรไ์ ฟฟา้ แบ่งออกตามชนดิ ของกระแสไฟฟา้ ได้ 2 ชนิดดังนี้ มอเตอรไ์ ฟฟา้ กระแสสลับ(Alternating Current Motor) 1. มอเตอร์ไฟฟ้ากระแสสลบั ชนิด 1 เฟส - สปลทิ เฟสมอเตอร์ (Split-Phase motor) - คาปาซเิ ตอรม์ อเตอร์ (Capacitor motor) - รพี ลัชชนั่ มอเตอร์ (Repulsion-type motor) - ยูนิเวอรแ์ ซลมอเตอร์ (Universal motor) - เชด็ เดดโพลมอเตอร์ (Shaded-pole motor) 2. มอเตอรไ์ ฟฟ้ากระแสสลบั ชนดิ 2 เฟส 3. มอเตอร์ไฟฟ้ากระแสสลับชนิด 3 เฟส มอเตอร์ไฟฟ้ากระแสตรง (Direct Current Motor) แบ่งออกเป็น 3 ชนิดไดแ้ ก่ 1. มอเตอร์แบบอนกุ รมหรอื เรยี กว่าซีรีสม์ อเตอร์ (Series Motor) 2. มอเตอร์แบบขนานหรอื เรยี กว่าชนั ทม์ อเตอร์ (Shunt Motor) 3. มอเตอร์ไฟฟ้าแบบผสมหรือเรียกว่าคอมปาวด์มอเตอร์ (Compound Motor) มอเตอรไ์ ฟฟ้ากระแสตรงเป็นต้นกาลงั ขับเคลื่อนทส่ี าคัญอยา่ งหน่งึ ในโรงงานอุตสาหกรรมเพราะมีคุณสมบัติ ท่ดี ีเด่นในดา้ นการปรบั ความเรว็ ได้ ตง้ั แตค่ วามเร็วตา่ สุดจนถึงสูงสุด นิยมใชก้ นั มากในโรงงานอุตสาหกรรม หน่วยที่ 8 การควบคมุ ดีซีมอเตอร์และสเตปมอเตอรด์ ้วย Arduino เรียบเรียงโดยครทู ันพงษ์ ภู่รักษ์
เอกสารประกอบการสอนวิชาไมโครคอนโทรลเลอร์เบ้ืองต้น 6 8.1.2 หลกั การของมอเตอร์กระแสไฟฟ้าตรง หลักการของมอเตอร์ไฟฟ้ากระแสตรง (Motor Action) เมื่อมีแรงดันกระแสไฟฟ้าตรงเข้าไปในมอเตอร์ สว่ นหน่ึงจะเข้าแปรงถ่านผา่ นคอมมวิ เตเตอรเ์ ข้าไปในขดลวดอาร์มาเจอร์ สร้างสนามแม่เหล็กข้ึน และกระแสไฟฟ้า อกี สว่ นหนึ่งจะไหลเข้าไปในขดลวดสนามแมเ่ หล็ก (Fieldcoil) สร้างข้ัวเหนือ-ใต้ขึ้น เกิดสนามแม่เหล็ก 2 สนาม ใน ขณะเดียวกัน ตามคุณสมบัติของเส้นแรงแม่เหล็กจะไม่ตัดกัน ทิศทางตรงข้ามจะหักล้างกันและทิศทางเดียวจะ เสริมแรงกนั ทาให้เกดิ แรงบิดในตัวอารม์ าเจอร์ DC Motor ประกอบด้วย 2 ส่วนหลักๆ ไดแ้ ก่ ทนุ่ อาร์มาเจอร์และสเตเตอร์ ทนุ่ อาร์มาเจอร์ก็คือส่วนท่ีหมุน สว่ นสเตเตอร์คือส่วนท่ีเป็นขดลวดท่ีสร้างสนามแม่เหล็ก หลักการทางานของ DC Motor คือการนากระแสตรงมา ตดั ผา่ นสนามแมเ่ หลก็ ทาใหเ้ กดิ ทอร์กขนึ้ ในทิศที่เหมาะสม และสรา้ งให้เกิดการหมุนของทุ่นอาร์มาเจอร์ รปู ที่ 8.1 สว่ นประกอบของมอเตอร์ไฟฟา้ กระแสตรง (ท่มี า www.Auto2drive.com/category/ระบบต่าง-ๆ-ในรถยนต์/page/18/) หนว่ ยที่ 8 การควบคุมดซี มี อเตอรแ์ ละสเตปมอเตอร์ด้วย Arduino เรียบเรียงโดยครทู ันพงษ์ ภูร่ ักษ์
เอกสารประกอบการสอนวิชาไมโครคอนโทรลเลอรเ์ บอ้ื งตน้ 7 รูปท่ี 8.2 หลักการทางานของมอเตอรไ์ ฟฟา้ กระแสตรง (ทีม่ า www.Walter-fendt.de/ph14e/electricmotor.htm myarduino.net) 8.1.3 การควบคุมทศิ ทาง และความเร็วรอบของมอเตอร์ การควบคุมทิศทาง และความเร็วรอบของมอเตอร์ ไม่ว่าจะเป็นการขับเคลื่อนสายพาน หรือล้อของ ห่นุ ยนต์ไมใ่ ห้หมุนแบบอสิ ระและสามารถควบคุมได้ ดังน้ันจึงมีวงจรท่ีใช้ในการควบคุมมอเตอร์ข้ึนมา แบบท่ีนิยม ใชก้ ันเรียกว่าวงจร “H-Bridge” รูปที่ 8.3 การควบคุมมอเตอร์ H-Bridge (ทมี่ า www.Arduitronics.com) วงจรนี้ทาหน้าที่ได้ท้ังคุมทิศทางและความเร็วของมอเตอร์ โดยเริ่มจากการคุมทิศทางการหมุน โดยปกติ หากต้องการกลบั ทศิ การหมนุ ของมอเตอรก์ ระแสตรง วิธีนงึ ท่ที าไดค้ ือกลบั ทิศแหล่งจา่ ยวงจร H-Bridge ด้านบน หากต้องการให้หมุนตามเข็ม (Clockwise :CW) ให้ S1 และ S4 ปิดวงจร และให้ S2 และ S3 เปิดวงจร หากต้องการให้หมุนทวนเขม็ (Conter Clockwise :CCW) ให้ S2 และ S3 ปิดวงจร และให้ S1 และ S4 เปดิ วงจร หนว่ ยท่ี 8 การควบคุมดซี ีมอเตอร์และสเตปมอเตอรด์ ้วย Arduino เรียบเรยี งโดยครทู ันพงษ์ ภู่รักษ์
เอกสารประกอบการสอนวชิ าไมโครคอนโทรลเลอร์เบอื้ งต้น 8 สังเกตุว่าสวิตช์จะทางานเป็นคู่ คู่แรกทางาน คู่สองต้องเปิดวงจร และในทางตรงข้ามก็คือคู่สองทางาน คู่ แรกตอ้ งเปิดวงจร ต่อมามกี ารทาใหก้ ารเปิดปิดเป็นแบบที่ง่ายกว่าเดิม โดยใช้อุปกรณ์สารกึงตัวนาเช่น MOSFET หรอื IGBT หรอื อ่นื ๆ แล้วแตค่ วามเหมาะสม เช่นขนาดกระแสแรงดนั ท่ีต้องการควบคมุ รปู ที่ 8.4 Schematic ของวงจร H-Bridge (ทม่ี า www.Arduitronics.com) รูปท่ี 8.5 การต่อบอรด์ Arduino ควบคมุ H-Bridge (ทีม่ า www.Arduitronics.com) หน่วยท่ี 8 การควบคมุ ดซี ีมอเตอร์และสเตปมอเตอร์ด้วย Arduino เรยี บเรยี งโดยครทู ันพงษ์ ภรู่ ักษ์
เอกสารประกอบการสอนวชิ าไมโครคอนโทรลเลอรเ์ บือ้ งต้น 9 รปู ที่ 8.6 การตอ่ ไอซี L293D ควบคมุ ดีซีมอเตอร์ (ทีม่ า www.Arduitronics.com) หนว่ ยที่ 8 การควบคมุ ดซี มี อเตอรแ์ ละสเตปมอเตอร์ด้วย Arduino เรยี บเรียงโดยครูทนั พงษ์ ภรู่ ักษ์
เอกสารประกอบการสอนวชิ าไมโครคอนโทรลเลอรเ์ บ้อื งต้น 10 โปรแกรมที่ 8.1 การต่อบอรด์ Arduino ควบคมุ H-Bridge const int in1Pin = 5; // H-Bridge input pins const int in2Pin = 4; const int in3Pin = 3; // H-Bridge pins for second motor const int in4Pin = 2; void setup(){ Serial.begin(9600); pinMode(in1Pin, OUTPUT); pinMode(in2Pin, OUTPUT); pinMode(in3Pin, OUTPUT); pinMode(in4Pin, OUTPUT); Serial.println(\"+ - sets direction of motors, any other key stops motors\"); } void loop(){ if ( Serial.available()) { char ch = Serial.read(); if (ch == '+') { Serial.println(\"CW\"); // first motor digitalWrite(in1Pin,LOW); digitalWrite(in2Pin,HIGH); //second motor digitalWrite(in3Pin,LOW); digitalWrite(in4Pin,HIGH); } else if (ch == '-') { Serial.println(\"CCW\"); digitalWrite(in1Pin,HIGH); digitalWrite(in2Pin,LOW); digitalWrite(in3Pin,HIGH); หนว่ ยท่ี 8 การควบคุมดซี มี อเตอร์และสเตปมอเตอรด์ ้วย Arduino เรยี บเรียงโดยครทู นั พงษ์ ภู่รกั ษ์
เอกสารประกอบการสอนวชิ าไมโครคอนโทรลเลอร์เบ้อื งต้น 11 digitalWrite(in4Pin,LOW); } else { Serial.print(\"Stop motors\"); digitalWrite(in1Pin,LOW); digitalWrite(in2Pin,LOW); digitalWrite(in3Pin,LOW); digitalWrite(in4Pin,LOW); } } } เม่ืออัพโหลดโปรแกรมเสร็จแล้วทุกอย่างถูกต้อง หน้าจอแสดงข้อความ Serial Monitor โดยจะเห็น มอเตอร์หมุนทศิ ทางหน่ึงตอนกด \"+\" และทศิ ตรงข้ามตอนกด \"-\" การกดอย่างอ่นื จะหยดุ หมนุ รูปท่ี 8.7 Serial Moniter (ทมี่ า www.Arduitronics.com) หนว่ ยท่ี 8 การควบคมุ ดีซีมอเตอรแ์ ละสเตปมอเตอร์ด้วย Arduino เรยี บเรียงโดยครูทนั พงษ์ ภู่รกั ษ์
เอกสารประกอบการสอนวิชาไมโครคอนโทรลเลอรเ์ บอ้ื งต้น 12 8.2 การควบคุมดีซมี อเตอร์ดว้ ย Arduino การควบคมุ ความเร็วรอบของ DC Motor ดว้ ยเทคนคิ Pulse Width Modulation (PWM) รปู ท่ี 8.8 ออสซิโลสโคปแสดงสัญญาณ PWM (ท่มี า www.Arduitronics.com) PWM (Pulse Width Modulation) คือ การมอดูเลตสัญญาณให้มีความกว้างตามสัดส่วนท่ีกาหนด บน ความถ่ี Carrier ท่ตี อ้ งการใช้งาน ซ่ึงโดยปกตแิ ลว้ จะใช้ประโยชนใ์ นการควบคุมการเปิดปิดของวงจรอิเล็กทรอนิกส์ กาลงั เช่น วงจรบัก วงจรบสู วงจรบกั บสู เป็นต้น นอกจากนี้ยังใช้สามารถใช้ประกอบกับวงจร H - Bridge เพ่ือควบคุมความเร็วรอบของมอเตอร์ หรือว่า วงจรพ้ืนฐานเชน่ ต้องการจะหรี่หลอด LED ก็ได้อีกด้วย พารามิเตอร์ที่ใช้ระบุรูปร่างหน้าตาของ PWM ที่สาคัญมี 2 ค่าดว้ ยกันคือ ความถีข่ องคลืน่ พาหะ (Carrier Frequency) และ อัตราสว่ นหนา้ ท่ี (Duty Ratio) Carrier Frequency ใน Arduino มีความถี่ประมาณ 490 Hz ในกรณีท่ีใช้ Library ปกติใน Arduino IDE และยงั สามารถปรบั ใหม้ ีความถ่ีสูงข้ึนเป็นคา่ อื่นๆ เชน่ 31.25 kHZ ได้อกี ดว้ ย Duty Ratio คือสัดส่วนของเวลาท่ีจ่ายแรงดันต่อคาบของ Carrier Frequency ซึ่งกรณีที่เห็นในรูปท่ี 8.8 คอื เวลาทจี่ า่ ยแรงดนั 1.02 มิลลิวนิ าที ต่อคาบ 2.04 มิลลิวินาที ซึ่งจะได้ Duty Ratio = 50% หนว่ ยท่ี 8 การควบคมุ ดีซมี อเตอรแ์ ละสเตปมอเตอรด์ ้วย Arduino เรยี บเรยี งโดยครูทันพงษ์ ภูร่ ักษ์
เอกสารประกอบการสอนวิชาไมโครคอนโทรลเลอร์เบื้องตน้ 13 โปรแกรมท่ี 8.3 การให้แรงดัน PWM ออกทขี่ า 3 โดยมี Duty Ratio = 50% int ledPin = 3; // LED connected to digital pin 9 int val = 0; // variable to store the read value void setup() { pinMode(ledPin, OUTPUT); // sets the pin as output } void loop() { analogWrite(3, 128); // analogRead values go from 0 to 1023, analogWrite values from 0 to 255 } รปู ที่ 8.9 แสดงใหเ้ ห็นวา่ มี Carrier Frequency เท่าเดิม เพราะยงั ใช้ PWM จาก LIbrary ปกติ ต่อไปปรับ ใหเ้ วลาที่เปิด เป็น 0.51 มิลลิวินาที ซงึ่ จะได้ Duty Ratio = 25% รูปท่ี 8.9 สัญญา PWM ความถ่ี Carrier ที่ 490 Hz (ท่ีมา www.Arduitronics.com) พิจารณารูปที่ 8.9 กาหนดให้ PWM Port 3 ในการกาเนิดสัญญาณนี้ โดยใช้คาสั่ง analogWrite หน่วยที่ 8 การควบคุมดีซีมอเตอรแ์ ละสเตปมอเตอรด์ ้วย Arduino เรียบเรยี งโดยครทู นั พงษ์ ภูร่ ักษ์
เอกสารประกอบการสอนวชิ าไมโครคอนโทรลเลอรเ์ บือ้ งตน้ 14 (3, 128) ซึ่งหมายถึงการเขยี นใหอ้ อก Port 3 โดยมีสัดสว่ น Duty Ratio คอื 128/256 หรือ 50% นั่นเอง การท่ีใช้ คาส่ัง analogWrite แต่สัญญาณไปออกขา Digital(PWM) ก็เป็นเพราะ Arduino Board อย่าง UNO ไม่มี Analog Output channel มีแต่ PWM Output ที่ Pin ดา้ น Digital สัญญา PWM ถึงแม้จะมีความถี่ Carrier ที่ 490 Hz สามารถใช้ในการควบคุมมอเตอร์กระแสตรงโดยใช้ วงจร H-Bridge โดย PWM ใช้ได้กับ IC เบอร์ L298P และ L293 หรือ Motor Shield นอกจากน้ีถ้าจะต่อวงจร สร้าง H-Bridge กรณีท่ีมอเตอร์มีขนาดใหญ่กว่า 2 A โดยต่อเข้ากับขา INPUT ของ IC ท่ีใช้และต่อกราวด์ของ Arduino กบั แหลง่ จา่ ยแรงดนั หลักของมอเตอร์ รูปท่ี 8.10 วงจร H-Bridge โดย PWM ใช้กับ IC เบอร์ L293D (ทม่ี า www.Parduitronics.com) อีกหน่ึงรูปแบบท่ีมีการประยุกต์ใช้งานคือวงจร Switching Power Supply คือการปรับให้ Arduino กาเนิดสัญญา PWM แบบความถี่สูงๆ เช่น 31.25 kHz การใช้งาน Arduino ในส่วนนี้ต้องเข้าไปแก้ไข Register จานวน 4 ตัวใน Atmel 328 ท่ีใช้เป็นตัวไมโครคอนโทรลเลอร์ของ Arduino UNO ใช้สาหรับการทางานกับวงจร Power Electronics เพราะความถ่ี 490 Hz ไม่เพียงพอสาหรับการทา Switching Power Supply แบบต่างๆ ก็ เพราะว่าขนาดของ Capcitor กบั Inductor ในวงจรเพอื่ ใช้ Filter ความถ่จี ะตอ้ งมขี นาดใหญม่ าก โปรแกรมท่ี 8.9 เป็นการสร้าง PWM ท่ี Carrier Frequency 31.25 kHz โดยมี Duty Ratio = 50% หรือ หน่วยท่ี 8 การควบคมุ ดซี ีมอเตอร์และสเตปมอเตอรด์ ้วย Arduino เรยี บเรยี งโดยครทู นั พงษ์ ภู่รกั ษ์
เอกสารประกอบการสอนวิชาไมโครคอนโทรลเลอร์เบ้ืองต้น 15 กาหนดใหม้ ีค่า 128 ในโปรแกรมที่ 8.4 นน่ั เอง และใหม้ สี ัญญาณออกทีข่ า 11 โปรแกรมท่ี 8.4 การสร้าง PWM ท่ี Carrier Frequency 31.25 kHz โดยมี Duty Ratio = 50% void setup(){ pwmSetup(); } void loop(){ int Duty = 128;//type in the voltage you want. Refer to guide on limiting OCR2A = Duty; } void pwmSetup(){//just run once at setup pinMode(11, OUTPUT); //OCR2A TCCR2A = _BV(COM2A1) | _BV(COM2B1) | _BV(WGM20); //phase correct pwm 31250hz TCCR2B = _BV(CS20); //change this as datasheet says to mainly get different pwm frequencies OCR2A = 0; OCR2B = 0;} รปู ท่ี 8.11 สญั ญาณจากออสซิลโลสโคปมีความถี่ 31.25 kHZ (ท่ีมา www.Arduitronics.com) หน่วยท่ี 8 การควบคุมดซี ีมอเตอร์และสเตปมอเตอร์ด้วย Arduino เรยี บเรยี งโดยครทู นั พงษ์ ภู่รักษ์
เอกสารประกอบการสอนวชิ าไมโครคอนโทรลเลอร์เบอื้ งตน้ 16 สังเกตุได้จากรูปท่ี 8.11 สัญญาณจากออสซิลโลสโคปมีความถ่ี 31.25 kHZ (อ่านได้ประมาณ 31.4 kHz) โดยจะเหน็ วา่ มี Duty ratio 50% ตามทตี่ ัง้ ไวเ้ ปน็ 128 ตามต้องการ 8.3 การควบคมุ สเตปมอเตอรด์ ว้ ย Arduino ในหัวข้อที่ 8.1 ได้นาเสนอการควบคุม DC Motor สาเหตุท่ีต้องศึกษา DC Motor ก่อนก็เพราะว่าการ ทางานของมอเตอร์ชนิดอื่นๆ เช่น Stepper Motor จะมีพื้นฐานมาจาก DC Motor ในบางด้านแต่ Stepper Motor จะมคี วามซับซ้อนกว่าทั้งหลักการทางานและการควบคุม รปู ที่ 8.12 บอร์ดขับสเตปมอเตอร์ (ทม่ี า www.Arduitronics.com) Stepper Motor หรือ Stepping Motor มีข้อดีท่ีสาคัญคือการควบคุมต่าแหน่งของการหมุนได้อย่าง แม่นยา โดยไม่ต้องใช้การควบคุมแบบป้อนกลับ (Feedback Control) ด้วยเหตุน้ี จึงเป็นที่นิยมใช้ในอุปกรณ์ท่ี ตอ้ งการควบคุมตาแหนง่ และมมุ อย่างแม่นยา เช่นพรนิ้ เตอร์ สแกนเนอร์ เคร่ืองเลน่ แผ่นดิสค์ เป็นต้น 8.3.1 หลกั การของการทางานของ Stepper Motor หลกั การของการทางานของ Stepper Motor คอื การบังคับให้แม่เหล็กถาวรบนแกนโรเตอร์ หมุนไปตาม ทศิ การบงั คับของขดลวดท่ีติดตงั้ บนสเตเตอร์ จะซับซ้อนกว่า DC Motor ตรงทกี่ ารบังคบั ให้หมนุ นนั้ ไมไ่ ด้เป็นแค่การ ใสแ่ รงดันคงที่ไปทีข่ ัว่ บวกลบเทา่ น้ัน ต้องใสแ่ รงดันใหถ้ ูกตอ้ งจากจงั หวะที่ควรจะเป็นดงั รปู ท่ี 8.12 ถึงจะหมนุ ได้ หน่วยท่ี 8 การควบคมุ ดีซมี อเตอรแ์ ละสเตปมอเตอรด์ ้วย Arduino เรียบเรียงโดยครทู ันพงษ์ ภูร่ กั ษ์
เอกสารประกอบการสอนวิชาไมโครคอนโทรลเลอรเ์ บือ้ งต้น 17 รูปที่ 8.13 การจ่ายกระแสไฟฟา้ เข้าไปที่ขดลวดทีละขด (ท่มี า www.Pcbheaven.com/wikipages/How_Stepper_Motors_Work/) จะเห็นว่ามีขดลวดท่ีควบคุมการหมุน โดยแต่ละขดห่างกัน 90 องศา การหมุนก็จะทาโดยการจ่ายกระแส เข้าไปทขี่ ดลวดทลี ะขด เพื่อทาให้เกิดสนามแม่เหล็ก ซ่ึงจะไปดูดให้แม่เหล็กถาวะที่อยู่บนโรเตอร์เคลื่อนท่ี โดยทิศ ของการหมุนก็จะข้ึนกับลาดับการจ่ายกระแสเข้าไปท่ีขดลวด โดยการบังคับในลักษณะน้ีเรียกว่า Single coil excitation หรือการกระตุ้นทีละขดลวด โดยจะมีการกระตุ้นหรือการจ่ายกระแสเข้าขดลวดอยู่ 4 จังหวะต่อการ หมนุ 1 รอบ อีกรูปแบบนงึ จะซบั ซ้อนกวา่ แตจ่ ะให้ทอร์กมากกว่า คือการป้อนแบบ Full Step Drive หรือการป้อน แบบทีละ 2 ขดลวด รปู ที่ 8.14 การจา่ ยกระแสไฟฟ้าเขา้ ไปทีข่ ดลวดทลี ะสองขด (ท่มี า www.Pcbheaven.com/wikipages/How_Stepper_Motors_Work/) หน่วยท่ี 8 การควบคุมดีซมี อเตอรแ์ ละสเตปมอเตอร์ด้วย Arduino เรยี บเรียงโดยครทู นั พงษ์ ภูร่ ักษ์
เอกสารประกอบการสอนวิชาไมโครคอนโทรลเลอร์เบือ้ งต้น 18 ถา้ ต้องการควบคุมให้มีความละเอยี ดมากขน้ึ อีก สามารถทาได้โดยสามารถคุมให้มอเตอร์หมุนได้ละเอียดขึ้น จาก 90 องศา เหลือ 45 องศา โดยท่ีไม่ต้องปรบั เปล่ียนตวั ฮาร์ดแวร์ใดๆ เป็นเพียงการเปลี่ยนวิธีการจ่ายกระแสเข้า ขดลวดเทา่ น้ัน แต่ Stepper Motor ท่ีใชจ้ รงิ มกี ารพฒั นาตอ่ โดยเพิม่ จานวนขดลวดและปรับให้แม่เหล็กถาวรมีซี่ (Teeth) ซึ่งทาหน้าที่เป็นจานวนข้ัวของแม่เหล็กมากขึ้น การเพ่ิมจานวนซี่โดยแต่ละซ่ีเป็นข้ัวเหนือและขั้วใต้สลับกันน้ัน สามารถทาไดโ้ ดยเอาเหล็กทมี่ สี ภาพความนาแมเ่ หลก็ มาข้ึนรปู เป็นจานท่มี ซี ี่อยรู่ อบๆ จากน้ันข้ันตอนการควบคุมก็มี หลกั การเดยี วกับ Stepper Motor ทีห่ มุนได้ทีละ 90 องศา เนื่องจาก Stepper Motor ท่ีใชก้ นั จริงๆ มซี ี่และขดลวดมาก จึงทาให้สามารถควบคุมการหมุนได้ละเอียด มากๆ โดยการควบคุม 1 Cycle จะทาให้มอเตอร์หมนุ ไป 0.9 - 5 องศา แล้วแต่เทคนคิ ทใี่ ช้ในการควบคุมการหมนุ รปู ท่ี 8.15 การเพ่ิมจานวนขดลวดและปรับให้แม่เหล็กถาวรมีซ่ี (Teeth) (ทม่ี า www.Pcbheaven.com/wikipages/How_Stepper_Motors_Work/) สังเกตุเหน็ ว่ามีขดลวดอยู่ 6 ขดลวด การทางานจะตอ้ งควบคุมเป็นข้นั ให้ครบ 75 ข้ันจงึ หมนุ ได้ครบ 1 รอบ หรือ 5 องศาต่อขั้นการเรียงขดลวด 6 ขดก็ไม่ได้วางห่างกัน 60 องศาแบบตรงๆ ถ้าทาแบบน้ันมอเตอร์จะไม่ หมุน แต่ต้องเรียงให้คู่แรกคือขดลวดบนสุดและล่างสุดวางห่างจากคู่ท่ีสอง และสามเป็นมุม 60 + 5 = 65 องศา เพือ่ ใหม้ ันหมุนทีละ 5 องศา มุมต่างนมี้ ีผลตอ่ การควบคมุ และการเขยี นโปรแกรม หน่วยท่ี 8 การควบคุมดซี มี อเตอรแ์ ละสเตปมอเตอรด์ ้วย Arduino เรยี บเรยี งโดยครทู นั พงษ์ ภู่รกั ษ์
เอกสารประกอบการสอนวชิ าไมโครคอนโทรลเลอรเ์ บื้องต้น 19 รูปท่ี 8.16 ลกั ษณะของแกนโรเตอรแ์ บบแมเ่ หลก็ ถาวรมีซี่ (Teeth) (ทมี่ า www.Pcbheaven.com) อุปกรณจ์ ริงอย่างรปู ท่ี 8.16 จะเหน็ วา่ มี 2 จาน แตล่ ะจานมี 50 ซี่ ทาให้รวมมซี ท่ี ่สี ร้างเป็นขั้วเหนือและใต้ รวม 100 ซี่ สาหรับ Stepper Motor ท่ีมีใช้กันอยู่จะมี 2 แบบ ข้ึนกับการต่อขดลวดภายในมอเตอร์ ได้แก่แบบ Unipolar และแบบ Bipolar แบบที่นิยมใช้คือแบบ Unipolar เพราะว่าการควบคุมง่ายกว่า เนื่องจากไม่ต้องกลับ ทิศของกระแสท่ปี อ้ นเข้าไปที่ขดลวด แตถ่ า้ เป็นแบบ Bipolar ก็ทาได้ยาก แต่สามารถประยุกตใ์ ช้งานได้มากกวา่ ใน Stepper Motor จรงิ ๆน้นั ขดลวดจะทางานเป็น 2 ชดุ (ถึงแมจ้ ะมขี ดลวดมากกว่า 4 ก็ตาม) ถ้าตามรูปที่ 8.17 คือ a กบั b โดยมี 1 กบั 2 เปน็ แหลง่ จ่ายไปบวกลบ และ 1a 1b 2a 2b เป็นตัวกาหนดทิศทางการไหลของกระแส ผ่านขดลวดทงั้ สอง หน่วยท่ี 8 การควบคุมดีซีมอเตอร์และสเตปมอเตอรด์ ้วย Arduino เรียบเรียงโดยครทู นั พงษ์ ภ่รู กั ษ์
เอกสารประกอบการสอนวชิ าไมโครคอนโทรลเลอรเ์ บอ้ื งต้น 20 การทาให้ Stepper Motor หมุนแบบง่ายท่ีสุดก็คือ การจ่ายไฟเข้าไปทีละขดตามลาดับ 1a 2a 1b 2b เรยี กวิธีการควบคุมแบบนี้ว่า \"Wave Drive\" การทาให้ Stepper Motor หมุนแบบ Full Step Drive ทาได้โดยให้ กระแสไหลผา่ นขดลวดทลี ะ 2 ขด ทาใหไ้ ดท้ อรก์ ออกมามากกว่าแบบแรกประมาณ 2 เท่า ซ่ึงเป็นวิธีที่ library ของ Arduino เลอื กใช้ รูปท่ี 8.17 Unipola Stepper motor (ที่มา www.Pcbheaven.com/wikipages/How_Stepper_Motors_Work/) หนว่ ยท่ี 8 การควบคุมดซี ีมอเตอร์และสเตปมอเตอร์ด้วย Arduino เรยี บเรียงโดยครทู ันพงษ์ ภรู่ ักษ์
เอกสารประกอบการสอนวชิ าไมโครคอนโทรลเลอรเ์ บือ้ งต้น 21 รปู ที่ 8.18 การป้อนกระแสไฟฟ้าใหก้ บั Stepper motor แบบต่างๆ (ทีม่ า www.Pcbheaven.com/wikipages/How_Stepper_Motors_Work/) หนว่ ยที่ 8 การควบคมุ ดซี ีมอเตอร์และสเตปมอเตอร์ด้วย Arduino เรยี บเรยี งโดยครทู นั พงษ์ ภรู่ ักษ์
เอกสารประกอบการสอนวชิ าไมโครคอนโทรลเลอร์เบอื้ งตน้ 22 รปู ที่ 8.19 การวางขั้วแมเ่ หลก็ ถาวรใน Stepper motor (ทมี่ า www.Pcbheaven.com/wikipages/How_Stepper_Motors_Work/) ข้อมูลท่ีสาคัญอีกอย่างท่ีควรทราบคือการทางานของ Stepper Motor นั้นใช้กระแสท่ีสูงมากกว่าที่ Arduino สามารถขบั ได้ ดังนั้นจึงต้องใช้วงจรขยายสัญญาณเรียกว่า \"วงจร Darlington\" เป็น IC สาเร็จรูปเรียกว่า ULN2003AN หรอื รุน่ ใกล้เคยี ง ตวั อยา่ งสเปก็ ของ Stepper Motor ทจ่ี าหน่ายโดยทัว่ ไปรุ่น 28BYJ-48 – 5V Stepper Motor Rated voltage : 5VDC Number of Phase 4 Speed Variation Ratio 1/64 Stride Angle 5.625° /64 Frequency 100Hz DC resistance 50Ω±7%(25℃) Idle In-traction Frequency > 600Hz Idle Out-traction Frequency > 1000Hz In-traction Torque >34.3mN.m(120Hz) Self-positioning Torque >34.3mN.m Friction torque 600-1200 gf.cm Pull in torque 300 gf.cm Insulated resistance >10MΩ(500V) Insulated electricity power 600VAC/1mA/1s หน่วยท่ี 8 การควบคุมดซี ีมอเตอร์และสเตปมอเตอรด์ ้วย Arduino เรียบเรยี งโดยครูทนั พงษ์ ภรู่ กั ษ์
เอกสารประกอบการสอนวชิ าไมโครคอนโทรลเลอรเ์ บื้องต้น 23 Insulation grade A Rise in Temperature <40K(120Hz) Noise <35dB(120Hz) รปู ท่ี 8.20 วงจร Darlington\" เป็น IC สาเรจ็ รูปเบอร์ ULN2003AN (arduitronics.com) การนาไปใชง้ าน เป็นตัวอย่างการนา Stepper Motor ต่อร่วมกับ Potentiometer หรือ R ปรับค่าได้มา ควบคุมตาแหน่งการหมุนของ Stepper Motor หน่วยท่ี 8 การควบคมุ ดีซมี อเตอร์และสเตปมอเตอรด์ ้วย Arduino เรยี บเรียงโดยครูทันพงษ์ ภู่รักษ์
เอกสารประกอบการสอนวชิ าไมโครคอนโทรลเลอร์เบอ้ื งตน้ 24 รปู ท่ี 8.21 การตอ่ Stepper motor ใชง้ านรว่ มกบั Arduino (ทีม่ า www.Arduitronics.com) จากน้ันกต็ ่อ Potentiometer เขา้ ท่ีช่อง A2 รปู ที่ 8.22 การต่อ Stepper motor ใช้งานร่วมกับ Arduino และ Potentiometer (ท่มี า www.Arduitronics.com) จะเห็นว่า R ปรับค่าได้หรือ Potentometer จะเป็นตัวกาหนดความเร็วและทิศทางการหมุนของ Stepper Motor หนว่ ยที่ 8 การควบคุมดีซมี อเตอรแ์ ละสเตปมอเตอร์ด้วย Arduino เรยี บเรยี งโดยครูทนั พงษ์ ภรู่ ักษ์
เอกสารประกอบการสอนวิชาไมโครคอนโทรลเลอร์เบอื้ งต้น 25 โปรแกรมท่ี 8.4 Full Step 1 เฟส int motorPin1 = 8;// Blue - 28BYJ48 pin 1 int motorPin2 = 9;// Pink - 28BYJ48 pin 2 int motorPin3 = 10;// Yellow - 28BYJ48 pin 3 int motorPin4 = 11;// Orange - 28BYJ48 pin 4 int motorSpeed = 4; //variable to set stepper speed char val = '0'; void setup() { //declare the motor pins as outputs pinMode(motorPin1, OUTPUT); pinMode(motorPin2, OUTPUT); pinMode(motorPin3, OUTPUT); pinMode(motorPin4, OUTPUT); Serial.begin(9600); } void loop(){ if (Serial.available()) { val = Serial.read(); Serial.println(val); } if (val == '1'){ clockwise(); } if (val == '2'){ counterclockwise(); } if (val == '0'){ digitalWrite(motorPin1, LOW); digitalWrite(motorPin2, LOW); digitalWrite(motorPin3, LOW); digitalWrite(motorPin4, LOW); หนว่ ยที่ 8 การควบคมุ ดซี ีมอเตอร์และสเตปมอเตอรด์ ้วย Arduino เรยี บเรยี งโดยครูทนั พงษ์ ภรู่ ักษ์
เอกสารประกอบการสอนวชิ าไมโครคอนโทรลเลอร์เบื้องต้น 26 } } void counterclockwise (){ // 1 digitalWrite(motorPin1, HIGH); digitalWrite(motorPin2, LOW); digitalWrite(motorPin3, LOW); digitalWrite(motorPin4, LOW); delay(motorSpeed); // 2 digitalWrite(motorPin1, LOW); digitalWrite(motorPin2, HIGH); digitalWrite(motorPin3, LOW); digitalWrite(motorPin4, LOW); delay (motorSpeed); // 3 digitalWrite(motorPin1, LOW); digitalWrite(motorPin2, LOW); digitalWrite(motorPin3, HIGH); digitalWrite(motorPin4, LOW); delay(motorSpeed); // 4 digitalWrite(motorPin1, LOW); digitalWrite(motorPin2, LOW); digitalWrite(motorPin3, LOW); digitalWrite(motorPin4, HIGH); delay(motorSpeed); } void clockwise(){ // 1 digitalWrite(motorPin1, LOW); digitalWrite(motorPin2, LOW); หนว่ ยท่ี 8 การควบคมุ ดีซมี อเตอร์และสเตปมอเตอร์ด้วย Arduino เรยี บเรยี งโดยครทู นั พงษ์ ภู่รักษ์
เอกสารประกอบการสอนวชิ าไมโครคอนโทรลเลอรเ์ บ้ืองตน้ 27 digitalWrite(motorPin3, LOW); digitalWrite(motorPin4, HIGH); delay(motorSpeed); // 2 digitalWrite(motorPin1, LOW); digitalWrite(motorPin2, LOW); digitalWrite(motorPin3, HIGH); digitalWrite(motorPin4, LOW); delay (motorSpeed); // 3 digitalWrite(motorPin1, LOW); digitalWrite(motorPin2, HIGH); digitalWrite(motorPin3, LOW); digitalWrite(motorPin4, LOW); delay(motorSpeed); // 4 digitalWrite(motorPin1, HIGH); digitalWrite(motorPin2, LOW); digitalWrite(motorPin3, LOW); digitalWrite(motorPin4, LOW); delay(motorSpeed); } โปรแกรมที่ 8.5 Code Full Step 2เฟส int motorPin1 = 8;// Blue - 28BYJ48 pin 1 int motorPin2 = 9;// Pink - 28BYJ48 pin 2 int motorPin3 = 10;// Yellow - 28BYJ48 pin 3 int motorPin4 = 11;// Orange - 28BYJ48 pin 4 int motorSpeed = 3; //variable to set stepper speed char val = '0'; void setup() { //declare the motor pins as outputs หนว่ ยท่ี 8 การควบคุมดีซีมอเตอร์และสเตปมอเตอรด์ ้วย Arduino เรียบเรยี งโดยครูทันพงษ์ ภรู่ ักษ์
เอกสารประกอบการสอนวิชาไมโครคอนโทรลเลอรเ์ บอื้ งตน้ 28 pinMode(motorPin1, OUTPUT); pinMode(motorPin2, OUTPUT); pinMode(motorPin3, OUTPUT); pinMode(motorPin4, OUTPUT); Serial.begin(9600); } void loop(){ if (Serial.available()) { val = Serial.read(); Serial.println(val); } if (val == '1'){ clockwise(); } if (val == '2'){ counterclockwise(); } if (val == '0'){ digitalWrite(motorPin1, LOW); digitalWrite(motorPin2, LOW); digitalWrite(motorPin3, LOW); digitalWrite(motorPin4, LOW); } } void counterclockwise (){ // 1 digitalWrite(motorPin1, HIGH); digitalWrite(motorPin2, LOW); digitalWrite(motorPin3, LOW); digitalWrite(motorPin4, HIGH); delay(motorSpeed); หนว่ ยท่ี 8 การควบคุมดีซมี อเตอรแ์ ละสเตปมอเตอรด์ ้วย Arduino เรียบเรยี งโดยครูทนั พงษ์ ภรู่ กั ษ์
เอกสารประกอบการสอนวชิ าไมโครคอนโทรลเลอร์เบ้ืองตน้ 29 // 2 digitalWrite(motorPin1, HIGH); digitalWrite(motorPin2, HIGH); digitalWrite(motorPin3, LOW); digitalWrite(motorPin4, LOW); delay (motorSpeed); // 3 digitalWrite(motorPin1, LOW); digitalWrite(motorPin2, HIGH); digitalWrite(motorPin3, HIGH); digitalWrite(motorPin4, LOW); delay(motorSpeed); // 4 digitalWrite(motorPin1, LOW); digitalWrite(motorPin2, LOW); digitalWrite(motorPin3, HIGH); digitalWrite(motorPin4, HIGH); delay(motorSpeed); } void clockwise(){ // 1 digitalWrite(motorPin1, LOW); digitalWrite(motorPin2, LOW); digitalWrite(motorPin3, HIGH); digitalWrite(motorPin4, HIGH); delay(motorSpeed); // 2 digitalWrite(motorPin1, LOW); digitalWrite(motorPin2, HIGH); digitalWrite(motorPin3, HIGH); digitalWrite(motorPin4, LOW); delay (motorSpeed); หนว่ ยท่ี 8 การควบคุมดีซีมอเตอรแ์ ละสเตปมอเตอรด์ ้วย Arduino เรยี บเรียงโดยครทู ันพงษ์ ภรู่ ักษ์
เอกสารประกอบการสอนวิชาไมโครคอนโทรลเลอรเ์ บ้อื งตน้ 30 // 3 digitalWrite(motorPin1, HIGH); digitalWrite(motorPin2, HIGH); digitalWrite(motorPin3, LOW); digitalWrite(motorPin4, LOW); delay(motorSpeed); // 4 digitalWrite(motorPin1, HIGH); digitalWrite(motorPin2, LOW); digitalWrite(motorPin3, LOW); digitalWrite(motorPin4, HIGH); delay(motorSpeed); } โปรแกรมที่ 8.6 Code Half Step int motorPin1 = 8;// Blue - 28BYJ48 pin 1 int motorPin2 = 9;// Pink - 28BYJ48 pin 2 int motorPin3 = 10;// Yellow - 28BYJ48 pin 3 int motorPin4 = 11;// Orange - 28BYJ48 pin 4 int motorSpeed = 4; //variable to set stepper speed char val = '0'; void setup() { //declare the motor pins as outputs pinMode(motorPin1, OUTPUT); pinMode(motorPin2, OUTPUT); pinMode(motorPin3, OUTPUT); pinMode(motorPin4, OUTPUT); Serial.begin(9600); } void loop(){ if (Serial.available()) { หนว่ ยท่ี 8 การควบคุมดซี มี อเตอร์และสเตปมอเตอรด์ ้วย Arduino เรียบเรยี งโดยครทู นั พงษ์ ภรู่ ักษ์
เอกสารประกอบการสอนวิชาไมโครคอนโทรลเลอร์เบือ้ งต้น 31 val = Serial.read(); Serial.println(val); } if (val == '1'){ clockwise(); } if (val == '2'){ counterclockwise(); } if (val == '0'){ digitalWrite(motorPin1, LOW); digitalWrite(motorPin2, LOW); digitalWrite(motorPin3, LOW); digitalWrite(motorPin4, LOW); } } void counterclockwise (){ // 1 digitalWrite(motorPin1, HIGH); digitalWrite(motorPin2, LOW); digitalWrite(motorPin3, LOW); digitalWrite(motorPin4, LOW); delay(motorSpeed); // 2 digitalWrite(motorPin1, HIGH); digitalWrite(motorPin2, HIGH); digitalWrite(motorPin3, LOW); digitalWrite(motorPin4, LOW); delay (motorSpeed); // 3 digitalWrite(motorPin1, LOW); digitalWrite(motorPin2, HIGH); หนว่ ยท่ี 8 การควบคุมดซี มี อเตอรแ์ ละสเตปมอเตอรด์ ้วย Arduino เรยี บเรียงโดยครูทนั พงษ์ ภู่รกั ษ์
เอกสารประกอบการสอนวิชาไมโครคอนโทรลเลอร์เบื้องต้น 32 digitalWrite(motorPin3, LOW); digitalWrite(motorPin4, LOW); delay(motorSpeed); // 4 digitalWrite(motorPin1, LOW); digitalWrite(motorPin2, HIGH); digitalWrite(motorPin3, HIGH); digitalWrite(motorPin4, LOW); delay(motorSpeed); // 5 digitalWrite(motorPin1, LOW); digitalWrite(motorPin2, LOW); digitalWrite(motorPin3, HIGH); digitalWrite(motorPin4, LOW); delay(motorSpeed); // 6 digitalWrite(motorPin1, LOW); digitalWrite(motorPin2, LOW); digitalWrite(motorPin3, HIGH); digitalWrite(motorPin4, HIGH); delay (motorSpeed); // 7 digitalWrite(motorPin1, LOW); digitalWrite(motorPin2, LOW); digitalWrite(motorPin3, LOW); digitalWrite(motorPin4, HIGH); delay(motorSpeed); // 8 digitalWrite(motorPin1, HIGH); digitalWrite(motorPin2, LOW); digitalWrite(motorPin3, LOW); digitalWrite(motorPin4, HIGH); หนว่ ยท่ี 8 การควบคมุ ดีซมี อเตอร์และสเตปมอเตอรด์ ้วย Arduino เรียบเรียงโดยครทู นั พงษ์ ภรู่ ักษ์
เอกสารประกอบการสอนวิชาไมโครคอนโทรลเลอร์เบอื้ งตน้ 33 delay(motorSpeed); } void clockwise(){ // 1 digitalWrite(motorPin4, HIGH); digitalWrite(motorPin3, LOW); digitalWrite(motorPin2, LOW); digitalWrite(motorPin1, LOW); delay(motorSpeed); // 2 digitalWrite(motorPin4, HIGH); digitalWrite(motorPin3, HIGH); digitalWrite(motorPin2, LOW); digitalWrite(motorPin1, LOW); delay (motorSpeed); // 3 digitalWrite(motorPin4, LOW); digitalWrite(motorPin3, HIGH); digitalWrite(motorPin2, LOW); digitalWrite(motorPin1, LOW); delay(motorSpeed); // 4 digitalWrite(motorPin4, LOW); digitalWrite(motorPin3, HIGH); digitalWrite(motorPin2, HIGH); digitalWrite(motorPin1, LOW); delay(motorSpeed); // 5 digitalWrite(motorPin4, LOW); digitalWrite(motorPin3, LOW); digitalWrite(motorPin2, HIGH); digitalWrite(motorPin1, LOW); หนว่ ยท่ี 8 การควบคมุ ดีซมี อเตอรแ์ ละสเตปมอเตอรด์ ้วย Arduino เรยี บเรียงโดยครทู นั พงษ์ ภรู่ กั ษ์
เอกสารประกอบการสอนวชิ าไมโครคอนโทรลเลอรเ์ บ้อื งต้น 34 delay(motorSpeed); // 6 digitalWrite(motorPin4, LOW); digitalWrite(motorPin3, LOW); digitalWrite(motorPin2, HIGH); digitalWrite(motorPin1, HIGH); delay (motorSpeed); // 7 digitalWrite(motorPin4, LOW); digitalWrite(motorPin3, LOW); digitalWrite(motorPin2, LOW); digitalWrite(motorPin1, HIGH); delay(motorSpeed); // 8 digitalWrite(motorPin4, HIGH); digitalWrite(motorPin3, LOW); digitalWrite(motorPin2, LOW); digitalWrite(motorPin1, HIGH); delay(motorSpeed); } หนว่ ยที่ 8 การควบคมุ ดซี มี อเตอร์และสเตปมอเตอรด์ ้วย Arduino เรียบเรียงโดยครทู ันพงษ์ ภู่รกั ษ์
เอกสารประกอบการสอนวิชาไมโครคอนโทรลเลอร์เบอ้ื งตน้ 35 สรปุ เนอ้ื หาสาระสาคญั หลักการของการทางานของ Stepper Motor คือการบังคับให้แม่เหล็กถาวรบนแกนโรเตอร์ หมุนไปตาม ทิศการบังคบั ของขดลวดที่ตดิ ต้ังบนสเตเตอร์ จะซับซอ้ นกว่า DC Motor ตรงท่ีการบงั คับให้หมุนน้ันไม่ไดเ้ ป็นแค่การ ใส่แรงดันคงท่ีไปที่ขั่วบวกลบเท่านั้น ต้องใส่แรงดันให้ถูกต้องจากจังหวะที่ควรจะเป็น โดยมีขดลวดท่ีควบคุมการ หมุนแต่ละขดห่างกัน 90 องศา การหมุนก็จะทาโดยการจ่ายกระแสเข้าไปที่ขดลวดทีละขด เพ่ือทาให้เกิด สนามแม่เหลก็ ซึ่งจะไปดูดให้แม่เหล็กถาวะที่อยู่บนโรเตอร์เคล่ือนท่ี โดยทิศของการหมุนก็จะข้ึนกับลาดับการจ่าย กระแสเข้าไปท่ีขดลวด โดยการบังคับในลักษณะน้ีเรียกว่า Single coil excitation หรือการกระตุ้นทีละขดลวด มกี ารกระตุ้นหรอื การจา่ ยกระแสเขา้ ขดลวดอยู่ 4 จงั หวะต่อการหมุน 1 รอบ อีกรูปแบบนึงจะซับซ้อนกว่าแต่จะให้ ทอร์กมากกว่าคือการป้อนแบบ Full Step Drive หรือการป้อนแบบทีละ 2 ขดลวด ถ้าต้องการควบคุมให้มีความ ละเอียดมากข้ึนอกี สามารถทาได้โดยควบคมุ ให้มอเตอร์หมุนได้ละเอียดข้ึนจาก 90 องศา เหลือ 45 องศา โดยท่ีไม่ ต้องปรับเปลย่ี นตวั ฮารด์ แวรใ์ ดๆ หนว่ ยที่ 8 การควบคมุ ดีซีมอเตอรแ์ ละสเตปมอเตอร์ด้วย Arduino เรยี บเรียงโดยครูทนั พงษ์ ภรู่ ักษ์
เอกสารประกอบการสอนวชิ าไมโครคอนโทรลเลอรเ์ บื้องตน้ 36 แบบฝกึ หดั หน่วยที่ 8 เรื่อง การควบคุมดซี ีและสเตปมอเตอร์ด้วย Arduino ใชเ้ วลา 20 นาที ******************************************************************************************************* คาช้แี จง แบบฝกึ หัดมีท้งั หมด 2 ตอน ประกอบด้วยตอนที่ 1 และตอนท่ี 2 (20 คะแนน) 1. แบบฝกึ หัดตอนท่ี 1 เปน็ คาถามแบบถกู -ผิด มที ้งั หมด 10 ขอ้ (10 คะแนน) 2. แบบฝกึ หดั ตอนที่ 2 เปน็ คาถามแบบปรนยั มที ัง้ หมด 10 ข้อ (10 คะแนน) แบบฝึกหดั ตอนท่ี 1 คาช้แี จง ให้ผู้เรยี นกาเครือ่ งหมายถกู ในขอ้ ที่คิดวา่ ถกู และกาเคร่ืองหมายผิด ในขอ้ ท่คี ิดวา่ ผิด 1. Stepping motor มีขอ้ ดีท่ีสาคัญคือการควบคุมต่าแหน่งของการหมนุ ได้อยา่ งแมน่ ยา 2. การทางานของ Stepper motor การบังคับใหแ้ ม่เหลก็ ถาวรบนแกนโรเตอร์ หมนุ ไปตามทิศการ บังคบั ของขดลวดท่ตี ดิ ต้งั บนสเตเตอร์ 3. การบงั คบั ให้ Stepping motor หมนุ นั้นไม่ได้เป็นแค่การใส่แรงดันคงที่ไปที่ข่ัวบวกลบเท่าน้ัน ต้อง ใส่แรงดนั ให้ถูกต้องจากจงั หวะท่คี วรจะเป็น 4. ขดลวด Stepping motor ท่ีควบคมุ การหมุนแบบส่ขี ้ัว แต่ละขดห่างกัน 60 องศา 5. การหมุน Stepping motor ทาโดยการจ่ายกระแสเข้าไปทขี่ ดลวดทีละขดเพือ่ ทาใหเ้ กิด สนามแม่เหล็ก ซ่งึ จะไปดดู ใหแ้ ม่เหล็กถาวะที่อย่บู นสเตเตอร์เคลื่อนท่ี 6. ทิศของการหมนุ Stepping motor ขนึ้ กบั ลาดับการจา่ ยกระแสเขา้ ไปทีข่ ดลวด 7. การบังคับ Stepping motor ในลักษณะน้ีเรียกว่า Single coil excitation หรือการกระตุ้นทีละ ขดลวด 8. การกระตนุ้ Stepping motor หรือการจ่ายกระแสเขา้ ขดลวดอยู่ 4 จงั หวะต่อการหมนุ 1 รอบ 9. การปอ้ น Stepping motor แบบ Full Step Drive หรอื การปอ้ นแบบทีละ 2 ขดลวด 10. สามารถควบคุมการหมุน Stepping motor ได้ละเอียดมาก โดยการควบคุม 1 Cycle จะทาให้ มอเตอร์หมุนไป 0.9 - 5 องศา หนว่ ยท่ี 8 การควบคมุ ดซี ีมอเตอรแ์ ละสเตปมอเตอร์ด้วย Arduino เรียบเรียงโดยครทู ันพงษ์ ภู่รักษ์
เอกสารประกอบการสอนวิชาไมโครคอนโทรลเลอรเ์ บ้อื งต้น 37 แบบฝกึ หัดตอนที่ 2 คาชี้แจง ใหผ้ เู้ รยี นเลือกคาตอบท่ถี ูกท่ีสุดแลว้ กาเครอ่ื งหมายกากบาท () ให้ครบทุกขอ้ 1. มอเตอร์ไฟฟา้ แบง่ ออกตามการใชข้ องกระแสไฟฟา้ ได้ 2 ชนดิ คอื ก. มอเตอร์ไฟฟ้ากระแสสูง / มอเตอร์ไฟฟา้ กระแสต่า ข. มอเตอร์ไฟฟา้ กระแสสลับ / มอเตอร์ไฟฟา้ กระแสตรง ค. มอเตอรไ์ ฟฟ้ากระแสบวก / มอเตอร์ไฟฟา้ กระแสลบ ง. มอเตอร์ไฟฟ้ากระแสบ้าน / มอเตอร์ไฟฟา้ กระแสโรงงาน 2. กระแสไฟฟา้ ทีไหลเข้าไปในมอเตอร์ไฟฟา้ กระแสตรงจะไหลเขา้ ไปท่ใี ด ก. คอมมิวเตเตอร์ / ขดลวดอารม์ าเจอร์ ข. ขดลวดอาร์มาเจอร์ / ขดลวดสนามแม่เหล็ก ค. แปรงถ่าน / คอมมิวเตเตอร์ ง. แปรงถ่าน / ขดลวดอาร์มาเจอร์ 3. คุณสมบตั ขิ องเส้นแรงแมเ่ หล็กเปน็ อย่างไร ก. หักล้างกันในทศิ ทางตรงขา้ ม ข. เสรมิ แรงทิศทางเดยี วกนั ค. หักลา้ งกนั ในทศิ ทางตรงข้าม และ เสรมิ แรงทิศทางเดยี วกัน เกดิ แรงบดิ ในตวั อารม์ าเจอร์ ง. เกดิ สนามแม่เหลก็ 2 สนาม ในขณะเดยี วกัน 4. ทุ่นอาร์มาเจอร์คือ ก. ส่วนท่ีหมุน ข. ส่วนอยกู่ ับท่ี ค. ขดลวดสนามแมเ่ หล็ก ง. ขดลวด 5. การนากระแสตรงมาตัดผา่ นสนามแม่เหลก็ ทาให้เกิดทอรก์ ข้นึ ในทิศทเี่ หมาะสมเพื่อ ก. สร้างให้เกิดการหมุนของสเตเตอร์ ข. สร้างใหเ้ กดิ การหมุนของขดลวด ค. สร้างใหเ้ กิดการหมุนของทนุ่ อาร์มาเจอร์ ง. สร้างให้เกดิ การหมนุ ของขดลวดสนามแม่เหล็ก หนว่ ยที่ 8 การควบคมุ ดีซมี อเตอร์และสเตปมอเตอร์ด้วย Arduino เรยี บเรียงโดยครูทันพงษ์ ภรู่ ักษ์
เอกสารประกอบการสอนวชิ าไมโครคอนโทรลเลอรเ์ บ้อื งตน้ 38 6. วงจรทีใ่ ช้ในการควบคุมมอเตอรแ์ บบที่นิยมใชก้ นั เรียกวา่ ก. A-Bridge ข. H-Bridge ค. R-Bridge ง. T-Bridge 7. หลักการแก้ไขสัญญาณรบกวนทาไดห้ ลายแบบ เชน่ ตอ่ กนั ในลักษณะวงจร ก. วงจร RL อินตเิ กรเตอร์ ข. วงจร RLC อินติเกรเตอร์ ค. วงจร LC อนิ ติเกรเตอร์ ง. วงจร RC อนิ ตเิ กรเตอร์ 8. หากต้องการใหห้ มนุ ทวนเข็ม (Conter Clockwise :CCW) ให้ ก. S1 และ S4 ปิดวงจร ข. S2 และ S3 ปดิ วงจร และ S1 และ S4 เปิดวงจร ค. S1 และ S4 ปดิ วงจร และ S2 และ S3 เปิดวงจร ง. S2 และ S3 เปิดวงจร 9. พารามเิ ตอรท์ ่ีใชร้ ะบุรูปร่างหนา้ ตาของ PWM ท่สี าคญั คอื ก. วงจรบกั วงจรบสู ข. วงจรบกั บูส ค. ความถข่ี องคลนื่ พาหะ (Carrier Frequency) และอตั ราส่วนหน้าที่ (Duty Ratio) ง. ฟงั กช์ ัน่ ชะลอการทางานในหน่วยนาโนวนิ าที 10. PWM (Pulse Width Modulation) คือ ก. การมอดเู ลตสัญญาณตามความถ่ี ข. การมอดเู ลตสญั ญาณตามแอมพลจิ ดู ค. การมอดูเลตสญั ญาณเฟสเซอร์ ง. การมอดูเลตสัญญาณใหม้ ีความกว้างตามสดั สว่ นทก่ี าหนด หน่วยท่ี 8 การควบคุมดีซีมอเตอรแ์ ละสเตปมอเตอร์ด้วย Arduino เรียบเรยี งโดยครูทนั พงษ์ ภู่รกั ษ์
เอกสารประกอบการสอนวชิ าไมโครคอนโทรลเลอรเ์ บื้องต้น 39 ปฏบิ ตั กิ ารทดลองหน่วยที่ 8 เร่ือง การควบคุมดซี ีมอเตอร์และสเตปมอเตอรด์ ว้ ย Arduino *************************************************************************************************** คาช้ีแจง ให้ผู้เรียนทุกคนทาการทดลองตามปฎิบัติการทดลองหน่วยที่ 8 เร่ือง การควบคุมดีซีมอเตอร์และสเตป มอเตอรด์ ว้ ย Arduino ใชเ้ วลา 180 นาที ( 20 คะแนน) จดุ ประสงคเ์ ชิงพฤตกิ รรม 1. สามารถใชฟ้ งั กช์ น่ั ได้ถกู ต้อง 2. สามารถแก้ปญั หาในการทางานของบอร์ด Arduino Uno R3 ได้ 3. สามารถต่อใช้งานและอัพโหลดโปรแกรมใหก้ ับบอร์ด Arduino Uno R3 ได้ อปุ กรณก์ ารทดลอง 1. เครือ่ งคอมพวิ เตอร์และโปรแกรม Arduino IDE 1.6.9 1 ชุด เสน้ 2. USB Cable Arduino Uno R3 1 บอร์ด เส้น 3. Arduino Uno R3 Board 1 แผง ตัว 4. Hook-up Wires 10 ตวั ตัว 5. Breadboard 1 ตัว ตัว 6. A Momentary Switch or Button 1 ตัว 7. 9V DC Motor 1 ตวั ตวั 8. 10k Ohm Potentiometer 1 ตวั 9. TIP120 Transistor 1 10. 1N4001 Diode 1 11. 9V Battery 1 12. Stepper Motor 13. U2004 Darlington Array (if using a unipolar stepper) 1 14. SN754410ne H-Bridge (if using a bipolar stepper) 1 15. Power Supply Appropriate for your Particular Stepper 1 หน่วยท่ี 8 การควบคมุ ดีซมี อเตอร์และสเตปมอเตอรด์ ้วย Arduino เรยี บเรยี งโดยครูทนั พงษ์ ภรู่ กั ษ์
เอกสารประกอบการสอนวชิ าไมโครคอนโทรลเลอรเ์ บ้อื งต้น 40 ขอ้ ควรระวัง 1. ควรระวังไม่วางบอร์ด Arduino Uno R3 หรือชีลตา่ งๆ บนโตะ๊ โลหะหรอื ที่วางทีเ่ ป็นโลหะเพราะอาจเกิด การลดั วงจรของภาคจา่ ยไฟได้ 2. ไม่ควรต่อสายต่อวงจรในบอร์ด Arduino Uno R3 ท้ิงไว้ ควรถอดสายต่อวงจรออกให้หมด เพราะผล การทดลองอาจเกิดการผิดพลาดไมเ่ ปน็ ไปตามทฤษฎีได้ 3. ไม่ควรถอดสายสายโหลด USB เข้าออกตลอดเวลา เพราะอาจทาให้ภาคจ่ายไฟของบอร์ด Arduino Uno R3 เสยี หายได้ การทดลองที่ 8.1 การควบคุมมอเตอรไ์ ฟฟา้ กระแสตรงดว้ ย Arduino Hardware Required 1. Arduino Board 2. A momentary switch or button 3. 10k ohm resistor 4. breadboard 5. hook-up wire 6. 9V DC motor 7. TIP120 transistor 8. 1N4001 diode 9. 9V battery หนว่ ยท่ี 8 การควบคุมดซี ีมอเตอรแ์ ละสเตปมอเตอร์ด้วย Arduino เรียบเรยี งโดยครูทันพงษ์ ภรู่ กั ษ์
เอกสารประกอบการสอนวิชาไมโครคอนโทรลเลอร์เบอ้ื งตน้ 41 Circuit รปู ท่ี 8. 22 การควบคุมมอเตอร์ไฟฟา้ กระแสตรงดว้ ย Arduino Schematic หนว่ ยที่ 8 การควบคุมดซี ีมอเตอรแ์ ละสเตปมอเตอรด์ ้วย Arduino เรียบเรียงโดยครูทันพงษ์ ภูร่ ักษ์
เอกสารประกอบการสอนวชิ าไมโครคอนโทรลเลอร์เบ้อื งต้น 42 Code /* by Scott Fitzgerald http://www.arduino.cc/en/Tutorial/TransistorMotorControl This example code is in the public domain. */ // give a name to digital pin 2, which has a pushbutton attached int pushButton = 2; // the transistor which controls the motor will be attached to digital pin 9 int motorControl = 9; // the setup routine runs once when you press reset: void setup() { เรยี บเรียงโดยครทู นั พงษ์ ภรู่ กั ษ์ // make the pushbutton's pin an input: pinMode(pushButton, INPUT); // make the transistor's pin an output: pinMode(motorControl, OUTPUT); } // the loop routine runs over and over again forever: void loop() { // read the state of the button and check if it is pressed if(digitalRead(pushButton) == HIGH){ // ramp up the motor speed for(int x = 0; x <= 255; x++){ analogWrite(motorControl, x); delay(50); } // ramp down the motor speed for(int x = 255; x >= 0; x--){ analogWrite(motorControl, x); delay(50); } หนว่ ยท่ี 8 การควบคมุ ดีซมี อเตอร์และสเตปมอเตอร์ด้วย Arduino
เอกสารประกอบการสอนวิชาไมโครคอนโทรลเลอรเ์ บอื้ งตน้ 43 } // delay in between reads for stability delay(1); } ผลการทดลอง ............................................................................................................................. .............................................. ........................................................................................................................................................................... ............................................................................................................................. .............................................. ............................................................................................................................. .............................................. ........................................................................................................................................................................... การทดลองที่ 8.2 การควบคุมสเตปมอเตอรด์ ว้ ย Arduino Hardware Required 1. Arduino or Genuino Board 2. 10k ohm potentiometer 3. stepper motor 4. U2004 Darlington Array (if using a unipolar stepper) 5. SN754410ne H-Bridge (if using a bipolar stepper) 6. power supply appropriate for your particular stepper 7. hook-up wires 8. breadboard หน่วยท่ี 8 การควบคมุ ดซี ีมอเตอรแ์ ละสเตปมอเตอร์ด้วย Arduino เรยี บเรยี งโดยครูทนั พงษ์ ภู่รกั ษ์
เอกสารประกอบการสอนวชิ าไมโครคอนโทรลเลอร์เบื้องตน้ 44 Circuits Bipolar Motor Circuit รูปท่ี 8. 22 การควบคุมสเตปมอเตอร์ดว้ ย Arduino Schematic หนว่ ยท่ี 8 การควบคมุ ดีซีมอเตอรแ์ ละสเตปมอเตอรด์ ้วย Arduino เรยี บเรียงโดยครทู นั พงษ์ ภรู่ ักษ์
เอกสารประกอบการสอนวชิ าไมโครคอนโทรลเลอร์เบื้องต้น 45 Code /* Stepper Motor Control - speed control Created 30 Nov. 2009 Modified 28 Oct 2010 by Tom Igoe */ #include <Stepper.h> const int stepsPerRevolution = 200; // change this to fit the number of steps per revolution // for your motor // initialize the stepper library on pins 8 through 11: Stepper myStepper(stepsPerRevolution, 8, 9, 10, 11); int stepCount = 0; // number of steps the motor has taken void setup() { // nothing to do inside the setup } void loop() { // read the sensor value: int sensorReading = analogRead(A0); // map it to a range from 0 to 100: int motorSpeed = map(sensorReading, 0, 1023, 0, 100); // set the motor speed: if (motorSpeed > 0) { myStepper.setSpeed(motorSpeed); // step 1/100 of a revolution: myStepper.step(stepsPerRevolution / 100); }} ผลการทดลอง ........................................................................................................................................................................... ........................................................................................................................................................................... ........................................................................................................................................................................... ............................................................................................................................................................... หน่วยที่ 8 การควบคมุ ดีซมี อเตอร์และสเตปมอเตอรด์ ้วย Arduino เรียบเรยี งโดยครูทันพงษ์ ภรู่ กั ษ์
เอกสารประกอบการสอนวชิ าไมโครคอนโทรลเลอร์เบ้อื งตน้ 46 สรุปผลการทดลอง ........................................................................................................................................................................... ........................................................................................................................................................................... ........................................................................................................................................................................... ........................................................................................................................................................................... ........................................................................................................................................................................... ........................................................................................................................................................................... ........................................................................................................................................................................... ........................................................................................................................................................................... ........................................................................................................................................................................... ........................................................................................................................................................................... ........................................................................................................................................................................... ........................................................................................................................................................................... ........................................................................................................................................................................... ปัญหาอุปสรรคหรอื ขอ้ เสนอแนะ ........................................................................................................................................................................... ........................................................................................................................................................................... ตารางการประเมนิ ผลคะแนนภาคปฏิบตั ิ หัวขอ้ การพิจารณาภาคปฏบิ ัติ ระดับคะแนน การทดลองท่ี 8.1 การควบคุมมอเตอร์ไฟฟ้ากระแสตรงด้วย Arduino 10 คะแนน การทดลองท่ี 8.2 การควบคุมสเตปมอเตอรด์ ว้ ย Arduino 10 คะแนน รวมคะแนนภาคปฏบิ ตั ิ …........คะแนน หนว่ ยที่ 8 การควบคมุ ดีซีมอเตอร์และสเตปมอเตอรด์ ้วย Arduino เรียบเรยี งโดยครูทันพงษ์ ภู่รกั ษ์
เอกสารประกอบการสอนวชิ าไมโครคอนโทรลเลอรเ์ บอื้ งตน้ 47 แบบทดสอบหลงั เรยี น หน่วยที่ 8 เร่ือง การควบคุมดซี ีมอเตอรแ์ ละสเตปมอเตอรด์ ้วย Arduino เร่อื ง การควบคมุ ดีซีและสเตปมอเตอรด์ ้วย Arduino ใช้เวลา 20 นาที วชิ า ไมโครคอนโทรลเลอร์เบอ้ื งตน้ รหัสวชิ า (2127-2107) ระดับชั้น ประกาศนียบัตรวิชาชีพ (ปวช.) สาขาวิชา เมคคาทรอนิกส์ ********************************************************************************** คาช้ีแจง 1. แบบทดสอบมีทง้ั หมด 10 ข้อ (10 คะแนน) 2. ใหผ้ ู้เรียนเลือกคาตอบท่ีถูกที่สดุ แล้วกาเครอ่ื งหมายกากบาท () ลงในกระดาษคาตอบ 1. มอเตอรม์ อเตอรไ์ ฟฟ้า (Motor) หมายถึง ก. เครือ่ งกลไฟฟา้ ทเี่ ปลี่ยนแปลงพลังงานไฟฟา้ เป็นพลงั งานแสง ข. เครอ่ื งกลไฟฟ้าที่เปล่ียนแปลงพลังงานกลเปน็ พลังงานไฟฟ้า ค. เครอ่ื งกลไฟฟ้าที่เปลีย่ นแปลงพลังงานไฟฟา้ เปน็ พลังงานกล ง. เคร่อื งกลไฟฟา้ ท่ีเปลี่ยนแปลงพลังงานกลเปน็ พลงั งานแสง 2. มอเตอร์ไฟฟา้ กระแสตรงเป็นต้นกาลงั ขับเคล่ือนทส่ี าคัญอยา่ งหนง่ึ ในโรงงานอตุ สาหกรรมเพราะ ก. ราคาถกู ข. ทนทาน ค. ประหยัดไฟฟา้ ง. ปรับความเรว็ ได้ 3. กระแสไฟฟา้ ในขดลวดสนามแมเ่ หลก็ (Field Coil) จะสร้างขวั้ แม่เหล็กแบบใด ก. ข้วั เหนอื -ใต้ ข. ข้วั สงู -ตา่ ค. ข้ัวบน-ลา่ ง ง. ขวั้ ซ้าย-ขวา 4. DC Motor ประกอบด้วย 2 สว่ นหลกั ๆ ไดแ้ ก่ ก. ทนุ่ อารม์ าเจอร์ / สเตเตอร์ ข. ขัว้ แม่เหลก็ เหนือ / ใต้ ค. ขดลวดอารม์ าเจอร์ / ขดลวดสนามแม่เหล็ก ง. มอเตอร์ไฟฟา้ กระแสสลบั / มอเตอรไ์ ฟฟา้ กระแสตรง หนว่ ยท่ี 8 การควบคมุ ดซี ีมอเตอรแ์ ละสเตปมอเตอรด์ ้วย Arduino เรยี บเรียงโดยครูทนั พงษ์ ภรู่ ักษ์
เอกสารประกอบการสอนวิชาไมโครคอนโทรลเลอร์เบ้ืองตน้ 48 5. หลกั การทางานของ DC Motor คอื ก. กระแสสลบั ตดั ผ่านสนามแมเ่ หลก็ เกิดทอร์กขึน้ ในทิศที่เหมาะสม ข. แรงดนั สลับตัดผ่านสนามแม่เหล็ก เกดิ ทอร์กขึ้นในทิศทเ่ี หมาะสม ค. กระแสตรงตดั ผา่ นสนามแม่เหล็ก เกิดทอรก์ ขนึ้ ในทิศท่ีเหมาะสม ง. แรงดนั สลบั ตดั ผ่านสนามแม่เหล็ก เกิดทอร์กขน้ึ ในทศิ ทเี่ หมาะสม 6. วงจร H-Bridge สามารถควบคุมมอเตอรไ์ ดอ้ ย่างไร ก. ควบคมุ ทศิ ทางของมอเตอร์ ข. ควบคุมความเร็วรอบของมอเตอร์ ค. ควบคุมการเดนิ หนา้ และถอยหลงั ของมอเตอร์ ง. ควบคุมทิศทาง และความเรว็ รอบของมอเตอร์ 7. หากตอ้ งการให้หมนุ ตามเข็ม (Clockwise :CW) ใหส้ วิตซ์ทางานอย่างไร ก. S1 และ S4 ปดิ วงจร ข. S2 และ S3 ปิดวงจร และ S1 และ S4 เปิดวงจร ค. S1 และ S4 ปิดวงจร และ S2 และ S3 เปิดวงจร ง. S2 และ S3 เปดิ วงจร 8. อปุ กรณ์สารกงึ ตัวนาที่นยิ มใช้ในวงจร H-Bridge คือ ก. TRIAC หรอื DIAC ข. DIODE หรอื ZENERDIODE ค. MOSFET หรอื IGBT ง. TRANSISTER 9. หลกั การของการทางานของ Stepper Motor คือ ก. การมอดเู ลตสัญญาณตามแอมพลิจูด ข. การมอดเู ลตสัญญาณเฟสเซอร์ ค. การจ่ายไฟเขา้ ไปทีละขดตามลาดบั ง. การมอดเู ลตสัญญาณตามความถ่ี 10. วงจร Darlington เปน็ IC สาเร็จรูปมชี ือ่ เรียกวา่ ก. 7812 ข. L298P ค. ULN2003AN ง. 1N4001 หน่วยท่ี 8 การควบคมุ ดซี ีมอเตอร์และสเตปมอเตอรด์ ้วย Arduino เรียบเรยี งโดยครทู นั พงษ์ ภู่รกั ษ์
Search
Read the Text Version
- 1 - 48
Pages: