Tải bản đầy đủ (.doc) (23 trang)

Tài liệu Chương trình nghiên cứu robocon doc

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 (531.17 KB, 23 trang )

CHƯƠNG TRINH NGHIÊN CỨU ROBOCON
Giới thiệu:
Trong những năm gần đây phong trào robocon và các môn cơ điện tử ngày càng phát
triển nhưng các tài liệu và công nghệ rất khan hiếm chính vì vậy nhóm robocon CĐT-K9
xây dựng chương trình nghiên cứu này với mục tiêu :
+) Hỗ chợ cho các sinh viên nghiên cứu chế tạo robot và thực hiện các đồ án môn
học cơ điện tử.
+) Xây dựng lực lượng chế tạo robot cho năm 2010 và các năm tiếp theo.
+) Trao đổi thông tin tạo nên một diễn đàn mở về các thiết bị cơ điện tử và đồ án
cơ điện tử.
Các vấn đề thắc mắc và góp ý liên hệ :
Phạm Văn Lượng
Lớp: Cao Đẳng Cơ Điện Tử - Khóa 9
Số điện toại: 0975662019
Mục lục :
Chương I_ Mạch điện tử.
1. Mạch nguồn
2. Cảm biến quang
3. Mạch so sánh
4. Mạch vi điều khiển
5. Mạch động lực
Chương II_ Sử dụng công cụ lập trình CodeVisionAVR & MPLap và mạch nap.
1. CodevisonAVR
Giới thiệu về CodevisonAVR
Tạo 1 project mới
Lập trình I/O
Lập trình timer
Lập trình ngắt ngoài INT
Lập trình PWM
2. MPlLap
Chương III_Lập trình trên ROBOT


1. Chương trình chạy 1 đoạn đường bất kỳ dựa vào encoder
2. Chương trình do đường
Thuật toán dò đường
Dò đường bắt ngã tư
Dò đường 1 đoạn đường bất kỳ dựa vào encoder
Chương I_ Mạch điện tử.
1. Mạch nguồn
- Nguồn chúng ta dùng bình DC nên tương đối ổn đinh chún ta chỉ nghiên
cứu mạch nguồn đấp ứng đủ cường và điện áp chuẩn cho vi điều khiển
hoạt đông.
- Mạch nguyên lý.
IN
1
GND
2
OUT
3
IC4
R12
47
C2
2200uF/16V
C4
104
C3
2200uF/16V
C5
104
D2
VCC

1
2
HD13
GND
LD1
R13
270
PNP1
L1
Cuon cam
- Nguyên lý hoạt động
• HD13 để cấp nguồn 12V cho mạch
• D2 chống cấp ngược nguồn
• Các tụ C2,C3,C4,C5 có nhiệm vụ chống nhiễu cho nguồn
• Cuộn dây L1 có nhiệm vụ chống nhiễu
• R12 là trở gánh
• LD1 là led báo có nguồn có 1 trở bảo vệ R13
• IC LM7805 là IC ổn định đầu vào 12V đầu ra 5V.
• PNP1 là B688 tranzito mắc theo kiểu B chung này kéo cường
cho toàn bộ mạch
Chú ý: đây là mạch bắt buộc đi kèm với mạch vi điêu khiển nên chỉ nghiên cứu
công dụng “dù hiểu hay không hiểu cũng phải vẽ vào mạch”.
2. Cảm biến quang
- Đây là mạch điện cơ bản để nhận biết mầu sắc và ánh sang đơn giản.
- Mạch này thường được đùng để làm sensor( mắt nhìn) trong công nghệ dò
đường cho các robot.
- Đưới đây là mạch điện nghuyên lý.
B688
LM7805
R1

10K
LDR1
GND
VCC
LDED0
LD1
R9
1K
GND
VCC
H.1
- Nguyên lý hoạt động.
• Cảm biến quang chúng ta dùng trong mạch này là quang trở.
Quang trở là loại điện trở mà nội trở của chúng thay đổi theo ánh
sáng.
• Dựa vào đặc điểm của quang trở chúng ta thiết kế như hình vẽ
H.1 với :
LDR1 là quang trở
R1 là trở bảo vệ
• Ánh sánh tác động vào quang trở LDR1 khác nhau thì điện thế
V
LDED0
cũng khác nhau. Khi ánh sáng tác dụng vào LDR1 mạnh
thì V
LDED0
tăng ngược lại khi ánh sáng tác dụng vào LDR1
yếu( tối ) V
LDED0
giảm. Đây là đại lượng căn cứ để ta nhận biết
được sự khác biệt giữa 2 màu đơn giản như mặt sân với vạch

