14
Lập trình Robot tự động đơn giản với PIC16F877A Biên soạn: EM-BOT Robot Team © - (Feb 2010) DEMO VERSION Trang 1/14 LẬP TRÌNH ROBOT TỰ ĐỘNG ĐƠN GIẢN VỚI VI ĐIỀU KHIỂN PIC16F877A Tóm tắt Tài liệu hướng dẫn lập trình cho robot tự động đường theo vạch trắng và điều khiển các cơ cấu (nâng hạ, gắp nhả quà) một cách cơ bản nhất.Vi điều khiển được sử dụng trong tài liệu là PIC16F877A của Microchip.Lập trình bằng ngôn ngữ C với trình biên dịch CCS. 1 TÓM TẮT VỀ THIẾT KẾ ROBOT TỰ ĐỘNG Robot tự động trong các cuộc thi Robocon gồm 3 thành phần chính: Cơ khí, Mạch điện tử, Lập trình. 1.1 Cơ khí Một robot đơn giản gồm 2 động cơ truyền động cho 2 bánh xe bên trái và bên phải giúp robot di chuyển. Phía trước có thể là 1 hoặc 2 bánh tự do (bánh tlựa, omni, mắt trâu,…). Để thực hiện được các công việc như nâng hạ trục, gắp nhả đẩy quá, robot được trang bị thêm các động cơ khác để truyền động cho các cơ cấu này. Tất cả các bộ phận trên được bố trí trên một khung bằng nhôm, sắt,… Phần hướng dẫn chi tiết về thiết kế cơ khí sẽ được trình bày trong một tài liệu khác. Tài liệu này chỉ tập trung vào phần lập trình. Hình 1: Mô hình robot dò dường đơn giản 1.2 Mạch điện tử Hình 2: Sơ đồ hoạt động của robot tự động

Lap Trinh Robot Tu Dong Voi PIC16F877A

Embed Size (px)

DESCRIPTION

22

Citation preview

Page 1: Lap Trinh Robot Tu Dong Voi PIC16F877A

Lập trình Robot tự động đơn giản với PIC16F877A Biên soạn: EM-BOT Robot Team

© - (Feb 2010) DEMO VERSION Trang 1/14

LẬP TRÌNH ROBOT TỰ ĐỘNG ĐƠN GIẢNVỚI VI ĐIỀU KHIỂN PIC16F877A

Tóm tắtTài liệu hướng dẫn lập trình cho robot tự động dò đường theo vạch trắng và điều khiểncác cơ cấu (nâng hạ, gắp nhả quà) một cách cơ bản nhất.Vi điều khiển được sử dụngtrong tài liệu là PIC16F877A của Microchip.Lập trình bằng ngôn ngữ C với trình biêndịch CCS.

1 TÓM TẮT VỀ THIẾT KẾ ROBOT TỰ ĐỘNGRobot tự động trong các cuộc thi Robocon gồm 3 thành phần chính: Cơ khí,Mạch điện tử, Lập trình.

1.1 Cơ khíMột robot đơn giản gồm 2 động cơ truyền động cho 2 bánh xe bên trái và bênphải giúp robot di chuyển. Phía trước có thể là 1 hoặc 2 bánh tự do (bánh tựlựa, omni, mắt trâu,…). Để thực hiện được các công việc như nâng hạ trục,gắp nhả đẩy quá, robot được trang bị thêm các động cơ khác để truyền độngcho các cơ cấu này.Tất cả các bộ phận trên được bố trí trên một khung bằng nhôm, sắt,…Phần hướng dẫn chi tiết về thiết kế cơ khí sẽ được trình bày trong một tàiliệu khác. Tài liệu này chỉ tập trung vào phần lập trình.

Hình 1: Mô hình robot dò dường đơn giản

1.2 Mạch điện tử

Hình 2: Sơ đồ hoạt động của robot tự động

Page 2: Lap Trinh Robot Tu Dong Voi PIC16F877A

Lập trình Robot tự động đơn giản với PIC16F877A Biên soạn: EM-BOT Robot Team

(Feb 2010) DEMO VERSION Trang 2/14

1.2.1 Mạch ngõ vào (cảm biến, nút ấn, công tắc hành trình)Với robot đơn giản, ngõ vào thường là mức logic lấy từ cảm biến quang(quang trở, quang diode), nút ấn hoặc công tắc hành trình. Từ đó mạch viđiều khiển xử lý các tín hiệu này để xuất ngõ ra (thường là động cơ DC) chophù hợp.Cảm biến quang phải được che chắn cẩn thận để hạn chế ảnh hưởng từ cácnguồn ánh sáng bên ngoài.

C1

104

CTHT

SW2BIT0

5V

R310K

Hình 3: Mạch cảm biến, nút ấn và công tắc hành trình

