ควบคุมตำแหน่งมอเตอร์

Started by secret07, February 06, 2013, 05:47:13 PM

Previous topic - Next topic

secret07

มอเตอร์ที่ผมใช้นั้น 6000rpm มีทดเหลือ 10 rpm ตรงปลายเพลา มี encoder 500pulse/rev ติดที่ตูดวัดตัว 6000 rpm นะครับ
เพราะฉะนั้น pulse ใน 1 รอบที่ออกมาจะเท่ากับ pulse = (6000/10)*500 = 300000 pulse / rev ที่ปลายเพลา

ผมใช้ บอร์ด lpc2138 exp ไรเนี้ยซึ่งผมเขียนโค๊ดโดยมี Interrupt uart0 สำคัญสุด
รองลงมาคือ Interrupt Timer1 วัด encoder
รองมาคือ Interrupt Timer0 คอยอัพเดต PWM

หมุนประมาณ 1 รอบ[กะๆเอา] มันโชออกมาประมาณแค่ 340 องศาเอง [แบบยังไม่ใช้ Interrupt Timer0]
ยิ่งพอรวมใช้ Interrupt Timer0 ค่าที่อ่านจาก Encoder จะไม่ทันเลย หมุนไปเป็นรอบยัวัดได้แค่ 10 - 20 องศาเอง

คือมัน Interrupt ไม่ทันอ่ะ จากเดินก็ไม่ค่อยทันอยู่แล้ว ยิ่งมี Interrupt Timer0 เข้ามา ยิ่งอ่านไม่ทันเลย

มันละเอียดเกิ๊นนนนน  จะแก้ไขยังไงดีครับ  :'( :'(

firmware.c

หา MCU ใหม่ที่มี encoder input hardware
IAR Embedded Workbench for ARM
AVR-Studio + AVR-GCC
CodeBlocks + MinGw
CodeBlocks + Gtk+

secret07

ช่วยแนะนำหน่อยได้ไหมครับว่าตัวไหนอ่า


secret07

แล้วมีทางแก้ไหมครับถ้าไม่เปลี่ยน ตัวใหม่

firmware.c

แก้ยากครับเพราะมันละเอียดมาก แนะนำให้หา mcu ตัวใหม่อย่างที่บอกเอาพวก dsPIC ก็ได้มีโหมดนี้อยู่
IAR Embedded Workbench for ARM
AVR-Studio + AVR-GCC
CodeBlocks + MinGw
CodeBlocks + Gtk+

secret07

ขอบคุณสำหรับคำตอบครับผม

tha

stm32f103 timer ก็มี encoder interface mode ด้วย ผมเห็นใน reference manual RM0008 แต่ยังไม่ได้อ่าน

firmware.c

IAR Embedded Workbench for ARM
AVR-Studio + AVR-GCC
CodeBlocks + MinGw
CodeBlocks + Gtk+