trắng , màu xanh với màu đỏ… ( giới thiệu ở phần 3)
• Ngoài ra chúng ta còn có 1 mạch hỗ chợ ánh sáng gồm LD1(siêu
sáng) , R9 nhằm giảm sự tác động của anh sáng bên ngoài tăng
độ chính xác cho sensor.
3. Mạch so sánh
- Khi đã có giá trị điện áp biến đổi theo ánh sang( màu sắc) và chúng ta
muốn phân biệt được đâu là mầu sắc chúng ta cần dùng thi ta cần phải có
mạch so sánh các giá trị điên áp đó.
- Mạch so sánh chúng ta nghiên cứu ở đây là mạch dùng IC thuật toán thiết
kế để so sánh gia trị điện áp.
- Mạch nguyên lý
1
3
2
IC1A
VR2
100K
GND VCC
A1
LDED1
1
H.2
- Nguyên lý hoạt động
• Giới thiệu qua về mạch
o VR2: là biến trở ( vi chỉnh) có thể thay đổi giá trị
o Khối thuật toán IC1A : nằm trong con IC LM354,LM324….
• Mạch thuật toán thiết kế nhằm mục đính so sánh hoạt động như sau.
Nếu điện áp V(-) > V(+) thì đâu ra A1=0( mức thấp)
ngược lại nếu V(-)<V(+) thì đầu ra A1=1( mức cao)
• Như vậy với mạch điện nghiên cứu ở phần 2 là mạch sensor mới chỉ

đưa ra được điện thế biến thiên theo ánh sáng mà không biết màu nào
chúng ta dùng nhưng đến phần này chúng ta có thể nhận biết được 2
màu cơ bản . Ví dụ màu trắng là mức 0 mầu của sân robot là mức 1…
ý nghĩa của nó là đổi 1 giá trị biến thiên sang giá trị logic được dùng
trong vi điểu khiển cũng như các mạch số học.
• Cách chỉnh mạch so sánh để nhận biết 2 màu cơ bản như sau (chúng ta
chỉ nghiên cứu cách chỉnh làm sao để nhận được mầu sàn thi đấu và
màu trắng của đường đi , các màu khác tương tự)
o Cho sensor vào vạch trắng rồi ghi lại điện áp trên vạch V
LDED0
sau đó cho sensor thoát khỏi vạch ghi lại điện áp ngoài vạch.
Lấy điện áp trên vạch trừ điện điện áp ngoài vạch chia đôi giá
trị đó chúng ta sẽ có gia trị của V(+) . Chúng ta chỉn biến trỏ
VR2 sao cho điện áp của nó nối vào chân V(+) bằng điện áp
chúng ta vừa thu được.
o Ngoài ra còn rất nhiều các mạch so sánh khác như do dường
ADC, do đường bằng tần số chúng ta về tham khảo và nghiên
cứu thêm.
4. Mạch vi điều khiển ( dang chinh sua )
5. Mạch động lực
- Cấu tạo rơle sẽ được tìm hiểu và sác định các đầu chân chứ năng thự tế.
• Nói chung thì rơle có khối cuộn hút là 1 nam châm điện, có các
chân điều khiển cuộn hút và các chân tiếp điêm (hay còn gọi là
các khóa thương đóng thường mở)
• Trên thị trường có nhiêu loại rơle khác nhau vơi các nhiệm vụ
khác nhau và cách bố trí các chân cũng khách nhau nên không
tiện giới thiệu trong này.
- Điều khiển robot chúng ta dung nguồn DC nên ở đây chúng ta chỉ nghiên
cứu động cơ DC và các cơ cấu chấp hành dùng điện DC khác
• Để điều khiển được động cơ DC quay thuận và quay nghịc chúng

ta chỉ cần đổi chiều điện đi vào đông cơ là được.
• Đối với các cơ cấu chấp hành chên robot chúng ta thường sử
dụng động cơ DC nhưng không cần điều chỉnh tốc độ động cơ
mà chỉ cẩn chú ý đến chiều của chúng thì mạch cầu dùng role là
mạch đơn giản mà càng đơn giản chúng ta kiểm soát lỗi càng dễ
dàng .
o Mạch nguyên lý
+24V
D4
1
2
3
45
K1
1
2
3
4 5
K2
D3
UROLE1
UROLE2
M4A M4B
12VDL 12VDL
+24V
Dong co DC
H5.1
o Nguyên lý hoạt động
o 2 đầu dây 4,5 là 2 đầu điều khiển cuộn dây từ nó được
mắc kèm với diôt D3,D4 ( điôt hoàn năng lượng) ,

