Tải bản đầy đủ (.pdf) (14 trang)

Tài liệu chương 3: Thiết kế hệ Pan-Tilt ppt

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (721.8 KB, 14 trang )

chương 3: Thiết kế hệ Pan-Tilt
3.1. Yêu cầu:
- Đề tài yêu cầu thiết kế 1 hệ Pan-Tilt có thể quay quanh 2
trục Ox – Tilting, và Oy – Panning.

- Trên hệ Pan-Tilt ta gá cảm biến siêu âm SRF04, hệ Pan-Tilt
quay mang theo c
ảm biến và yêu cầu vẽ được biên dạng 2D của
vật đặt trước cảm biến.
3.2. Thiết kế:
- Dựa theo yêu cầu đề tài, xem cấu trúc của 1 hệ Pan-Tilt và
tham kh
ảo 1 số mẫu Pan-Tilt trên mạng, chúng em đã thiết kế được
1 hệ Pan-Tilt cơ bản, đáp ứng được yêu cầu mang SRF04 quay
quanh 2 trục Ox, Oz dễ dàng.
O
Z
Y
X
- Hai động cơ được sử dụng để thiết kế là 2 động cơ RC
Servo của hãng Futaba (các thông số như trình bày ở phần động cơ
servo), momen của chúng là 3.2 kg.cm đáp ứng đủ yêu cầu mang
sensor SRF04 quay mà không s
ợ bị quá tải.
- Cảm biến siêu âm SRF04 được gá trên top của hệ Pan-Tilt.
- Góc quay t
ối đa của mỗi servo là 120
0
(cả 2 phía), góc mở
của bộ phát của SRF04 là 30
0


; như vậy khi hệ Pan-Tilt quay,cảm
biến có thể quét được hầu hết toàn bộ biên dạng của vật thể nằm
trong tầm quét của nó (phụ thuộc cách đặt, vị trí tương đối hệ Pan-
Tilt – v
ật).
C. Kết quả đạt được:
I. Phần cứng:
1. Vật mẫu: 3 vật mẫu: hình tròn, chữ nhật và nón cụt
2. Phần cứng toàn bộ của đề tài:
II. Phần điện tử:
2.1. Thiết kế board điều khiển dùng AT Mega32:
a. Nguyên lý:
.

b. Mạch hoàn thành:
2.2. Board nguồn cung cấp cho 2 động cơ Servo:
Board dùng IC LM 2576 Adj, có khả năng điều chỉnh điện áp
ngõ ra (mắc biến trở) và cho dòng ra lớn (lên đến 3A). Lý do chính
để chọn IC này làm mạch nguồn cho servo là nhằm đáp ứng đủ
dòng tiêu thụ cho 2 động cơ servo, vì khi chạy dòng I tiêu thụ của
mỗi servo khoảng > 1A, 2 servo phải mất trên 2A và các loại IC
nguồn thường dùng (7805, MC34063…) không đáp ứng đủ.
a. Nguyên lý mạch
b. Mạch hoàn thành:
III. Chương trình điều khiển:
1.Vi điều khiển
– AT Mega32:
1.1. Chương trình chính:
a. Gi
ải thuật chương trình chính:


Bắt đầu
reset
Xác đònh Xmax,
Xmin,Ymax,Ymin
Truyền lên máy tính
Đưa cảm biến về
Xmin, Ymax
Quét và gởi tọa độ lên
máy tính
b. Source Code: viết bằng phần mềm CodeVision.
reset_servoX(); // vi tri "0"
reset_servoY();

//*******xác định Ymin,Ymax;
Xmin,Xmas***************
axes = top(); // lấy giá trị Ymax - điểm cao nhất trên
cùng c
ủa vật
itoa(axes,Ymax);
axes = bottom(); // l
ấy giá trị Ymin -điểm thấp nhất dưới
cùng của vật
itoa(axes,Ymin);
axes = left(); // l
ấy giá trị Xmin - điểm ngoài cùng
bên trái c
ủa vật
itoa(axes,Xmin);
axes = right();

