Sunday, July 27, 2014
ตรวจสอบความถี่คล็อกของ PIC24EP โดยโมดูล UART
การตั้งค่าให้ PIC24E ทำงานที่ 70 MIPS
แนะนำการออกแบบ Finite State Machine
ปรับปรุงการอ่าน/คำนวนความเร็วของอีมอเตอร์
บทความนี้ต่อเนื่องจาก eMotor Phones Home ก่อนหน้านี้ ที่นำเสนอการควบคุมความเร็วรอบของ eMotor โดยตัวควบคุมพีไอดี วิธีการคำนวนความเร็วที่ใช้ในบทความนั้นคือ ตั้งโมดูล QEI ของ dsPIC ให้รีเซ็ตค่านับในรีจิสเตอร์ POSCNT ในทุกรอบโดยสัญญาณอินเด็กซ์ ข้อเสียของวิธีการนี้คือ
- คาบเวลาในการอ่านค่านับจะต้องตั้งให้เหมาะสมโดยสัมพันธ์กับความเร็วรอบ จะต้องไม่เกิด overflow/underflow ทำให้เป็นเงื่อนไขบังคับด้านเวลากับคาบของไทเมอร์ที่ใข้อ่านและคำนวน การทำงานลักษณะนี้ถ้ามีการตั้งค่าสำหรับความเร็วรอบหนึ่งจะใช้งานได้ตามต้องการ แต่เมื่อปรับค่าความเร็วรอบในย่านที่กว้างจะเริ่มเกิดปัญหาขึ้น
- ไม่สามารถใช้กับงานที่ต้องการรวบรวมค่านับมากกว่าหนึ่งรอบ เช่นการควบคุมแกนเชิงเส้นของเครื่องซีเอ็นซี หรือข้อต่อหุ่นยนต์ที่มีการทดรอบโดยเกียร์ เป็นต้น
เมื่อมอเตอร์จำลองอิเล็กทรอนิกส์เริ่มหัดเดิน
หลังจากที่ได้แนะนำการสร้างวงจรจำลองมอเตอร์อิเล็กทรอนิกส์เมื่อสองสัปดาห์ที่ผ่านมา ผู้เขียนไม่ได้คิดว่าจะมีอะไรเขียนเพิ่มเติมในเวลาอันสั้น แต่หลังจากที่ได้ทดสอบเบื้องต้นก็พบว่ามีอะไรสนุกๆ ที่น่าจะมาเล่าสู่ให้ผู้สนใจด้านการอิมพลิเมนต์ระบบควบคุมมอเตอร์ โดยเฉพาะผู้ที่ใช้ผลิตภัณฑ์ dsPIC ของไมโครชิพ (คลิกอ่านภาษาอังกฤษสำหรับการอธิบายที่ละเอียดขึ้น)
การทดสอบ eMotor ทำได้ง่ายๆ คือต่อเข้ากับระบบฝังตัวอีกระบบหนึ่ง ในที่นี้เราใช้บอร์ด JX-dsPIC40 จากบริษัทInnovative Experiment Co.,Ltd . ซึ่งมีอุปกรณ์สนับสนุนให้บนบอร์ดแล้วส่วนหนึ่ง แต่ก็ได้บัดกรีเพิ่มไปอีก รูปที่ 1 แสดงการต่อบอร์ดเข้าด้วยกัน
สร้างมอเตอร์จำลองอิเล็กทรอนิกส์กัน
โปรแกรมภาษา VHDL สำหรับโมดูลภาครับสัญญาณเอนโคเดอร์
บทความเดิม: Quadrature Encoder Receiver Module: An Implementation on FPGA
(เป็นภาษาอังกฤษ สำหรับภาษาไทยได้กล่าวไว้ในบทที่ 10 ของหนังสือ วิศวกรรมไฟฟ้าและคอมพิวเตอร์ประยุกต์ )ในบทความข้างต้น เราได้กล่าวถึงการออกแบบโมดูลภาครับสัญญาณจากเอนโคเดอร์ของมอเตอร์โดยใช้ภาษา Verilog ในบทความนี้จะเป็นส่วนเสริมสำหรับผู้ที่คุ้นเคยกับภาษา VHDL โดยเนื้อหาและขั้นตอนการออกแบบจะเป็นเช่นเดิม ดังนั้นจะไม่กล่าวถึงอีก เพียงแต่จะแสดงโค้ด VHDL และผลการจำลองสำหรับโมดูลแบบ A และ B เท่านั้น
โมดูลแบบ A
สำหรับการออกแบบโมดูลแบบ A ที่กล่าวถึงในบทความเดิม ภาครับจะกำเนิดพัลส์ที่ขาเอาต์พุต U (นับขึ้น) หรือ D (นับลง) ขึ้นอยู่กับว่าอินพุต A นำหน้า B หรือ A ตามหลัง B (*) เราได้แสดงการออกแบบโดยอาศัย STG (State Transition Graph) ทำให้ได้ผลตามสมการ (1) – (4) ที่นำมาอิมพลิเมนต์ โดยโค้ด VHDL จะแสดงตามโปรแกรมที่ 1 และผลการจำลองดังในรูปที่ 1 (การสังเคราะห์วงจรและการจำลองกระทำบนซอฟต์แวร์ ISE Webpack 13.4 ที่ดาวน์โหลดได้ฟรีจาก เว็บของบริษัท Xilinx
(*) มีความสับสนในบทความเดิมและในหนังสือ คือ ข้อมูลในคาร์นอฟ แมพสำหรับเอาต์พุต U และ D สลับกัน ทำให้สมการ (3) และ (4) สลับกันด้วย ซึ่งจะสังเกตได้จากผลการจำลอง คือเมื่อ A นำหน้า B พัลซ์เอาต์พุตจะออกที่ขา D แทน อย่างไรก็ตามทิศทางการหมุนขึ้นอยู่กับเอนโคเดอร์ที่ใช้ด้วย ถ้าหากทิศทางไม่ถูกต้องผู้ใช้สามารถสลับสมการ (3) และ (4) เพื่อแก้ไข สำหรับในโค้ด VHDL ด้านล่างเราจะยึดว่า สัญญาณออกที่ขา U เมื่อ A นำหน้า B