đầu dây 4 được mắc với +12V đầu dây 5 là đầu điểu
khiển cuộn dây L1,L2 của rơle . Trong mạch ta có 2
dây điều khiển là UROLE1, UROLE2.
o Có tổ hợp khóa 2 tiếp điểm k1 và k2
o Trường hợp 1: UROLE1 +12V , UROLE2 = +12V
 Khi dây điều khiển UROLE1, UROLE2 đều
có điện điều khiển +12V sẽ không có hiện
tượng gì sảy ra các tiếp điểm thường đóng là
(1-2) vấn được đóng, tiếp điểm thường mở (1-
3) vẫn mở.
 Động cơ không quay vì điện được cấp vào
động cơ là 0V
o Trường hợp 2: UROLE1 = 0V, UROLE2= +12V
 Cuộn L1 được cấp điện L2 không được cấp
điện, L1 sẽ hút tiếp điểm (1-2) mở ra đóng
tiêp điểm (1-3) của khóa K1, K2 vẫn giữ trạng
thái (1-2) đóng (1-3) mở.
 Trong lúc này động cơ được cấp điện M4A =
+24V M4B = 0V động cơ sẽ quay ( giả sử là
quay thuận chiều kim đông hồ “ quy định để
vì tý nữa nó quay ngược thì coi là ngược chiều
kim đồng hồ ấy mà”)
o Trường hợp 3: UROLE1 = +12V, UROLE2= +0V
 Cộn L1 không được cấp điên L2 được cấp
điện , khóa K1 có tiếp điểm (1-2) đóng (1-3)
mở khóa K2 (1-2) mở (1-3) đóng.
 Trong lúc này động cơ điện được cấp nguồng
M4A = 0V, M4B = +24V, Động cơ quay
ngược lại so với trường hợp trên(ngược chiều
kim dồng hồ)

L1 L2
o Trường hợp 4: UROLE1 = 0V, UROLE2= +0V
 L1 và L2 đều hút các khóa K1, K2 chuyển (1-
2) mở (1-3) đóng
 Trong trường hợp này thì điện cấp vào động
cơ ở 2 đầu M4A = M4B = +24V không tao ra
trênh lệch điệp áp vì M4A – M4B =0V =>
động cơ không quay.
o Chú ý không cháy nhà: rơle chúng ta sử dụng là loại 5 chân
không phải loại 8 chân khác nhau đấy nha.
• Các khối mạch cơ bản trong mạch động lực dùng rơle và IRF
• Mạch IRF
o Mạch được thiết kế để khoách đại cho IRF chạy theo tín hiệu
điều khiển của vi điều khiên đưa sang . Đừng ai dại mắc trực
tiếp IRF vì cường độ dòng điện của vi điều khiển rất yếu
không mỏ được cho IRF.
o Mạch nguyên lý.
2
1
3
C828
Q1
2
1
3
A564
Q5
22 / 1W
R29
15V

DZ1
2
1
3
Q3
IRF840
C1
CAP NP
UPWM1
12VDL
H5.2
o Nguyên lý hoạt động.
o Như đã giới thiệu ở trên đây là mạch khuếch đại để
mở cho IRF chạy theo tín hiệu PWM của vi điều
khiên cấp sang nên chúng ta sẽ xét 2 trường hợp là 0
và 1 của PWM
o Trường hợp 1 PWM có tín hiệu là 0
 Tín hiệu là 0 tức là 0V Q1 không thông Q2
thông nó sẽ làm cho IRF đóng (chân số 2 của
IRF không thông với chân số 3 của IRF)
o Trường hợp 2 PWM có tín hiệu là 1
 Lúc này Q1 thông Q2 không thông làm cho
IRF thông ( chân 2 và c3 của IRF thông)
o Con trở R29 và C1 là sơ đồ ghép tầng nối mảng
khoách đại và IRF
o DZ1 là con diôtzener nhiệm vụ luốt xung ( ai không
hiểu con này về nhà đọc lại chức năng của nó trong
sách điện tử cơ bản còn cố tình không hiểu cũng
không sao nhưng khi thiết kế mạch đừng có vất nó đi
là được)