itoa(axes,Xmax); // l
ấy giá trị Xmax -điểm ngoài cùng bên
ph
ải của vật


//**xử lý chuỗi và gởi lên máy tính các giá trị
biên***********
strcatf(str," ");// them ky tu ' '
strcat(str,Ymax);
strcatf(str," ");// them ky tu ' '
strcat(str,Ymin);
strcatf(str," ");// them ky tu ' '
strcat(str,Xmax);

strcatf(str," ");// them ky tu ' '
strcat(str,Xmin);

puts(str); // g
ởi lên máy tính chuỗi data dạng: Ymax Ymin
Xmas Xmin

lcd_clear(); // xóa LCD
lcd_puts(str);

servoX = iXmin; // đưa servo đến vị trí "top left"chuẩn
bị quét
servoY = iYmax;
delay_ms(1000);



//***********thực hiện quét vật thể***********
for (y=j2;y>=j1;y )
{
for (x=i1;x<=i2;x++)
{
servoX += 4;
if (has_obj())
{
itoa(x,axis_OX);
itoa(y,axis_OY);
strcatf(axis_OX," ");
strcat(axis_OX,axis_OY);
puts(axis_OX);
delay_ms(100);
}

}
delay_ms(300);
servoX = iXmin;
servoY += 4;
delay_ms(300);
}
1.2. Chương trình con xác định X(min,max); Y(min,max):
a. Giải thuật chương trình con xác định Ymax:
c. Source Code:
//***********hàm xác định “top” - mép trên cùng của vật
int top(void)
{
unsigned char tang=1;

reset_servoX();
reset_servoY();
Ytang:
servoY -= 4; //Y tang
Bắt đầu
Y tăng
Ymax
Có vật
Đ
Tăng ==1
S
S
Đ
Thoát
X
tăng
Đ
X
max
KT
KT
Reset servoX
Tăng :=0
X
giảm
S
S
Đ
Xmin
Thoát

Đ
S
Return Y
Kết thúc
j2++;
if (servoY <= 461-20) //kiem tra Y max
goto
thoat;
else
kiemtra:
if (has_obj()) //kiem tra co vat
goto
Ytang;
else
{
if (tang == 1) //kiem tra X tang
{
servoX -=4;
if (servoX <= 461-10) //kiem tra X max
{
reset_servoX();
tang = 0;
}
else
goto
kiemtra;
}

if (tang ==0) //kiem tra X giam
{

servoX +=4;
if (servoX >= 921-10)
goto
thoat;
else
goto
kiemtra;
}
}
thoat:
iYmax = servoY;
return j2; //return giá tr
ị top = Ymax
}
//********************end*********************
* Các chương trình con xác định Ymin, Xmax, Xmin tương tự.
1.3 Chương trình ngắt đo khoảng cách từ SRF04 đến vật-có
v
ật hay không?
a. Giải thuật:
S
Đ
Bắt đầu
Xuất 1 xung 10us từ chân
PD.7 kích CB
Thiết lập INT2 ngắt cạnh lên,
kh
ởi tạo timer0.
Khi ngắt cạnh lên, cho timer
ch

ạy, INT2 chuyển qua dò
c
ạnh xuống
Khi ngắt cạnh xuống cho timer
dừng, đo khoảng time t từ lúc
có cạnh lên đến lúc có cạnh
xuống
t # timeout
Có vật
Không có
v
ật
Kết thúc
b. Source Code:
interrupt [EXT_INT2] void ext_int2_isr(void)
{
#asm("sei")
if (MCUCSR==0x40)
{

MCUCSR=0x00; //ngat canh xuong
TCNT0 = 0;
count=0; // tang 1 khi timer0 tran
lcd_clear();
}
else
{
echo = 1;
MCUCSR=0x40; //ngat canh len
value = (unsigned long)TCNT0 + ((unsigned

long)count*256);
distance = (float)value*1000/921.6/58;
}
}
// Timer 0 overflow interrupt service routine
interrupt [TIM0_OVF] void timer0_ovf_isr(void)
{
#asm("sei")
count++;
}
2. MatLab:

×