PIC Vietnam

Go Back   PIC Vietnam > Robotics > Thực hành

Tài trợ cho PIC Vietnam
Trang chủ Đăng Kí Hỏi/Ðáp Thành Viên Lịch Tìm Kiếm Bài Trong Ngày Ðánh Dấu Ðã Ðọc Vi điều khiển

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...

Trả lời
 
Ðiều Chỉnh Xếp Bài
Old 19-09-2006, 06:00 PM   #286
namqn
Trưởng lão PIC bang
 
Tham gia ngày: Feb 2006
Nơi Cư Ngụ: Tp. HCM, Việt Nam
Bài gửi: 3,025
:
Send a message via Yahoo to namqn
Trích:
Nguyên văn bởi bluepine View Post
Khi em điều rộng xung với tần số 19500Hz, dutycycle = 100% để điều khiển không tải động cơ, nhưng em đếm số vòng động cơ hồi tiếp về không ổn định.
khi chu kì lấy mẫu càng giảm thì độ dao động càng cao , đây là các giá trị tốc độ đưa về (vòng/phút) (em dùng RS232 để đưa tốc độ về hiển thị trên máy tính, chu kì láy mẫu là 0.8s, nếu giảm xuống sai lệch còn lớn hơn nhiều )
50 1750 2000 1750 2000 1750 1750 2000 1750 1750 2
000 1750 1750 2000 1750 1750 2000 1750 1750 1750 2
000 1750 1750 2000 1750 1750 1750 1750 1750 1750 1
750 1750 1750 1750 1750 1750 2000 1750 1750 1750 1
750 1750 1750 2000 1750 1750 1750 1750 1750 2000 1
750 1750 1750 1750 1750 1750 1750 2000 1750 1750 1
750 1750 1750 1750 2000 1750 1750 1750 1750 1750 1
750 1750 1750 2000 1750 1750 1750 1750 1750 1750 1
750 2000 1750 1750 1750 1750 1750 1750 1750 2000 1
750 1750 1750 1750 1750 1750 1750 1750 1750
các anh có thể giải thích được không?
mến
Anh không nhớ encoder của em có bao nhiêu xung, nhưng kết quả như vậy chắc chắn là có vấn đề (có nhiều khâu cần xem xét: tín hiệu encoder đưa về, thuật toán tính tốc độ).

Ngày trước sinh viên của anh làm với encoder 100 xung/vòng cũng chỉ có sai lệch 60 vòng/phút khi đọc tốc độ không tải (thời gian lấy mẫu là 100 ms thì phải, không nhớ rõ lắm).

Thân,
__________________
Biển học mênh mông, sức người có hạn.

Đang gặp vấn đề cần được giúp đỡ? Hãy dành ra vài phút đọc luồng sau:
http://www.picvietnam.com/forum/showthread.php?t=1263
namqn vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 20-09-2006, 10:42 AM   #287
bluepine
Đệ tử 3 túi
 
Tham gia ngày: Jun 2006
Bài gửi: 53
:
Encoder của em 500 xung, còn về giải thuật đếm thì em dùng timer0 để đọc xung về (hệ số chia 2), em đặt giá trị đầu timer0 là 6, khi đếm đến 250 thì timer0 tràn (tức là 500 xung) em tăng giá trị xung lên 1.
em dùng timer1 để làm chu kì lấy mẫu, khi hết chu kì lấy mẫu (timer1 ngắt) thì em cho hiển thị giá trị đếm về máy tính.
Em cũng nghĩ có thể do tín hiệu từ encoder đưa về có vấn đề nhưng em thắc mắc sao giá trị đưa về chỉ thay đổi ở 2 giá trị thôi (như ví dụ trên là 2000 và 1750) và vài chu kì lấy mẫu thì nó mới thay đổi 1 lần (vì nhiễu thì phải gây thay đổi tín hiệu trong mỗi chu kì chứ)
em gửi kèm theo file chương trình viết trên CCsc , các anh xem hộ
mến
File Kèm Theo
File Type: rar PICvietnam.rar (2.1 KB, 505 lần tải)
bluepine vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 20-09-2006, 01:27 PM   #288
falleaf
PIC Bang chủ
 