o PWM có ý nghĩa cự kỳ quan trọng
o Dưới đây chúng ta nghiên cứu về nó cách nó điều
khiển động cơ thế nào
o Dưới dây là giản đồ xung.
a. PWM 50/50
b. PWM 25/75
c. PWM 75/25
H5.2.1
o Trước hết nhắc tới xung PWM thì chúng ta biết ngay
đây là loại xung thì phải thay đổi được tần số ( như con
IC 555 trong kỹ thuật số chúng ta đã được học) nhưng
dùng tần số để điều khiển động cơ DC thì sẽ làm cho
động cơ hoạt động không như chúng ta mong muốn. Vì
muốn tăng giảm tốc độ thì chúng ta phải thay đổi tần số
mà tần số càng thấp ( chu kỳ T càng cao) sẽ gây ra hiện
tượng giật cục như kiểu chúng ta bật tắt nguồn của 1 cái
quạt liên tục vậy như vậy động cơ sẽ mất lực và làm
nóng động cơ. Đối với các loại động cơ DC chỉ hoạt
động tốt trong dải tần mà nhà sản xuất quy định.
Thường thì các loại động cơ mà tôi thường dùng thì tôi
để tần số vào khoảng 2kHz là ổn. Vậy làm sao để động
cơ hoạt động ở 1 tần số mà vẫn điều chỉnh được tốc độ
động cơ như các hình ở trên chúng ta sẽ điều chỉnh độ
rộng xung trong mỗi chu kỳ thay vì chúng ta chỉnh tần
sô.
o Vậy PWM là loại xung mà ta vừa có thế điều chỉnh tần
số phù hợp với từng động cơ và có thể chỉnh được độ
rộng xung để điều khiển tốc độ.
o Trong các mạch của chúng ta thì thường để xung ở mưc
1 là cho mạch chay còn mưc 0 là ngừng hoạt động. Vật

để động cơ quay nhanh thì ta cho đọ rộng xung của
mức 1 tăng như hình H5.2.1 c và nhanh nhất là 100%
độ rộng xung ở mưc 1 , ngược lại muốn chạy chậm thì
chúng ta cho độ rộng ở múc 1 giảm đi như hinh
H5.2.1b muốn không cho động cơ chạy nữa thì ta điều
chỉnh cho 0% độ rộng xung ở mức 1.
o Chu ý: đây là mạch thiết kế để nhận xung ở mức 1
nhưng cũng có mạch nhận xung ở mưc 0. Đối với
mức 0 thì các bạn tự nghiên cứu.
o Nói chung ta dùng xung PWM để điều khiển động cơ
như kiểu bật tắt 1 cái quạt 1 cach liên tục nhưng thay vì
điều chỉnh tần số để thay đổi tốc độ thì chúng ta thay
đổi độ rộng xung động tác này tương tự như chúng ta
để thời gian bật điện cho quạt nâu hơn thời gian tắt nó
đi( hoặc ngược lại tăt nâu hơn bât) nhưng cộng cả 2 thời
gian đó lại cũng chỉ bẳng thời gian chúng ta cả tắt cả
bật quạt theo kiểu 50/50 theo kiêu tăng giảm tần số thế
là động cơ không giật cục không mất lực lại còn mát
rượi.
• Mạch đảo chiều quay và quản lý tốc độ dùng PWM
2
1
3
C828
Q1
2
1
3
A564
Q5

22 / 1W
R29
15V
DZ1
2
1
3
Q3
IRF840
C1
CAP NP
UPWM1
12VDL
1
2
DC3_DC3
CON2
D29
104
C10
D28
3
2
4
6
7
5
1
8
LS3

