PDA

View Full Version : Mobile robot


manhha2799
27-07-2008, 04:36 PM
Em đang làm về mobile robot,
- Khi cho 1 giá trị vận tốc --> tính được số vòng quay/phút --> tính được số xung cần phát trên encoder. nhưng em không tính được giá trị pwm để cấp vào động cơ ?
- Khi cho một giá trị độ rộng xung --> em tính được vận tốc nhờ vào giá trị encoder phản hồi về. Nhưng ngược lại từ vận tốc cho trước làm sao tính được giá trị độ rộng xung PWM để cấp cho động cơ chạy, các bác giúp em.

lion
27-07-2008, 09:56 PM
Em đang làm về mobile robot,
- Khi cho 1 giá trị vận tốc --> tính được số vòng quay/phút --> tính được số xung cần phát trên encoder. nhưng em không tính được giá trị pwm để cấp vào động cơ ?
- Khi cho một giá trị độ rộng xung --> em tính được vận tốc nhờ vào giá trị encoder phản hồi về. Nhưng ngược lại từ vận tốc cho trước làm sao tính được giá trị độ rộng xung PWM để cấp cho động cơ chạy, các bác giúp em.
bạn tham khảo cách này xem nhé :

Cách 1 :

giả sử có PWM = 100(xung/s) --> tính được V= 5(m/s) --> tỉ lệ Vận tốc/Xung = 5%

như vậy ta sẽ dựa vào số % mà tinh' các thông số còn lại khi biết được 1 thông số.

bây giời giả sử có vận tốc V = 20(m/s) --> PWM = 400(xung/s)

Cách 2 :

giả sử có PWM = 100(xung/s) --> tính được V= 5(m/s)

có PWM = X (xung/s) biết V= 20(m/s)

X = (100x20)/5
= 400

manhha2799
27-07-2008, 10:42 PM
Cám ơn, nhưng cho mình hỏi PWM=100(xung/s) là sao?.
- Mình lập trình Ccs c cấp giá trị xung PWM có giá trị từ 0-->255 (phần trăm duty)
- Mình muốn hỏi giả sử vận tốc là 2m/s thì cần cấp PWM có giá trị là bao nhiêu ( trong khoảng từ 0-->255)

lion
27-07-2008, 11:45 PM
Cám ơn, nhưng cho mình hỏi PWM=100(xung/s) là sao?.
- Mình lập trình Ccs c cấp giá trị xung PWM có giá trị từ 0-->255 (phần trăm duty)
- Mình muốn hỏi giả sử vận tốc là 2m/s thì cần cấp PWM có giá trị là bao nhiêu ( trong khoảng từ 0-->255)
1 chu kỳ có 1 duty + 1 khoảng trống , như vậy 100xung <=> 100 chu kỳ , nôm na là như thế

cách tính trên chỉ là gợi ý (sườn) cho bạn tính toán PWM .

bạn phải tự tính nấy mới có kinh nghiệm , sao lại nhờ từ đầu đến cuối thế .

mọi người chỉ đưa ra ý kiến giúp bạn thôi , vấn đề của bạn bạn phải tự mình giải quyết nấy chứ

manhha2799
28-07-2008, 05:17 PM
- Mình xài thạch anh 4M, có chu kì lệnh là 1us và chu kì PWM 100us, theo như bạn nói thì cần phải tính số xung PWM trong 1s. Như vậy trong chu kì PWM 100us sẽ có một 1 duty + 1 khoảng trống như vậy sau 1s sẽ có 10000xung/s.
- Theo bạn nói phía trên : PWM = 100(xung/s) --> tính được V= 5(m/s)
ngược lại có : V = 20(m/s) --> PWM = 400(xung/s)
- Mà cứ 1s thì có sẽ luôn có 10000xung, làm sao mà tính được vận tốc(tại bạn tính trên 1s, mà 1s thì lúc nào cũng có 10000xung, 100us thì có 1 xung lên cao và xuống thấp ).
- Bạn có thể giải thích dùm mình?

