ประสบการณ์ เรื่อง การขับ Stepping Motor

จากประสบการณ์ จากการทำงาน  หลายคน สามารถสร้าง เครื่องแกะสลัก มินิซีเอ็นซี (MiniCNC) 
ซีเอ็นซี เร้าเตอร์  จะใช้ บอลสกูร (Ball screw) หรือ ฟีดสกูร (Feed screw) สายพาน (Belt) หรือ ระบบเฟือง  จะขับด้วย Step motor (สเตปมอเตอร์) งบสูงหน่อยจัด Servo motor (เซอร์โว มอเตอร์) ไป.
แต่พอ จะปรับแต่ง ,แก้ปัญหาการขับมอเตอร์ ทำไงดีล่ะ . เรามาย้อนเรื่องพื้นฐาน เรื่องการขับ stepping motor ซักนิดนะครับ. ถ้างบพอ จะจัด มอเตอร์ใหม่ ไม่ว่ากัน ถามเซลล์ (คนขาย) ก็พอได้. แต่ถามบ่อยๆ ก็เห็นใจ คุณเซลล์.

การออกแบบการขับ Motor เช่น Step motor, Servo Motor ,หรือแม้แต่กับ spindle motor หรือ หัวกัด , สปินเดิล นั่นแหละ .
จะมีลักษณะการใช้งานที่แตกต่างกัน ดังนั้นเรามีความจำเป็นต้องศึกษา ให้เข้าใจ เพื่อใช้งานได้อย่างเหมาะสม 

ยกตัวอย่างคำถาม น้องนักศึกษา ที่ทำโปรเจค นะครับ


Q .พี่ครับขอคำปรึกษาเรื่องวิธีปรับแต่งการควบคุมสเต็ปมอเตอร์หน่อยครับ

โดยมีปัญหา คือ

1.สเต็ปมอเตอร์เหมือนไม่มีกำลังขับ

2.เกิดความร้อนที่ module L298N

จากครั้งแรกที่ได้นำเครื่องไปให้พี่สุภัคดูแล้วเลยอยากขอคำแนะนำสำหรับการปรับแต่งหรือเปลี่ยนอะไร

ได้บ้างเพื่อแก้ไขปัญหาดังกล่าวครับ

รบกวนด้วยครับ

มีปัญหา คือ

1.สเต็ปมอเตอร์เหมือนไม่มีกำลังขับ (โดยมีการทดสอบคือเมื่อระบบหมุน พร้อมลูกกลิ้งสามารถรันได้อยู่ที่40รอบต่อนาทีเท่านั้นเอง พอมีการหมุนลูกกลิ้งพร้อมสารเคมีเกิดการติดขัดไม่หมุนครับ)

2.เกิดความร้อนที่ module L298n (ในระหว่างการทำงานมีอุณภูมิสูง ถึง80-90องศาเซลเซียสครับ)


A. การขับ แบบ ลำดับ BIT A,B,C,D มอเตอร์หมุนได้ แน่นอน แต่จะไม่มีกำลัง หากต้องการใช้ L298 โมดูลตัวนี้มีทางแก้ ดังนี้





1.1สั่งขับ bit แบบเดิม แต่ให้มี PWM ทุก BIT 
                        
1.2สร้าง PWM ภายนอก แล้วต่อกับขา Enable ของ Module l298

1.3 เขียนคำสั่ง ควบคุมใหม่ โดยสั่งเป็น Pulse Direction มาขับวงจรใหม่เช่น L297 + L298 , A4988

link A4988

L297 + L298




A. สังเกตให้ดีนะ ที่ขา sens a,b ของ l298 จะมีการวัด feedback มาที่ ขา 13,14 ของ l297 อันนี้แหละตัว สร้าง แรงบิดครับ หาอ่านจาก l297 datasheet ตาม link นี้ได้ 

www.st.com/web/catalog/sense_power/FM142/CL851/SC1790/SS1160/PF63146

แหล่งข้อมูล

www.cuteminds.com/index.php/en/repository/category/3-eaglesch

การควบคุมแบบ PWM จะมาแนะนำให้เพิ่มเติมครับ พอดีติดงานอยู่ หากมี ข้อสอบถามก็ถามมาได้เลย


Q. พี่ครับที่ผมเข้าใจในการตอบของพี่คือ พี่ตอบมาเป็น 3 วิธีการแก้ไขถูกต้องไหมครับ