RELAY
12V
24V
DK
H5.3
o Mạch này chúng ta dùng 1 mạch IRF và 1 mạch dảo chiều
dùng rơle 8 chân khác với mạch dùng 2 rơle 5 chân như ở
trên.
o Đối với mạch khiển đảo chiều dùng rơle nguyên lý hoạt
động như sau:
o Là rơle có 8 chân trông đó có 2 chân điều khiển
cuộn hút 1-8 và 2 khóa 5-6-7 và khóa 2-3-4
o Nếu không có điện cấp cho cuông hút thì các chân
thường đóng 2-3 và 6-7 sẽ cấp điện cho động cơ
theo mạch ở đây thì tiếp điểm 6-7 sẽ cấp nguồn cho
động cơ là +24V và tiếp điểm 2-3 sẽ cấp xung
PWM cho động cơ.
o Ví dụ ta chưa sét tới chân PWM từ chân số 2 của
IRF đưa sang ta coi chân này chỉ là chân cấp điện
âm 0V thì mạch sẽ cấp điện cho động cơ quay
thuận, chú ý là chân ra của rơle thì chân số 6 có
điện +24V còn chân số 3 sẽ là 0V.
o Bây giờ chúng ta cấp điện cho cuộng hút của rơle
hoạt động thì các tiếp điểm (7-6),(2-3) sẽ mở và
(5-6),(3-4) sẽ đóng điện cấp vào động cơ sẽ đảo
chiều chân số 6 sẽ là 0V và chân số 3 sẽ là +24V .
Vì bị đảo chiều dòng điện nên đông cơ sẽ quay
ngược lại so với trường hợp bên trên
o Chú ý: nếu sét mạch điện sử dụng rơle 8 chân hư trên
khi điều khiển thì chúng ta chỉ có thê điều khiển cho

động cơ quay ngược và xuôi mà thôi không thể dừng
động cơ như mạch H5.1. Nhưng chúng ta còn có mạch
IRF đi kèm thì mạch lại có ưu điêm hơn hẳn so với
mạch H5.1 vì không những chúng ta có thể dừng được
động cơ mà chúng ta còn có thể điều khiên được tốc độ
động cơ. Vì vi điều khiển có thể khóa IRF không cho
chân (2-3của) thông nhau nữa( hoạt động của mạch IRF
đã trình bày ở trên).
Chương II_ Sử dụng công cụ lập trình CodeVisionAVR & MPLap và mạch nap.
1. CodevisonAVR
1.1Giới thiệu về CodevisonAVR
- Đây là phần mềm lập trình cho họ vi điều khiển Atmega hay còn gọi là
AVR sử dụng ngôn ngữ là C.
- CodevisonAVR rất mạnh chúng hỗ chợ đến tận răng những người mới học
đầy đủ các tinh năng rất dễ sử dụng.
- Trong chương trình chúng ta chỉ nghiên cứu đến các phần cơ bản để có thế
lập trình robot còn các phần khác các bạn tự nghiên cứu.
- Dễ sử dụng đơn giản nhưng nó rất hiệu quả đối với nhưng người mới bắt
đầu lắm bắt nhâp môn vào ROBOCON.
1.2 Tạo 1 project mới
- Sau khi khởi động chư trinh CodevisonAVR ta vào Tools ->
CodeWinzadAVR hoạc chúng ta có thể chỉ thẳng vào biểu tượn cái bánh
răng trên thanh công cụ theo hướng mũi tên.
- Sẽ có 1 của sổ như sau hiên ra
• Trước hết chúng ta phải chọn tên chip ở ô Chip chỉ vào ô tam
giác và chọn chip cần dung.
• Clock: là ô để chúng ta chọn tần số cho thạch anh ( tần số thạch
anh phải chọn theo mạch vẽ)
• Các Tap còn lại là các chức năng khác nhau mà chương trinh hỗ
chợ đối với các chip khác nhau thì các hỗ chợ này cũng khác

nhau. Tùy thuộc vào các tính năng chúng ta có thể chọn các chức
năng tùy ý.
• Nếu chọn song các chức năng cần dùng chúng ta sẽ tạo ra 1
project như sau chọn File -> Generate, Save and Exit
• 1 của sổ thông báo giúp chung ta chọn địa chỉ đặt chương trinh
Chọn địa chỉ cất file ở ô save in , đáng tên file vào File name cuối cùng chọn
nút Save , nó sẽ hiện ra 1 cửa số mới như sau.
Ta cũng chọn như trên đáng tên và cũng ấn nút Save lại tiếp tục có 1 của sổ
mơi hiện ra
Chọn như trên và cũng ấn save chúng ta sẽ được 1 của sổ như sau ( chú ý các
địa chỉ đặt File tron 3 lần hỏi của máy phải đặt cùng 1 thư mục)
1.3Lập trình I/O ( input ,out)
- I/O là lập trình các Pin của vi điều khiển nhận hoặc xuất tín hiệu.
Chúng ta sử dụng vi điều khiển atmega218 là loại có tới 6 PORT
(ABCDEF) có 8PIN (8 chân) và 1 PORT có 5PIN (5chân). Tất cả các Pin
này đều là chân I/O và ngoài nhiệm vụ I/O thì các Pin này còn có các chức
năng khác tùy thuộc vào cách khai báo phần cứng vi điều khiên. I/O là
kiến thức cơ bản nhất mà các vi điều khiển đều có. Nếu muốn 1 chân nào
đó là nhận tín hiêu hoặc xuất tín hiệu thì trước hết chúng ta cũng phải khai
báo phần cứng của vi điều khiển để định nghĩa cho từng chân. Thanh ghi
định nghĩa nhiệm vụ xuất nhận là DDRx ( x là: A,B,C,D,E,F)
Tóm tắt : Lập trình điều khiển led bật tắt ,sử dụng cách định nghĩa PIN và PORT
,cách dùng thư viện delay.h của codevision.
Giới thiệu:
Cấu trúc chân của AVR có thể phân biệt rõ chức năng (vào ra) trạng thái (0 1) từ đó ta có
4 kiểu vào ra cho một chân của avr.Khác với 89 là chỉ có 2 trạng thái duy nhất (0 1) . Đặc
biệt nguồn từ chân của AVR đủ khoẻ để điều khiển Led trực tiếp (mA) còn 89 chỉ là vài
uA .
Để điều khiển các chân này chúng ta có 2 thanh ghi
->PORTx :giá trị tại từng chân (0 – 1) có thể truy cập tới từng bit PORTx.n

