PDA

View Full Version : Lý do nào khiến VĐK bị treo?


zero
07-06-2007, 05:07 PM
Tôi bị tình trạng này sảy ra liên tục.
Tôi tham gia Robot và dùgn 877 để điều khiển, mạch dk motor dùng relay...
Có ai biết nguyên nhân nào khiến VĐK bị treo ko?Theo như minhquang19102006 bảo đó là do dùng vòng lặp nhiều quá? vậy ko biết thế nào nhỉ có phải do đó ko?
Hay do code của mình có vấn đề => bạn down code về xem rồi góp ý hộ nhé.
Code viết = C

falleaf
07-06-2007, 05:40 PM
Nếu PIC bị treo, bạn nên sử dụng watch dog timer để kiểm tra. Nếu nó bị dừng lại thì cho reset PIC.

Ngoài ra, không được phép call function liên tục. Vòng lặp nhiều không phải là vấn đề, nhưng không được phép gọi vòng lặp chồng nhau nhiều cấp.

Các xử lý tốt nhất, đó là bạn phải thử từng trường hợp. Xóa toàn bộ các phần, test từng chiến thuật một, ở từng chiến thuật chạy đó, xem nó có bị dừng không. Nếu như bị dừng thì cần phải sửa lại code của đoạn đó.

Sau đó thêm vào dần và kiểm tra.

Về việc đóng ngắt relay thì bạn cũng cần phải cẩn thận, nên chặn một con trở và một con diode vào.

Vòng lặp nhiều không gây lỗi chương trình, chỉ có vòng gọi hàm con lồng nhau nhiều lần, và phần ngắt nhiều lần thì có thể xảy ra vấn đề. Bạn phải thật chú ý tới việc quản lý TOS.

Chúc vui

zero
07-06-2007, 08:54 PM
Chào bác F!
Cái chương trình này của em nếu kê bánh lên rồi cho chạy thì chẳng có vắn đề j cả (Thậm chí lấy tay giữ cho motor chạy chậm hẳn lại) nhưng nếu đặt xuống đất thì y như rằng.
Về việc sử dụng WD thì em cũng nghĩ đến nhưng nếu đặt trong tình huống này việc ko điều khiển trong một thời gian =>Đến lúc phát hiện ra là bị treo thì con Robot này đã nằm ở vị trí nào đó rồi mà mình ko kiểm soát được...
Bác bảo là ko nên call function liên tục? vậy như chương trình đó của em ấy có là nhiều ko?(Vì quan niệm mỗi người NHIỀU là khác nhau ^^) Nếu của em là nhiều thì có cách nào giải quyết không? Cũng có thể việc Call liên tục làm treo vì hồi đầu bạn em lập trình theo kiểu tuần tự ko dùng function nên ko thấy bị treo.

Em chưa thử sử dụng WD bao j cả. Nhân tiện cho em hỏi nếu dùng WD thì thời gian để phát hiện ra bị treo là bao lâu?(Nhỏ nhất có thể) khi phát hiện ra rồi có thể quay lại chỗ chương trình đang chạy được ko?hay là phải chạy lại từ đầu(Reset lại VĐK)
Thank!

falleaf
07-06-2007, 10:34 PM
Như vậy rõ ràng ở đây là phần mạch công suất của bạn có vấn đề rồi. Bạn kiểm tra lại phần làm mạch. Bạn thử cho PWM = max ở mọi trường hợp, xem robot nó chạy thế nào. Kiểm tra từ phần mạch trước vì moment trên bánh quá yếu. Khoan quan tâm tới chương trình đã. Mở PWM 100% rồi test thử xem.

Chúc vui

zero
07-06-2007, 10:48 PM
ờ PMW của em là 100% vì em chưa dùng chân PMW(Lúc bắt đầu làm Robot em mới nghiên cứu PIC)
DC em điều khiển ở mức Logic thôi => cái này có thể xem trong soucre file khoitao.c
Mạch ĐC dùng D613,Role,C1815,A1015 . Role dùng để đảo chiều D613 nuôi Motor

falleaf
07-06-2007, 11:50 PM
Nghĩa là em cho dòng chạy thẳng từ bình vào động cơ, mà xe vẫn không chạy nổi? Thế thì đâu phải tại chương trình, tại bình quá yếu hoặc động cơ quá yếu thôi.

Cứ bug từng cái một, kiểm tra chắc cú rồi mới bỏ qua làm tiếp các bước sau. Đừng có chăm chăm vào chương trình quá.

