PDA

View Full Version : CKD - Arduino DC motor PID position controller DEMO Ver



Trang : 1 [2]

CKD
24-12-2014, 06:12:01 PM
Chậc chậc... bị cha CKD gài, cứ tuỏng chả ngố nên nhào vào ném đá :D

Ủa, như vậy để biến driver của mình thành driver cỡ Gecko đời đầu thì mình cần làm những gì nữa? Nếu để dùng trong công nghiệp thì phải như thế nào?

Em có gài gì bác đâu? Vụ này em cũng chỉ mới ngâm đây thôi, có cái là em chưa phọt hết những gì em đã biết vì thiếu tự tin. Em mà cái gì em chưa trải nghiệm thì không dám chém. Phần khác vì trên này cao thủ về vxl nhiều như nấm. Dân maketing như bác NS mà trùm vậy rồi thì mấy bác chuyên về vxl sẽ trùm cở nào. Lên chém bậy bạ bị cười cho hehe.

Nhờ cụ NS góp ý nên em mới mạnh dạn phọt thêm tí chút.

nhatson
24-12-2014, 06:15:27 PM
Em có gài gì bác đâu? Vụ này em cũng chỉ mới ngâm đây thôi, có cái là em chưa phọt hết những gì em đã biết vì thiếu tự tin. Em mà cái gì em chưa trải nghiệm thì không dám chém. Phần khác vì trên này cao thủ về vxl nhiều như nấm. Dân maketing như bác NS mà trùm vậy rồi thì mấy bác chuyên về vxl sẽ trùm cở nào. Lên chém bậy bạ bị cười cho hehe.

Nhờ cụ NS góp ý nên em mới mạnh dạn phọt thêm tí chút.

em tám vì ủng hộ pan AMRM cortex / C2000 hơn, vì nó sẽ có giá trị sử dụng cao hơn
còn với 8bit , vẫn có thể làm tốt, có điều cần thêm harware để chạy tốt

cụ sắm board arm, em tặng cụ board 2 cầu h, trước em làm cho step nhưng đổi mẫu còn dư bo trắng :)

b.r

Gamo
24-12-2014, 08:00:27 PM
Hoho, cha CKD sướng nhé. Coi như là có bộ ARM & h-bridge miễn phí.

Đùa thôi, em cũng ủng hộ việc pác mà rảnh thì chuyển sang ARM đi, xài Arduino mất mặt anh em quá :D

CKD
24-12-2014, 10:24:05 PM
Hehe. CKD cám ơn sự quan tâm của mấy bác.
Hôm nay nô ên mà cũng có mấy bác online, đúng là mọt máy tính :o

Hôm nào ở sg e sẽ liên hệ máy bác để nhận quà.

Gamo
24-12-2014, 10:47:49 PM
Hehe, mới đi Noel với girl về hả :D? Leo lên đây tám vì phải ở nhà chơi Noel với girl, nhưng mà là con :D

nhatson
29-12-2014, 07:21:46 AM
http://support.motioneng.com/Downloads-Notes/Tuning/default.htm
PID vs PIV
servo turning

CKD
29-12-2014, 04:04:49 PM
Báo cáo:
- Một chu kỳ lệnh đếm encoder mất 6us
- Một chu kỳ lệnh tính PID mất 90us.

Về lý thuyết khi dùng ngắt (interrupt)
Nếu encoder là 1000ppr thì vận tốc maximum mà vlx đếm không sai (bỏ khã năng nhiểu) là <10000rpm. Nên việc đếm encoder là không phải lo :D.
Tuy nhiên.. cuộc chơi không chỉ có vậy, ngoài việc đếm encoder thì còn phải tính PID... An toàn nhất là thời gian giữa 2 lần đếm encoder phải bao gồm luôn thời gian tính PID. Khi đó tổng thời gian cần là 96us. Vẫn với encoder 1000ppr thì vận tốc max đạt được là <625rpm.

* 1000ppr -- < 625 rpm
* 500ppr -- < 1250 rpm
* 250ppr -- < 2500 rpm

