Cấu trúc của một vi điều khiển gồm CPU, bộ nhớ chương trình thường là bộ nhớ ROM hoặc bộ nhớ Flash, bộ nhớ dữ liệu RAM, các bộ định thời, các cổng vào/ra để giao tiếp với các thiết bị bê
Trang 1-o-VIỆN
ĐIỆN-o-BỘ MÔN TỰ ĐỘNG HÓA CÔNG NGHIỆP
BÁO CÁO
Đề tài:
Mạch đèn ngủ và báo thức tự động
sử dụng IC555
GVHD: Thầy Nguyễn Công Phương SVTH: Võ Thanh Tùng MSSV:20146832 Nguyễn Thanh Long MSSV:20146450
Hà Nội,ngày…tháng…năm 2016
Trang 2LỜI MỞ ĐẦU
Lời đầu tiên cho em xin cám ơn Thầy Nguyễn Công Phương đã giúp đỡ nhóm em rất nhiều trong quá trình thực hiện làm đề tài này.
Ngày nay ngành điều khiển tự động hóa ngành càng phát triển, đáp ứng đúng nhu cầu phát triển về khoa học kĩ thuật, đặc biệt hơn nó càng có ứng dụng thực tiễn trong đời sống con người Chính vì thế em đã lựa chọn đề tài mạch đèn ngủ và báo thức tự động làm đề tài cho đồ án 1 của mình Trong quá trình hoàn thành em đã học hỏi là tích lũy được rất nhiều kiến thức:
+ Phương pháp làm việc khoa học, kĩ năng làm việc nhóm thể hiện tinh thần đồng đội, tính đoàn kết và tự giác
+ Giúp chúng em cải thiện khả năng tìm tòi kiến thức, tự lập tìm kiếm kiến thúc từ nhiều nguồn khác nhau
Tuy nhiên trong quá trình hoàn thành đề tài cũng còn gặp nhiều khó khan Vì vậy kết quả còn nhiều thiếu sót, không được như mong đợi Mong thầy Nguyễn Công Phương giúp đỡ chúng em hơn nữa để hoàn thiện hơn Từ đó có thể mở rộng
ra những ứng dụng khác, thực tiễn hơn đối với đời sống con người.
Một lần nữa, em xin chân thành cảm ơn Thầy đã giúp và hướng dẫn nhóm em hoàn thành được đề tài này ạ.
SVTH
Võ Thanh Tùng
Trang 3MỤC LỤC
1 GIỚI THIỆU CHUNG
Vi điều khiển là một máy tính được tích hợp trên một chíp, nó thường được sử dụng
để điều khiển các thiết bị điện tử Vi điều khiển thực chất gồm một vi xử lý có hiệu suất
đủ cao và giá thành thấp (so với các vi xử lý đa năng dùng trong máy tính) kết hợp với các thiết bị ngoại vi như các bộ nhớ, các mô đun vào/ra, các mô đun biến đổi từ số sang tương tự và từ tương tự sang số, mô đun điều chế độ rộng xung (PWM)
Vi điều khiển thường được dùng để xây dựng hệ thống nhúng Nó xuất hiện nhiều trong các dụng cụ điện tử, thiết bị điện, máy giặt, lò vi sóng, điện thoại, dây truyền tự động
Hầu hết các loại vi điều khiển hiện nay có cấu trúc Harvard là loại cấu trúc mà bộ nhớ chương trình và bộ nhớ dữ liệu được phân biệt riêng
Trang 4Cấu trúc của một vi điều khiển gồm CPU, bộ nhớ chương trình (thường là bộ nhớ ROM hoặc bộ nhớ Flash), bộ nhớ dữ liệu (RAM), các bộ định thời, các cổng vào/ra để giao tiếp với các thiết bị bên ngoài, tất cả các khối này được tích hợp trên một vi mạch
Đề tài thiết kế xe chạy theo đường vẽ sẵn được chúng em thực hiện dựa trên nền kiến thức về mạch điện tử, vi xử lý nói chung và vi điều khiển họ 8051 nói riêng được thầy giáo hướng dẫn trên lớp Thực hiện đề tài này là tiền đề để chúng em nắm được những kiến thức cơ bản về vi điều khiển 8051, từ đó tạo cơ sở để tiếp tục nghiên cứu những họ
vi điều khiển khác như AVR, PIC, ARM… phục vụ trong quá trình học tập và làm việc sau này
Chúng em chân thành cảm ơn thầy Nguyễn Hồng Quang đã hướng dẫn chúng em hoàn thành bài tập này
2 MÔ TẢ KỸ THUẬT
2.1 THIẾT KẾ MẠCH
A) Mạch nguồn
Trong khối nguồn chúng ta sử dụng 3 pin 3.7V là 11.1V.Mặt khác hệ thống điều khiển cần phải có nguồn 5V để cung cấp cho khối VI ĐIỀU KHIỂN và khối SENSORS Để tạo nguồn 5V DC chúng ta sử dụng IC ổn áp 7805, với đầu vào gồm đất chung của toàn hệ thống và nguồn 12 VDC lấy trực tiếp từ nguồn pin IC ổn áp LM7805 được lắp một tản nhiệt loại nhỏ để tản bớt nhiệt khi hoạt động giúp khối nguồn cũng như toàn bộ mạch hoạt động ổn định
Trang 5Hình 2.1: Sơ đồ nguyên lý khối mạch nguồn
1
2
2 1
2 1
1 2
1
2
3 2 1
2 1
2 1
Hình 2.2: Sơ đồ mạch in của mạch nguồn
B) Mạch cảm biến
Đường đi của xe được vẽ bằng vạch đen nằm trên nền trắng Để xe nhận ra được đường đi, chúng em sử dụng các cặp led thu phát hồng ngoại đặt gần nhau Các led phát phát ra ánh sáng đỏ, các led thu có điện trở phụ thuộc vào có nhận được ánh sáng phản xạ
từ đường đi hay không
Trang 6Khi cặp thu phát ở vị trí nền trắng, ánh sáng từ led phát phát ra phản xạ trên nền trắng
và tới led thu Led thu thu được ánh sáng này thì điện trở giảm xuống, điện áp ở cực Anot của led thu gần về 0 Ngược lại, ở vị trí vạch đen, ánh sáng từ led phát phát ra không phản xạ lại được do bị vạch đen hấp thụ Led thu không nhận được ánh sáng này nên điện
áp ở cực Anot của nó gần bằng 5 V Điện áp ra từ led thu được đem so sánh với điện áp chuẩn đã được chỉnh hợp lý qua IC LM324 để cho ra mức logic 0-1, đưa vào vi điều khiển xử lý
IC LM324 gồm 4 kênh so sánh Trong đó, đầu vào đảo nối với cực Anot của led thu và đầu vào không đảo nối với điện áp so sánh từ chiết áp
Khi led ở ngoài nền trắng, mức điện áp trên led thu đo được là 3.0V, ngược lại, mức điện áp thu đo được khi bắt vào vạch đen là 4.6 V Điện áp so sánh (Vref) được đặt qua biến trở 10k là 3.8 V
Khi ở ngoài nền trắng: Vled thu <Vref nên Output=1
Khi bắt vạch đen: Vled thu >Vref nên Output=0
Hình 2.4: Sơ đồ nguyên lý khối led thu phát
Trang 7Hình 2.6: Mạch so sánh sử dụng LM324
3 2 1 3 2 1
2 1
2 1
2 1
2
1
2 1 2
1
2 1 2
1
1 2 3 4 5 6 7
14 13 12 11 10 9 8
1 2
1
2
8 9 10 11 12 13 14
7 6 5 4 3 2
1 7
5
1 2 3 4 6 8
1
2
1 2
1 2
1
2
1 2
1 2
1 2
1
2
1
2
1
2
1
2
1
2
1
2
1
2
1
2
3 2
1
3
2 1
3
2 1
3 2 1
Hình 2.5: Mạch in của hệ thống cảm biến
C) Mạch điều khiển
Khối này gồm có Vi điều khiển AT89S52, mạch RESET, mạch tạo dao động, các led báo vạch về từ mạch SENSORS, Jumpers đầu vào dùng để nạp ISP
+Vi điều khiển AT89S52 được chúng ta sử dụng vì nó có đầy đủ những chức năng của
vi điều khiển AT89C51 Ngoài ra còn có thêm một timer (timer2) và có bộ nhớ Flash,
Trang 8công nghệ nạp ISP (In System Programming) tức là nạp mà không cần tháo chip ra khỏi mạch, giúp việc lập trình và test rất thuận tiện
+ Mạch RESET có chức năng reset lại hoạt động của vi điều khiển, được nối vào chân
số 9 của vi điều khiển là chân tích cực cao Khi chân số 9 được set lên 1 thì vi điều khiển được reset lại Để chống rung khi ấn nút, chúng ta dùng một tụ hóa nối song song với nút ấn
+ Mạch DAO ĐỘNG sử dụng thạch anh 12Mhz, như vậy một chu kì máy là 1us, rất thuận tiện cho việc tính toán và lập trình Tuy nhiên có hạn chế là không thể truyền thông với máy tính qua cổng COM (đòi hỏi thạch anh 11.0592Mhz) Thạch anh này được nối đất với tụ gốm 33p để lọc nhiễu
+ Các led báo vạch về dùng để phản ánh tình trạng của các led thu phát ở mạch SENSORS Khi một cặp thu-phát bắt vào vạch đen thì led báo tương ứng sẽ sáng lên và ngược lại Nói cách khác, các led báo này phản ánh vị trí lệch của xe so với vạch đen, từ
đó giúp tìm và khắc phục lỗi chương trình thuận tiện hơn rất nhiều
Trang 9Hình 2.8: Sơ đồ nguyên lý mạch điều khiển
8 6 4 3 2 1
5
7
2 1
1 2 1
2 21
22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1
5
1 2 3 4
6
1 2
1 2
1 2
1 2
1 2
1 2
1 2
1 2
1
2
1
2
1
2 1 2
1 2
1 2
2
1
Hình2.9: Mạch in của khối điều khiển
D) Khối động cơ
Sử dụng IC L298 là một IC tích hợp nguyên khối gồm 2 mạch cầu H bên trong Với điện áp làm tăng công suất nhỏ như động cơ DC loại vừa.Mình tóm tắt qua chức năng các chân của L298:
- 4 chân INPUT: IN1, IN2, IN3, IN4 được nối lần lượt với các chân 5, 7, 10, 12 của L298 Đây là các chân nhận tín hiệu điều khiển
- 4 chân OUTUT: OUT1, OUT2, OUT3, OUT4 (tương ứng với các chân INPUT) được nối với các chân 2, 3,13,14 của L298 Các chân này sẽ được nối với động cơ
- Hai chân ENA và ENB dùng để điều khiển mạch cầu H trong L298 Nếu ở mức logic
“1” (nối với nguồn 5V) cho phép mạch cầu H hoạt động, nếu ở mức logic “0” thì mạch cầu H không hoạt động
Với bài toán của mình ở trên, các bạn chỉ cần lưu ý đến cách điều khiển chiều quay với L298:
- Khi ENA = 0: Động cơ không quay với mọi đầu vào
- Khi ENA = 1:
INT1 = 1; INT2 = 0: Động cơ quay thuận
INT1 = 0; INT2 = 1: Động cơ quay nghịch
INT1 = INT2: Động cơ dùng ngay tức thì
Trang 10Với ENB cũng tương tự với INT3, INT4.
Hình2.12: Mạch nguyên lý khối động cơ
2.2 MÔ TẢ PHẦN CỨNG CPU
Cấu trúc chung của bộ vi điều khiển họ 8051
Một số thành phần chính của bộ vi điều khiển 8051:
hoặc cũng có thể dùng để định địa chỉ khi sử dụng bộ nhớ ngoài
hoạt động của vi điều khiển
Trang 11 Các bộ timer, bộ đếm: được sử dụng rất nhiều để tạo trễ, dùng trong hoạt động ngắt
……
khiển
Vi điều khiển sử dụng trong bài tập này là AT89S52 của hãng Atmel Một số đặc điểm chỉnh của vi điều khiển này như sau:
Sơ đồ chân của vi điều khiển AT89S52 được minh họa như hình dưới:
2.3 MÔ TẢ THIẾT KẾ CÁC PHẦN KHÁC
Trang 12Thân xe gồm có 2 bánh trước để dẫn động, bánh sau quay được 360o , 2 động cơ sử dụng là loại 12V một chiều được gắn vào thân xe Mạch cảm biến kết nối với vi điều khiển qua dây bus 6 gồm có 2 chân cấp nguồn 5V, vào 4 chân tín hiệu
2.4 THIẾT KẾ PHẦN MỀM
Chương trình viết cho vi điều khiển sử dụng ngôn ngữ C với trình dịch là phần mềm
MẠCH SENSORS MẠCH
VI ĐIỀU KHIỂN ĐIỀU KHIỂN ĐỘNG CƠ
XE CHUYỂN ĐỘNG
Lưu đồ thuật toán điều khiển:
KHỞI TẠO GIỚI THIỆU
DÒ ĐƯỜNG LỆCH
YES
NO
Cua trái
Or Cua phải
Đi thẳng
Trang 13NO
Chương trình con khi bắt vạch đích
VẠCH
2.5 CÁC BƯỚC KIỂM TRA
3 KẾT QUẢ ĐẠT ĐƯỢC VÀ PHÂN TÍCH LỖI
Vấn đề 1: Đọc và xử lý tín hiệu SENSORS
Tính toán, thu thập các trường hợp xe lệch ra khỏi đường, xe gặp khúc cua, xe không bắt được vạch đen, xe bắt vạch đích, xe cua ở góc cua gấp…
Xử lý các trường hợp trên như thế nào?
Trong quá trình test xe, nhiều khi Sensors bắt không chuẩn hoặc không ổn định
Khắc phục: Để thu thập các trường hợp, dùng tay đẩy xe đi theo đường đặc biệt là các
khúc cua và ghi tín hiệu hiển thị trên các led báo về, tính toán các trường hợp lệch trái, lệch phải, lệch ít, lệch nhiều, không lệch, bắt vạch đích…
Hàn chắc các mối hàn mạch SENSORS, kiểm tra cáp nối với mạch vi điều khiển, điều chỉnh biến trở để lấy điện áp so sánh hoạt động ổn định đưa vào IC LM324 là 3.8V
Kết quả:Mạch hoạt động ổn định, SENSORS bắt rất tốt, tín hiệu báo về trên mạch vi
điều khiển chuẩn xác
Vấn đề 2: Cách điều chế độ rộng xung PWM để đưa vào chân EN1, EN2 điều khiển
chiều quay cũng như tốc độ quay của hai động cơ truyền động
Trong quá trình test xe, chúng em gặp các vấn đề: băm xung xe không chạy, cùng băm xung với hai giá trị bằng nhau vào EN1 và EN2 nhưng tốc độ quay của hai động cơ không bằng nhau hoặc trường hợp động cơ quay không đúng với chương trình Ví dụ cùng một trường hợp Led báo về nhưng có lúc động cơ quay thuận, lúc quay ngược
Khắc phục: Hiệu chỉnh chương trình băm xung cho hợp lý Mô phỏng chương trình
nói riêng cũng như mạch vi điều khiển, động cơ nói chung bằng phần mềm mô phỏng rất mạnh là Proteus
Trang 144.KẾT LUẬN
Qua quá trình làm bài tập lớn vi điều khiển với sản phẩm thực tế là chiếc xe chạy theo đường đi này, chúng em đã học hỏi được rất nhiều kiến thức: thiết kế xe, thiết kế mạch, làm mạch in, lập trình, hiệu chỉnh… Điều quan trọng là chúng em đã làm được một sản phẩm dựa trên những kiến thức đã học vì từ lý thuyết ra thực tế là cả một quãng đường dài
Bài tập này giúp chúng em hiểu thêm cấu trúc của Vi điều khiển 8051 cũng như tập lệnh của nó, tạo tiền đề để tiếp tục nghiên cứu các vi điều khiển ứng dụng mạnh hơn như AVR, PIC, ARM…., các bộ PLC, các hệ thống SCADA, DSC…, phục vụ cho quá trình làm việc, nghiên cứu sau khi tốt nghiệp
Chúng em chân thành cảm ơn thầy giáo Nguyễn Hồng Quang đã hướng dẫn, truyền đạt kiến thức để có thể hoàn thành được bài tập này
5 MỞ RỘNG ĐỀ TÀI
Để có được chiếc xe tự hành có khả năng di chuyển bắt vạch với độ phức tạp cao của đường đi, xe đạt tốc độ lớn thì đề tài có thể nghiên cứu tiếp như sau:
nhanh chóng ổn định ở tốc độ cao
Có thể đưa thêm các nút bấm để lựa chọn chiến thuật trên LCD khi xe chạy trên đường
có nhiều ngã tư và nhiều lối đi Và để dễ dàng trong việc phát triển thuật toán hơn thì việc nghiên cứu sử dụng các vi điều khiển có nhiều tính năng như AVR hay PIC có thể là hướng tiếp theo
Tuy nhiên việc xe tự hành di chuyển bắt vạch không có ứng dụng thực tế lắm, nên để có thể phát triển đề tài thành ứng dụng có tính thực tiễn thì phần sensor cần phát triển để có thể nhận biết vật cản nói chung chứ không chỉ là vạch đen đơn thuần Công nghệ xử lý ảnh có thể là một hướng phát triển hợp lý cho phần sensor.Từ đó xe tự hành có thể di chuyển trên đường bất kì và ta có thể nghiên cứu phát triển phần cơ khí và các bộ điều khiển để xe có thể thực hiện một số công việc nào đó khi gặp vật cản như nhặt đồ bị rơi, gắp quà (trong cuộc thi robocon), thậm chí có thể là thu dọn rác hay ấn nút mở cửa…!
6 TÀI LIỆU THAM KHẢO
1. Bài giảng trên lớp
2. Cấu trúc và lập trình họ vi điều khiển 8051 – Nguyễn Tăng Cường
Phan Quốc Thắng
3 Họ vi điều khiển 8051- Tống Văn On_Hoàng Đức Hải
Trang 154 Một số trang web:
……
7 PHỤ LỤC
7.1 DANH SÁCH THIẾT BỊ
Tụ điện các loại: tụ sứ 33p, tụ hóa 10uF, 330uF,
0.1uF
Vài
Phíp đồng, hóa chất
7.2 MÃ NGUỒN
Trang 16#include <REGX52.H>
sbit PWM1=P0^5; // bam xung dong co phai
sbit LED1=P3^4; // sensor 1 o vi tri ben trai xa
sbit LED2=P3^3; // sensor 2 o vi tri ben trai gan
sbit LED4=P3^1; // sensor 6 o vi tri ben phai xa
sbit EN1=P0^0; // dieu khien dong co trai
sbit IN1=P0^1; // dong co trai quay thuan
sbit IN2=P0^2; // dong co trai quay nguoc
sbit IN3=P0^3; // dong co phai quay thuan
sbit IN4=P0^4; // dong co phai quay nguoc
sbit EN2=P0^5; // dieu khien dong co phai
unsigned char dem;
unsigned char ptxung; // phan tram xung
unsigned char ptxung1; // phan tram xung 1
void timer0(void) interrupt 1 // ngat timer 0
{
dem++;
if(dem<ptxung)
{P0_0=1; }
else P0_0=0;
if(dem<ptxung1)
{ P0_5=1;}
else P0_5=0;
if(dem==11) dem=0;
TR0=1; // chay timer 0
}
void khoitaotimer0(void) // ham khoi tao
{
EA=0; // cam ngat toan cuc
TMOD=0x02;
TH0=0x00;
TL0=0x00;
ET0=1; // cho phep ngat timer 0
EA=1; //cho phep ngat toan cuc
Trang 17TR0=1; // cho phep ngat timer
}
void motor_left_forward() // DONG CO TRAI CHAY THUAN
IN1=0;IN2=1; } // quay thuan void motor_left_reverse() // DONG CO TRAI CHAY NGUOC
IN1=1;IN2=0; } // chay nguoc
{ EN1=0;}
void motor_right_reverse() // DONG CO PHAI CHAY NGUOC
IN3=1;IN4=0;} // chay nguoc void motor_right_stop() // DONG CO PHAI DUNG LAI
{EN2=0;}
{ motor_left_forward();
motor_right_forward();}
{ motor_left_reverse();
motor_right_reverse();}
{ motor_left_stop();
motor_right_stop();}
{ motor_left_reverse();
motor_right_forward();}
{ motor_left_forward();
motor_right_reverse(); }
char v;
void main()
{
khoitaotimer0();
Trang 18
P0=0x2B;
P3=0x1E;
{
ptxung=1;
ptxung1=1;
forward();
} if(LED1==1&&LED2==0&&LED3==0&&LED4==0) // QUAY
{
ptxung=8;
ptxung1=8;
turn_right();
if(LED1==0&&LED2==1&&LED3==0&&LED4==0) // QUAY PHAI 1 led so 2 - lech it
{ ptxung=6;
ptxung1=4;
turn_right();
} if(LED1==0&&LED2==0&&LED3==1&&LED4==0) // QUAY
{
ptxung=4;
ptxung1=6;
} if(LED1==0&&LED2==0&&LED3==0&&LED4==1) // QUAY
{
ptxung=0;
ptxung1=7;
turn_left();
} if(LED1==1&&LED2==1&&LED3==0&&LED4==0) // QUAY PHAI
2 led so 1,2 - lech vua
{
ptxung=3; //8