namqn
28-07-2008, 05:24 PM
Bạn lion giải thích không chính xác. Thay đổi số xung/s tức là thay đổi tần số, vốn không ảnh hưởng đến điện áp trung bình đặt vào động cơ (nói chung), do đó sẽ không ảnh hưởng đến tốc độ.

Thay đổi duty cycle (tính bằng %) mới thay đổi điện áp trung bình và dẫn đến thay đổi tốc độ.

Thân,

lion
29-07-2008, 01:12 AM
bây giời bạn thử nấy cố định 50% duty và xuất ra 10000 xung xem được V = bao nhiêu .
khi có V rồi (gọi là V1) .

bây giờ bạn lại có V2(đã biết) => PWM = ( V2 * 10000 ) / V1

lion
29-07-2008, 09:35 AM
Bạn lion giải thích không chính xác. Thay đổi số xung/s tức là thay đổi tần số, vốn không ảnh hưởng đến điện áp trung bình đặt vào động cơ (nói chung), do đó sẽ không ảnh hưởng đến tốc độ.

Thay đổi duty cycle (tính bằng %) mới thay đổi điện áp trung bình và dẫn đến thay đổi tốc độ.

Thân,
cái mà em nói ở đây chính là thời gian tác động cùa xung --> động cơ .

LeDuc
29-07-2008, 04:46 PM
bây giời bạn thử nấy cố định 50% duty và xuất ra 10000 xung xem được V = bao nhiêu .
khi có V rồi (gọi là V1) .

bây giờ bạn lại có V2(đã biết) => PWM = ( V2 * 10000 ) / V1
Nếu vậy thì có lẽ nên áp dụng luật điều khiển PID vận tốc để có tốc độ chính xác , rồi xem giá trị duty là bao nhiêu rồi tính ngược lại thử xem .

manhha2799
30-07-2008, 04:31 PM
Em đã làm thử theo PID và thu được kết quả cũng tốt.

thaovma
01-08-2008, 10:12 AM
Theo mình nghĩ, bạn có thể tìm được tỉ số giữa duty cycle PWM và vận tốc động cơ bằng cách xuất ra giá trị 50% duty cycle sau đó đo vận tốc động cơ tương ứng và sau đó áp dụng thêm giải thuật điều khiển PID đế đạt được vận tốc mong muốn tốt nhất, hoặc có thể áp dụng luôn PID mà ko cần tính tỉ số trên.

manhha2799
01-08-2008, 02:52 PM
- Mình đã làm thử đo tốc độ xuất xung duty cũng gần đúng,
- Nhưng khi áp dụng phương pháp Dead-reckoning do anh f đưa ra. Nếu để xe chạy trên không thì đo được tốc độ phương x, y bao nhiêu cm, nhưng khi để xe xuống ( xe nặng 6kg) thì nó không tính chính xác lâu lâu mới tính được nhưng tốc độ rất chậm, tần số lấy mẫu encoder của mình là 1s. Có ai chỉ giùm mình.

jean
01-08-2008, 10:19 PM
Theo mình thì các bạn không cần phải tính ngược từ giá trị vận tốc ra giá trị duty cycle của PWM . Bởi vì Mobile robot là một hệ phi tuyến. Ánh xạ giữa vận tốc và duty cycle của PWM không tuến tính. Do đó, kết quả duty cycle của PWM rất khó tính toán chính xác (với một sai số chấp nhận được). Nếu đem một kết quả tính toán thiếu chính xác để điều khiển robot thì chắc chắn vận tốc đầu ra sẽ không như mong muốn. Và chắc chắn bạn sẽ phải sử dụng bộ điều khiển PID.
Vậy tại sao bạn không sử dụng PID với một giá trị duty cycle của PWM bất kỳ nào đó. Bộ PID sẽ tự động điều chỉnh giá trị duty cycle của PWM về giá trị mà bạn mong muốn.
Mình đã làm cách này và robot của mình di chuyển rất gần với vận tốc mong muốn.