1. ผมจะสร้าง PWM ในทุก bit ได้อย่างไรครับ
2. Module l298 ที่ใช้ ผมต่อจัมเปอร์ช็อตอยู่(ตามที่โรงงานตั้งไว้) มันมีทั้ง EnA และ EnB ต้องสร้าง PWM สองอันใช่ไหมครับ
3. คู่ l297+l298 เคยลองดูแล้ว ได้ผลไม่ต่างกับ ใช้ 4 bit บน l298ตัวเดียว แต่ก็ไม่แน่ใจว่าทำได้ถูกต้องรึเปล่า

ถ้าสองข้อแรกทำงานได้ดีก็น่าสนใจเพราะใช้ชิพแค่ตัวเดียว

รอรายละเอียดเพิ่มเติมจากพี่ ขอบคุณมากครับ

โทษทีครับพอดีเพิ่งเห็นรูปที่พี่ส่งมาด้วยครับ


รูปหนึ่ง และสอง PWM ต้องมีการ shift เฟส รึเปล่า ถ้ามีต้องทำยังไงครับ
รูปที่สาม A4988 น่าสน ควรเปลี่ยนมาใช้ตัวนี้เลยไหมครับ
รูปที่สี่ l297+l298 module ที่ใช้ไม่พอร์ทขา sen มาให้ เท่าที่ดู sens a ลง GND และ sens b ต่อลอยอยู่ (ไม่รู้ว่า PCB มีมากกว่าสองเลเยอร์รึเปล่า)

A. รูป ที่1 หากใช้ l297 และ l298 Module ที่มีอยู่แล้ว ต้องทำการตัดใต้ PCB แล้วต่อ R sens ครับ
การสร้าง pwm ในทุก bit ต้องดู Spec cpu หากพอมีเหลือ สัก bit ให้ใช้ AND gate ช่วย เช่น เบอร์ 74HC08

ถ้ากระแสไม่เกิน 2 amp A4988 ดีกว่าครับ ใช้ง่าย ความละเอียดปรับ ได้ เป็น microstep ต้องมี heatsink ด้วยครับ

ความรู้เรื่อง PWM ดูได้ตามนี้ครับ



การ Modify Module l298 ใช้กับ L297 ทำการทดสอบแล้วก็ให้ กำลังเป็นที่น่าพอใจ





Q. 1.รูปการ modify module l298 กับ l297 ในรูป ที่มี R ผมอยากทราบว่าเอาไว้ทำอะไร
 ต่อตรงไหนครับ
    2.A4988 ผมสามารถต่อวงจร ตามรูปข้างบนได้ เลยหรอครับ เพราะขาของมอเตอร์ที่ใช้มันเกิน 
อยู่อะครับ

A.ต้องเขียนโปรแกรมใหม่  เป็นการ ส่ง Pulse และ Direction ให้กับ Drivers Board
 หากใช้ แบบเดิม แนะนำให้สร้าง PWM จากวงจรใหม่ครับใช้ SG3524 ก็น่าจะได้เพราะเคยใช้มาแล้ว





รูป การ Modify Board L298N





Q. กำลังคิดจะใช้อยู่เหมือนกันนะ ตัว SG3524 เนื่องจากจะต้อง ใช้ในบาง Application

ขอบคุณครับสำหรับข้อมูล จากที่พี่ได้ส่ง ลิ้งค์ข้อมูลมา ผมว่า A4988 น่าจะสะดวกและเหมาะ สม เดี๋ยวผมจะหา A4988 มาลองต่อกับมอเตอร์ตัวปัจจุบันดู (เป็น unipolar) 

อ่านดูใน FAQ ของเวปที่พี่ส่ง มา สามารถต่อกับ unipolar ได้ โดยไม่ต่อขากลาง (ใช้เป็น bipolar) 
พี่มีคำแนะนำเพิ่มเติมในการต่อใช้งานไหมครับ

A.พยายามค้นหาแล้วระหว่างการค้นคว้าเราจะได้ประสบการณ์อย่างอื่นเเพิ่มเติม



Q.ขอบคุณมากครับพี่สุภัคสำหรับคำแนะนำต่าง ๆ ระหว่างที่รอ A4988 สายรุ้งกำลังลอง ต่อ R sens ระหว่าง L297 กับ L298 อยู่ เดี๋ยวพรุ่งนี้คงได้เห็นครับ

A.อย่าลืมดูตรงนี้นะครับ




แล้วก็การปรับ V ref ให้ดูจาก Data sheet ขณะปรับไม่ควรต่อ load (motor)
หากเป็นไปได้แนะนำให้ ปรับปรุง คาบเวลา การ on off motor on time ไม่ควรเกิน 10 % จะได้ แรงบิดที่สูง ทดลองดูนะครับหลาย ๆค่า อันนี้เป็นประสบการณ์นะครับ ต้องทดลอง อ้างอิง

