1. Chú ý: Các bạn nên tham khảo Nội quy trước khi viết bài (click vào liên kết bên dưới).
    * Nội quy và Thông báo diễn đàn CNCProVN.com
    * Nếu bạn thấy hứng thú với bài viết. Hãy dùng chức năng Share to facebook để chia sẻ bài viết lên facebook.

          
Trang 3 của 4 Đầu tiênĐầu tiên 1234 CuốiCuối
Kết quả 41 đến 60 của 68

Chủ đề: CKD - Arduino DC motor PID position controller DEMO Ver

  1. #41
    Thợ bậc 6 CKD's Avatar
    Ngày tham gia
    Nov 2013
    Bài viết
    6,680
    Cám ơn
    1,733
    Được cám ơn 5,322 lần
           ở 2,595 bài viết
    Mấy con của gecko dùng analog & logic thôi mà nghe mấy anh tây khen quá thể. Không biết có phải tuyệt chiêu PR không.
    Do mấy con step driver đời cũ vẫn dùng analog & logic mà chạy cũng ngon, có thêm cái VR chỉnh cho motor chạy êm (nghi là chỉnh decay) thì dùng rồi có cảm nhận, còn mấy con dc servo này thì chưa nên không dám chém .
    DT: O7837277II - CKD's Youtube Channel - Facebook - Tổng hợp chủ đề
    17 ds 3, Thạnh Mỹ Lợi, Q2, tp.HCM

  2. #42
    Thợ cả
    Ngày tham gia
    Nov 2013
    Bài viết
    5,915
    Cám ơn
    2,195
    Được cám ơn 3,264 lần
           ở 2,039 bài viết
    Trích dẫn Gửi bởi CKD Xem bài viết
    Mấy con của gecko dùng analog & logic thôi mà nghe mấy anh tây khen quá thể. Không biết có phải tuyệt chiêu PR không.
    Do mấy con step driver đời cũ vẫn dùng analog & logic mà chạy cũng ngon, có thêm cái VR chỉnh cho motor chạy êm (nghi là chỉnh decay) thì dùng rồi có cảm nhận, còn mấy con dc servo này thì chưa nên không dám chém .
    geckodrive dùng fast decay khi chạy, và slowdecay khi motor dừng đề giảm heating, nên ko có chỉnh decay
    smooth trim của geckodrive là chỉnh wavefrom ah

    dc servo geckodrive từ những năm 2000, là tiên phong servo giá rẻ ah, so với mấy loại digital đời mới phục vụ hobby cnc thì ko bằng nữa rồi ah
    nhưng dù sao thì geckodrive servo được cái là dễ sủ dụng

    b.r
    Lần sửa cuối bởi nhatson, ngày 23-12-2014 lúc 05:25:55 PM.

  3. #43
    Thợ bậc 6 CKD's Avatar
    Ngày tham gia
    Nov 2013
    Bài viết
    6,680
    Cám ơn
    1,733
    Được cám ơn 5,322 lần
           ở 2,595 bài viết
    Tình hình là lâu nay quên báo cáo chi tiết.

    Thuật toán PID được dùng trong dự án này hiện tại là thuật toán PID cơ bản.
    Click vào ảnh để xem ảnh lớn hơn. 