->DDRx : thanh ghi chỉ trạng thái của từng chân , vào hoặc là ra .Giá trị 1 là ra và 0 là
vào .
Ví dụ 1 : Nhấp nháy lần lượt đèn xanh và đèn đỏ , khi ấn nút bấm chỉ có đèn đỏ sáng.
Phần cứng : đèn xanh PORTB.4 , đèn đỏ PORTB.5 , nút bấm PINB.7
Chú ý :
định nghĩa 1 chân là chân vào PIN x.x
#define nut_bam PINB.7
định nghĩa 1 chân là chân vào PORT x.x
#define den_do PORTB.5
Trong bài này PORT B có 2 biến đầu ra là PB5 và PB6
DDRB=0b00110000 =0x30
Khởi tạo chân PB7 cần được treo lên 5V , khi ấn nút bấm sẽ thông GND(0V) nên ta có
PORTB=0b10000000=0x80;
Sau khi định nghĩa , nếu bạn den_do=1; đèn led đỏ sẽ tắt
den_do=0; đèn sẽ sáng .
( do cách thiết kế mạch đầu dương led nối 5V còn đầu âm nối vào VĐK)
delay.h có 2 cách gọi là trễ theo ms và us
delay_ms(time);
delay_us(time);
c code
1.
2. /*****************************************************
3. This program was produced by the
4. CodeWizardAVR V1.24.8d Professional
5. Automatic Program Generator
6. © Copyright 1998-2006 Pavel Haiduc, HP InfoTech s.r.l.
7.
8.
9. Project :
10. Version :

11. Date : 12/27/2007
12. Author : Pham van Luong
13. Company : CDT-K9
14. Comments:
15.
16.
17. Chip type : ATmega16
18. Program type : Application
19. Clock frequency : 8.000000 MHz
20. Memory model : Small
21. External SRAM size : 0
22. Data Stack size : 256
23. *****************************************************/
24.
25. #include <mega128.h>
26. #include <delay.h>
27.
28. // Declare your global variables here
29.
30. #define den_xanh PORTB.5
31. #define den_do PORTB.6
32. #define nut_bam PINB.7
33.
34. void main(void)
35. {
36.
37. // Port B initialization
38. // Func7=In Func6=Out Func5=Out Func4=In Func3=In Func2=In
Func1=In Func0=In
39. // State7=T State6=0 State5=0 State4=T State3=T State2=T

State1=T State0=T
40. PORTB=0x80;
41. DDRB=0x30;
42.
43.
44.
45. while (1)
46. {
47. // Place your code here
48. //khi nut bam chua duoc bam logic nut_bam=1
49. if(nut_bam)
50. {
51. den_xanh=1;den_do=0;
52. delay_ms(500);
53. den_xanh=0;den_do=1;
54. delay_ms(500);
55. }
56. //khi nut bam duoc an nut_bam=0 chi den do sang
57. else
58. {den_xanh=1;den_do=0;}
59. };
60. }
61.
62.
63.
1.4Lập trình timer
Đặc tính:
- Bao gồm các bộ timer 8bit 16 bit, thường có từ 3 – 4 bộ Timer
- Có các kênh PWM (từ 4 đến 8 kênh tuỳ loại )
- Bao gồm nhiều chế độ ngắt và PWM …

