PDA

View Full Version : Điều khiển động cơ servo


KDD04
31-03-2008, 06:30 PM
Ai biết thì giúp mình với. Mình đang cần code để điều khiển động cơ theo yêu cầu sau:
Mạch điều khiển động cơ servo:
Nhấn nút ON mở động cơ (coi như đây là nút nhấn cho phép động cơ hoạt động hay điều chỉnh tốc độ).
Nhấn nút OFF động cơ đang quay thì dừng lại.
Nhấn FOR động cơ quay thuận (led đầu tiên hiển thị số 1).
Nhấn REV động cơ quay ngược(led đầu tiên hiển thị số 0).
(Khi chuyển giữa hai chế độ thuận ngược: có thể nhấn trực tiếp không cần phải tắt động cơ (không cần nhấn nút OFF) ).
Các nút số dùng để nạp tốc độ động cơ. Khi nạp tốc độ thì hiển thị lên 3led 7 đoạn.
Đồng thời khi động cơ đang hoạt động ổn định thì cũng hiển thị tốc độ lên 3 led.
Sau khi nạp tốc độ cho động cơ thì nhấn OK động cơ mới hoạt động.
(Mình có sơ đồ nguyên lý mà không biết làm sao post lên).

Falleaf:
http://dientuvietnam.net/forums/showthread.php?t=1419
Xem bài này để biết cách post hình lên diễn đàn

KDD04
02-04-2008, 01:58 AM
Cảm ơn anh Falleaf nhiều.Mong anh chỉ em thêm

hezman1987
07-05-2009, 11:12 PM
Hix đúng cái mình cần . lâu quá rồi ko biết bạn có thể share tài liệu nghiên cứu cho mình được ko . email :hezman1987@gmail.com
thx

thichtatca
23-06-2009, 10:23 AM
bạn KDD04 và hezman1987 có bài này không cho mình tham khảo với cám ơn 2 bạn nhìu

Vo Hoang SOn
09-07-2009, 03:46 PM
Hi Ban,

Minh thay trang web nay rat hay .Mach dieu khien DC servo motor .Rat tiec la minh chua thu lam no bao gio.Hy vong anh em dien dan lam duoc no!
http://elm-chan.org/works/smc/report_e.html

LeDuc
11-07-2009, 06:38 PM
truoc day toi da lam xong cai driver cho dc servo , dieu khien vi tri hay toc do gi cung duoc ..
Ban can gi cu lien he voi toi : Thuyhu_letinh@yahoo.com

Vo Hoang SOn
13-07-2009, 03:00 PM
Con mot trang web chi cach thuc hien lam mach DC servo cung rat hay Minh xin gioi thieu den cac Ban.neu Ban nao lam thanh cong thi chia se nhe
http://www.embeddedtronics.com/uhuservo.html
Rat tiec la minh phai mua source cua Tac gia.Con mach PCB thi no cho minh layout roi.

Chuc cac Ban thanh cong

loanmapdit
19-08-2009, 11:04 AM
cảm ơn bạn .mình đang nghiên cứu về nó!

congson36
15-11-2010, 11:16 AM
thanks các bác rất nhiều

dtbamboo36
21-11-2010, 05:22 PM
xin các bác giúp đỡ....!
em đang làm đề tài vi xử lý dùng pic16f877a điều khiển động cơ dc như sau:
+dùng bàn phím ma trận để nhập giá trị để băm xung (từ 000-255).
+dùng lcd hiển thị giá trị từ bàn phím.
+sau khi nhập 3 số,so sánh vói giá trị 256 nếu nhỏ hơn thì xuất ra băm xung điều khiển động cơ;nếu vượt quá thì nhập lại.
em dùng ngôn ngữ probasic để viết,biên dịch thành công nhưng ko chạy đúng yêu cầu,em đã kiểm tra kỹ (nhưng ko pit tai em dốt hay sao nữa) mà ko tim được lỗi...!
mong các bác giúp đỡ..!thành thật cám ơn mọi người
dưới đây là code và mạch mô phỏng của em,xin các bác cho ý kiến...!
nếu chị nào có thể thành ý muốn giúp đỡ cũng được lun...!hi

anhtuhaui0512
10-10-2011, 12:10 AM
thank anh nhieu a.

