to cụ gamo, lão tiền bối của DC servo, cái này mới gọi là bậc thày, chia sẽ từ những ngày thông tin còn hạn chế, sử dụng linh kiện ở mức thấp nhất
http://www.elm-chan.org/works/smc/report_e.html
em nghĩ kiểu này ko ổn ah, nên dùng timer quét sẽ ổn hơn
to cụ gamo, lão tiền bối của DC servo, cái này mới gọi là bậc thày, chia sẽ từ những ngày thông tin còn hạn chế, sử dụng linh kiện ở mức thấp nhất
http://www.elm-chan.org/works/smc/report_e.html
Lần sửa cuối bởi nhatson, ngày 22-12-2014 lúc 04:36:29 PM.
Oi, iu bac Nhat Son thia :x :x :x Sao em kiem nhieu ma ko ra tai lieu chi tiet the nay ;x
CKD: bac choi ARM ko, em tang bac 1 board? Cam doan la do mat cong hon khi doc encoder )
(Mat cong cai khac ))
Lần sửa cuối bởi Gamo, ngày 22-12-2014 lúc 04:35:13 PM.
ARM cortex m3 + mikroe C/basic/pascal nhanh cấp kỳ
http://www.mikroe.com/mikroc/arm/
http://www.mikroe.com/mikrobasic/arm/
http://www.mikroe.com/mikropascal/arm/
Lần sửa cuối bởi nhatson, ngày 22-12-2014 lúc 04:35:49 PM.
Cái ELM-Chan với cái UHU nó gần giống nhau.
Rất nhiều ver đã được các bác bên tây âu thực hiện, cấu hình thấp nhất là Atmega8 chạy 16MHz.
Theo đánh giá của tụi ấy thì.. ứng dụng khá tốt. Và có rất nhiều bác DIY xong lắp lên CNC chạy quay clip mà thấy kinh hồn.
@nhatson
Theo bác không ổn là thế nào?.
Theo hiểu biết nông cạn thì có nhiều cách đọc encoder trực tiếp trên VXL.
- Cách bèo nhèo mà ai cũng biết là đọc thông qua đường input thông thường.
- Kế tiếp là qua ngắt ngoài như mình làm.
- Kế nữa là qua counter.
Ưu & nhược thì..
với cách 1 thì dể suy nghĩ, và dùng cái pin input nào cũng Ok. Nhưng nhanh là out ngay vì phụ thuộc vào thời gian lặp của chương trình.
với cách 2 thì không bỏ xung nào (trừ trường hợp nhanh quá). Nhưng nếu tốc độ quá nhanh thì chiếm quá nhiều thời gian để đọc encoder. Không còn thời gian để xử lý PID hoặc làm việc gì khác.
với cách 3 nghĩ là tối ưu hơn cả. Nhưng việc count+ hay count- chưa có nhiều kinh nghiệm sử dụng nên chưa dám dùng. Thường thì với cách này nên xử lý tín hiệu A/B thành pulse/dir rồi đọc thì thuận tiện hơn. Việc xử lý này dùng ic số thông thường cũng được, dùng ic chuyên dùng cũng được.
Do đó nếu dùng cách 2 thì với encoder số xung ít cho hiệu quả hơn, motor chạy tốc độ vừa phải là xử lý kịp.
Theo sư cụ ELM-Chan thì.. idle time còn tới 62% cơ mà. Và với encoder 400ppr (1600cpr) thì motor có thể chạy Max tới 3900rpm.
DT: O7837277II - CKD's Youtube Channel - Facebook - Tổng hợp chủ đề
17 ds 3, Thạnh Mỹ Lợi, Q2, tp.HCM
DT: O7837277II - CKD's Youtube Channel - Facebook - Tổng hợp chủ đề
17 ds 3, Thạnh Mỹ Lợi, Q2, tp.HCM
@Gamo
Gì chứ vụ cho hay tặng là em đều nhận hết bác ạ. Em là em sợ phụ lòng những người quan tâm đến mình. Nên cám ơn bác trước.
Nhưng em xin khất thời gian ạ. Em thích thử nghiệm từ những cái lỡm trước rồi mới tiến từ từ. Có thể cái lỡm nó làm khó mình hơn, nhưng như thế trải nghiệm được nhiều thứ hơn ạ. Khi nào rỗi em xin qua anh thọ giáo và nhận quà ARM sau ạ.
DT: O7837277II - CKD's Youtube Channel - Facebook - Tổng hợp chủ đề
17 ds 3, Thạnh Mỹ Lợi, Q2, tp.HCM
báo cáo cụ dùng ngắt thì bị dính vấn để jitter của encoder + khi motor hunting , MCU sẽ chạy ctrinh đọc encoder liên lục
dùng timer quét sẽ tránh khỏi tình trạng trên,
em cũng ủng hộ a/b > pluse/dir hoạc cw/ccw, nhưng vậy mạch sẽ phức tạp vì cần logic ngoài, hoặc dùng cpld sẽ tiện hơn
nhưng túm lại ELM có cách đây > 15 năm lúc đó 32bit motor control đắt đỏ, giò thì có khởi đầu em nghĩ vẫn nên dúng người đúng việc
b.r
Lần sửa cuối bởi nhatson, ngày 22-12-2014 lúc 05:14:11 PM.
Hehe, nguyên nhân em dụ bác dùng ARM là vì em vốn là tín đồ STC 8051, sau khi xài ARM rồi ko bao giờ quay đầu nhìn lại )
Con STC 8051 chạy nhanh (1 cycle, 35Mhz), có ADC, có PWM, có đủ hết, chỉ có cái tội 8-bit ) Khi em đọc encoder phải dùng long => chậm, ram ít nên phải optimize => tốn trí não. Chuyển qua xài ARM thì rất nhiều khó khăn biến mất. Chỉ có cái tội là thằng ARM cho customize nhiều quá nên mới đụng vào đa số mọi người chắc chạy hết vì thấy phức tạp quá so với 8-bit.
Lần sửa cuối bởi Gamo, ngày 22-12-2014 lúc 05:43:45 PM.
Lần sửa cuối bởi nhatson, ngày 22-12-2014 lúc 06:01:07 PM.
Hehe. Đúng là thế bác ạ.
Mình làm trên nền arduino tại vì mình có sẵn đồ, mua mấy cái shield cũng sẵn và dễ, không cần phải vẽ hay làm mạch. Và mấy cái board arduino đó cũng làm được nhiều trò. Cộng với suy nghĩ làm để vui và hiểu thêm các vấn đề khác nên không quá câu nệ việc hiệu quả sử dụng sau này. Cứ cái nào thấy có sẵn là bụp bụp
Mà arduino nó cũng đã phát triển các board dùng 32bit rồi. Như
- Arduino Due với atSAM3x8E ARM Cortex-M3, 32bit, 84MHz.
- LeafLabs Maple Rev3 với STM32F103RB ARM Cortex-M3, 32bit, 72MHz.
- http://en.wikipedia.org/wiki/List_of...atible_systems
Cho nên chắc rồi cũng sẽ nâng cấp lên ARM sớm thôi ạ.
Nhiều khi thấy mình làm vớ vẫn cũng phí time và xiền bác ạ. Nhưng bù lại khi làm được và hiểu được thì cũng vui thật. Khi đó thì lại có cái để mà chém gió với các bác nữa . Mà làm mấy cái này.. cũng do bác nào đó hay khích.. nói có sách, mách có chứng.. Mà tính mình thì hay nói và thích nói nhiều, nên mình làm được thì sau này chém gió mới có cái mà dẫn chứng đấy ạ. Mượn từ google hoài cũng không được hehe.
Với nữa là bác Gamo làm bằng chip 32bit mà cũng từ từ.. mình làm 8bit mà chạy được thì.. bác ấy mới nể chứ ạ
DT: O7837277II - CKD's Youtube Channel - Facebook - Tổng hợp chủ đề
17 ds 3, Thạnh Mỹ Lợi, Q2, tp.HCM
Hoho, đúng là nể ông thiệt á, vẫn chưa hiểu ông xoay xở làm sao với 8-bit )
Em cũng ham món này lém, hiện tại em đã sưu tầm được vài loại Diy DC servo driver: DsPIC servo (open source trên CNCZONE), UHU (mua chip về DIY) và cái còn lại của 1 chuyên gia về DIY DC servo ở HCM, em test thì đánh giá thể này:
DsPIC servo: Chạy tốc độ không cao, tầm 30kHz cao hơi nữa là tracking error.
UHU controller: cái này có khá hơn theo lí thuyết là hơn 300000 khuyến cáo là 150kHz nhưng em chạy thực tế tầm 80~100khz là tracking error rồi. Khổ nỗi mấy con motor ngon của em toàn 2500 xung nên chạy tốc độ không cao được
Cuối cùng là driver của Chuyên gia: cái này tốt nhất và em muốn cải tiến DsPIC servo theo,
Driver của Chuyên gia: manual nói là có thể chạy tốt với enc từ 50~5000ppr và em test thấy nó OK.
So sánh thấy có 1 cải tiến quan trọng là dùng 2 con VXL để tăng tốc độ xử lí, em đang băn khoăn là dùng cách nào để giao tiếp giữa 2 con VXL với tốc độ cao: dùng SPI, UART hay là CAN ah?
Mong các bác đóng góp cao kiến ah
chuyên gia nào ??? Phúc Bồ hả ?
Nguyễn Hoàng Nam
n_h_n2002@yahoo.com DT: 0908415648
nếu là của anh phucnd thì dùng 2 con, em nghĩ la lí do là trước đây MCU ko có moudle QIE , nên đọc encoder là vấn đề , dùng 2 MCU hoặc CPLD sẽ giải quyết được
DSPIC dòng 33 hoặc mấy con ARM7 có QIE và đủ nhanh để chạy trên 1 MCU
giao tiếp MCU ~ MCU em nghĩ i2c tốc độ ~ 4mhz hoặc SPI >10mhz >hiệu quả hơn
b.r
Lần sửa cuối bởi nhatson, ngày 23-12-2014 lúc 01:07:48 PM.
Em không biết bác dùng mấy con PIC thì có cái gì tốc độ cao không nhưng nếu STM32 thì có FSMC tốc độ từ 30Mhz đến 60Mhz. Đặc biệt STM32F429/439 còn có FMC tốc độ 90Mhz. Mấy cái FSMC/FMC chuyên để giao tiếp RAM, LCD, FPGA nên tốc độ cao lắm
Đúng là driver của bác Phúc ah, module đọc enc trên DsPIC là QEI (Quadrature Encoder Interface) không phải QIE .
Theo em tính toán với encoder là 2500 cài đặt QEI nhân xung là 4, động cơ quay 3000rpm = 50rps -> tần số encoder = 500Khz. Em đặt PID loop (bằng ngắt timer) 100us thì vẫn bảo đảm đọc tốt encoder nhưng khi chạy thì có vấn đề, tiếc là em không theo đuổi nó nữa nên đến giờ vẫn chưa có gì tiến triển (làm không được nên nản )
UHU chip nói có enhanced PID nhưng không biết nó là cái gì? Có khác PID thường không nữa?
digital chán roài thì đổi bộ môn về analog + logic gate ah
Lần sửa cuối bởi nhatson, ngày 23-12-2014 lúc 04:14:50 PM.
Lần sửa cuối bởi nhatson, ngày 23-12-2014 lúc 04:11:13 PM.