- Có thể là một kênh đếm riêng biệt
- Tự động xoá Timer trong chế độ so sánh(tự động nạp lại)
- Có chế độ PWM
- Tạo ra tần số
- Đếm các dự kiện ngắt ngoài
- Tạo ra các ngắt tràn và ngắt so sánh

Introduction
Các chế độ hoạt động của timer:
Chế Độ Thông Thường:
Đây là chế độ hoạt động đơn giản nhất của Timer .Bộ đếm sẽ liên tục đếm tăng lên cho
đến khi vượt quá giá trị lớn nhất TOP và sau đó sẽ được khởi động lại tại giá trị
Bottom.Trong các hoạt động thông thường thì cờ tràn sẽ được thiết lập khi giá trị trong
Timer đạt giá trị không và không bị xoá đi.Tuy nhiên nếu mà ngắt tràn được chấp nhận
thì cờ ngắt sẽ tự động bị xoá khi ngắt được thực hiện.Giá trị trong Timer có thể được viết
vào bất cứ lúc nào
Chế Độ So Sánh (CTC):
Đấy là chế độ mà giá trị trong Timer luôn được so sánh với giá trị trong thanh ghi
ORC .Khi giá trị trong Timer bằng giá trị trong thanh ghi ORC thì giá trị trong Timer sẽ
bị xoá đi.Giá trị trong ORC đóng vai trò là giá trị TOP cho bộ đếm.Chế độ này cũng cho
phép tạo ra tần số so sánh ở đầu ra.Tuy nhiên trong chế độ này nếu giá trị mới ghi vào
thanh ghi ORC mà nhỏ hơn giá trị tức thời của bộ đếm thì thì 1 so sánh sẽ bị lỡ, khi đó bộ
đếm sẽ đếm đến giá trị lớn nhất sau đó rơi xuống giá trị 0 trước khi so sánh tiếp theo xuất
hiện.
Sơ đồ thời gian của chế độ CTC
Chế Độ Fast PWM:
Cho phép tạo ra sóng với tần số cao.Sự khác biệt cơ bản giữa Fast PWM với các loại
PWM khác là nó chỉ sử dụng 1 sườn dốc.Bộ đếm sẽ đếm từ Bottom đến Max sau đó khởi
động lại từ bottom. Trong chế độ không đảo đầu ra của chân so sánh OCx sẽ bi xoá khi
có phép toán so sánh giữa TCNTx và thanh ghi ORC là bằng nhau. Và sẽ được sét lên 1

khi giá trị đạt Bottom. Trong chế độ đảo ,đầu ra đảo sẽ được set lên 1 khi sự so sánh giữa
thanh ghi ORC và giá trị trong Timer bằng nhau và sẽ bị xoá khi giá trị đạt Bottom.Trong
cả hai trường hơp này tần số của chế đô Fast PWM đều gấp đôi so với chế độ phase
correct PWM sử dụng hai sườn dốc
Với tần số cao này chế độ độ Fast PWM rất tốt cho các ứng dụng như ADC hay chỉnh
lưu.Ngoài ra với tần số cao giúp làm giảm kích thước của thiết bị ngoài như cuộn dây tụ
từ đó giúp làm giảm toàn bộ chi phí cho hệ thống
Sơ đồ dưới đây mô tả chu kỳ thời gian của chế độ:
Biều đồ thời gian chế độ Fast PWM
Chế độ Phase correct PWM:
Chế độ này hoạt động dựa trên hai sườn lên xuống.Bộ đếm sẽ đếm liên tục từ giá trị
BOTTOM đến giá trị MAX và sau đó từ giá trị MAX đến giá trị BOTTOM.Trong chế độ
so sánh không đảo chân so sánh (OCx) sẽ bị xóa khi giá trị TCNTx bằng giá trị OCRx
trong quá trình đếm lên và sẽ được set bằng 1 khi giá trị so sánh xuất hiện trong quá trình
đếm xuống.Chế độ so sánh đảo thì các giá trị là ngược lại.Với hoạt động hai sườn xung
này thì chế độ này không tạo ra được tần số nhỏ như chế độ một sườn xung .Nhưng do
tính cân đối của hai sườn xung thì nó tốt hơn cho điều khiển động cơ
Chế độ phase correct PWM hoạt động cố định là 8 bít.Trong chế độ này bộ đếm sẽ tăng
cho đến khi đạt giá trị MAX ,khi đó nó sẽ đổi chiều đếm.Biểu đồ thời gian đây mô tả hoạt
động của toàn bộ quá trình:
Từ biểu đồ thời gian ta nhận thấy việc thay đổi tần số trong hoạt động của phase correct
PWM có thể thay thế bằng hai giá trị là MAX và BOTTOM. Nó linh hoạt hơn so với chế
độ Fast PWM.
Tần số có thể tính theo công thức như sau:
f=fc/N*510
Trong đó N tạo ra bởi bộ chia nó có các giá trị là:1,8,64,256 hoặc 1024
Các thanh ghi trong bộ Timer/ Counter:
Thanh ghi điều khiển - TCCRx:
Bít 3,6 –WG00-WG01: Đây là các bít chọn chế độ trong Timer.Các giá trị được mô tả
trong bảng sau.

