Sunday, July 27, 2014

ตรวจสอบความถี่คล็อกของ PIC24EP โดยโมดูล UART

ในบทความก่อนหน้านี้การตั้งค่าให้ PIC24E ทำงานที่ 70 MIPSเราได้แนะนำวิธีการตรวจสอบว่าระบบทำงานที่ 70 MIPS จริงหรือไม่โดยตั้งค่าเอาต์พุตของไทเมอร์และใช้สโคปวัด แต่ในทางปฏิบัติคงไม่ใช่ทุกคนที่มีสโคปอยู่ที่บ้าน ดังนั้นในบทความนี้จะนำเสนออีกวิธีหนึ่งที่ไม่ต้องการอุปกรณ์ราคาแพง คือ ตั้งค่า UART และส่งข้อความสื่อสารกับคอมพิวเตอร์อีกเครื่องหนึ่ง เช่นเครื่อง PC โดยใช้ซอฟต์แวร์เทอร์มินัลทั่วไป หากการตั้ง baudrate โดยใช้ความถี่ FCY = 70 MHz สามารถทำให้โมดูล UART ทำงานได้อย่างถูกต้อง แสดงว่าความถี่ FCY ได้ตามต้องการอย่างแม่นยำ นอกจากการตรวจสอบนี้แล้ว เรายังได้มีโอกาสเรียนรู้การใช้งานโมดูล UART ของ PIC24EP อีกด้วย

การตั้งค่าให้ PIC24E ทำงานที่ 70 MIPS

นับตั้งแต่ Microchip นำเสนอไมโครคอนโทรลเลอร์ตระกูล PIC24EPจนกระทั่งเริ่มหาซื้อได้ในประเทศไทย มีจุดเด่นคือสมรรถนะในการทำงานสูงสุด 70 MIPS แต่ว่าไม่ใช่นำมาต่อเป็นวงจรแล้วจะได้ความเร็วการทำงานสูงสุดเลย แต่จะต้องมีการตั้งค่าและสวิทซ์คล็อกโดยซอฟต์แวร์ ดังนั้นในบทความนี้จะยกตัวอย่างการตั้งค่า PIC24EP ใทำงานที่ 70 MIPS โดยชิพที่ใช้เป็นเบอร์ PIC24EP256MC202 และแสดงการตั้งค่า 2 กรณี คือ 1.) ใช้ตัวกำเนิดความถี่ภายในชิพ คือ 7.37 MHz FRC (Internal Fast RC) และ 2.) ใช้คริสตัลความถี่ 8 MHz ต่อภายนอก

แนะนำการออกแบบ Finite State Machine

คำจำกัดความอย่างง่ายของ Finite State Machine (FSM) แบบซิงโครนัสคือระบบดิจิทัลที่สามารถจำสถานะ และถูกขับเคลื่อนโดยสัญญาณคล็อกทำให้สถานะเปลี่ยนไปโดยขึ้นกับอินพุตและสถานะก่อนหน้า พื้นฐานการทำงานนี้ครอบคลุมระบบอย่างง่ายที่มี DFF ตัวเดียวไปจนถึงระบบคอมพิวเตอร์ที่มีความซับซ้อน ในบทความนี้จะแนะนำขั้นตอนการออกแบบและอิมพลิเมนต์ FSM ลงบน CPLD โดยอาศัยตัวอย่างง่ายๆ แนวทางหลักที่นยมใช้คือ อาศัยแผนภาพสถานะ (state diagram) และ ASM (Algorithmic State Machine)

ปรับปรุงการอ่าน/คำนวนความเร็วของอีมอเตอร์

บทความนี้ต่อเนื่องจาก eMotor Phones Home ก่อนหน้านี้ ที่นำเสนอการควบคุมความเร็วรอบของ eMotor โดยตัวควบคุมพีไอดี วิธีการคำนวนความเร็วที่ใช้ในบทความนั้นคือ ตั้งโมดูล QEI ของ dsPIC ให้รีเซ็ตค่านับในรีจิสเตอร์ POSCNT ในทุกรอบโดยสัญญาณอินเด็กซ์ ข้อเสียของวิธีการนี้คือ

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

เมื่อมอเตอร์จำลองอิเล็กทรอนิกส์เริ่มหัดเดิน

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

การทดสอบ eMotor ทำได้ง่ายๆ คือต่อเข้ากับระบบฝังตัวอีกระบบหนึ่ง ในที่นี้เราใช้บอร์ด JX-dsPIC40 จากบริษัทInnovative Experiment Co.,Ltd . ซึ่งมีอุปกรณ์สนับสนุนให้บนบอร์ดแล้วส่วนหนึ่ง แต่ก็ได้บัดกรีเพิ่มไปอีก รูปที่ 1 แสดงการต่อบอร์ดเข้าด้วยกัน

รูปที่ 1 การต่อบอร์ดeMotor เข้ากับ JX-dsPIC40

สร้างมอเตอร์จำลองอิเล็กทรอนิกส์กัน

บทความนี้กล่าวถึงการพัฒนาวงจรจำลองการทำงานของมอเตอร์กระแสตรงแบบมีแปรงถ่าน (รูปที่ 1) เพื่อใช้ประกอบการสอนวิชาระบบควบคุม ในกรณีที่ไม่ได้มีการขับเคลื่อนระบบทางกลจริง การใช้มอเตอร์จริงมีข้อเสียคือมีน้ำหนักมากเคลื่อนย้ายไม่สะดวก และในการทดลองอิมพลิเมนต์หรือปรับแต่งตัวควบคุมป้อนกลับ อาจเกิดอันตรายหรือความเสียหายได้เมื่อระบบไม่เสถียร นอกจากนั้นมอเตอร์ของใหม่ยังมีราคาค่อนข้างสูง การซื้อมอเตอร์เก่าจากตลาดมือสองอาจได้อุปกรณ์ที่ไม่สมบูรณ์ เช่นสายเอนโคเดอร์หลวมหรือขาด หรือไม่ทราบว่าต่ออย่างไร ปัญหาทั้งหมดเหล่านี้เป็นอุปสรรคต่อการทดลองขั้นพื้นฐานในห้องปฏิบัติการสาขาระบบควบคุม
 
รูปที่ 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