falleaf's Avatar
 
Tham gia ngày: May 2005
Bài gửi: 2,631
:
Send a message via Yahoo to falleaf
Giá trị của timer là từ 0 đến 255. Nếu em đặt giá trị đầu là 6, thì nó chỉ đếm được đến 249 là tràn rồi, chứ không phải 250!. Vì 256 là tổng số 2^8, nhưng mà từ 0 đến 255 là 256 số.

Anh không biết em viết cụ thể thế nào, nhưng con số em đưa ra là có vấn đề rồi. Như vậy, nó chạy đến 255 là tràn, hay có nghĩa là đến 249 thì sẽ tràn.

Em có thể post chương trình đoạn đọc encoder lên đây để mọi người cùng quan sát.

Ngoài ra, khi làm các phần test về hoạt động, em cần thực hiện việc truyền số liệu ở dạng nguyên gốc. Có nghĩa là em nên truyền về dạng số xung, chứ không nên truyền về dạng đã tính toán thành vận tốc, như vậy rất khó theo dõi sự đúng sai.

Điểm thứ ba, đó là em phải hiểu, khi em điều khiển độ rộng xung như vậy, em đặt một giá trị fix nào đó của pwm để điều khiển, thì nó có sự lên xuống về tốc độ, cũng không có gì lạ. Nhưng hiện tượng mà chỉ có sai đúng 2 số như vậy, rõ ràng em lập trình sai rồi.

Em kiểm tra lại điểm thứ nhất anh nói, về con số đặt, và post chương trình lên cho mọi người cùng xem.

Chúc vui
falleaf vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 20-09-2006, 06:42 PM   #289
manhdc701
Nhập môn đệ tử
 
Tham gia ngày: Sep 2006
Bài gửi: 1
:
minh thay y tuong nhu the la rat hay , nhung minh cung ban khoan ve tuong lai cua y tuong nay ?
manhdc701 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 20-09-2006, 09:24 PM   #290
scentoflove
Đệ tử 6 túi
 
Tham gia ngày: Mar 2006
Bài gửi: 129
:
Đọc encoder thì em xài ngắt ngoài, tác động cạnh lên, encoder 400 xung đọc sai số 25x/vòng ở PWM 100%.
Việc sai số do đọc encoder em nghĩ có nhiều nguyên nhân do đoạn code giao tiếp RS232 đặt ko tốt có thể làm trể việc đọc encoder. Em viết code đọc encoder bằng ngắt như sau.

Chương trình ngắt RB0 (pha A) -> encoder+1 khi ngắt
Chương trình ngắt RB7 (index) -> clear encoder=0, set cờ RS=1
Chương trình chính code giao tiếp RS232 khi có cờ ngắt, xuất xong set cờ RS=0

Em ko up lên code được vì hiện giờ đã sữa code đó lại cho 4331 (QEI đọc rất chỉnh xác)

thay đổi nội dung bởi: scentoflove, 20-09-2006 lúc 09:27 PM.
scentoflove vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 21-09-2006, 08:58 AM   #291
hoanf
Đệ tử 3 túi
 
Tham gia ngày: Jun 2006
Bài gửi: 51
:
Trích:
Nguyên văn bởi manhdc701 View Post
minh thay y tuong nhu the la rat hay , nhung minh cung ban khoan ve tuong lai cua y tuong nay ?
Mình chỉ góp ý nhỏ thôi.
Ban có ý kiến về ý tưởng gì thì nên trích dẫn trong bài viết của mình để người khác dễ hiểu ý kiến của bạn nha
Thân
hoanf
hoanf vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 21-09-2006, 09:34 AM   #292
bluepine
Đệ tử 3 túi
 
Tham gia ngày: Jun 2006
Bài gửi: 53
:
Trích:
Nguyên văn bởi falleaf View Post
Giá trị của timer là từ 0 đến 255. Nếu em đặt giá trị đầu là 6, thì nó chỉ đếm được đến 249 là tràn rồi, chứ không phải 250!. Vì 256 là tổng số 2^8, nhưng mà từ 0 đến 255 là 256 số.

