![]() |
|
Tài trợ cho PIC Vietnam |
Thực hành Bắt đầu làm một robot như thế nào? Mẹo vặt? Kỹ thuật? Công nghệ?... Hãy bắt tay vào việc... |
![]() |
|
Ðiều Chỉnh | Xếp Bài |
|
![]() |
#1 |
Đệ tử 9 túi
Tham gia ngày: May 2006
Bài gửi: 150
: |
Cấu trúc của một bài báo cáo khoa học (để đăng tạp chí, tham dự hội nghị) thông thường có cấu trúc và các mục như sau:
Tiêu đề (Title): ngắn gọn cô đọng chứa đựng thông tin chính về nội dung báo cáo. Thông thường dài khoảng 10 từ. Tên người viết (tác giả) và người cộng tác cùng địa chỉ liên lạc. Tóm tắt (Abstract, hoặc Summary): Tóm tắt nội dung của bài báo cáo. Phần này nói chung là tóm tắt ý chính của bài báo. Thường dài khoảng 150 (ngắn) tới 300 (hơi dài) từ. Từ khóa (Keywords): các từ chính dùng để phục vụ cho việc tìm kiếm, đặc biệt các tài liệu điện tử - các từ khóa này thông thường do hội nghị và các ban biên tập tạp chí quy định. 1. Giới thiệu (Introduction) 2. Phương pháp (Methodology) - Thuật toán (Algorithms) 3. Thí nghiệm (Experiments) hoặc Mô phỏng (Simulation) 4. Kết quả thí nghiệm - Kết quả mô phỏng (Results) 5. Phân tích, đánh giá thảo luận (Analysis, Evaluation and Discussion) 6. Kết luận (Conclusion) và Hướng phát triển tiếp (Future Work) Lời cảm tạ (Acknowledgements) Tài liệu tham khảo (References) Phụ lục (Appendices) Điểm quan trọng trong bài báo là người viết phải biết cách trích dẫn tài liệu tham khảo, trình bày các biểu bảng số liệu sao cho dễ đọc dễ hiểu. Khi viết báo cáo khoa học người viết cần phải biết áp dụng hệ thống tham khảo nào và theo suốt trong cả bài. Trên thế giới có nhiều hệ thống tham khảo, ví dụ như Hệ thống tham khảo Harvard, Hệ thống tham khảo APA (American Psychology Association)... Các bài báo về khoa học tự nhiên và công nghệ thường sử dụng hệ thống tham khảo Harvard (Harvard Referencing System). Ai quan tâm có thể tìm được hướng dẫn viết bài sử dụng hệ thống tham khảo Harvard trên Internet. Ví dụ sử dụng hệ thống tham khảo Harvard, hệ thống này có hai phần: 1. viết lời trích dẫn trong đoạn văn, 2. liệt kê danh mục tài liệu hướng dẫn trong phần Tài liệu hướng dẫn. Phần 1 có liệt kê nhiều loại trích dẫn trực tiếp, gián tiếp các loại ấn phẩm khác nhau, đại loại là nếu trích dẫn thông tin "Hệ thống điều khiển PID đầu tiên được thiết kế cho tàu thủy vào năm 1922..." thì có thể viết theo một số cách như sau: Theo AB (2003) hệ thống điều khiển PID đầu tiên được thiết kế cho tàu thủy vào năm 1922... Hệ thống điều khiển PID đầu tiên được thiết kế cho tàu thủy vào năm 1922... (AB, 2003). Trong AB (2003) viết "Hệ thống điều khiển PID đầu tiên được thiết kế cho tàu thủy vào năm 1922... ". Và trong danh mục tài liệu tham khảo liệt kê tài liệu theo thứ tứ ABC như sau.. Tài liệu tham khảo AA, B (2001) ... AB, C. (2003) Modern PID Control Systems. Control Engineering Practice. Elsevier, Pergamon, UK, 2(3), pp. 12-20. ... H.A. thay đổi nội dung bởi: HaiAu2005, 19-10-2006 lúc 09:13 PM. |
![]() |
![]() |
![]() |
#2 |
Đệ tử 3 túi
Tham gia ngày: Jun 2006
Bài gửi: 53
: |
Chào mọi người, em cũng thấy ý kiến của mọi người về báo cáo khoa hoc rất có ích cho mọi người tham khảo, học hỏi thêm kiến thức từ những kinh nghiệm thực tế.
Tuy nhiên hiện nay, dự án đang còn đang thực hiện, giải thuật bọn em đang nghiên cứu để áp dụng vẫn chạy chưa đúng, những tài liệu tham khảo còn chưa hiểu rõ được. Cho nên, em nhận thấy khi đã chạy thành công ra được kết quả đúng thì mới làm báo cáo khoa học thể, chi tiết cho mọi người xem được. |
![]() |
![]() |
![]() |
#3 |
PIC Bang chủ
|
Hiện nay cho hỏi lại, còn bao nhiêu người theo tiếp dự án này, đã làm động cơ chạy được chưa, đọc được số liệu về máy tính chưa (số liệu encoder), dùng Hyperterminal, hoặc là dùng chương trình tự viết...
Tất cả đã làm xong phần này chưa, chúng ta có thể đi vào vấn đề PID được chưa? Chúc vui
__________________
Công ty TNHH Thương mại và Giao nhận R&P store.hn@rpc.vn - store.hcm@rpc.vn Học PIC như thế nào? |
![]() |
![]() |
![]() |
#4 | |
Đệ tử 3 túi
Tham gia ngày: Jun 2006
Bài gửi: 53
: |
thay đổi PID theo tải
Trích:
Đây là chương trình em đã chạy tốt với 1 tải cố định Code:
#include <16f877a.h> #fuses HS,NOPROTECT,NOWDT,NOBROWNOUT #use delay (clock = 20000000) // Giao tiep vi dieu khien #use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7, parity=N, bits=8) // Giao tiep RS232 #include <stdlib.h> #include <string.h> #include <math.h> #include<ctype.h> #byte PR2 = 0x92 int16 e2; int16 e1; /////////////////////////////////////////////////////// int16 v_set = 250; ///////////////////////////////////////////////////////// int16 v_cur; int16 e_sum; int16 e_del; int16 flag_timer1; /////////////////////////////////////////////////////////// unsigned long kp =5; unsigned long ki = 0.62; unsigned long kd = 10; //////////////////////////////////////////////////////////// int16 pw_duty; int16 counted_round_value; int16 temp_timer0; int16 update_counted_round_value; #byte TMR0 = 0x01 //timer0 REGISTER #byte TMR1_L = 0X0E #byte TMR1_H = 0X0F #define START_VALUE_TIMER0 55 //tri khoi tao ban dau cua timer0 55, so xung dem duoc moi khi ngat la 255 - 55 #define START_VALUE_TIMER1 15535 //tri khoi tao ban dau cua timer1 65536-15536 #INT_TIMER0 // ngat timer0 tang bien len 1 void TIMER0_int() { set_timer0(START_VALUE_TIMER0); counted_round_value++; } #INT_TIMER1 // ngat timer0 tang bien len 1 void timer1_int() { set_timer1(START_VALUE_TIMER1); temp_timer0 = get_timer0(); if (temp_timer0 == 0){ temp_timer0 = 255; } v_cur = counted_round_value*400 + 2*(temp_timer0 - START_VALUE_TIMER0); set_timer0(START_VALUE_TIMER0); counted_round_value = 0; //printf("%ld\t",pw_duty); flag_timer1 = 1; } void init_timer0() { setup_timer_0(RTCC_EXT_H_TO_L | RTCC_DIV_2); // timer0 dung xung ngoai va chia xung vao setup_timer_1(T1_INTERNAL | T1_DIV_BY_4); // moi lan tran timer1 la 50000*4* (1/5) uS = 40ms set_timer0(START_VALUE_TIMER0); set_timer1(START_VALUE_TIMER1); enable_interrupts(GLOBAL); enable_interrupts(INT_TIMER0); enable_interrupts(INT_TIMER1); } void init_PWM(int16 frequency){ setup_ccp1(CCP_PWM); // initiate PWM PR2 = 20000000/4/frequency - 1; // set PWM period setup_timer_2(T2_DIV_BY_1,255,1); // initiate time 2 The cycle time will be (1/clock)*4*t2div*(period+1) // (1/20000000)*4*1*(255+1) = 51.2 us( will over flow every 51.2 us, will intrup every 51.2 uS or 19.5 khz; } void cal_pid(){ long temp_kp; long temp_ki; long temp_kd; e2 = v_set - v_cur; e_sum += e2; e_del = e2 - e1; e1 = e2; temp_kp = kp*e2; temp_ki = ki*e_sum; temp_kd = kd*e_del; pw_duty +=temp_kp; if (pw_duty <1000) pw_duty += temp_ki; if (pw_duty <1000) pw_duty += temp_kd; if (pw_duty <256) // vi khi pw_duty <256 thi PWM chi dieu rong xung 8 bit / //chu khong phai 10 bit, pw_duty = 256; if (pw_duty >1000) // bao hoa pw_duty = 1000; printf(" \t%ld", v_cur); // truyen toc do xung ve may tinh hien thi tren Hyperterminal } void main() { int8 timer0_value; init_timer0(); init_PWM(19500); while(true){ if (flag_timer1 ==1){ flag_timer1 = 0; cal_pid(); set_pwm1_duty(pw_duty); } } } thay đổi nội dung bởi: falleaf, 11-09-2008 lúc 10:07 PM. |
|
![]() |
![]() |
![]() |
#5 |
PIC Bang chủ
|
Em hỏi câu đó mà anh trả lời thì anh là thằng nói dóc
![]() Em thử nghĩ coi, vấn đề muôn thuở của điều khiển, vẫn chỉ là cái actuator gắn cục tải vào, và mình muốn nó chạy như thế nào thì nó chạy như thế ấy. Tất nhiên, anh không nói là không có cách để đạt đến một cái gì đó, người ta vẫn có giả pháp Auto Tuning PID, mà anh Hùng đã giới thiệu. Em có thể download trên www.tailieuvietnam.net Em có thể gửi file các thông số đo được lên đây, và em có thể dùng Matlab để nhúng các thông số đó, vẽ thành các đồ thị để giới thiệu cho mọi người? Ngoài ra, em thay cục tải khác, và em thử tìm lại hệ số PID phù hợp cho hai cục tải đó. Khi em thay tải khác, em cố gắng tìm hệ số bằng một cách cảm tính, bước này anh đã có đề cập trước rồi. Có nghĩa là, anh muốn em cố gắng sử dụng cảm tính của mình, điều chỉnh các hệ số, cho nó chạy, rồi đọc giá trị về, rồi quan sát: rising time (thời gian đáp ứng), overshoot (vọt lố), và ss error (chả biết cái này tiếng Việt gọi là cái gì nữa). Em quan sát nó, và em cố gắng cảm nhận, giả sử tôi tăng P, thì điều gì xảy ra, giảm P thì điều gì xảy ra, giả sử tôi có một P tương đối tốt, tăng I, thì điều gì xảy ra, giảm I thì điều gì xảy ra.. tương tự cho D... Tóm lại là, em cố gắng cảm nhận, đây là giai đoạn quan trọng nhất. Bảng tóm tắt những ảnh hưởng anh đã cung cấp trước đây, nhưng không nhớ, nhưng anh vấn muốn em cảm nhận nhiều hơn khi thực hành điều khiển. Chúc vui.
__________________
Công ty TNHH Thương mại và Giao nhận R&P store.hn@rpc.vn - store.hcm@rpc.vn Học PIC như thế nào? |
![]() |
![]() |
![]() |
#6 |
Trưởng lão PIC bang
Tham gia ngày: Dec 2005
Bài gửi: 315
: |
Mecha xin cung cấp một số tài liệu về vấn đề chỉnh định thông số cho bộ điều khiển PID:
1. PI and PID controller tuning rules for time delay processes: A summary http://www.tailieuvietnam.net/downlo...0processes.pdf Tài liệu tiếng Anh, tập hợp khoảng 60 phương pháp chỉnh định PID cho nhiều dạng mô hình đối tượng có trễ khác nhau. 2. Một số khái niệm cơ bản về lý thuyết điều khiển PID, điều khiển mờ và mờ lai PID. http://www.tailieuvietnam.net/downlo...BPG.221205.pdf Tài liệu tiếng Việt nhưng hiện vẫn còn đang trong giai đoạn xây dựng. 3. Một phần mềm viết bằng Basic cho phép tính toán thông số bộ điều khiển PID theo phương pháp Reinisch http://www.tailieuvietnam.net/downlo...D_Reinisch.zip Phần mềm tự động tính toán thông số bộ điều khiển PID cho các đối tượng quán tính bậc nhất, bậc hai và các đối tượng theo mô hình của Reinisch; xét ổn định theo tiêu chuẩn Routh và vẽ đồ thị đáp ứng quá độ. Trong phần mềm đã có phần hướng dẫn sử dụng. Chú ý: sử dụng không đúng các bước rất dễ bị báo lỗi. Thông cảm chạy lại từ đầu! ![]() Falleaf: Các tài liệu này đã được chuyển về kho. Nếu sau này bị mất link của ftp, các bạn tìm lại bằng tên trong www.kho.tailieuvietnam.net.
__________________
Sống là động nhưng lòng luôn bất động, Sống là thương nhưng lòng chẳng vấn vương, Sống yên vui danh lợi vẫn coi thường, Tâm bất biến giữa dòng đời vạn biến. Chú ý: đề nghị các thành viên đọc luồng dưới đây trước khi post bài: http://www.picvietnam.com/forum//showthread.php?t=1263 thay đổi nội dung bởi: falleaf, 03-11-2006 lúc 12:07 AM. |
![]() |
![]() |
![]() |
#7 |
Đệ tử 3 túi
Tham gia ngày: Jun 2006
Bài gửi: 53
: |
Chào mọi người, cảm ơn mọi người đã gửi tài liệu, em sẽ về chạy lại chương trình để lấy số liệu chính xác đưa lên cho mọi người cùng xem.
còn phần dùng matlab để vẽ đồ thị kết quả đưa về thì em chưa thử bao giờ nên cần có thời gian để tìm hiểu. à, anh nào có tài liệu hướng dẫn phần này thì gửi lên cho giùm em nhe. mến, |
![]() |
![]() |
![]() |
#8 | |
Nhập môn đệ tử
Tham gia ngày: Feb 2009
Bài gửi: 2
: |
![]() Trích:
__________________
AK Lovely |
|
![]() |
![]() |
![]() |
#9 | |
Đệ tử 1 túi
Tham gia ngày: Mar 2007
Bài gửi: 25
: |
Trích:
Bạn có thể cho mình biết thông số động cơ Dc cuả bạn.Và giải thích giùm đoạn code này cho mình được không: v_cur = counted_round_value*400 + 2*(temp_timer0 - START_VALUE_TIMER0); mình mới tập lập trình nên không rành lắm. |
|
![]() |
![]() |
![]() |
#10 |
Đệ tử 3 túi
Tham gia ngày: Jun 2006
Bài gửi: 53
: |
Chào bạn,
thông số động cơ của tớ là: Ra= 2.1 ohm; La = 3.3 mH, moment inertia: J = 5.5x10^(-4); Kt= 0.11N.m/A, damping ratio b= 0.29 Động cơ tớ mua là đồ second hand, cái nhãn bị mờ ròi nên nhìn không rõ, nên lên mạng tìm và thấy cái này có hình rất giống thôi, không biết chính xác hay không nữa. còn về đoạn code trên thì tớ giải thích ngắn gọn thế này: tớ dùng timer0 ở chế độ ngắt tràn để đếm xung ngoài từ encoder, timer1 ở chế độ ngắt tràn. đoạn chương trình trên có thể viết lại như sau v_cur = timer0_interupt_number*2*(255 - START_VALUE_TIMER0) + 2*(get_timer0() - START_VALUE_TIMER0); + v_cur: số xung đếm được trong mỗi chu kì ngắt timer1 + timer0_interupt_number: số làn timer0 tràn trong mỗi chu kì ngắt timer1 + START_VALUE_TIMER0 giá trị nạp cho thanh ghi timer0 ban đầu + phải nhân 2 vì ở chế độ đếm xung ngoài thì scaler min =2, (coi datasheet) + Nhân (255 - START_VALUE_TIMER0) là số xung mỗi lần timer0 tràn + Cộng 2*(get_timer0() - START_VALUE_TIMER0) vì khi ngắt timer1 thì timer0 vẫn đang đếm nên phải cộng thêm giá trị hiện tại của timer0. chút vui |
![]() |
![]() |
![]() |
#11 | |
Đệ tử 1 túi
Tham gia ngày: Mar 2007
Bài gửi: 25
: |
Trích:
bạn có thể pót sơ đồ nguyên lý của mạch điều khiển động cơ l;ên ko?? xung encoder pha A ban nối vào chân nào vậy? đọc xong code của bạn tớ đang tính làm 1 mạch để tét thử |
|
![]() |
![]() |
![]() |
#12 |
Đệ tử 3 túi
Tham gia ngày: Jun 2006
Bài gửi: 53
: |
![]() Chào bạn,
đây là sơ đồ nguyên lý của mạch điều khiển động cơ của mình, nếu bạn muốn test thử thì cứ dùng khối pic, khối cầu và khối Rs232 để gủi dữ liệu về máy tính là được rồi. thân |
![]() |
![]() |
![]() |
#13 | |
Nhập môn đệ tử
Tham gia ngày: Mar 2007
Bài gửi: 2
: |
Trích:
bạn có thể post lại được không nếu vẽ kỹ lại sơ ồ thì càng tốt |
|
![]() |
![]() |
![]() |
#14 | |
Đệ tử 6 túi
Tham gia ngày: Apr 2009
Bài gửi: 132
: |
Trích:
thanks |
|
![]() |
![]() |
![]() |
Ðiều Chỉnh | |
Xếp Bài | |
|
|