PDA

View Full Version : Hỏi về cách bảo vệ động cơ bằng lập trình?


dvnccbmacbt
07-08-2007, 01:02 AM
Các bác cho em hỏi! Em đang tập lập trình cơ bản cho robot dò đường. Em được biết có nhiều nguyên nhân gây nguy hiểm cho động cơ. Vậy em xin hỏi theo kinh nghiệm các bác khi lập trình ta cần chú ý như thế nào để ít nguy hiểm cho động cơ nhất? Em lấy ví dụ như : hạn chế đổi chiều động cơ đội ngột. dừng robot từ từ, v..v... Các bác có thuật toán hay thủ thuật gì mong giúp em với. Em cảm ơn các bác nhiều.

Tuấn Anh CVN
07-08-2007, 10:45 PM
Khi làm robot follow line, để tránh việc thay đổi tốc độ đột ngột hay để làm cho robot chuyển động mềm dẻo (flexible) ta cần bố trí càng nhiều cảm biến dò đường càng tốt. Tất nhiên là trong giới hạn có thể để phần cứng không trở nên phức tạp quá. Khi đọc giá trị từ nhiều cảm biến sẽ có nhiều trường hợp xảy ra, với mỗi trường hợp ta lại quyết định thay đổi tốc độ sử dụng PWM theo các kiểu khác nhau sao cho mềm dẻo. Nếu làm vậy sẽ tránh được việc thay đổi tốc độ đột ngột gây hại cho động cơ. Cùng là động tác quay robot nhưng nếu có nhiều cảm biến nên dựa vào kết quả thu được ta có thể đưa ra nhiều cách quay khác nhau khiến robot chuyển động từ từ không bị dật. Ví dụ có các cách quay như sau: quay cạnh (một bánh quay, một bánh đứng yên); quay tâm (hai bánh quay ngược chiều); quay mềm dẻo ( hai bánh cùng tiến nhưng tốc độ khác nhau). Nếu đưa ra được càng nhiều cách quay mềm dẻo kiểu như trên thì chắc chắn sẽ giải quyết được vấn đề của bạn.

kidcdt
14-01-2008, 11:26 AM
thiệt sự là em thấy vấn đề điều xung là rất khó khăn.Anh Tuấn Anh có thể chia sẽ kinh nghiệm được không.dùng 89c51 ấy.

Tuấn Anh CVN
09-02-2009, 01:23 AM
Điều chế xung sử dụng 89C51 thì chỉ dùng ngắt timer mới chính xác được. Nếu dùng delay thì khá khó phải viết phần mềm theo kiểu nhảy state (dùng con trỏ hàm). Song hình như trên thị trường có bán các loại IC chuyên dụng để tạo xung. Loại này cần dọc data sheet nhiều. Tốt nhất là nên sử dụng loại IC hỗ trợ PWM. Để tăng tốc độ từ từ thì thường trong source code hay định nghĩa cứng như là:

#define Tien { Banh_Trai(Tien,100); Banh_Fai(Tien,100); }
#define Re_Fai_1 { Banh_Trai(Tien,100); Banh_Fai(Tien,80); }
#define Re_Fai_2 { Banh_Trai(Tien,100); Banh_Fai(Tien,70); }

#define Re_Trai_1 { Banh_Trai(Tien,80); Banh_Fai(Tien,100); }
#define Re_Trai_2 { Banh_Trai(Tien,70); Banh_Fai(Tien,100); }

Cách định nghĩa cứng các marco này thực ra không hay vì không mềm dẻo. Thực tế nhiều khi cần phải tăng tốc độ rất mềm. Nếu theo cách trên thì không biết là phải định nghĩa bao nhiêu mới vừa để đảm bảo yêu cầu ấy. Như vậy gây rối loạn.
Nên sử dụng định nghĩa theo marco có đối. Mỗi bánh xe coi là một đối tượng có 3 thuộc tính : chiều quay, tốc độ, gia tốc (d,s,a)

#define Tien(s,a) { Banh_Trai(Tien,s,a); Banh_Fai(Tien,s,a); }
#define Re_Fai(s_L,a_L,s_R,a_R) { Banh_Trai(Tien,s_L,a_L); Banh_Fai(Tien,s_R,a_R); }
#define Re_Trai(s_L,a_L,s_R,a_R) { Banh_Trai(Tien,s_L,a_L); Banh_Fai(Tien,s_R,a_R); }

Giả sử muốn cho tiến dần từ tốc độ 0 thì ta sẽ gọi
speed = 0;
accelerate = 0;
.
.
.
if (speed <= 100)
Tien(++speed,accelerate);

Thế là đã tăng tốc độ rất mềm với gia tốc là 0.

dai_ngoc
16-03-2011, 11:21 AM
tui thì cũng đang mày mò học xí để điều khiển tốc độ động cơ DC mà khó viêt quá
ai có code C nào điều khiển tăng giảm tốc độ động cơ thì post lên hoặc email cho tui nhé tui cảm ơn
email: nguyenminhnghia2009@gmail.com

hanhcd
27-07-2011, 11:54 PM
tui thì cũng đang mày mò học xí để điều khiển tốc độ động cơ DC mà khó viêt quá
ai có code C nào điều khiển tăng giảm tốc độ động cơ thì post lên hoặc email cho tui nhé tui cảm ơn
email: nguyenminhnghia2009@gmail.com

http://www.mediafire.com/?jxd9g63vjcvsekg

kết quả chạy:
http://www.youtube.com/watch?v=unpaN966abo

mail:08153006@st.hcmuaf.edu.vn