PDA

View Full Version : Anh E nào biết xin giúp mình về động cơ servo.


AnhVu163
01-09-2010, 10:24 AM
Trước mình có làm máy CNC bằng cách sử dụng động cơ bước. Hiện tại mình muốn tìm hiệu về động cơ servo ( AC hoặc DC ). Mình không thể hiệu được làm cách nào ta có thể cho động cơ quay khoảng 0.72 độ chính xác, hay là một giá trị góc nào đó ( để dùng cho nội suy các đường ). Vì theo mình hiểu thì động cơ servo( DC) nó cũng giống nhưng động cơ DC bình thường( Nhưng nó chỉ khác về kết cấu, cách thức chế tạo.....giúp đáp ứng tốt trong điều khiển). Vì ý tưởng điều khiển nào cho phép điều khiển động cơ servo quay 1 góc thật nhỏ ( ví dụ như 1 xung encoder ). Anh E nào biết giúp đỡ mình với.

nhatson.elec
01-09-2010, 06:13 PM
hệ thống servo giống như ta chạy xe theo 1 vạch thẳng, khi ta đi lệch , ta sẽ điều chỉnh sang trái hoặc sang phải sao cho xe lại trở về vạch

hệ thống motor servo cũng vậy, dựa vào encoder , hệ thống sẽ điều khiển motor khi có sai lệch, thuật toán để điều chỉnh thường là PID

b.r

trâuđực
13-01-2011, 11:17 PM
mình đã lam thành công một máy CNC với DC servo tuy nhiên độ chính xác chưa tốt và còn nhiều khuyết điểm nếu gì bạn có thể liên lạc với mình. 01696940958.!

vienhanlam01
06-03-2011, 10:53 PM
bạn muốn điều khiển vị trí cho một động cơ - điều đó có nghĩa là bạn phải viết giao tiếp với động cơ ac servo hoặc dc servo, lúc đó bạn viết chương trình phát xung tốc độ cao, tùy theo động cơ có encoder bao nhiêu xung , mà số xung kích cho nó quay được một vòng có thể 2000 xung , 3500 xung .

tudonghoa_bk
21-03-2011, 10:42 AM
#include <16F877A.h>
#fuses HS,NOWDT, NOPROTECT
#use delay(clock=8000000)
#include <LCD1.c>
#use rs232(baud=9600,xmit=PIN_C6,rcv=PIN_C7)
#use fast_io(b)

int16 CCP1Value;
int16 CCP1OldValue;
BOOLEAN CCP1Captured;
int16 DORONGXUNGON ;
BOOLEAN CHIEU ;
FLOAT GIATRI ;


#int_CCP1
CCP1_isr()
{

//// viết code đếm số xung ở đây, cứ 200 xung = 1vong tùy thuộc vào encoder nữa bạn,
xung++ ;
if(xung == 200) vong++ ;
printf(lcd_putc,"so vong quay: %2d",vong) ;

}
//--------------------------------------------------------------------------
void Init_ccp(void)
{
setup_ccp1(CCP_CAPTURE_RE);
setup_timer_1(T1_INTERNAL|T1_DIV_BY_8);
CCP1Value = 0;
CCP1OldValue = 0;
CCP1Captured = TRUE;
enable_interrupts(INT_CCP1);
enable_interrupts(GLOBAL);
}