PIC Vietnam

PIC Vietnam (http://www.picvietnam.com/forum/index.php)
-   Cơ cấu chấp hành (Actuator) (http://www.picvietnam.com/forum/forumdisplay.php?f=13)
-   -   Động cơ RC Servo (http://www.picvietnam.com/forum/showthread.php?t=287)

motu 25-03-2010 04:45 PM

Trích:

Nguyên văn bởi phamdinh (Post 34161)
RC servo sau khi hack là sẽ bỏ lun cái vôn kế bên trong của nó. Vậy xin hỏi mọi người ta sẽ cần bao nhiêu xung/giây để động cơ quay liên tục 360 độ nhỉ???? Mình sẽ dựa vào tỷ lệ quay của động cơ mà mình mua phải không ạ??? Có thể viết ví dụ cho mình được không?? Mình dùng PIC và quen xài CCS.
Xin cảm ơn mọi người!!

Mình không rành lắm nhưng lúc trước mày mò test con RC này khi áp xung với tần số lớn hơn 50Hz thì nó quay liên tục dù mình o bỏ vôn kế của nó, bạn test thử xem sao.

haruoi 11-05-2010 11:12 PM

Các bác cho em hỏi với nhé: Em vừa mua con động cơ servo có tất cả 6 đầu dây, trong đó có 2 dây cấp nguồn động cơ, còn 4 dây tín hiệu từ encorder. Theo em nghĩ thì trong 4 dây thì có 2 dây cấp nguồn còn 2 dây xuất tín hiệu 0/1 . Các bác hướng dẫn e cách nhận biết các đầu dây và cách thức sử dụng ntn với nhé. Em dùng mạch VDK 89c52. Em phải kết nối các dây ntn để nhận được tín hiệu từ encorder? Mong các bác chỉ giáo.

motu 12-05-2010 12:16 AM

RC servo mình dùng dành cho mấy đồ chơi RC chỉ có 3 dây, 2 dây nguồn 1 dây tín hiệu, loại 6 dây chưa thấy.

hangocminh1989 09-07-2010 12:58 AM

Trích:

Nguyên văn bởi haruoi (Post 35925)
Các bác cho em hỏi với nhé: Em vừa mua con động cơ servo có tất cả 6 đầu dây, trong đó có 2 dây cấp nguồn động cơ, còn 4 dây tín hiệu từ encorder. Theo em nghĩ thì trong 4 dây thì có 2 dây cấp nguồn còn 2 dây xuất tín hiệu 0/1 . Các bác hướng dẫn e cách nhận biết các đầu dây và cách thức sử dụng ntn với nhé. Em dùng mạch VDK 89c52. Em phải kết nối các dây ntn để nhận được tín hiệu từ encorder? Mong các bác chỉ giáo.

vậy là dc servo rùi...bác lên mạng tìm tài liệu nhìu lắm mà...chúc may mắn

vanmanh1988 27-07-2010 10:31 PM

Trích:

Nguyên văn bởi phamdinh (Post 34145)
Uhm. Mình cũng mới mua cái động cơ này giá chỉ có 70k à. Mình mua về chỉ để thử cách hack cho nó quay 360 độ. Mình đang làm đồ án về Omni robot. Tiện thể mình muốn tham khảo mọi người Omni mình nên dùng ba bánh hay bốn bánh nhỉ??? Động cơ RC servo mua cũ ngoài nhật tảo là không có rồi, mà để mua được cùng loại với nhau cũng rất khó. => chỉ còn cách là mua mới, tuy nhiên giá cả thì cần phải nghiên cứu kỹ. Hihihi ^_^ làm đồ án kỳ này nhịn ăn là cái chắc rùi. Đầu tư cho tương lai, xin mọi ngừoi cho mình ít lời khuyên cũng như kinh nghiệm làm robot. Mình xin cảm ơn!!

HI.
mình cũng đang làm cái này.việc điều khiển robot chạy đa hướng không khó. nhưng một điều làm mình vất vả là điều khiển robot chạy đến một vị trí chính xác.
robot chi chạy đúng trên sân thi đấu robocon thôi ,còn trên nền gạch thì không chính xác vì bị trược bánh.
mình làm con này sử dụng 3 bánh omi đặt lệch nhau 120 độ
bạn có gạp trường hợp ở trên không có jif tụi mình trao đổi.
nick: vanmanh_1988

ykien_cuatoi 23-12-2010 08:49 PM

sao thế.đợi hoài không thấy ai đăng hết ta

opto 23-01-2011 09:04 PM

điều khiển một động co rcservo thi dễ rùi. còn điều khiển kiểu này có ai làm được chưa
http://www.youtube.com/watch?v=0il8uEUCGtk

opto 23-01-2011 09:19 PM

đây là code cho 1 servo:

#include "16F84.H"
#define CP_off |= 0x3FFF // copy protect off for 16F84
#pragma config CP_off, PWRTE=on, WDTE=off, FOSC=XT

/* assign names to ports and pins */
#pragma bit SERVO @ PORTB.1
#pragma bit RESET_S @ PORTA.0
#pragma bit TURN_C @ PORTA.1
#pragma bit TURN_A @ PORTA.2

/* function prototypes */
void delay_min (void);
void delay_var (char n);
void pause (void);

void main( void)
{
PORTB = 0b.0000.0000; /* initial value */
TRISB = 0b.0000.0000; /* Port B all o/p */
PORTA = 0b.0.0111; /* initial value */
TRISA = 0b.1110.0111; /* xxx0 0001 */

char position=107; // total time 1.5ms center position

while(1) // endless loop
{
SERVO=1;
delay_min();
if (position>0)
delay_var(position);
SERVO=0;
pause(); // 20 ms delay before next pulse
if ((TURN_C==0)&&(position<255))
position++;
if ((TURN_A==0)&&(position>0))
position--;
if (RESET_S==0)
position=107; // center the servo
}

} // end of main


void delay_min (void) // 750 uS including overhead
{
char n=248;
do ; while(--n>0);
nop(); // padding to produce precise time
}
// delay = 2 + 2 + (n x 3) -1 +1 +2 = 750us @ 4MHz
// 2 for call, 2 for preset n, (n x 3)-1 for loop, 1 padding, 2 for return

void delay_var (char n) // adc x 7 uS = 1790us max.
{
do {nop(); nop(); nop(); nop();} while(--n>0);
}
// delay= 2 + 2 + (t x 7) -1 +2 us @ 4MHz

void pause (void) // delay between pulses approx 20 ms
{
char n;
for (n=0;n<26;n++)
{
delay_min(); // 750 us
}
}

opto 23-01-2011 09:21 PM

còn đây là code cho 4 servo. bạn nào quan tâm chúng ta cùng mổ xẻ nhé:


#include "16C711.H" // Change for your CPU
#include "int16CXX.h"

#pragma config WDTE=off, FOSC=XT, BODEN=on
#pragma config |= 0x3FB0 // Code protect off

char servo_pin; // Variable for port pins
char servo[4]; // Servo position values
char servo_num; // Pointer to current servo position value
char position; // Working servo position value
char window; // 2ms - position value
char boogies; // Interrupt counter
char loops; // Loop counter
char current; // same as servo_num, but outside of interrupt
bit direction; // direction of travel flag

#pragma origin 4

// With .1ms resolution, we can control the servo in 10% steps:
// 10 = 0 degrees (or 100% backward motion) 1.0ms
// 11 = 18 degrees (or 80% backward motion) 1.1ms
// 12 = 36 degrees (or 60% backward motion) 1.2ms
// 13 = 54 degrees (or 40% backward motion) 1.3ms
// 14 = 72 degrees (or 20% backward motion) 1.4ms
// 15 = 90 degrees (or stopped) 1.5ms
// 16 = 108 degrees (or 20% forward motion) 1.6ms
// 17 = 126 degrees (or 40% forward motion) 1.7ms
// 18 = 144 degrees (or 60% forward motion) 1.8ms
// 19 = 162 degrees (or 80% forward motion) 1.9ms
// 20 = 180 degrees (or 100% forward motion) 2.0ms
// So our pulse routine needs to run 1ms + x tenths.
// Next version will (maybe) use hundredths, from 100 to 200.

interrupt scan_servos() {
PORTA = 2; // indicate where we are
T0IF = 0; // Clear TMR0 interrupt flag
int_save_registers // Save status & W reg
char fsr; fsr = FSR; // Save FSR
OPTION = 8; // No TMR0 prescaler
servo_pin = 1; // Set up for first servo
for(servo_num = 0; servo_num <=3; servo_num++) {
position = servo[servo_num]; // get pulse width value
window = 30 - position; // Figure out remainder of 2ms window
PORTB = servo_pin; // Turn on servo pin
TMR0 = 0; // Clear TMR0
do {
TMR0 = 11; // Adjust for execution time
while ( TMR0 < 100 ); // wait 100 uS
} while( --position > 0 ); // for as many as we need
PORTB = 0; // Turn off all servo pins
// Now we have to burn up the remainder of the 2ms total pulse
// window...
if(window > 0) {
do {
TMR0 = 11; // Adjust for execution time
while ( TMR0 < 100 ); // wait 100 uS
} while(--window > 0); // for as many as we need
}
// And set us up for the next servo in line...
servo_pin = servo_pin*2; // Set up for next servo in line
}

// Now we set up for an 8ms delay until the ext interrupt.
// We just spent 8ms pulsing the servos, so in another 12 we
// need to do it again.
int_restore_registers // Retrieve the registers
FSR = fsr; // Restore FSR
OPTION = 5; // 256 prescaler for TMR0
TMR0 = 187; // Set up for 12ms interrupt
boogies++; // Increment boogie counter
PORTA = 0;
}


void main(){
T0CS = 0; // T0 on instruction cycle
T0SE = 1; // rising edge
clearRAM(); // start with clear RAM
PORTA = 0;
PORTB = 0; // All outputs off
TRISA = 0;
TRISB = 0; // Port B is all output
OPTION = 5; // Prescaler set to 256
direction = 0;

// Set all servo position registers to the 90 degree mid point.
for(current = 0; current < 4; current++) {
servo[current] = 15;
}
TMR0 = 131; // Set up timer for 8ms
T0IE = 1; // Enable TMR0 interrupt
GIE = 1; // Duh.

// The boogie counter gets updated every 20ms, so 50 boogies
// equals one second. Tip of the hat to bogomips.

// First wait 2 seconds to let us see how the servos do at deadband
while(boogies < 100); // Loop for 2 seconds

// Now do 60 loops of 10% steps once a second, full motion
// range from 10 to 20 and back. Should take 1 minute.
direction = 1;
loops = 0;
PORTA = 1;
do {
boogies = 0; // clear boogie counter
while( boogies < 10 ); // Wait 1/5 second
for(current=0; current < 4; current++) {
if(servo[current] == 25) direction = 0;
if(servo[current] == 5) direction = 1;
if(direction == 0) servo[current]--;
if(direction == 1) servo[current]++;
}
} while(++loops < 60);

// Now recenter the servos for 2 seconds
for(current=0; current < 4; current++) {
servo[current] = 15;
}
boogies = 0;
while(boogies < 100);

// Now we finish up with 10 full-travel swings, 10 to 20,
// with a 2-second delay in between.

loops = 0;
PORTA = 0xD;
do {
boogies = 0;
while(boogies < 100); // 2 second delay
for(current=0; current < 4; current++) {
if(servo[current] == 25) direction = 0;
else if(servo[current] == 5) direction = 1;
else if(servo[current] > 5 && servo[current] < 25) direction = 0;
if(direction == 0) servo[current] = 5;
if(direction == 1) servo[current] = 25;
}
} while(++loops < 10);

// And loop forever.
main();
}

langtul42 08-04-2011 10:34 PM

help me !!!
 
pac nao co tai lieu ve dong co rc servo thi share cho minh voi ,dang lam do an ma tim hoai hok thay,......

ah ! minh dag co ban 2 con cam bien sieu am SRF 05 , hoan toan moi , chua qua su dung , gia moi con la 24 USD ,. ban nao co nhu cau thi lien he voi minh nha : 01688956982

delta21 19-04-2011 01:00 AM

bác opto lấy đoạn code trên ở đâu thê!!!

NBTrung 30-08-2011 01:37 PM

anh falleaf cho em xin tài liệu rc servo với ạ, link post #1 die rùi.
Nếu k tiện up lên thì cho e vào mail dont.surrender@yahoo.com.vn

dinhquang2410 27-09-2011 10:34 AM

minh dang lam luan van ve dong co servoRC su dung trong cac thiet bi dieu khien tu xa nhu do choi dieu khien may bay cac bac co ai biet ve phan mem viet code va lam trinh ko chi minh voi,cach thuc hien nhu the nao.thks

tuand1 09-12-2011 10:42 AM

tìm hoài cũng thấy tài liệu về Servo motor gửi lên cho các bác tham khảo

tuand1 09-12-2011 10:44 AM

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

chuong_prof 29-02-2012 10:16 AM

điều khiển >10 RC servo
 
Trích:

Nguyên văn bởi opto (Post 41648)
điều khiển một động co rcservo thi dễ rùi. còn điều khiển kiểu này có ai làm được chưa
http://www.youtube.com/watch?v=0il8uEUCGtk

Có ai làm được cái này chưa ta?


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

Tên diễn đàn: vBulletin Version 3.8.11
Được sáng lập bởi Đoàn Hiệp.
Copyright © PIC Vietnam