Q. ขอบคุณครับ เดี๋ยวสายรุ้งทดลองแล้วจะอัพเดท ครับ

Q. พี่ครับผมขอคำแนะนำในการเขียนโปรแกรมที่เป็น pulse direction หน่อยครับ

A. ตาม Link นี้ครับ
ตัวอย่างการขับ Easy Drivers www.schmalzhaus.com/EasyDriver/
ดูเพิ่มเติม จาก ที่นี่ forum.arduino.cc/index.php?topic=52142.0
ตัวอย่างการเขียนโปรแกรม แบบ Pulse Direction สำหรับ Arduino
ตาม link นี้ครับ




Q. พี่ครับตอนนี้ ผมได้ A4988 ผมเลยพักการทดลองของ l297+l298 ไปก่อนครับ
ได้ทำการทดลองร่วมกับอาจารย์ สร้างพัลส์โดยใช ้ library timer1 มา toggle สัญญาณ (ได้ duty cycle 50%)
ตอนแรกยังไม่ได้ทำการปรับอะไรพบว่าไม่ค่อยมีกำลังเท่าไร เลยมาศึกษาข้อมู ลเพิ่มเติม พบว่าต้องทำการป รับ Vref เพิ่มตั้ง current limit(ตอนแรก Vref = 0.6Vเท่านั้น) ได้คำนวณเพื่อตั ้ง current limit = 2A โดย Vref = 2/0.7/2.5 =1.14V ซึ่งพบว่าให้กำล ังที่ดี ความร้อนขึ้นพอส มควร ติด heat sink น่าจะดีขึ้นได้อีก
ตอนนี้กำลังเริ่มเขียนโปรแกรมเพิ่มเติมเพื่อให้ทำงานได้อย่างที่ต้องการ ดูเหมือนว่าใช้แ ค่ Timer1 ก็สามารถควบคุมค วามเร็วได้อย่าง ที่ต้องการแล้ว ไม่จำเป็นต้องใช ้ library อื่นเลย

ปล.พี่มีอะไรแนะนำเพิ่มเติมไหมครับ

ขอบคุณครับ

A.ลองลด duty cycle torque จะดีขึ้น การสั่ง pulse run motor ต้องมี Curve profile หาก slope ชันจะทำให้การออ กตัว Slip ได้ครับ อย่าลืม ติด Heatsink ด้วย หรือ ลองเปลี่ยน เป็น TB6560 ดู จะได้ ที่ 3.5 amp เทคนิคเหมือน a4988

Q.เริ่มจะเอา stepper อยู่แล้ว ขอบคุณมากครับพี่สุภัค เลยได้ค้นและเข้าใจเรื่อง speed profile มากขึ้น พอดีว่างานที่ใช ้ ตัว stepper ถูกคุมโดยความเร ็วจาก encoder อีกทีเลยคิดว่าค วามเร็วน่าจะไม่ โดดมาก ทำ smooth อีกนิด อาจนิ่มขึ้นอีก

คือเคยใช้ AccelStepper.h แต่ตอนนั้นไม่เข้าใจ concept บางอย่าง และได้กำลังไม่ดีด้วย เลยหนีไปใช้ Stepper.h แทน (แต่ก็เจอเรื่องกำลังอีก)

ตอนนี้พอใช้ A4988 ตามที่พี่แนะ เลยสร้าง pulse แบบง่าย ๆ ใช้แต่ timer เดี๋ยวจะลองทำให ้ปรับ duty cycle ดูครับ (หรืออาจใช้ AccelStepprt.h แต่ยังไม่เห็นว่าตั้ง duty cycle ได้ตรงไหน เดี๋ยวจะลองดูอีกทีครับ)

ส่วน TB6560 เดี๋ยวรอดูผลงาน A4988 สักนิด ลงทุนไปแล้ว 2 ตัวครับ

เจอบอร์ด TB6560 พอดี น่าสนไม๊ครับ ราคาไม่แพงนัก แพลนว่าจะทำคุม stepper 4 ตัว อยู่พอดี น่าจะคุมคุมผ่าน parellel port แต่ไม่มี manual ให้ดู เดี๋ยวต้องสอบถามเพิ่มเติมดูครับ

http://www.circuitshops.com/articles/42133707/CNC-3-Axis-Controller-TB6560-3.5A-Stepper-Motor-Driver-Board-For-Mach3-Factory.html