Chúc vui

scentoflove
08-06-2007, 01:02 AM
cho e hỏi ké topic này 1 chút, e viết 1 chương trình khi có tí hiệu từ cổng COM thì xảy ra ngắt và nhận tín hiệu vào, chương trình chính là vòng lập gửi 1 byte, delay_5ms -> chương trình chỉ chạy 1 lần ngắt đầu tiên sau đó bị treo
Em viết lại thay vì trong main xuất dữ liệu em để trong ngắt timer1 5ms thi ko co tình trạng treo, main chỉ còn while (1). Anh có thể giải thích

namqn
08-06-2007, 02:57 AM
cho e hỏi ké topic này 1 chút, e viết 1 chương trình khi có tí hiệu từ cổng COM thì xảy ra ngắt và nhận tín hiệu vào, chương trình chính là vòng lập gửi 1 byte, delay_5ms -> chương trình chỉ chạy 1 lần ngắt đầu tiên sau đó bị treo
Em viết lại thay vì trong main xuất dữ liệu em để trong ngắt timer1 5ms thi ko co tình trạng treo, main chỉ còn while (1). Anh có thể giải thích
Bạn nên cho biết chip được dùng, code khởi tạo cho các ngắt, code xử lý ngắt và đoạn code liên quan đến phần này trong main. Bạn cho biết ngôn ngữ và trình biên dịch luôn. Câu hỏi trên của bạn không đủ dữ kiện để trả lời.

Thân,

zero
08-06-2007, 09:19 AM
Mình up cả Project lên rồi kìa ở trên cùng ấy!
Lý do như bác F vừa nói em cũng đã thử rồi Ko phải do cái đó
Mà ko phải xe ko chạy nổi mà là Xe ko chạy được vì VĐK bị treo. (Khi xe đang lùi VĐK bị treo thế là nó lùi đến khi nào hết ac quy thì thôi :D <= Motor vẫn quay)

hanspkt
08-06-2007, 10:28 AM
Theo mình nguyên nhân là do động cơ, mình cũng gặp trường hợp đó rồi (có lúc bị treo, có lúc bị reset). Bạn thử gắn tụ 104 dể khử nhiễu, gắn 3 cái tụ theo kiểu chân của tụ này nối chân tụ kia, cuối cùng có 3 chân, 2 chân bạn mắc vào 2 cực động cơ, chân còn lại bạn nối vào vỏ (nếu vẫn còn thì bạn thử thay động cơ khác). Mình cũng làm như trên thì thấy nó giảm rõ rệt, thậm chí là không còn nữa. Chúc bạn thành công!

zero
10-06-2007, 09:38 AM
Trong quá trình mình làm thì có người mách là nối vỏ động cơ với Mass? mình ko rõ cách này có ý nghĩa gì?có ai biết vì lý do gì ko?
Cách dùng Diode và R bác F nói thì em cũng thử rồi nhưng vẫn ko ăn thua.
Còn cách bạn hanspkt nói mắc 3 tụ ấy mình nghĩ nó cũng chẳng khác việc mắc 1 tụ vì thực ra bạn đã mắc 2 tụ nối tiếp nhau!
À tiện cho hỏi chút nếu dùng tụ 104 thì dùng loại nào là tốt?Loại tụ gốm xanh xanh to bằng đầu ngón tay út hay tụ gốm mầu vàng nhỏ cỡ đầu đũa(giống tụ 33p mắc mạch dao động)

falleaf
10-06-2007, 11:01 AM
Cần phải nối một tụ 104 từ chân vào vỏ động cơ (cả 2 chân). Nguyên nhân là khi động cơ chổi than quay, nó tạo ra các tia lửa điện (nó thay đổi cực liên tục), nên nối qua con tụ đó và nối vào vỏ động cơ để loại bỏ cái nhiễu đó.

Tụ 104 thì ra chợ hỏi mua cái tụ kẹo (là cái tụ vỏ nhựa nhìn như cục kẹo chocolate M&M nên gọi là tụ kẹo).

Bạn miêu tả cho rõ lại hiện tượng. Bạn nói là kê bánh lên chạy thì bị, đặt xuống đất thì y như rằng. F hiểu nó là đặt xuống đất thì nó không chạy nữa!!!