Name:	pidcontrol.jpg 
Views:	171 
Size:	14.6 KB 
ID:	5404

    Ứng dụng được tạo trên nền Arduino UNO
    - core điều khiển atmega328, 32K, 8bit, 16MHz.
    - công suất dùng L298.
    - điện áp làm việc (trong clip trên) 12V.
    - encoder 1000 xung.
    - đọc encoder bằng ngắt ngoài.
    - thuật toán PID cơ bản (dùng thư viện của Arduino), thời gian giữa 2 lần tính PID là 20 mili giây.
    - Điều khiển công suất bằng PWM, tần số 1kHz.

    Kết luận tạm thời.
    - PWM tần số thấp nên hiệu quả điều khiển chưa cao.
    - thời gian giữa 2 lần tính PID còn lớn nên thời gian đáp ứng chưa nhanh.
    - do đọc encoder bằng ngắt ngoài.. nên VXL mất nhiều thời gian xử lý, khi chạy tốc độ cao thì không còn thời gian để tính PID -> out . Trường hợp này dùng encoder độ phân giải thấp thì phù hợp với nghiên cứu hơn.

    Việc thực hiện dự án trên nền Arduino UNO vì:
    - Mục tiêu tập trung tìm hiểu PID, có nhiều ứng dụng như điều khiển tốc độ, nhiệt độ v.v... trong đó DC servo là gần gủi với CNC nên được chọn.
    - Board arduno UNO đang có sẵn và hơn hết là tiện dụng vì không cần thiết bị nạp (dù đã có PICKIT & STK500 và vài mạch nạp khác). Arduino cũng có board dùng ARM tốc độ cao nhưng chi phí còn cao .
    - Arduino Shield cũng có sẵn... không mất nhiều thời gian thiết kế và làm mạch.


    Các thông tin cụ thể hơn về chương trình (code), các mạch giao tiếp bla bla sẽ được đề cập trong chủ đề khác, đầy đủ, chi tiết hơn khi có time.
    DT: O7837277II - CKD's Youtube Channel - Facebook - Tổng hợp chủ đề
    17 ds 3, Thạnh Mỹ Lợi, Q2, tp.HCM

  4. Thành viên đã cám ơn CKD cho bài viết hữu ích này:


  5. #44
    Spam killer Gamo's Avatar
    Ngày tham gia
    Apr 2014
    Bài viết
    7,149
    Cám ơn
    3,898
    Được cám ơn 1,518 lần
           ở 1,162 bài viết
    Ủa, em nghĩ Arduino phải có built-in pwm chứ bác? 1khz => 90% là cha dùng pwm tự viết rồi đúng hem?

    Theo kinh nghiệm của các bác thì pwm thường nên trong khoảng bao nhiêu? Pwm tren 60khz có tốt ko?
    Lần sửa cuối bởi Gamo, ngày 24-12-2014 lúc 05:20:36 AM.

  6. #45
    Thợ cả
    Ngày tham gia
    Nov 2013
    Bài viết
    5,915
    Cám ơn
    2,195
    Được cám ơn 3,264 lần
           ở 2,039 bài viết
    Trích dẫn Gửi bởi Gamo Xem bài viết
    Ủa, em nghĩ Arduino phải có built-in pwm chứ bác? 1khz => 90% là cha dùng pwm tự viết rồi đúng hem?

    Theo kinh nghiệm của các bác thì pwm thường nên trong khoảng bao nhiêu? Pwm tren 60khz có tốt ko?
    PWM tuỳ ứng dụng với motor 3000RPM <> 5000RPM
    em nghĩ mức 15khz <> 20khz là vửa cân bằng được hiệu năng / tổn hao ( như vậy độ phân giải sẽ đạt 10bit <> 12bit)
    PID loop 1khz > 2khz nếu có thể

  7. #46
    Thợ bậc 6 CKD's Avatar
    Ngày tham gia
    Nov 2013
    Bài viết
    6,680
    Cám ơn
    1,733
    Được cám ơn 5,322 lần
           ở 2,595 bài viết
    He he!
    Báo cáo.
    - PWM dùng timer bác ạ. 1kHz là mặc định.. bước đầu test để thử code nên không quan tâm nhiều vấn đề này. Maximum nó có thể là 31 hoặc 62kHz tùy vào dùng timer 8 hay 16bit ạ.
    - Tần só tính PID cũng điều chỉnh được

    Sẽ thay đổi PWM frequency & PID requency rồi làm lại clip cho các bác nhé

    Định là nghiên cứu và dùng luôn mô hình cascade PID để kiểm soát đồng thời position/speed hoặc position/speed/torque luôn. Nhưng chưa tìm được cách code sao cho nó hiệu quả và chiếm ít tài nguyên, ít đơn vị tính trên float để tăng tốc. Dây chính là nhược điểm của 8bit đúng không mấy bác . Nhưng mà mấy ông chú làm được.. mà mình không làm được là còn dở.. mà còn dở thì còn nghiên cứu & học , nếu thành công thì vui , nếu thất bại thì biết là ta còn nhiều hạn chế

    Cũng nói thêm về việc đọc encoder, tính vị trí, tính tốc độ.
    Trước khi tiến hành dã tìm hiểu qua các ứng dụng đọc encoder, cũng như các đánh giá về hiệu quả của các phương pháp. Thấy kết luận sơ bộ có thể tóm tắt thế này:
    - Đọc bằng ngắt gì đó trong timer.. nôm na là đo thời gian giữa 2 lần ngắt, cái này hiệu quả cho đo tốc độ nhiều hơn. Chưa rành timer nên không chơi môn này.
    - Đọc bằng ngắt ngoài và xử lý bằng code. Cách này được cho là đọc chính xác nhất, nhược điểm duy nhất là chiếm tài nguyên. Nếu đọc tần số lớn thì VXL nó nghỉ luôn, không thèm làm gì khác.
    - Đọc bằng counter. Ưu là nó chạy độc lập với core vxl, nên không chiếm thời gian xủ lý chương trình. Chương trình cứ định kỳ đọc giá trị đếm và xử lý tuần tự, chỉ cần tần số đọc giá trị đủ lớn (trước khi counter bị tràn giá trị) là được. Nhước điểm là nếu chỉ dừng ở đây thì chưa xác định được chiều quay, muốn thì phải làm thêm ít việc nữa . Nhưng cách này được đánh giá là không chính xác khi tốc độ chậm hoặc thay đổi lớn.

    Các ưu/nhược thế kia chưa ứng dụng hết nên không thể kết luận là trong mô hình position control thế này, cái nào cho ưu điểm hơn cái nào, nhất là cái cuối cùng.. có nhiều đánh giá là không chính xác.. nhưng cụ thể là thế nào thì chưa biết.
    Vì mục đích dơn giản hóa tối đa cho thí nghiệm nên chọn phương pháp đọc encoder bằng ngắt ngoài.
    - Ưu điểm.. đơn giản & chính xác nhất có thể. Xử lý và đếm encoder bằng code.
    - Nhược điểm.. không phù hợp với encoder nhiều xung, với vận tốc lớn (tần số lấy mẫu lớn).

    Trong mô hình nghiên cứu lý thuyết & thực nghiệm, CKD nghĩ là còn nhiều nhược điểm nhưng tạm có thể chấp nhận được. Mô hình hoàn hảo thì việc nâng cấp core xử lý là vô tư
    DT: O7837277II - CKD's Youtube Channel - Facebook - Tổng hợp chủ đề
    17 ds 3, Thạnh Mỹ Lợi, Q2, tp.HCM

  8. #47
    Thợ cả
    Ngày tham gia
    Nov 2013
    Bài viết
    5,915
    Cám ơn
    2,195
    Được cám ơn 3,264 lần
           ở 2,039 bài viết
    Trích dẫn Gửi bởi CKD Xem bài viết
    He he!
    Báo cáo.
    - PWM dùng timer bác ạ. 1kHz là mặc định.. bước đầu test để thử code nên không quan tâm nhiều vấn đề này. Maximum nó có thể là 31 hoặc 62kHz tùy vào dùng timer 8 hay 16bit ạ.
    - Tần só tính PID cũng điều chỉnh được

    Sẽ thay đổi PWM frequency & PID requency rồi làm lại clip cho các bác nhé

    Định là nghiên cứu và dùng luôn mô hình cascade PID để kiểm soát đồng thời position/speed hoặc position/speed/torque luôn. Nhưng chưa tìm được cách code sao cho nó hiệu quả và chiếm ít tài nguyên, ít đơn vị tính trên float để tăng tốc. Dây chính là nhược điểm của 8bit đúng không mấy bác . Nhưng mà mấy ông chú làm được.. mà mình không làm được là còn dở.. mà còn dở thì còn nghiên cứu & học , nếu thành công thì vui , nếu thất bại thì biết là ta còn nhiều hạn chế

    Cũng nói thêm về việc đọc encoder, tính vị trí, tính tốc độ.
    Trước khi tiến hành dã tìm hiểu qua các ứng dụng đọc encoder, cũng như các đánh giá về hiệu quả của các phương pháp. Thấy kết luận sơ bộ có thể tóm tắt thế này:
    - Đọc bằng ngắt gì đó trong timer.. nôm na là đo thời gian giữa 2 lần ngắt, cái này hiệu quả cho đo tốc độ nhiều hơn. Chưa rành timer nên không chơi môn này.
    - Đọc bằng ngắt ngoài và xử lý bằng code. Cách này được cho là đọc chính xác nhất, nhược điểm duy nhất là chiếm tài nguyên. Nếu đọc tần số lớn thì VXL nó nghỉ luôn, không thèm làm gì khác.
    - Đọc bằng counter. Ưu là nó chạy độc lập với core vxl, nên không chiếm thời gian xủ lý chương trình. Chương trình cứ định kỳ đọc giá trị đếm và xử lý tuần tự, chỉ cần tần số đọc giá trị đủ lớn (trước khi counter bị tràn giá trị) là được. Nhước điểm là nếu chỉ dừng ở đây thì chưa xác định được chiều quay, muốn thì phải làm thêm ít việc nữa . Nhưng cách này được đánh giá là không chính xác khi tốc độ chậm hoặc thay đổi lớn.

    Các ưu/nhược thế kia chưa ứng dụng hết nên không thể kết luận là trong mô hình position control thế này, cái nào cho ưu điểm hơn cái nào, nhất là cái cuối cùng.. có nhiều đánh giá là không chính xác.. nhưng cụ thể là thế nào thì chưa biết.
    Vì mục đích dơn giản hóa tối đa cho thí nghiệm nên chọn phương pháp đọc encoder bằng ngắt ngoài.
    - Ưu điểm.. đơn giản & chính xác nhất có thể. Xử lý và đếm encoder bằng code.
    - Nhược điểm.. không phù hợp với encoder nhiều xung, với vận tốc lớn (tần số lấy mẫu lớn).

    Trong mô hình nghiên cứu lý thuyết & thực nghiệm, CKD nghĩ là còn nhiều nhược điểm nhưng tạm có thể chấp nhận được. Mô hình hoàn hảo thì việc nâng cấp core xử lý là vô tư
    về việc dùng timer, để tạo ngắt ~ tạo ra 1 ngắt theo thời gian, quét trạng thái encoder a/b theo 1 chu kỳ thời gian, giống như việc quét bàn phím ah
    timer ngắt này sẽ là main time cho việc phân bổ tính toán PID/truyền serial, cập nhật pwm, đọc counter vv


    theo pp của cụ CKD, cụ định làm thế nào tạo 1khz tính toán PID ?

  9. #48
    Thợ bậc 6 CKD's Avatar
    Ngày tham gia
    Nov 2013
    Bài viết
    6,680
    Cám ơn
    1,733
    Được cám ơn 5,322 lần
           ở 2,595 bài viết
    - PWM 1kHz là mặc định của timer với hệ số chia là 64 (theo lý thuyết là 976.56Hz). Nếu hệ số chia là 1 thì nâng tối đa được 62,500Hz.
    - Việc chi kỳ tính PID minimum là 20ms thì dùng hàm thời gian trong vòng lặp để bỏ không tính nếu thời gian đo được từ lần trước <20ms. Nếu > 20ms thì tính PID một lần. Ở đây minimum là 20ms là mình chọn đại, và gọi là minimum vì nếu encoder đọc với tần số quá cao thì vxl không còn thời gian để mà tính PID nữa. Chíp rùa mà đọc bằng ngắt thì dính cái khoảng này.

    Theo ý của bác NS thì khi đó.. với chu kỳ quét đủ lớn thì ta có thể giải quyết mọi chuyện mà không phải bị gián đoạn bởi ngắt. Nhưng với chip chậm.. thì giải pháp này cần đươc cân đo kỹ hơn. Nhất là thời gian tối đa mà một chu kỳ tính PID cần (với cao thủ Assembly thì chắc nhìn code PID là đã tính được khi thực hiện bài toán mất bao nhiêu chu kỳ máy rồi). Từ đó tính được tần số lấy mẫu, tính được giới hạn số xung encoder cũng như tốc độ tối đa mà motor chạy không bị lỗi.

    Nâng chu kỳ tính toán PID lên 1-2kHz thì chưa biết là con atmega328 với trình code cùi bắp của mình thì có lên đến mức đó được không? Để có time sẽ test thử xem một chu kỳ tính PID mất bao nhiêu thời gian thực. Chỉ tính PID, xuất xung mẫu ra ngoài rồi đo bằng frequency metter chắc là tạm tin được đúng thời gian thực

    Với trình còi thì mới biết và làm được nhiêu đó. Mấy cái cao siêu hơn để có thể tối ưu hóa tới mức chu kỳ xung nhịp của vxl thì hiện botay.com. Chắc sẽ tìm hiểu nhiều hơn cái timer trong vxl ở các bài tập khác. Nhược điểm chậm và giới hạn số xung cũng như tần số đọc encoder tạm chấp nhận trong thí nghiệm này. Dù đó là bước đi lùi công nghệ . Gần tết nên time có cũng cạn, khi có time thì tranh thủ nghiên cứu lý thuyết & code sơ sơ. Sau này nếu còn hứng thì chuyển lên ARM, đọc encoder bằng chip riêng v.v.... cho bằng với cụ Gamo.
    DT: O7837277II - CKD's Youtube Channel - Facebook - Tổng hợp chủ đề
    17 ds 3, Thạnh Mỹ Lợi, Q2, tp.HCM

  10. #49
    Spam killer Gamo's Avatar
    Ngày tham gia
    Apr 2014
    Bài viết
    7,149
    Cám ơn
    3,898
    Được cám ơn 1,518 lần
           ở 1,162 bài viết
    Chậc chậc... bị cha CKD gài, cứ tuỏng chả ngố nên nhào vào ném đá

    Ủ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?
    Lần sửa cuối bởi Gamo, ngày 24-12-2014 lúc 05:04:59 PM.

  11. #50
    Thợ cả
    Ngày tham gia
    Nov 2013
    Bài viết
    5,915
    Cám ơn
    2,195
    Được cám ơn 3,264 lần
           ở 2,039 bài viết
    Trích dẫn Gửi bởi CKD Xem bài viết
    - PWM 1kHz là mặc định của timer với hệ số chia là 64 (theo lý thuyết là 976.56Hz). Nếu hệ số chia là 1 thì nâng tối đa được 62,500Hz.
    - Việc chi kỳ tính PID minimum là 20ms thì dùng hàm thời gian trong vòng lặp để bỏ không tính nếu thời gian đo được từ lần trước <20ms. Nếu > 20ms thì tính PID một lần. Ở đây minimum là 20ms là mình chọn đại, và gọi là minimum vì nếu encoder đọc với tần số quá cao thì vxl không còn thời gian để mà tính PID nữa. Chíp rùa mà đọc bằng ngắt thì dính cái khoảng này.

    Theo ý của bác NS thì khi đó.. với chu kỳ quét đủ lớn thì ta có thể giải quyết mọi chuyện mà không phải bị gián đoạn bởi ngắt. Nhưng với chip chậm.. thì giải pháp này cần đươc cân đo kỹ hơn. Nhất là thời gian tối đa mà một chu kỳ tính PID cần (với cao thủ Assembly thì chắc nhìn code PID là đã tính được khi thực hiện bài toán mất bao nhiêu chu kỳ máy rồi). Từ đó tính được tần số lấy mẫu, tính được giới hạn số xung encoder cũng như tốc độ tối đa mà motor chạy không bị lỗi.

    Nâng chu kỳ tính toán PID lên 1-2kHz thì chưa biết là con atmega328 với trình code cùi bắp của mình thì có lên đến mức đó được không? Để có time sẽ test thử xem một chu kỳ tính PID mất bao nhiêu thời gian thực. Chỉ tính PID, xuất xung mẫu ra ngoài rồi đo bằng frequency metter chắc là tạm tin được đúng thời gian thực

    Với trình còi thì mới biết và làm được nhiêu đó. Mấy cái cao siêu hơn để có thể tối ưu hóa tới mức chu kỳ xung nhịp của vxl thì hiện botay.com. Chắc sẽ tìm hiểu nhiều hơn cái timer trong vxl ở các bài tập khác. Nhược điểm chậm và giới hạn số xung cũng như tần số đọc encoder tạm chấp nhận trong thí nghiệm này. Dù đó là bước đi lùi công nghệ . Gần tết nên time có cũng cạn, khi có time thì tranh thủ nghiên cứu lý thuyết & code sơ sơ. Sau này nếu còn hứng thì chuyển lên ARM, đọc encoder bằng chip riêng v.v.... cho bằng với cụ Gamo.
    cu CKD cứ thử, co 1 con digital OSC để test xem 1 vòng lệnh mất bao nhiêu uS thì hay

  12. #51
    Thợ bậc 6 CKD's Avatar
    Ngày tham gia
    Nov 2013
    Bài viết
    6,680
    Cám ơn
    1,733
    Được cám ơn 5,322 lần
           ở 2,595 bài viết
    Trích dẫn Gửi bởi Gamo Xem bài viết
    Chậc chậc... bị cha CKD gài, cứ tuỏng chả ngố nên nhào vào ném đá

    Ủ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.
    DT: O7837277II - CKD's Youtube Channel - Facebook - Tổng hợp chủ đề
    17 ds 3, Thạnh Mỹ Lợi, Q2, tp.HCM

  13. #52
    Thợ cả
    Ngày tham gia
    Nov 2013
    Bài viết
    5,915
    Cám ơn
    2,195
    Được cám ơn 3,264 lần
           ở 2,039 bài viết
    Trích dẫn Gửi bởi CKD Xem bài viết
    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
    Lần sửa cuối bởi nhatson, ngày 24-12-2014 lúc 06:28:33 PM.

  14. #53
    Spam killer Gamo's Avatar
    Ngày tham gia
    Apr 2014
    Bài viết
    7,149
    Cám ơn
    3,898
    Được cám ơn 1,518 lần
           ở 1,162 bài viết
    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á

  15. #54
    Thợ bậc 6 CKD's Avatar
    Ngày tham gia
    Nov 2013
    Bài viết
    6,680
    Cám ơn
    1,733
    Được cám ơn 5,322 lần
           ở 2,595 bài viết
    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

    Hôm nào ở sg e sẽ liên hệ máy bác để nhận quà.
    DT: O7837277II - CKD's Youtube Channel - Facebook - Tổng hợp chủ đề
    17 ds 3, Thạnh Mỹ Lợi, Q2, tp.HCM

  16. #55
    Spam killer Gamo's Avatar
    Ngày tham gia
    Apr 2014
    Bài viết
    7,149
    Cám ơn
    3,898
    Được cám ơn 1,518 lần
           ở 1,162 bài viết
    Hehe, mới đi Noel với girl về hả ? Leo lên đây tám vì phải ở nhà chơi Noel với girl, nhưng mà là con
    Lần sửa cuối bởi Gamo, ngày 24-12-2014 lúc 10:52:26 PM.

  17. #56
    Thợ cả
    Ngày tham gia
    Nov 2013
    Bài viết
    5,915
    Cám ơn
    2,195
    Được cám ơn 3,264 lần
           ở 2,039 bài viết
    Lần sửa cuối bởi nhatson, ngày 29-12-2014 lúc 07:22:04 AM.

  18. Có 2 thành viên đã cám ơn nhatson cho bài viết hữu ích này:


  19. #57
    Thợ bậc 6 CKD's Avatar
    Ngày tham gia
    Nov 2013
    Bài viết
    6,680
    Cám ơn
    1,733
    Được cám ơn 5,322 lần
           ở 2,595 bài viết
    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 .
    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 . 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 .. lại cần time, nên cứ từ từ .

    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ỉ

    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?
    DT: O7837277II - CKD's Youtube Channel - Facebook - Tổng hợp chủ đề
    17 ds 3, Thạnh Mỹ Lợi, Q2, tp.HCM

  20. #58
    Thợ cả
    Ngày tham gia
    Nov 2013
    Bài viết
    5,915
    Cám ơn
    2,195
    Được cám ơn 3,264 lần
           ở 2,039 bài viết
    Trích dẫn Gửi bởi CKD Xem bài viết
    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 .
    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 . 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 .. lại cần time, nên cứ từ từ .

    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ỉ

    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
    Lần sửa cuối bởi nhatson, ngày 29-12-2014 lúc 07:45:46 PM.

  21. #59
    Thợ cả
    Ngày tham gia
    Nov 2013
    Bài viết
    5,915
    Cám ơn
    2,195
    Được cám ơn 3,264 lần
           ở 2,039 bài viết
    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

  22. #60
    Spam killer Gamo's Avatar
    Ngày tham gia
    Apr 2014
    Bài viết
    7,149
    Cám ơn
    3,898
    Được cám ơn 1,518 lần
           ở 1,162 bài viết
    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 )



    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ỹ.
    Lần sửa cuối bởi Gamo, ngày 29-12-2014 lúc 10:05:05 PM.

Trang 3 của 4 Đầu tiênĐầu tiên 1234 CuốiCuối

Các Chủ đề tương tự

  1. DIY - Arduino LCD shield
    Bởi CKD trong diễn đàn Arduino
    Trả lời: 11
    Bài viết cuối: 28-04-2016, 04:55:31 PM
  2. Demo Step Driver DRV8711 [ Hunter_dt]
    Bởi hunter_dt trong diễn đàn Driver Step motor
    Trả lời: 24
    Bài viết cuối: 29-06-2014, 02:34:58 PM
  3. Controller 4 trục
    Bởi hadenki trong diễn đàn Break Out Board, Controller
    Trả lời: 5
    Bài viết cuối: 31-12-2013, 10:22:18 PM
  4. Step motor Controller/Driver
    Bởi hadenki trong diễn đàn Driver Step motor
    Trả lời: 0
    Bài viết cuối: 27-12-2013, 11:11:25 AM

Tag của Chủ đề này

Quyền viết bài

  • Bạn Không thể gửi Chủ đề mới
  • Bạn Không thể Gửi trả lời
  • Bạn Không thể Gửi file đính kèm
  • Bạn Không thể Sửa bài viết của mình
  •