Anh không biết em viết cụ thể thế nào, nhưng con số em đưa ra là có vấn đề rồi. Như vậy, nó chạy đến 255 là tràn, hay có nghĩa là đến 249 thì sẽ tràn.

Em có thể post chương trình đoạn đọc encoder lên đây để mọi người cùng quan sát.

Ngoài ra, khi làm các phần test về hoạt động, em cần thực hiện việc truyền số liệu ở dạng nguyên gốc. Có nghĩa là em nên truyền về dạng số xung, chứ không nên truyền về dạng đã tính toán thành vận tốc, như vậy rất khó theo dõi sự đúng sai.

Điểm thứ ba, đó là em phải hiểu, khi em điều khiển độ rộng xung như vậy, em đặt một giá trị fix nào đó của pwm để điều khiển, thì nó có sự lên xuống về tốc độ, cũng không có gì lạ. Nhưng hiện tượng mà chỉ có sai đúng 2 số như vậy, rõ ràng em lập trình sai rồi.

Em kiểm tra lại điểm thứ nhất anh nói, về con số đặt, và post chương trình lên cho mọi người cùng xem.

Chúc vui
Cảm ơn anh F, em sẽ kiểm tra lại chương trình. còn code em đã gửi file Picvietnam.rar ở bài trước đó,
mến
bluepine vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 21-09-2006, 11:04 AM   #293
bluepine
Đệ tử 3 túi
 
Tham gia ngày: Jun 2006
Bài gửi: 53
:
Talking

Hi Hi, anh F đoán chính xác, em bị lỗi giải thuật, em đã sửa chương trình lại rồi
đây là kết quả số xung đếm được trong mỗi 0.1s
1720 1725 1732 1727 1746 1733 1729 1730 1730 1733 1716 1711 1730 1712 1733 1723 1723 1720 1736 1725 1715 1714 1713 1728 1734 1726 1719 1723 1719 1726 1724 1708 1722 1739 1724 1736 1737 1714 1716 1728 1714 1735 1720 1720 1734 1724 1730 1726 1718 1732 1726 1729 1716 1724 1719 1712 1733 1734 1731 1717 1722 1723 1732 1727 1724 1719 1729 1720 1727 1719 1711 1716 1722 1722 1719 1723 1724 1723 1725 1712 1716 1725 1720 1725 1721 1736 1712 1720 1716 1731 1707 1718 1711 1711 1711 1718 1711 1706 1716 1732 1717 1720 1718 1707 1722 1716 1724 1712 1711 1717 1732 1728 1728 1734 1726 1727 1720 1729 1724 1718 1727 1724 1733 1726 1718 1718 1715 1715 1722

tôi gửi chương trình viết bằng CCsc lên cho các bạn tham khảo
mến,
File Kèm Theo
File Type: rar Chuong trinh dem xung.rar (3.6 KB, 674 lần tải)
bluepine vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 21-09-2006, 12:44 PM   #294
falleaf
PIC Bang chủ
 
falleaf's Avatar
 
Tham gia ngày: May 2005
Bài gửi: 2,631
:
Send a message via Yahoo to falleaf
picvietnam.c

Code:
#include <16F877A.h>
#fuses NOWDT,NOLVP,HS
#use delay (clock=20000000) //20Mhz

#use rs232(baud=2400, xmit=PIN_C6, rcv=PIN_C7, parity=N, bits=8)
#include <7Segments_Led_Display.c>
#include <init_timer0.c>

#byte TMR2 = 0x11
#byte PR2 = 0x92
#byte CCPR1L = 0x15
#byte CCPR1H = 0x16
#byte CCP1CON = 0x17
int16 i = 0;
int16 j = 0;
int16 counted_round_value = 0x00;
int16 update_counted_round_value = 0x00;