1.2.2 Mạch vi điều khiểnMạch sử dụng vi điều khiển PIC16F877A của Microchip. Mạch nhận tínhiệu từ ngõ vào, xử lý và xuất ngõ ra qua một mạch cách ly bằng opto ramạch công suất.

RA5RA4

RC7

RC0

RA2RA3

RA0RA1

RB1RB2

RB4RB5

RB0

RB6RB7

RB3

RE0RE1

RC3RC4

RE2

RC5RC6

RD4

RD0RD1RD2RD3

RD5

Y1CRYSTAL

PIC16F877A

RA0/AN02

RA1/AN13

RA2/AN2/VREF-/CVREF4

RA3/AN3/VREF+5

RA4/T0CKI/C1OUT6

RA5/AN4/SS*/C2OUT7

RB0/INT33

RB134

RB235

RB3/PGM36

RB437

RB538

RB6/PGC39

RB7/PGD40

RC0/T1OSO/T1CKI15

RC1/T1OSI/CCP216

RC2/CCP117

RC3/SCK/SCL18

RC4/SDI/SDA23

RC5/SDO24

RC6/TX/CK25

RC7/RX/DT26

RD0/PSP019

RD1/PSP120

RD2/PSP221

RD3/PSP322

RD4/PSP427

RD5/PSP528

RD6/PSP629

RD7/PSP730

OSC1/CLKIN13

OSC2/CLKOUT14

VDD32VDD11

VSS31 VSS12

MCLR*/VPP1

RE0/RD*/AN58

RE1/WR*/AN69

RE2/CS*/AN710

C5 30p

C6 30p5V

RC1RC2

RESET

MCU MODULE

RD6RD7

Hình 4: Mạch vi điều khiển1.2.3 Mạch công suất điều khiển động cơ DC

Một số mạch thông dụng:

D141N5819

D13

1N581924V

C2104

MOTOR2

CON2

12

M2IRF540

R12330 2W

LS2RELAY

32

4

67

518

P-DIR2

P-PWM2

Q5B562

Q4D468

D121N5819

12V

D3QUANG TRO

D2LED

R1330

R233K

VCCVCC

-

+ U1A

LM324

3

21

R4 100K

CAMBIEN1

Vạch trắng: mức 1Nền: mức 0

Page 3: Lap Trinh Robot Tu Dong Voi PIC16F877A

Lập trình Robot tự động đơn giản với PIC16F877A Biên soạn: EM-BOT Robot Team

© (Feb 2010) DEMO VERSION Trang 3/14

Hình 5: Mạch công suất sử dụng 1 FET và 1 relay

U3

IR 2184

COM3

LO4

VB8

IN1

VCC5

SD2

VS6

HO7

U4

IR2184

COM3

LO4

VB8

IN1

VCC5

SD2

VS6

HO7

+C54.7u

+C1

4.7u

C6100n

C2100n

D1

DIODE

R4 4.7R

R6 4.7R R7

4.7R

R5

4.7R

D2

DIODE

+ C34.7u

C4100n

12V

IN2

Q1

IRF540

Q3

IRF540

Q2IRF540

Q4IRF540

24V

C7470n

+ C8470u

J1

MOTOR

12C14

104

IN1

Hình 6: Mạch cầu H điều khiển động cơ với Half Bridge Driver IR2184

Phần hướng dẫn chi tiết về mạch điện tử sẽ được trình bày trong một tàiliệu khác. Tài liệu này chỉ tập trung vào phần lập trình.

Page 5: Lap Trinh Robot Tu Dong Voi PIC16F877A

Lập trình Robot tự động đơn giản với PIC16F877A Biên soạn: EM-BOT Robot Team

© - (Feb 2010) DEMO VERSION Trang 5/14

2.2.3 Xử lý tín hiệu cảm biến (xem hình vẽ)Mục đích của việc dò đường là hướng cho robot đi theo 1 vạch thẳng màu trắngtrên một nền màu đậm (đen, xanh,…)Cảm biến được đặt ở giữa robot.

o Khi cảm biến số 3,4 nằm trên vạch trắng (mức 1): robot chạy thẳngo Khi robot lệch sang trái: quay phải để điều chỉnh robot về đúng vạcho Khi robot lệch sang phải: quay trái để điều chỉnh robot về đúng vạch

7 6 5 4 3 2 1 0 Trạng thái cảmbiến

Giữa vạch

Lệch trái mức 1

Lệch trái mức 2

Lệch trái mức 3

Lệch trái mức 4

Ngoài vạch

Lệch phải mức 1

Lệch phải mức 2

Lệch phải mức 3

Lệch phải mức 4

Ngoài vạch

Hình 7: Các mức độ lệch ra khỏi vạch trắng của robot