Nhìn vào thấy quá chậm :D. Tại sao chậm.. từ đầu bác Nhất Sơn & Gamo đã chỉ rỏ.
- Tốc độ của vxl chậm, mà phần lớn các phép toán dều tính trên fload (4byte) nên mất nhiều thời gian xử lý và tính toán.
- Arduino dùng atmega328, không tích hợp module đếm encoder nên mất thêm thời gian xử lý đếm encoder.
- Dùng ngắt (interrupt) nên thời gian đếm encoder được ưu tiên, do đó càng mất nhiều thời gian khi vận tốc motor lớn. Theo tính toán ở trên thì với encoder 1000ppr, nếu motor chạy >625rpm thì vxl sẽ chỉ tập trung vào xử lý đếm encoder, lơ là việc tính PID, vận tốc tiếp tục tăng nhanh sẽ bỏ qua luôn việc tính PID.

Chuyển qua đọc encoder bằng counter thì tốc độ & độ kiểm soát có thể được cải thiện :D.. lại cần time, nên cứ từ từ :confused:.

Em tối ưu được mô hình điều khiển chạy trên chip rùa.. mà Ok thì.. nâng lên ARM thì chắc phải chạy xé gió bác Gamo nhỉ :D

Bác Nhất Sơn có thể góp ý giúp.. vụ đo dòng trên motor (hoặc trên cuộn dây) với ạ. Nếu dùng chính vxl và kênh AD có sẵn thì có thể đo được ko?

nhatson
29-12-2014, 07:41:45 PM
Báo cáo:
- Một chu kỳ lệnh đếm encoder mất 6us
- Một chu kỳ lệnh tính PID mất 90us.

Về lý thuyết khi dùng ngắt (interrupt)
Nếu encoder là 1000ppr thì vận tốc maximum mà vlx đếm không sai (bỏ khã năng nhiểu) là <10000rpm. Nên việc đếm encoder là không phải lo :D.
Tuy nhiên.. cuộc chơi không chỉ có vậy, ngoài việc đếm encoder thì còn phải tính PID... An toàn nhất là thời gian giữa 2 lần đếm encoder phải bao gồm luôn thời gian tính PID. Khi đó tổng thời gian cần là 96us. Vẫn với encoder 1000ppr thì vận tốc max đạt được là <625rpm.

* 1000ppr -- < 625 rpm
* 500ppr -- < 1250 rpm
* 250ppr -- < 2500 rpm

Nhìn vào thấy quá chậm :D. Tại sao chậm.. từ đầu bác Nhất Sơn & Gamo đã chỉ rỏ.
- Tốc độ của vxl chậm, mà phần lớn các phép toán dều tính trên fload (4byte) nên mất nhiều thời gian xử lý và tính toán.
- Arduino dùng atmega328, không tích hợp module đếm encoder nên mất thêm thời gian xử lý đếm encoder.
- Dùng ngắt (interrupt) nên thời gian đếm encoder được ưu tiên, do đó càng mất nhiều thời gian khi vận tốc motor lớn. Theo tính toán ở trên thì với encoder 1000ppr, nếu motor chạy >625rpm thì vxl sẽ chỉ tập trung vào xử lý đếm encoder, lơ là việc tính PID, vận tốc tiếp tục tăng nhanh sẽ bỏ qua luôn việc tính PID.

Chuyển qua đọc encoder bằng counter thì tốc độ & độ kiểm soát có thể được cải thiện :D.. lại cần time, nên cứ từ từ :confused:.

Em tối ưu được mô hình điều khiển chạy trên chip rùa.. mà Ok thì.. nâng lên ARM thì chắc phải chạy xé gió bác Gamo nhỉ :D

Bác Nhất Sơn có thể góp ý giúp.. vụ đo dòng trên motor (hoặc trên cuộn dây) với ạ. Nếu dùng chính vxl và kênh AD có sẵn thì có thể đo được ko?

encoder 1 là dùng thêm cpld hoặc ic chuyên dụng để đếm, tốc độ cụ CKD tính ra hay là dùng OSC kiểm tra, kinh nghiệm thấy là count lệnh lúc nào cũng nhanh hơn so với đo thực tế
và có cho là thực tế đi chăng nữa thì cũng sẽ lấy giá trị 1/2 thôi ah

còn adc em nhớ là của mega cở 100k , em là ko đủ nhanh
bảo vệ quá dòng em nghĩ cụ có thể dùng opam/comparator để bảo vệ

b.r

nhatson
29-12-2014, 09:17:35 PM
ah, mà sao cụ CKD cứ phải aduino thế ah?
motor thì gấu nhất là C2000 của TI, sau đó là ARM cortex, mấy chú của freesacle/renesas cũng gấu nhưng kong thông dụng cho qua