void convert_16bits_to_decimal_digit(int16 counted_round_value1) // calculate to display on 7_segment leg Max value 9999 or 0x270F
{
   fourth_digit = counted_round_value1 / 1000;
   third_digit = (counted_round_value1 % 1000) / 100;
   second_digit = ((counted_round_value1 % 1000) % 100) / 10;
   first_digit = ((counted_round_value1 % 1000) % 100) % 10;
}


#INT_TIMER0 // ngat timer0 tang bien dem len 1
void timer0_int()
{
      counted_round_value++;

}

#INT_TIMER1 // ngat timer0 tang bien len 1
void timer1_int() // moi lan timer1 tran la 0.02s
{
   TMR1_L = START_VALUE_TIMER1_L;
   TMR1_H = START_VALUE_TIMER1_H;


   if (j == 5){ // chu ki lay mau 0.02 * 5 = 0.1s
      j = 0;

      update_counted_round_value = counted_round_value*500 + get_timer0(); // so vong quay trong 1 phut

      counted_round_value = 0;

      printf("%ld\t",update_counted_round_value); // gui so xung cap nhat ve may tinh qua RS232
   }
   else

      j++;
}



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,PR2,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 main()
{
   int8 timer0_value;

   set_tris_a(0xff);

   init_PWM(19500);
   init_timer0();

   set_pwm1_duty(500); //set the duty cycle = 500*1/clock* T2div (T2div is in setup_timer2)

                                                 //= 500/20000000*1 = 25uS (~25%)

      while(true){

   convert_16bits_to_decimal_digit(update_counted_round_value); // tinh ra tung digit de hien thi
   display_RPM_digit(); // hien thi tren led 7 doan
   }
}
falleaf vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 21-09-2006, 12:50 PM   #295
falleaf
PIC Bang chủ
 
falleaf's Avatar
 
Tham gia ngày: May 2005
Bài gửi: 2,631
:
Send a message via Yahoo to falleaf
Code:
#include <16F877A.h>
void init_PWM(int16 frequency){

   setup_ccp1(CCP_PWM); // initiate PWM
   PR2 = 20000000/4/frequency - 1; // set PWM period
}
Anh lấy một đoạn chú thích chương trình thôi, vì anh cũng chỉ vừa mở lên và coi lướt qua, chưa xem kỹ nữa. Nhưng anh thấy ở đây em viết 20000000/4/f - 1. Công thức tính thì là như vậy, nhưng em phải nhớ rằng, cứ mỗi một lần thêm một công thức tính, thì máy sẽ phải generate lệnh để tính. Vì vậy, thay vì thực hiện chia, thì em ghi thẳng con số vào 5000000/f chẳng hạn.

Rồi với các con số khác cũng vậy, em tính toán ở đâu đó, rồi ghi thẳng vào.

Về thuật toán tính toán, mọi người xem lại coi có vấn đề gì không nhé.

Anh em chú ý là post thẳng chương trình lên ở dạng code, người khác có thể đọc được ngay, khỏi mất công phải lưu rồi mở lại. hơn nữa, từng đoạn code có thể trực quan sinh động, có thể xem và bình luận được. Như vậy sẽ có lợi hơn nhiều.

Chúc vui
falleaf vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 22-09-2006, 09:38 AM   #296
bluepine
Đệ tử 3 túi
 
Tham gia ngày: Jun 2006
Bài gửi: 53
:
Smile

Chào mọi người,
1/ Phần mạch RS232 em sẽ đọc lại phần botloader để sửa.
2/ Chuẩn ICSP-BLD của picvietnam ở luồng nào vậy anh F, anh gửi cho em được không.
3/ "Nếu để tăng độ mịn, anh nghĩ em nên dùng cả hai ngắt trên hai chân. Như vậy, lợi thế nhất là em dùng interrupt onchange trên portb. Vì như vậy, em có thể đọc được độ mịn lên gấp 4 lần, khi đọc encoder." Phần này, em chưa hiểu rõ lắm, chức năng interrupt on change thì em biết, nhưng từ 2 tín hiệu xung đưa về thì làm sao tăng độ nhạy lên 4 lần, anh giải thích thêm cho em.
bluepine vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 22-09-2006, 10:17 AM   #297
falleaf
PIC Bang chủ
 