2.3 Chương trình điều khiển

#include <16f877A.h>#include <def_877A.h>#fuses HS,NOWDT,NOPROTECT,NOLVP#use delay(clock=20000000)

/* ĐỊNH NGHĨA CÁC CHÂN VÀ PORT */#define DIR_LEFT RC0#define EN_LEFT RC1

#define DIR_RIGHT RC3#define EN_RIGHT RC2

0

0

000000 0 0

000000 0 0

01

0 01 0 0 00

0 011 0 0 00

0011 0 0 00

1 0 0 00 0

1 1 0 0 00 0 0

10

0 1

000 0 0

00 10 0 0

00 11

0 1

00 0 0

1 0 00 0 0

Page 6: Lap Trinh Robot Tu Dong Voi PIC16F877A

Lập trình Robot tự động đơn giản với PIC16F877A Biên soạn: EM-BOT Robot Team

© - (Feb 2010) DEMO VERSION Trang 6/14

#define SENSOR PORTD/* KHAI BÁO CÁC CHƯƠNG TRÌNH CON */

void motor_left_forward();void motor_left_reverse();void motor_left_stop();

void motor_right_forward();void motor_right_reverse();void motor_right_stop();

void forward();void reverse();void stop();void turn_left();void turn_right();

/* CÁC CHƯƠNG TRÌNH CON */// Động cơ trái chạy thuậnvoid motor_left_forward(){DIR_LEFT=1; // chiều thuậnEN_LEFT=1; // cho phép chạy}// Động cơ trái chạy ngượcvoid motor_left_reverse(){DIR_LEFT=0; // chiều ngượcEN_LEFT=1; // cho phép chạy}// Động cơ trái dừngvoid motor_left_stop(){EN_LEFT=0; // không cho phép chạy}// Động cơ phải chạy thuậnvoid motor_right_forward(){DIR_RIGHT=1;// chiều thuậnEN_RIGHT=1; // cho phép chạy}// Động cơ phải chạy ngượcvoid motor_right_reverse(){DIR_RIGHT=0;// chiều ngượcEN_RIGHT=1; // cho phép chạy}// Động cơ phải dừngvoid motor_right_stop(){EN_RIGHT=0; // không cho phép chạy}// Chạy thẳngvoid forward()

Page 10: Lap Trinh Robot Tu Dong Voi PIC16F877A

Lập trình Robot tự động đơn giản với PIC16F877A Biên soạn: EM-BOT Robot Team

© - (Feb 2010) DEMO VERSION Trang 10/14

Tần số điều xung PWM:1)odmode.(peri.4

oscff

o setup_ccp1(mode) và setup_ccp2(mode) mode:

CCP_PWM: chọn chế độ PWM.CCP_OFF: tắt chế độ PWM.

o set_pwm1_duty(value) và set_pwm2_duty(value) Nếu value là giá trị kiểu int 8bit:

1_

period

valuecycleduty

Nếu value là giá trị long int 16bit:

)1(*41023&

_

period

valuecycleduty

Nếu không cần điều xung quá “mịn” thì nên điều xung ở giátrị value 8bit cho đơn giản.

Ví dụ: Ta muốn điều xung PWM với tần số 10kHz với tần số thạch anh(fosc) sử dụng là 20MHz (value 8bit).

500)1dmode(perio1)odmode.(peri.4

2000000010000

1)odmode.(peri.4

oscf

f

Với mode = [1,4,16] và period = 0-255 ta có thể chọno mode = 4; period = 124o mode = 16; period = 32

Để cho việc điều xung được “mịn” (chọn được nhiều giá trị duty cycle) tachọn mode = 4 và period = 124.Như vậy, để duty_cycle từ 0% đến 100% ta cho value từ 0 đến 125.

o value = 30 %3232.01124

30_

cycleduty

o value = 63 %4,50504.01124

63_

cycleduty

o value = 113 %4,90904.01124

113_

cycleduty

Code: setup_timer_2(T2_DIV_BY_4,124,1); setup_ccp1(CCP_PWM); set_pwm1_duty(30);

Sử dụng CCP1 và CCP2 cho động cơ trái và động cơ phải, ta có thể điềukhiển được tốc độ của 2 động cơ phù hợp trạng thái lệch khỏi vạch trắngcủa robot.

Các chương trình con tham khảo:Để việc lập trình được dễ dàng, ta nên tạo các chương trình con xử lý tốcđộ. Sau đây là chương trình tham khảo của hàm speed.

o Speed (tốc độ động cơ trái, tốc độ động cơ phải) Tốc độ: -100 đến 100 (chạy ngược 100% đến chạy thuận 100%) Ví dụ: speed(80,60) động cơ trái chạy 80%, phải 60%