Bạn miêu tả rõ lại hiện tượng và tự mình bug chương trình từng đoạn. Bạn bỏ hết các hàm khác đi, nếu chương trình của bạn không sai về lỗi thuật toán, thì nhìn chung không có gì. Nguyên tắc của F là viết chương trình thì phải đúng, sai hay không là sai thuật toán thôi. Mà thuật toán thì F chịu, chả thể nào ngồi bug giúp bạn và cũng chả có thiết bị để bug. Cho nên bạn phải tự bug bằng cách bỏ từng đoạn ra test thử. Bạn có thể thay cái relay ra, thay vào đó một cái đèn, cầm cho nó chạy xem đèn nháy đúng yêu cầu không.

Nếu đúng hết yêu cầu, thì có nghĩa là bạn lỗi phần cứng.

Chúc vui.

zero
10-06-2007, 01:35 PM
Nếu kê bánh xe lên thì không bị sao cả,thuật toán vẫn đúng. Thậm chí giữ tay (Giả tải) thì vẫn chạy không có vấn đề j cả (Chạy đúng theo thuật toán và ý đồ) Thế nhưng đặt nó xuống đất thì chỉ chạy được một lúc là bị (Treo)
Về thuật toán thì em nghĩ là ko sai vì cùng mạch điện đó(Cùng một người làm mạch),cùng chương trình đó thì con khác không bị sao hay bị ít hơn.

Còn điều này lạ nữa và em cũng không biết giải thích vì sao: Dùng tụ 104 sau một thời gian nó bị phình to lên bọn em thường nói đùa là nó tích nhiễu ở trong. Không biết chi tiết này có ý nghĩa ko?và nguyên nhân làm cho tụ bị như thế là sao? Em dùng loại tụ mầu xanh cũng to bằng cục kẹo M&M nhưng ko rõ nó làm bằng gì.
Motor dùng loại Pitman 24V nhưng vì chạy quá nhanh nên em chỉ dùng ở điện áp 12V (Tốc độ ở 24V khoảng 220V/phút dòng không tải khoảng 0.2A)

falleaf
10-06-2007, 01:43 PM
Nếu chương trình chạy đúng, có nghĩa là không có vấn đề về chương trình, tốt hơn bạn nên post mạch thiết kế lên, và phần ở động cơ thì cắm tụ như F chỉ.

Bắt buộc dùng điện áp 24V, nếu bạn dùng 12V thì đúng là quá thấp rồi. Đặc tuyến vận tốc và moment có liên quan. Bạn phải dùng PWM điều khiển ở mức 50% thì moment vẫn đảm bảo, chứ nếu đặt 12V thì moment không đảm bảo.

Đây chính là lỗi do phần nguồn mà F đã nói ở trên. Bạn hạn chế 12V thì có khác gì với bình yếu đâu!!!

Bạn nên post mạch lên thì các thành viên sẽ hỗ trợ bạn thêm. Tới đây xem như bug lỗi của bạn được rồi.

Chúc vui

zero
10-06-2007, 02:12 PM
Đúng có thể momen không đủ nhưng con robot này vẫn chạy mà chứ ko hề đứng yên do motor quá yếu.(Mặc dù chạy 12V nhưng vẫn có thể chạy rất tốt không gặp phải vấn đề do yếu momen)
Vấn đề em muốn hỏi là bị treo VDK chứ không phải là ko chạy được!
Còn mạch nguyên lý thật tiếc là em ko có ở đây (Em sẽ post lên sau)
Còn đây là ảnh 2 loại tụ 104 mà em có.Em ko rõ là loại nào thì tốt hơn?

falleaf
10-06-2007, 02:26 PM
Bên phải là cái tụ kẹo đó, xài cái đó. Bên trái là tụ giấy.

Chúc vui.

nanonhh
10-06-2007, 05:55 PM
Thực ra nhiễu trong robocon với cách điều khiển kiểu Bạn thì thường nhiễu có nguồn gốc từ hai chỗ:
1. là do tiếp điểm role
2. chổi than động cơ
phải dùng tụ lọc ở cả hai chỗ và lưu ý là phải dùng nhiều giá trị tụ khác nhau (ít nhất là 2).
Tụ bị phồng là dòng nạp nó quá lớn đó, cho thêm một con giá trị lớn hơn nữa vào nhé.
thường cứ khi tụ phồng hoặc động cơ đảo chiều thì MCU bị cheo không!

nanonhh
10-06-2007, 06:01 PM
À quên!
còn lý do nó cheo thì là do nguồn cấp cho MCU có những xung nhiễu do các lý do mình nêu trên.
nếu không triệt được nhiễu thì người ta thường dùng giêng nguồn là ok liền.