Gamo
29-12-2014, 09:35:42 PM
Hoho, mấy bác tính kinh quá em ko theo kịp.

Em chỉ có kinh nghiệm là xài bộ đếm encoder của ARM thì giống Fire And Forget, rất khoẻ. Còn dùng ARM nó sướng là mình chỉ lo logic thôi, ko phải lo mấy chuyện lặt vặt là tràn số, dùng byte hay int hay long long cho nó hiệu quả, dùng mảng không được quá 2kb (con STC 8051 cũ của em memory của nó chỉ có 2048 bytes thôi). :))

Với lại ở góc độ cao cấp hơn thì có trò khác nữa:
- Qua một số tài liệu em đọc thì pp PIV cũ, người ta tính sẵn motion profile trước. Khi chạy thì chỉ bám theo motion profile đã tạo thôi. Nhưng mà như vậy thì ko linh hoạt vì trong quá trình chạy chưa chắc motor chạy đúng các profile đã định. Do đó, một trong các xu hướng bây giờ là tính on the fly, tức là căn cứ vào tình hình motor hiện tại mà người ta điều chỉnh vận tốc & acceleration ngay tức thì cho phù hợp để khi motor tới đích là dừng luôn, giảm vụ lắc lư qua lại.
- Ý tưởng thì quá đơn giản, lúc đầu mới làm em cũng tính rứa. Làm xong em mới hiểu là đơn giản vậy mà các driver đời cũ ko làm chuyện đó :)) Nguyên nhân đơn giản là nó tính không kịp. Đặc biệt là nếu bác chơi S-Curve nữa thì mấy con MCU đời cũ chắc khóc :))


https://www.youtube.com/watch?v=C0XjXqO6Ji8

Hix, mà btw, các bác có biết chỗ nào bán cái chuôi cho spindle Chị Na & loại giắc 4 chấu âm tường ko? Em ra Nhật Tảo thì chỉ có loại giắc 3 chấu âm tường, còn chuôi spindle ở Nhật Tảo thì vừa nhưng hơi nhỏ nên lòi ra hơi mất thẩm mỹ.

Gamo
29-12-2014, 10:23:15 PM
Mà anh em mình tán dóc mấy bữa nay, chưa ai dám dùng thật sự. Hay là bác CKD làm 1 bộ CNC mini test thử driver đi :))

CKD
29-12-2014, 11:06:30 PM
@nhatson
Thật tình với bác.. là em muốn làm để sau còn tổng hợp lại, làm vài bài phổ cập vxl cho nó vui. Chính thế mà em chọn Arduino để với người tập tọe thì dễ dùng hơn. Mấy cái ARM nghĩ là tiếp cận không khó, có thể nói vài cái nó còn dễ dùng hơn vì có một số phần cứng đã tích hợp sẵn mà những con già cỗi không có.

Để làm được vụ DC servo kiểu này thì phải biết mấy thứ cơ bản như:
- Khai báo & sử dụng các chức năng In/Out.
- Khai báo & sử dụng các chức năng Analog (in ADC, out PWM).
- Khai báo & sử dụng UART để dùng PC config các param.
- Khai báo & sử dụng timer.
- Tính toán PID cũng là bài tập hay vì nó thể hiện được giải pháp tính tích phân & vi phân gần đúng dạng hàm rời rạc.
- Bla bla..

Về mặt giải thuật thì em nghĩ.. với chíp còi thì phần giải thuật cần phải tinh gọn & chặc chẻ hiệu quả hơn.. nên nếu nói mang tính học thuật thì nghĩ mấy con atmega già vẫn đáp ứng được.

Tùm lum tà la.. nên thôi cứ atmega có sẵn mà chơi. Nếu lên ARM thì cũng lên Arduino DUE (nó cũng chơi nhân cortex m3 rồi). Vì vài lý do, cái board nó làm có sẵn UART, lập trình trên Arduino IDE cũng tạm tạm, buồn tình dùng mấy trình biên tập & biên dịch khác như AVRStudio mà em biết dùng :o. Board nó làm theo tiêu chuẩn, nên muốn quậy cái nào thì mua cái shield cắm vào (đã mua một mớ quá trời shield). Mấy cái lý do lý trấu này là vì trình làm PCB cực lởm.. nên tự làm mạch prototype cảm thấy không khả thi. Mà prototype thì nếu có board mẫu sẵn đi mua cho lành :D.