Bảng chọn chế độ Timer:
Bít 5-4 : COM00-COM01: Quy định giá trị đầu ra trong các phép so sánh
Bít 2: 0 – CS2:0 :Đây là các bít quy định xung cấp cho hoạt động của Timer.Bảng dưới
đây mô tả toàn bộ các giá trị
Chọn chế độ cho xung Clock
Thanh ghi cờ ngắt-TIFR:
Bít 1-OCFx : Khi hai giá trị bằng nhau bít này được set lên bằng 1
Bít 1-TVOx : Khi bộ đếm vượt quá giá trị Top thì bít này được set bằng 1
Thanh ghi mặt nạ ngắt-TIMSK:
Bít 1 – OCIEx: khi bít này được set lên bằng 1 thì cho phép ngắt so sánh
Bít 0 –TOIEX : Khi bít này được set lên bằng 1 thì cho phép ngắt tràn
đoạn chương trình trên dùng timer1. Timer này là bộ đếm 16bit nên giá trị đếm được tối
đa là FFFF. Trong phần khởi tạo Timer ta khởi tạo xung clock cho bộ đếm là 125Khz =
125000 có nghĩa là bộ đếm sẽ đếm được 125000 giá trị trong 1 giây. Ta làm phép tính
như sau:
125000 số 1 giây
? số 0,02 giây (20ms)
ta tính được trong 20ms bộ timer sẽ đếm được là: 125000x0.02= 2500 số.
Ta cần là làm sao cho timer1 đếm được 2500 số sẽ tràn có nghĩa là cần phải nạp vô
nó một giá trị xác định trước (mặc định nó sẽ đếm từ 0000>FFFF và bị tràn) giá trị
này sẽ nhỏ hơn 65535(FFFF) là 2500 (9C4 Hexa) vậy ta tính được giá trị cần nạp lại sau
mỗi lần tràn là FFFF- 9C4 = F63B.
c code
1. #include <mega128.h>
2.
3. unsigned char count=0;
4.
5. interrupt [TIM1_OVF] void timer1_ovf_isr(void) //ngat xay ra sau
20ms
6. {

7. TCNT1H=0xF6; //giá trị nạp lại TCNT1L=0x3B;
8. // goi ham can xu li sau 20mscount++;
9. if (count&gt;10)
10. {
11. count=0;
12. //goi ham can xu li sau 2s }
13. }
14.
15. void main(void)
16. {
17. // Timer/Counter 1 initialization
18. // Clock source: System Clock
19. // Clock value: 125.000 kHz
20. // Mode: Normal top=FFFFh
21. // OC1A output: Discon.
22. // OC1B output: Discon.
23. // Noise Canceler: Off
24. // Input Capture on Falling Edge
25. // Timer 1 Overflow Interrupt: On
26. // Input Capture Interrupt: Off
27. // Compare A Match Interrupt: Off
28. // Compare B Match Interrupt: OffTCCR1A=0x00;
29. TCCR1A=0x03;
30. TCCR1B=0x03;
31. TCNT1H=0xF6;
32. TCNT1L=0x3B;
33. ICR1H=0x00;
34. ICR1L=0x00;
35. OCR1AH=0x00;
36. OCR1AL=0x00;

37. OCR1BH=0x00;
38. OCR1BL=0x00;
39. #asm("sei") //bat co cho phep ngat toan cuc neu khong thi khong
co ngat xay ra
40. while (1)
41. {
42.
43. };
44. }
1.5 Lập trình ngắt ngoài INT
1.6 Lập trình PWM
2. MPlLap

×