tungoctran
05-07-2013, 12:04 AM
chào các anh các chị
Em đang dùng 4 dc servo MG946R để điểu khiển cánh tay máy như clip bên dưới .còn mấy ngày nữa báo cáo rồi mà chưa chạy mong anh chị giúp em
em dung con 16f877a qua mach nap big kit2 va driver starter1 [mua ở thiên minh]
đây là đoạn code: tan so 16MHZ
#include <16f877A.h>
#include <def_877a.h>
#device *=16 ADC=8
#FUSES NOWDT, HS, NOPUT, NOPROTECT, NODEBUG, BROWNOUT, NOLVP, NOCPD, NOWRT
#use rs232(baud=9600,Xmit=PIN_C6,rcv=PIN_C7)
#use rs232
#use msdelay(clock=160000000)
#INT_RA
#INT_RB;
#INT_RC;
#INT_RD;
char dem;
char value,value1,value2,value3;
#INT_TIMER0
Void set_servo() {
set_timer0(164);
dem++; //bien dem tang thêm 1 giá tri moi 0,1ms
if (dem >= 200) // 200*0,1=20ms (xung 50Hz)
{
dem=0; //
output_high(PIN_A1);
output_high(PIN_B1);
output_high(PIN_C1);
output_high(PIN_D1);
msdelay(5000);
}
if (dem >= value)output_LOW(PIN_A1);
if (dem >= value1)output_LOW(PIN_B1);
if (dem >= value2)output_LOW(PIN_C1);
if (dem >= value3)output_LOW(PIN_D1);
msdelay(5000);
}


void main()
{
set_tris_a(0);
OUTPUT_A(0xff);
set_tris_b(0x00);
OUTPUT_B(0xff;
set_tris_c(0x00);
OUTPUT_C(0xff);
set_tris_d(0x00);
OUTPUT_D(0xff);
enable_interrupts(int_timer0); //cho phép ng?t timer0
enable_interrupts(global);
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_4); //chon t?n s? cho timer0 t? clock chính (16MHz)
set_timer0(156); //cài ??t timer ?? timer0 tràn m?i 0,1ms
while(true) //vòng lap
{
value=12;
value1=12;
value2=12;
value3=13;
}
}

mr.spkt
20-08-2013, 03:27 PM
chào các anh các chị
Em đang dùng 4 dc servo MG946R để điểu khiển cánh tay máy như clip bên dưới .còn mấy ngày nữa báo cáo rồi mà chưa chạy mong anh chị giúp em
em dung con 16f877a qua mach nap big kit2 va driver starter1 [mua ở thiên minh]
đây là đoạn code: tan so 16MHZ
#include <16f877A.h>
#include <def_877a.h>
#device *=16 ADC=8
#FUSES NOWDT, HS, NOPUT, NOPROTECT, NODEBUG, BROWNOUT, NOLVP, NOCPD, NOWRT
#use rs232(baud=9600,Xmit=PIN_C6,rcv=PIN_C7)
#use rs232
#use msdelay(clock=160000000)
#INT_RA
#INT_RB;
#INT_RC;
#INT_RD;
char dem;
char value,value1,value2,value3;
#INT_TIMER0
Void set_servo() {
set_timer0(164);
dem++; //bien dem tang thêm 1 giá tri moi 0,1ms
if (dem >= 200) // 200*0,1=20ms (xung 50Hz)
{
dem=0; //
output_high(PIN_A1);
output_high(PIN_B1);
output_high(PIN_C1);
output_high(PIN_D1);
msdelay(5000);
}
if (dem >= value)output_LOW(PIN_A1);
if (dem >= value1)output_LOW(PIN_B1);
if (dem >= value2)output_LOW(PIN_C1);
if (dem >= value3)output_LOW(PIN_D1);
msdelay(5000);
}


void main()
{
set_tris_a(0);
OUTPUT_A(0xff);
set_tris_b(0x00);
OUTPUT_B(0xff;
set_tris_c(0x00);
OUTPUT_C(0xff);
set_tris_d(0x00);
OUTPUT_D(0xff);
enable_interrupts(int_timer0); //cho phép ng?t timer0
enable_interrupts(global);
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_4); //chon t?n s? cho timer0 t? clock chính (16MHz)
set_timer0(156); //cài ??t timer ?? timer0 tràn m?i 0,1ms
while(true) //vòng lap
{
value=12;
value1=12;
value2=12;
value3=13;
}
}

sao tớ ko thấy clip nào hết vậy?
http://www.youtube.com/watch?v=7-3hXQz1LCU