CKD
29-12-2014, 11:23:02 PM
@Gamo
Em kiểm soát tốc độ bằng điện áp & dòng thì motor sẽ giảm moment khi có tải. Nhưng khi đó thì test đã đời thấy Ok, thời gian đáp ứng, dừng đúng vị trí, overshoot thì chỉ quan sát bằng mắt.. chưa đo đạt nên khong dám phán.

Em đã xử luôn cái mô hình PID kiểm soát cả position & speed để tránh trường hợp motor quá tốc độ dẫn tới chíp bị đơ (do chỉ tranh thủ tính vị trí) ;). Nhưng nó chưa chạy một cách trơn tru. Nếu cách này turning Ok thì moto vẫn khỏe khi chạy chậm, không quá tốc độ định mức khi chạy nhanh.

Tạm thời cái này mà chơi với motor DC nhiều cực, tốc độ thấp, moment lớn.. thì chắc cũng ổn tí xíu. Lắp vào CNC test cho mọi người xem chơi thì chắc.. còn lâu mới đủ tự tin hehe.

@NhatSon
Quên mất. Cái thời gian đó được tính bằng 2 cách.
1. Dùng hàm thời gian để đo thời gian của 1, 10, 100 chu kỳ tính toán của hàm rồi tính lại thời gian trung bình của 1 lần tính toán.
2. Lồng ghép vào việc tính toán, xuất tín hiện ra ngoài rồi đo tần số (frequency metter) từ đó tính ra thời gian làm việc thực tế của hàm.
Sau đó mới so sánh rồi chọn lại thông số :D.
Cái tính toán phía trên chỉ thuần là lý thuyết, khi thực hiện phải có hệ số an toàn nữa à :D.

Mọi phép đo đều có được từ UART, VOM có chức năng đo tần số, do bằng cái OSC cùi của Jyetech. Ở mức độ thực nghiệm cho vui thì nghĩ độ chính xác có thể chấp nhận được.

Gamo
30-12-2014, 07:37:15 AM
Ôi ôi, bác cứ chuyển qua ARM đi, ai bắt bác đi làm board bao vờ :)) Đương nhiên bác thích thì em tặng bác 10 chục con bằng đầu đũa, em đang để ở nhà tự kỷ vì ko biết làm sao mà hàn :))

Bữa nào em qua bác chỉ em mấy vụ sắt thép tí, với tặng bác board ARM có sẵn USB, USART, on the fly debugging, IDE thì siêu dễ chỉ cần tick tick tick, có hàng mẫu sẵn hết, ADC siêu nhanh (<1us, con Arduino của bác & con 8051 của em khoảng 100us/sample). Bác tặng lại em con CNC khủng của bác là được :cool:

CKD
15-06-2015, 10:35:59 PM
Làm cái clip cho nó nóng lại chủ đề :)
-- Pulse generator: Mach3
-- BOB: Bitsensor.com BOB Mach3 USB
-- Driver: Arduino DC PID closed loop controller
-- DC motor PITTMAN 24V 500cpr, running at 12V DC.


https://www.youtube.com/watch?v=r1Nx9pZ-_RM

nhatson
04-09-2015, 07:31:50 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 :D

Mà arduino nó cũng đã phát triển các board dùng 32bit rồi. Như
- Arduino Due (http://arduino.cc/en/pmwiki.php?n=Main/ArduinoBoardDue) với atSAM3x8E ARM Cortex-M3, 32bit, 84MHz.
5389
- LeafLabs Maple Rev3 (http://www.cutedigi.com/arduino/the-maple-stm32-arm-cortex-version-of-arduino.html) với STM32F103RB ARM Cortex-M3, 32bit, 72MHz.
5390
- http://en.wikipedia.org/wiki/List_of_Arduino_boards_and_compatible_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 :o. 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ứ ạ :p :rolleyes:

cái bo màu đỏ ờ sì gòn có bán ko anh CKD ơi

Gamo
04-09-2015, 07:42:51 PM
Xanh xanh đỏ đỏ, đẹp chai dễ sợ :x :x :x

CKD
04-09-2015, 08:02:08 PM
Board đỏ không có :)