Upload
ngphuoc2201
View
71
Download
1
Embed Size (px)
Citation preview
TRƯỜNG ĐẠI HỌC VĂN HIẾN CỘNG HÒA XÃ HỘI CHỦ NGHĨA VIỆT NAM
Khoa Điện Tử - Viễn ThôngĐộc Lập – Tự Do – Hạnh Phúc
************
BÁO CÁO TIẾN ĐỘ THỰC HIỆN
ĐỒ ÁN MÔN HỌC
Sinh viên thực hiện : 1. Nguyễn Hoàng Hiếu MSSV: 0891020023
2. Nguyễn PhướcMSSV: 0891020022
Lớp : 0891021
Khoa : Điện Tử - Viễn Thông
Tên đề tài : ĐIỀU KHIỂN GÓC QUAY ĐỘNG CƠ SERVO QUA RFĐIỀU KHIỂN GÓC QUAY ĐỘNG CƠ SERVO QUA RF
I. GIAI ĐOẠN 1: Thiết kế mạch: Từ ngày 01/12/2011 đến ngày 18/12/2011
1.1. Vẽ mạch bằng chương trình Proteus:
Định hình tổng thể các khối chức năng của mạch và phục vụ cho việc mô phỏng. Từ ngày 01/12/2011 đến
ngày 08/12/2011.
Kết quả Thiết kế mạch
Mạch phát tín hiệu điều khiển
Mạch phát:
- khối Reset PIC
- khối LCD hiển thị góc quay và Ton của xung điều khiển.
Các khối như giao động thạch anh không cần thực hiện trên mô phỏng, Proteus đã tự động cấp xung clock
cho PIC hoạt động.
Mạch thu tín hiệu và điều khiển góc quay động cơ Servo
Mạch thu:
- khối Reset PIC
- khối động cơ Servo
- khối LCD hiển thị góc quay và Ton xung điều khiển.
Sơ đồ toàn bộ mạch điều khiển động cơ Servo qua sóng RF
Việc thu phát RF được chúng em mô phỏng bằng nối dây Rx và Tx qua giao thức truyền thông
UART của PIC Master và Slave. Ngoài thực tế thi công việc thu phát sẽ thay bằng mô đun thu phát RF
HM-TR Rev:1.1.
1.2. Viết chương trình: Từ ngày 09/12/2011 đến ngày 18/12/2011.
a. Chương trình cho PIC Master: Chuyển đổi ADC sang tín hiệu số, tính toán, đưa ra góc quay và Ton
tương ứng điều khiển Servo, hiển thị trên LCD 16x02.
#include <16F877A.h>
#include <def_877a.h>
#device *=16 ADC=10
#FUSES NOWDT, HS, NOPUT, NOPROTECT, NODEBUG, NOBROWNOUT, NOLVP
#use delay(clock=20000000)
#use rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7,bits=8)
#include <lcd.c>
/* Khai bao cac bien su dung trong chuong trinh */
int8 angle_dvi,angle_chuc,angle_tram;
int8 angle_dvi_old;
int16 ton;
float adc;
float temp;
/* Khai bao cac ham con */
void wait_system();
void get_adc();
void convert_bcd();
void send_data();
void display();
#INT_RDA
void Receive_isr(){ // Ham xu ly khi ngat noi tiep xay ra
if(getc() == 'm') send_data(); // Khi nhan dc ki tu m tu PIC Slave thi gui du lieu di
}
void main(){
enable_interrupts(int_rda); // Cho phap ngat noi tiep
enable_interrupts(GLOBAL); // Cho phep ngay toan cuc
setup_adc_ports(AN0); // Cau hinh chan tin hieu ADC vao
setup_adc(ADC_CLOCK_INTERNAL); // Cau hinh dung xung clock ben trong cho bo ADC
angle_dvi_old = 0; // Cho so hang don vi cu cua goc bang 0
lcd_init(); // Goi ham khoi tao LCD
wait_system(); // Goi ham doi khoi dong RF
get_adc(); // Goi ham lay du lieu ADC
convert_bcd(); // Goi ham phan tich chuyen doi du lieu
send_data(); // Goi ham gui du lieu toi PIC Slave
display(); // Goi ham hien thi LCD
while(1){
get_adc();
convert_bcd();
if(angle_dvi_old - angle_dvi != 0){
angle_dvi_old = angle_dvi;
send_data();
display();
}
}
}
/* Ham doi khoi dong module RF */
void wait_system(){
printf(lcd_putc,"STARTUP RF"); delay_ms(100); // Ghi chuoi bao hieu ra LCD
lcd_putc('.'); delay_ms(110);
lcd_putc('.'); delay_ms(120);
lcd_putc('.'); delay_ms(130);
lcd_putc('.'); delay_ms(140);
lcd_putc('.'); delay_ms(150);
printf(lcd_putc,"\nSENDING"); delay_ms(100); // Gui chuoi bao dang gui du lieu
lcd_putc('.'); delay_ms(110);
lcd_putc('.'); delay_ms(120);
lcd_putc('.'); delay_ms(130);
lcd_putc('.'); delay_ms(140);
lcd_putc('.'); delay_ms(150);
}
/* Ham thuc hien lay gia tri ADC tu chan AN0 */
void get_adc(){
adc = read_adc(); // adc = 1023; adc 10bit
adc = adc / 5.66; // Chia de duoc ti le goc quay tu 0 - 180
}
/* Ham phan tich du lieu ADC, chuyen doi thang goc quay va Ton */
void convert_bcd(){
angle_dvi = ((int8)adc % 100) % 10; // Chia tach lay so hang don vi
angle_chuc = ((int8)adc % 100) / 10; // Chia tach lay so hang chuc
angle_tram = (int8)adc / 100; // Chia tach lay so hang tram
adc = angle_tram * 100 + angle_chuc * 10 + angle_dvi; // Nhan voi he so tuong ung de duoc
// so adc dang so nguyen
temp = adc / 90 + 0.5; // Ton: thay doi tu 0.5mS 2.5mS
ton = temp * 1000; // Nhan voi 1000 de duoc don vi micro giay ve hien thi len LCD
}
/* Ham gui du lieu toi PIC Slave qua module RF */
void send_data(){
putc('h'); putc(angle_tram + 0x30); // Gui ki tu ma hoa va so hang tram
putc('m'); putc(angle_chuc + 0x30); // Gui ki tu ma hoa va so hang chuc
putc('l'); putc(angle_dvi + 0x30); // Gui ki tu ma hoa va so hang don vi
}
/* Ham hien thi LCD */
void display(){
lcd_gotoxy(1,1); // Dua con tro ve dau dong mot (vi tri x=1, y=1 tren LCD)
printf(lcd_putc,"ANGLE SERVO:"); // Ghi dong van ban ra LCD
lcd_putc(angle_tram + 0x30); // Ghi ki tu so hang tram ra LCD
// (Cong voi 0x30 de chuyen so sang ki tu)
lcd_putc(angle_chuc + 0x30); // Ghi ki tu so hang chuc ra LCD
lcd_putc(angle_dvi + 0x30); // Ghi ki tu so hang don vi ra LCD
lcd_putc(0xdf); // Ki tu do // Ghi ki tu do ra LCD
printf(lcd_putc,"\nTon:%4lu%cS ",ton,0xe4); // Ghi chuoi Ton va ki tu micro S ra LCD
}
b. Chương trình cho PIC Slave: Nhận dữ liệu góc quay từ PIC Master, tính toán ra Ton, phát Xung tần số
50Hz với Ton đã tính toán để điều khiển động cơ Servo.
#include <16F877A.h>
#include <def_877a.h>
#device *=16 ADC=10
#FUSES NOWDT, HS, NOPUT, NOPROTECT, NODEBUG, NOBROWNOUT, NOLVP
#use delay(clock=20000000)
#use rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7,bits=8)
#include <lcd.c>
/* Khai bao cac bien su dung trong chuong trinh */
int8 lo,mi,hi;
float adc;
int16 ton;
float temp;
int16 tpwm = 20000; // t = 20000us = 20ms => f = 50Hz
/* Khai bao cac Ham con */
void wait_system();
void get_data();
void display();
void pwm(int16 ton);
int char2int(int8 ch);
#INT_RDA
void Receive_isr(){ // Ham thuc hien khi xay ra ngat noi tiep
get_data(); // Nhan du lieu
display(); // Hien thi LCD
}
void main(){
enable_interrupts(int_rda); // Cho phap ngat noi tiep
enable_interrupts(GLOBAL); // Cho phep ngay toan cuc
lcd_init(); // Goi ham khoi tao LCD
trisa = 0xff; // Toan bo PORT A la PORT nhap
trisc2 = 0; // Chan RC2 la chan Out
rc2 = 0; // Set chan RC2 xuong thap
wait_system(); // Goi ham khoi dong RF
while(1){
pwm(ton); // Phat xung, thoi gian xung cao la Ton
}
}
/* Ham khoi dong module RF */
void wait_system(){
printf(lcd_putc,"STARTING RF"); delay_ms(100); // Ghi chuoi bao hieu ra LCD
lcd_putc('.'); delay_ms(120);
lcd_putc('.'); delay_ms(130);
lcd_putc('.'); delay_ms(140);
lcd_putc('.'); delay_ms(160);
lcd_putc('.'); delay_ms(180);
printf(lcd_putc,"\nREQUESTING"); delay_ms(80); // Gui chuoi bao dang nhan du lieu
lcd_putc('.'); delay_ms(90);
lcd_putc('.'); delay_ms(100);
lcd_putc('.'); delay_ms(110);
lcd_putc('.'); delay_ms(120);
lcd_putc('.'); delay_ms(130);
putc('m'); // Yeu cau tra loi tu board Master
lcd_gotoxy(1,1); // Dua con tro ve dau dong mot (vi tri x=1, y=1 tren LCD)
printf(lcd_putc,"ANGLE SERVO: %c\n",0xdf);
printf(lcd_putc,"\nTon: %cS ",0xe4);
}
/* Ham nhan du lieu tu PIC Master qua module RF */
void get_data(){
if(getc() == 'h') hi = getc(); // Neu nhan duoc ki tu ma hoa la h
// thi ki tu tiep theo la so goc hang tram
if(getc() == 'm') mi = getc();
if(getc() == 'l') lo = getc();
adc = char2int(hi) * 100 + char2int(mi) * 10 + char2int(lo);
temp = adc / 90 + 0.5; // temp = adc / 90 + 0.5 => Ton: 0.5mS -> 2.5mS
ton = temp * 1000;
}
/* Ham hien thi LCD */
void display(){
lcd_gotoxy(13,1); // Dua con tro ve vi tri coi 13, dong 1
lcd_putc(hi); // Ghi ki tu hang tram ra LCD
lcd_putc(mi);
lcd_putc(lo);
lcd_gotoxy(5,2);
printf(lcd_putc,"%4lu%cS",ton,0xe4);
}
/* Ham phat xung tan so 50Hz, thoi gian xung cao la Ton */
void pwm(int16 ton){
rc2 = 0; delay_us(tpwm-ton); // Thoi gian xung thap
rc2 = 1; delay_us(ton); // Thoi gian xung cao
}
/* Ham chuyen ki tu sang so nguyen */
int8 char2int(char ch){
return ch - '0';
}
Biên dịch và nạp chương trình cho PIC tương ứng, kết quả mô phỏng như bên dưới.
Khởi động Module RF
Góc quay 180o tương ứng với Ton là 2500µS
Góc quay 90o tương ứng với Ton là 1500µS
Góc quay 0o tương ứng với Ton là 500µS
II. GIAI ĐOẠN 2: Thi công mạch: Từ ngày 19/12/2011 đến ngày 24/12/2011
2.1. Vẽ mạch nguyên lý bằng phần mềm Orcad Capture:
Dựa mạch mô phỏng trên Protues chúng em vẽ nguyên lý để thực hiện Layout và thi công mạch in. Thời
gian thực hiện từ 19/12/2011 đến 21/12/2011.
Kết quả vẽ mạch
R 2 4 7 0
P G C
V C C
P W M 1
U 1L M 7 8 0 5
1
2
3V I
GN
D
V O
R D 5
V C C
P W M 2
R D 0
V C C
R A 1
V C C
J 7
R F R X
1234
LCD 16x2
L C D 1 6 x 2
7 8 9 10 11 12 13 14 15 161 2 3 4 5 6
D0
D1
D2
D3
D4
D5
D6
D7
A KVS
SV
DD
VE
ER
SR
WE
N
5 V C C
R D 4
M C L R
R _ A K2 2 0
J 8
P I N
12
V C C
TX
V C C
R D 7
R 11 0 k
2 0 M h zXTA L
R X
TX
C 2
3 3 p
P W M 1
V C C
R 32 2 0
R D 6
P W M 2
J 9
S E R V O 1
123
P V N 1
P I C 1 6 F 8 8 7
234567
3 33 43 53 63 73 83 94 0
1 51 61 71 82 32 42 52 6
1 92 02 12 22 72 82 93 0
1 3
1 4
3 21 1
3 11 2
1
891 0
R A 0 / A N 0R A 1 / A N 1R A 2 / A N 2 / V R E F -/ C V R E FR A 3 / A N 3 / V R E F +R A 4 / T0 C K I / C 1 O U TR A 5 / A N 4 / S S * / C 2 O U T
R B 0 / I N TR B 1R B 2
R B 3 / P G MR B 4R B 5
R B 6 / P G CR B 7 / P G D
R C 0 / T1 O S O / T1 C K IR C 1 / T1 O S I / C C P 2R C 2 / C C P 1R C 3 / S C K / S C LR C 4 / S D I / S D AR C 5 / S D OR C 6 / TX/ C KR C 7 / R X/ D T
R D 0 / P S P 0R D 1 / P S P 1R D 2 / P S P 2R D 3 / P S P 3R D 4 / P S P 4R D 5 / P S P 5R D 6 / P S P 6R D 7 / P S P 7
O S C 1 / C L K I N
O S C 2 / C L K O U T
V D DV D D
V S SV S S
M C L R * / V P P
R E 0 / R D * / A N 5R E 1 / W R * / A N 6R E 2 / C S * / A N 7
R X
RD
4
C 1
3 3 p
V C C
R D 2V R _ C o n s t ra c t
1 0 K
RD
6
D 3
L E D
12
V C C
P G C
J 1 0
S E R V O 2
123
RD
7
S W 2
S W D I P -2
1 24 3
R D 1
M C L R
RD
5
J 2
2 4 V C C
1
2
P G D
V C C
R X
J 4
P R O G R A M E R
123456
RD
2
D 2L E D 5 V C C
12
J 5
H M -TR
123456
RA
1
RD
1
P G D
RD
0
C 32 2 u
Sơ đồ nguyên lý mạch Slave – Thu dữ liệu điều khiển động cơ
R A 1
V C C
RD
7
R 2 4 7 0
R D 0
V C C
RD
5
R 11 0 k
R D 1
C 32 2 u
RD
6
J 4
P R O G R A M E R
123456
R D 4
TX
R D 6
U 1L M 7 8 0 5
1
2
3V I
GN
D
V O
P W M 1
C 1
3 3 p
V C C
P G C
J 1 0
S E R V O 2
123
V C C
R X
LCD 16x2
L C D 1 6 x 2
7 8 9 10
11
12
13
14
15
16
1 2 3 4 5 6
D0
D1
D2
D3
D4
D5
D6
D7
A KVS
SV
DD
VE
ER
SR
WE
N
R 91 0 k
13
2
V C C
R D 7
R A 0
RD
4
V C C
R3
22
0
5 V C C
J 8
P I N
12
P W M 2
P W M 2
RA
1
D 4
L E D
12
R X
RD
1
R D 5
J 2
2 4 V C C
1
2
RD
2
V C C
P G C
D 2L E D 5 V C C
12
V C C
R D 2
R A 0
J 7
R F TX
123
V C C
R1
22
20
V C C
P G D
J 5
H M -TR
123456
R1
11
0K
TX
J 9
S E R V O 1
123
M C L RP V N 1
P I C 1 6 F 8 8 7
234567
3 33 43 53 63 73 83 94 0
1 51 61 71 82 32 42 52 6
1 92 02 12 22 72 82 93 0
1 3
1 4
3 21 1
3 11 2
1
891 0
R A 0 / A N 0R A 1 / A N 1R A 2 / A N 2 / V R E F -/ C V R E FR A 3 / A N 3 / V R E F +R A 4 / T0 C K I / C 1 O U TR A 5 / A N 4 / S S * / C 2 O U T
R B 0 / I N TR B 1R B 2
R B 3 / P G MR B 4R B 5
R B 6 / P G CR B 7 / P G D
R C 0 / T1 O S O / T1 C K IR C 1 / T1 O S I / C C P 2R C 2 / C C P 1R C 3 / S C K / S C LR C 4 / S D I / S D AR C 5 / S D OR C 6 / TX/ C KR C 7 / R X/ D T
R D 0 / P S P 0R D 1 / P S P 1R D 2 / P S P 2R D 3 / P S P 3R D 4 / P S P 4R D 5 / P S P 5R D 6 / P S P 6R D 7 / P S P 7
O S C 1 / C L K I N
O S C 2 / C L K O U T
V D DV D D
V S SV S S
M C L R * / V P P
R E 0 / R D * / A N 5R E 1 / W R * / A N 6R E 2 / C S * / A N 7
RD
0
P W M 1
M C L R
C 2
3 3 p
V C C
TX
2 0 M h zXTA L
P G D
S W 2
S W D I P -2
1 24 3
Sơ đồ nguyên lý mạch Master – Chuyển đổi ADC, phát dữ liệu điều khiển
2.2. Vẽ mạch Layout bằng phần mềm Orcad Layout:
Thiết kế Layout cho từ mạch nguyên lý để in mạch và thi công mạch. Thời gian thực hiện từ 22/12/2011
đến 24/12/2011
III. GIAI ĐOẠN 3: Hoàn thành Báo cáo đồ án môn học: Từ ngày 25/12/2011 đến ngày 08/01/2012
3.1. Tổng hợp tài liệu cần thiết
3.2. Trình bày báo cáo theo Đề cương chi tiết đã gửi cho cô.
3.3. Soạn thảo Slide trình chiếu
3.4 Nộp đồ án môn học