falleaf's Avatar
 
Tham gia ngày: May 2005
Bài gửi: 2,631
:
Send a message via Yahoo to falleaf
http://www.picvietnam.com/forum//showthread.php?t=224

Em xem luồng này, xem bài số 13. Nếu như bây giờ em đọc cả cạnh lên và cạnh xuống của encoder của cả hai kênh A, B, thì như vậy em sẽ thấy rằng độ phân giải sẽ tăng lên 4 lần.

Nếu em chỉ đọc cạnh lên của kênh B chẳng hạn, thì bây giờ em đọc cạnh lên B, lên A, xuống B, xuống A. Như vậy độ phân giải sẽ tăng lên 4.

Như vậy, với encoder 500 xung/vòng, em có thể đọc lên tới 2000 xung/vòng, đây là kỹ thuật cơ bản về encoder thôi.

http://dientuvietnam.net/forums/showthread.php?t=2637
Luồng này là về chuẩn ICSP_BLD của picvietnam (bên dientuvietnam, anh quên viết bài bên picvietnam, nhưng nó có trong bài bootloader của Chính, anh sẽ bổ sung sau).

Chúc vui.
falleaf vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 22-09-2006, 11:08 PM   #298
scentoflove
Đệ tử 6 túi
 
Tham gia ngày: Mar 2006
Bài gửi: 129
:
Chuẩn 5x2 em rất thích nhưng ko kiếm được header cũng như ko kiếm được cable ở Nhất Tảo (em chỉ thấy 1 lần sợi cable 5x2 của thằng bạn hỏi nó mua ở đâu, nó nói bạn nó mua dùm )

Em đang vẽ lại module mạch dk nên phân vân ko có link kiện để theo chuẩn 5x2.

Anh F cho em hỏi thêm mục đích của việc mịn hóa encoder, vì nếu để phân biệt chiều của encoder thì chỉ cần ngắt pha A, đọc tín hiệu pha B (0 or 1) là được -> em nghĩ đọc encoder qua kĩ sẽ dẫn đến chậm chương trình chính (tính toán PID số thực)

thay đổi nội dung bởi: scentoflove, 22-09-2006 lúc 11:18 PM.
scentoflove vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 23-09-2006, 07:12 PM   #299
gà mờ
Nhập môn đệ tử
 
Tham gia ngày: Mar 2006
Bài gửi: 10
:
cac anh ơi chuyển mấy cái mạch câu h vsf encoder về dạng pdf đi đê em download với
thanks
gà mờ vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 23-09-2006, 07:37 PM   #300
ntc
Đệ tử 8 túi
 
ntc's Avatar
 
Tham gia ngày: Oct 2005
Nơi Cư Ngụ: HCM city
Bài gửi: 264
:
Send a message via Yahoo to ntc
Trích:
Chuẩn 5x2 em rất thích nhưng ko kiếm được header cũng như ko kiếm được cable ở Nhất Tảo (em chỉ thấy 1 lần sợi cable 5x2 của thằng bạn hỏi nó mua ở đâu, nó nói bạn nó mua dùm )

Em đang vẽ lại module mạch dk nên phân vân ko có link kiện để theo chuẩn 5x2.
Cáp và đầu bấm 5x2, bạn có thể mua tại tiệm ông Thuần trong chợ Nhật Tảo. Chỗ đó cũng có bán header 5x2.

Cũng có thể ghe qua cái cửa hàng Tương Lai (nằm trên đường 3/2, cũng gần gần khu Nhật Tảo) để xem thử nó còn không.

Bí quá thì có thể liên hệ với mình.

__________________

ntc vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Trả lời

Ðiều Chỉnh
Xếp Bài

Quyền Sử Dụng Ở Diễn Ðàn
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is Mở
Smilies đang Mở
[IMG] đang Mở
HTML đang Tắt

Chuyển đến


Múi giờ GMT. Hiện tại là 05:50 AM.


Được sáng lập bởi Đoàn Hiệp
Powered by vBulletin®
Page copy protected against web site content infringement by Copyscape
Copyright © PIC Vietnam