1. Kiến thức :
- Kiến thức cơ sở về điện tử: tôi nghĩ rằng nếu đã tốt nghiệp PTTH thì kiến thức điện tử
của bạn đã có thể dùng để chế tạo 1 con Robot đơn giản.
- Kiến thức lập trình Vi điều khiển: bạn có thể học lập trình Assemble hoặc C.
2. Phần mềm:
- Trình duyệt: tùy mục đích làm Robot mà bạn sẽ chọn loại VĐK phù hợp, trên cơ sở đó
sẽ chọn trình duyệt tương ứng. Trong loạt bài này tôi sẽ hướng dẫn Lập trình C cho VĐK
T89C51 trên trình duyệt RIDE 51. Trên cơ sở đó bạn có thể viết lại cho VĐK của mình
trên trình duyệt tương ứng.
- Phần mềm mô phỏng: Protues hỗ trợ rất mạnh về mô phỏng trực quan. Bạn sẽ thấy rất
tiện nghi khi làm việc với nó, tiết kiệm thời gian, và giảm chi phí mua những linh kiện ko
cần thiết.
14 trang |
Chia sẻ: maiphuongtt | Lượt xem: 1819 | Lượt tải: 5
Bạn đang xem nội dung tài liệu Từng bước chế tạo Robot, để tải tài liệu về máy bạn click vào nút DOWNLOAD ở trên
Từng bước chế tạo Robot
Bài 1: Các bước chuẩn bị
Để bắt tay vào chế tạo 1 con Robot bạn cần
1. Kiến thức :
- Kiến thức cơ sở về điện tử: tôi nghĩ rằng nếu đã tốt nghiệp PTTH thì kiến thức điện tử
của bạn đã có thể dùng để chế tạo 1 con Robot đơn giản.
- Kiến thức lập trình Vi điều khiển: bạn có thể học lập trình Assemble hoặc C.
2. Phần mềm:
- Trình duyệt: tùy mục đích làm Robot mà bạn sẽ chọn loại VĐK phù hợp, trên cơ sở đó
sẽ chọn trình duyệt tương ứng. Trong loạt bài này tôi sẽ hướng dẫn Lập trình C cho VĐK
T89C51 trên trình duyệt RIDE 51. Trên cơ sở đó bạn có thể viết lại cho VĐK của mình
trên trình duyệt tương ứng.
- Phần mềm mô phỏng: Protues hỗ trợ rất mạnh về mô phỏng trực quan. Bạn sẽ thấy rất
tiện nghi khi làm việc với nó, tiết kiệm thời gian, và giảm chi phí mua những linh kiện ko
cần thiết...
3. Phần cứng: nếu có tiền thì...
- Nếu là người chưa có kinh nghiệm về VĐK, bạn nên mua cho riêng mình 1 KIT để học,
có sẵn VĐK, LCD, speaker ... để tiết kiệm tiền, tránh và các cổng Analog và Digital để
cắm các thiết bị ngoài như sensor hoặc motor.
- 2 motor DC cỡ nhỏ.
- Sensor: 2 sensor hồng ngoại nhận dạng vạch trắng- đen, 1 sensor hồng ngoại xác định
khoảng cách.
*** Tôi mua tất cả những linh kiện này tốn hơn 2 triệu đồng.
- Ngoài ra bạn có thể mua thêm các linh kiện cần thiết cho mục đích của mình, ví dụ
sensor đo nhiệt độ, độ ẩm ...
*** Lời khuyên: bạn ko nên vội mua bất cứ thứ linh kiện nào khi mà chưa thấy nó cần
thiết. Vì hầu hết các linh kiện đều có thể mô phỏng được.
Khi nào nắm chắc kiến thức và cảm thấy thật sự cần thiết phải mua thì mới mua. Để dành
tiền cho những mục đích xa hơn. Còn nếu 2 triệu ko là vấn đề lớn với bạn thì cứ mua.
4. Quan trọng nhất: là bạn thực sự thích thú về Robot và mong muốn tự mình có thể chế
tạo Robot.
5. Thời gian rảnh: Hãy sắp xếp thời gian học tập và nghỉ ngơi hợp lý để bạn có 1 khoảng
thời gian rảnh, yên tâm ngồi nghiên cứu về Robot. Đừng để nó ảnh hưởng đến kết quả
học tập hoặc công việc chính của bạn.
Bài 2: Lập trình điều khiển động cơ DC
2.1. Trong bài này, tôi sẽ hướng dẫn thiết mạch, mô phỏng trên Proteus và viết chương
trình cho VĐK để điều khiển động cơ DC.
Khi làm thực tế lưu ý: Mạch điều khiển động cơ DC gồm 2 phần: mạch logic và mạch
công suất. Do mạch công suất có thể sử dụng điện áp cao, còn mạch logic thì dùng điện
áp thấp (dưới 5V), nên cần thiết phải cách ly 2 phần này ra để bảo vệ mạch logic. Có
nhiều phương pháp để giải quyết vấn đề này, trong đó có phương pháp dùng Opto và
dùng IC. Để đơn giản hóa, tôi dùng IC L293D có tích hợp sẵn mạch khuyếch đại và cách
ly 2 mạch logic - công suất.
Xem mạch ở hình dưới
File gửi kèm
2.2. Driver cho mạch điều khiển động cơ này như sau:
/*--------------------------------------------------------------------------*/
// Program : Pulse width modulation by PCA module
// Description : Generate pulse width modulation signal on CEX3 and CEX4
// : using PCA function
// Filename : dc_motor.h
// C compiler : RIDE 51 V6.1
/*--------------------------------------------------------------------------*/
#define ch1 1 // Define constant
#define ch2 2 // Define constant
#define all 3 // Define constant
#define motor_pulse 115 // Define constant
sbit dir_a1 = P2^0; // bit drive motor0
sbit dir_a2 = P2^1; // bit drive motor0
sbit dir_b1 = P2^2; // bit drive motor1
sbit dir_b2 = P2^3; // bit drive motor1
/**************************************************
***************************/
/*********************** Drive motor backward
********************************/
/**************************************************
***************************/
void motor_bk(unsigned char select_bk ,unsigned char speed)
{
TMOD &= 0xF0; // Refresh mode timer 0
TMOD |= 0x02; // Setup mode timer 0 (8 bit auto reload)
TH0 = motor_pulse; // Reload value for timer 0
TL0 = motor_pulse; // Initial value for count of timer 0
TR0 = 1; // Start timer 0
CMOD = 0x04; // Set CMOD PCA count freq. by pulse overflow timer0
if(select_bk==1)
{
CCAPM3 = 0x42; // Set CCAP Module 3 as 8 bit PWM
CCAP3L = 255-speed; // Set CCAP3L initial value by speed variable(set duty cycle)
CCAP3H = 255-speed; // Set CCAP3H reload value by speed variable(set duty cycle)
dir_a1 = 1; // set direction backward
dir_a2 = 0; // set direction backward
}
else if(select_bk==2)
{
CCAPM4 = 0x42; // Set CCAP Module 3 as 8 bit PWM
CCAP4L = 255-speed; // Set CCAP4L initial value by speed variable(set duty cycle)
CCAP4H = 255-speed; // Set CCAP4H initial value by speed variable(set duty cycle)
dir_b1 = 1; // set direction backward
dir_b2 = 0; // set direction backward
}
CCON = 0x40; // Set PCA counter run
}
/**************************************************
***************************/
/*********************** Drive motor forward
********************************/
/**************************************************
***************************/
void motor_fd(unsigned char select_fd, unsigned char speed)
{
TMOD &= 0xF0; // Refresh mode timer 0
TMOD |= 0x02; // Setup mode timer 0 (8 bit auto reload)
TH0 = motor_pulse; // Reload value for timer 0
TL0 = motor_pulse; // Initial value for count of timer 0
TR0 = 1; // Start timer 0
CMOD = 0x04; // Set CMOD PCA count freq. by pulse overflow timer0
if(select_fd==1)
{
CCAPM3 = 0x42; // Set CCAP Module 3 as 8 bit PWM
CCAP3L = 255-speed; // Set CCAP3L initial value by speed variable(set duty cycle)
CCAP3H = 255-speed; // Set CCAP3H initial value by speed variable(set duty cycle)
dir_a1 = 0; // Set direction forward
dir_a2 = 1; // Set direction forward
}
else if(select_fd==2)
{
CCAPM4 = 0x42; // Set CCAP Module 3 as 8 bit PWM
CCAP4L = 255-speed; // Set CCAP4L initial value by speed variable(set duty cycle)
CCAP4H = 255-speed; // Set CCAP4H initial value by speed variable(set duty cycle)
dir_b1 = 0; // Set direction forward
dir_b2 = 1; // Set direction forward
}
CCON = 0x40; // Set PCA counter run
}
/**************************************************
***************************/
/*********************** Break motor
*****************************************/
/**************************************************
***************************/
void motor_stop(char select_stop)
{
if(select_stop==1)
{
dir_a1 = 0; // Break motor channel 1
dir_a2 = 0; // Break motor channel 1
CCAPM3 &= 0xFD; // Stop generate PWM at pin P1.6
}
else if(select_stop==2)
{
dir_b1 = 0; // break motor channel 2
dir_b2 = 0; // Break motor channel 2
CCAPM4 &= 0xFD; // Stop generate PWM at pin P1.7
}
else if(select_stop==3)
{
dir_a1 = 0; // Break motor channel 1
dir_a2 = 0; // Break motor channel 1
CCAPM3 &= 0xFD; // Stop generate PWM at pin P1.6
dir_b1 = 0; // Break motor channel 2
dir_b2 = 0; // Break motor channel 2
CCAPM4 &= 0xFD; // Stop generate PWM at pin P1.7
}
}
2.3. Đây là phần mô phỏng trên Proteus
Các thành phần chính gồm:
- AT89C51
- motor driver L293D
- 2 motor DC
- 2 leds hiển thị chiều quay động cơ: chiều thuận led sẽ cho ánh sáng xanh, chiều nghịch
led cho ánh sáng màu đỏ
File gửi kèm
2.4. Thực hiện bài tập điều khiển đơn giản nhất
Robot của bạn được điều khiển chuyển động bằng 2 động cơ DC, như mô phỏng ở trên.
Yêu cầu: Lập trình cho Robot thực hiện các chuyển động sau:
- Chạy tới
- Chạy lui
- Rẽ phải
- Rẽ trái
2.4. Thực hiện bài tập điều khiển đơn giản nhất
Robot của bạn được điều khiển chuyển động bằng 2 động cơ DC, như mô phỏng ở trên.
Yêu cầu: Lập trình cho Robot thực hiện các chuyển động sau:
- Chạy tới
- Chạy lui
- Rẽ phải
- Rẽ trái
Mách nước:
Khi robot chạy tới thì 2 motor đều quay chiều thuận, 2 leds phát sáng màu xanh.
Khi robot chạy lui thì 2 motor đều quay chiều ngược, 2 leds phát sáng màu đỏ.
Khi robot rẽ phải thì motor phải quay chiều nghịch, motor trái quay chiều thuận (các leds
phát sáng màu tương ứng)
Khi robot rẽ trái thì motor trái quay chiều nghịch, motor phải quay chiều thuận.
2.5. Lập trình điều khiển chuyển động
Đây là C Code để giải bài toán ví dụ trên. Code được viết trên trình duyệt RIDE 51
/*-----------------------------------------------*/
// Program : Basic Move
// Description: Robo-51 movement by simple function
// Filename : basic_move.c
// C compiler : RIDE 51 v6.1
/*-----------------------------------------------*/
#include
#include
#include
#define pow 200
void run_fd(int time_spin)
{
motor_fd(2,pow);
motor_fd(1,pow);
delay_ms(time_spin);
}
void run_bk(int time_spin)
{
motor_bk(2,pow);
motor_bk(1,pow);
delay_ms(time_spin);
}
void turn_left(int time_spin)
{
motor_fd(2,pow);
motor_bk(1,pow);
delay_ms(time_spin);
}
void turn_right(int time_spin)
{
motor_fd(1,pow);
motor_bk(2,pow);
delay_ms(time_spin);
}
void stop(void)
{
motor_stop(3);
}
void main()
{
while(1)
{
run_fd(1000);
stop;
turn_left(1000);
stop;
run_bk(1000);
turn_right(1000);
stop;
run_fd(1000);
stop;
turn_right(1000);
turn_left(200);
run_bk;
delay_ms(1000);
}
}
2.6 file.hex để nạp cho chip
bạn có thể dùng file này để nạp cho chip trong phần mô phỏng bằng proteus ở trên cũng
như để nạp vào chip thật.
:03000000020003F8
:0F00030075810CE4787FF6D8FD75A0FF020146E9
:100012005389F0438902758C73758A73D28C75D9B2
:0400220004BF011105
:1000260075DD4274FFC39DF5EDF5FDD2A0C2A1803A
:0500360013EFB4020FFE
:10003B0075DE4274FFC39DF5EEF5FED2A2C2A37529
:03004B00D8402278
:10004E005389F0438902758C73758A73D28C75D976
:04005E0004BF0111C9
:1000620075DD4274FFC39DF5EDF5FDC2A0D2A180FE
:0500720013EFB4020FC2
:1000770075DE4274FFC39DF5EEF5FEC2A2D2A375ED
:03008700D840223C
:03008A00BF0108AB
:0B008D00C2A0C2A153DDFD22BF02088B
:0B009800C2A2C2A353DEFD22BF030E74
:0F00A300C2A0C2A153DDFDC2A2C2A353DEFD2243
:0D00B200E4FCFDECB50604EDB507005015AB
:1000BF007B6E7A04DBFEDAFC750A03750B6E0DEDB1
:0600CF0070E40C80E12248
:0D00D500E4FCFDECB50604EDB5070050118C
:1000E200784BD8FEE4F50875094B0DED70E80C80ED
:0200F200E52205
:1000F4008F037F027DC812004E1F12004E8B071221
:0301040000B22224
:100107008F037F027DC81200121F1200128B071285
:0301170000B22211
:10011A008F037F027DC812004E1F1200128B071236
:03012A0000B222FE
:10012D008F037F017DC812004E0F1200128B071234
:03013D0000B222EB
:060140007F0312008A2279
:100146007E037FE81200F47E037FE812011A7E0325
:100156007FE81201077E037FE812012D7E037FE808
:100166001200F47E037FE812012DE4FE7FC812011F
:0A0176001A7E037FE81200B280C673
:00000001FF
Theo