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

Đề Tài Điều Khiển Động Cơ Thông Qua Ghép Nối Máy Tính

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 (780.35 KB, 29 trang )

TRƯỜNG ĐẠI HỌC CÔNG NGHIÊP HÀ NỘI

ĐỒ ÁN MÔN GHÉP NỐI MÁY TÍNH

Lời mở đầu
Sự phát triển của khoa học kỹ thuật ngày càng góp phần nâng cao năng suất
lao động đặc biệt là sự ra đời và phát triển của công nghệ mới nhằm tạo ra sự tự
động hoá sự tiện lợi trong xã hội cũng như trong công nghiệp.
Với phần ứng dụng của động cơ điện đã tạo lên một nền công nghiệp tự
động hoá phát triển mạnh mẽ và rực rỡ như ngày nay. Được ứng dụng trên các
băng truyền, dây truyền sản xuất, trên những Robot, động cơ điện tạo ra những sự
chuyển động nhịp nhàng chính xác. Với những ứng dụng to lớn ấy đòi hỏi chúng ta
luôn tìm cách phát triển làm chủ công nghệ điều khiển động cơ để ứng dụng vào
thực tế mang lại hiệu quả và tính chính xác cao.
Với tư cách là những sinh viên, những thế hệ đi sau được kế thừa những
thành quả công nghệ tiên tiến, với mong muốn luôn phát triển những thành quả
công nghệ đó để góp phần đưa khoa khoa học kỹ thuật tự động hoá vào phục vụ
đời sống của con người. Chúng em đã được tìm hiểu và thực hiện đề tài “Điều
khiển động cơ thông qua ghép nối máy tính”.
Chúng em thực hiện đề tài này, vì thời gian có hạn vẫn còn nhiều thiếu sót
mong các thầy cô giáo đóng góp ý kiến để sản phẩm của chúng em được hoàn
thiện hơn.

Nhóm sinh viên thực hiện: TRẦN HỮU LUẬN, VŨ DUY KHÔI, NGUYỄN ĐỨC ĐÔN, TRẦN QUỐC SÁNG
-1-


TRƯỜNG ĐẠI HỌC CÔNG NGHIÊP HÀ NỘI

ĐỒ ÁN MÔN GHÉP NỐI MÁY TÍNH


Mục Lục

PHẦN A: LÝ THUYẾT:
1. Giới thiệu cổng COM.
2. Giới thiệu Modul truyền thông UASR trên ATmega8.
3. Giới thiệu phương thức điều chế PWM.
PHẦN B: THIẾT KẾ:
1. Sơ đồ nguyên lý – Phân tích sơ đồ nguyên lý.
2. Sơ đồ mạch in.
3. Lập trình VĐK.
4. Thiết kế giao diện điều khiển.
PHẦN C: KẾT LUẬN:
1. Đánh giá đề tài.
2. Hướng dẫn sử dụng.

Nhóm sinh viên thực hiện: TRẦN HỮU LUẬN, VŨ DUY KHÔI, NGUYỄN ĐỨC ĐÔN, TRẦN QUỐC SÁNG
-2-


TRƯỜNG ĐẠI HỌC CÔNG NGHIÊP HÀ NỘI

ĐỒ ÁN MÔN GHÉP NỐI MÁY TÍNH

PHẦN A:

I. GIỚI THIỆU ĐỀ TÀI:
1. THIẾT KẾ BỘ ĐIỀU KHIỂN ĐỘNG CƠ ĐIỆN 1 CHIỀU SỬ DỤNG CỔNG
NỐI TIẾP
Yêu cầu đề tài:
Mạch điện tử được thiết kế trên máy tính bằng phần mềm chuyên dụng.

Nguồn cung cấp cho mạch động lực: 24VDC.
Dùng phương pháp điều chế độ rộng xung (PWM) để điều khiển tốc độ của động
cơ.
Bộ điều khiển cho phép điều khiển được các động cơ có điện áp 5V, 12V, 24V.
Bộ điều khiển cho phép điều khiển được các động cơ có công suất từ 5W đến
100W.
Sử dụng phím T để điều khiển tăng tốc độ, phím G để giảm tốc độ, phím D để
đảo chiều, phím Q để dừng động cơ.
Ứng dụng thực tế:
- Sử dụng vi điều khiển họ AVR (atmega8)
+ Ghép nối máy tính bằng truyền thông nối tiếp không đồng bộ(UART).
+ Điều khiển động cơ bằng phương pháp điều chế độ rộng xung(PWM).
- Giao diện điều khiển viết bằng ngôn ngữ VB6.0.

II LÝ THUYẾT ÁP DỤNG:

Nhóm sinh viên thực hiện: TRẦN HỮU LUẬN, VŨ DUY KHÔI, NGUYỄN ĐỨC ĐÔN, TRẦN QUỐC SÁNG
-3-


TRƯỜNG ĐẠI HỌC CÔNG NGHIÊP HÀ NỘI

ĐỒ ÁN MÔN GHÉP NỐI MÁY TÍNH

1. CỔNG TRUYỀN THÔNG NỐI TIẾP (COM):
Cổng truyền thông nối tiếp COM hay còn gọi là cổng R232 thể hiện trên máy tính
bằng hai chuẩn, chuẩn 9 chân và chuẩn 25 chân. Hầu hết các loại máy tính cá nhân đuợc
chế tạo gần đây đều có một cổng chuẩn 9 chân hoặc bị bỏ đi vì nó cồng kềnh và làm việc
kém hiệu quả hơn khi cổng USB ra đời. Nhưng nó vẫn tồn tại vì vẫn còn nhiều thiết bị
cần đến giao tiếp thông qua cổng này.

Phổ biến nhất là loại cổng 9 chân
Hình dáng cổng COM 9 chân:

Mô tả tín hiệu các chân:
Chân
Tín hiệu
1
CD
2
RD
3
TD
4
DTR
5
SG
6
DSR
7
RTS
8
CTS
9
RI

Mô tả
Phát hiện tín hiệu mạng
Nhận dữ liệu
Truyền dữ liệu
Đầu cuối dữ liệu sẵn sàng

Nối mass
Sẵn xàng nhận dữ liệu
Yêu cầu gửi
Xoá để gửi
Báo chuông

Trạng thái
IN
OUT
OUT
IN
OUT
IN
IN

Tín hiệu theo chuẩn 232 của máy tính cá nhân nhân là -12V cho mức logic high và
+12 cho mức low. Vì vậy muốn trao đổi thông tin với vi điều khiển ta phải thông qua một
bước trung gian là Chuyển đổi mức điện áp từ chuẩn 232 về chuẩn TTL và ngược lại,
Tức là chuyển đổi từ mức -12V cho mức logic high và +12 cho mức low Thành 5V cho
mức logic high và 0V cho mức low và ngược lại.
Sơ đồ sau mô tả cách thức chuyển đổi điện áp của hai tiêu chuẩn này

Nhóm sinh viên thực hiện: TRẦN HỮU LUẬN, VŨ DUY KHÔI, NGUYỄN ĐỨC ĐÔN, TRẦN QUỐC SÁNG
-4-


TRƯỜNG ĐẠI HỌC CÔNG NGHIÊP HÀ NỘI

ĐỒ ÁN MÔN GHÉP NỐI MÁY TÍNH


Bước chuyển đổi mức tín hiệu điện áp này thông qua IC max232:
Vì vậy ngoài gọi là cổng COM ra còn gọi là cổng 232.
1.1 Phương thức truyền 232
Phương thức truyền 232 không đồng bộ chỉ thực hiện trên 2 dây tín hiệu, một tín
hiệu truyền(TXD) và một tín hiệu nhận(RXD). Trong một thời điểm có thể sảy ra cả
truyền cả nhận (gọi là song công), trong một thời điểm mà chỉ có nhiệm vụ được thực
hiện hoặc truyền hoặc nhận(gọi là đơn công).
Ngoài ra nếu sử dụng phương pháp truyền đồng bộ thì phải có thêm một tìn hiệu
xung nhịp để đồng bộ khoảng thời gian. Nghĩa là cứ mỗi lần máy tính muốn truyền 1 bit
dữ liệu, thì nó sẽ điều khiển đường xung nhịp chuyển từ mức thấp lên mức cao báo cho
VĐK sẵn sàng nhận một bit. Bằng cách “báo trước” này tất cả các bit dữ liệu có thể
truyền/nhận dễ dàng với ít “rủi ro” trong quá trình truyền. Tuy nhiên, cách truyền này đòi
hỏi ít nhất 2 đường truyền cho 1 quá trình, tốc độ truyền cũng bị hạn chế vì đòi hỏi bên
nhận phải liên tục “quan sát” đường xung nhịp trước khi đọc bất kỳ bit dữ liệu nào.
Trong bài này chúng em chỉ đề cập đến phương pháp truyền không đồng bộ (dị bộ)
Khác với cách truyền đồng bộ, truyền thông “không đồng bộ” chỉ cần một đường
truyền cho một quá trình. “Khung dữ liệu” đã được chuẩn hóa bởi các thiết bị nên không
cần đường xung nhịp báo trước dữ liệu đến. Ví dụ Máy tính và VĐK đang giao tiếp với
nhau theo phương pháp này, chúng đã được thỏa thuận với nhau rằng cứ 1ms sau bit Sart
thì sẽ có 1 bit dữ liệu truyền đến, như thế thiết bị nhận chỉ cần kiểm tra và đọc đường
truyền mỗi mili-giây để đọc các bit dữ liệu và sau đó kết hợp chúng lại thành dữ liệu có ý
nghĩa. Truyền thông nối tiếp không đồng bộ vì thế nhanh và hiệu quả hơn truyền thông
đồng bộ. Tuy nhiên, để quá trình truyền thành công thì việc tuân thủ các tiêu chuẩn
truyền là hết sức quan trọng. Ở đây tốc độ Baud là tiêu chuẩn quan trọng trong phương
pháp truyền không đồng bộ:

Nhóm sinh viên thực hiện: TRẦN HỮU LUẬN, VŨ DUY KHÔI, NGUYỄN ĐỨC ĐÔN, TRẦN QUỐC SÁNG
-5-



TRƯỜNG ĐẠI HỌC CÔNG NGHIÊP HÀ NỘI

ĐỒ ÁN MÔN GHÉP NỐI MÁY TÍNH

Tốc độ baud: Như ở trên đã nói muốn truyền nhận đúng thì cả truyền và nhận
phải đồng nhất khoảng cách thời gian giữa 2bit. Theo định nghĩa, tốc độ baud là số bit
truyền trong 1 giây. Ví dụ nếu tốc độ baud được đặt là 19200 thì thời gian dành cho 1 bit
truyền là 1/19200 ~ 52.083us.
Khung truyền: Do truyền thông nối tiếp mà nhất là nối tiếp không đồng bộ rất dễ
mất hoặc sai lệch dữ liệu, quá trình truyền thông theo kiểu này phải tuân theo một số quy
cách nhất định. Bên cạnh tốc độ baud, khung truyền là một yếu tốc quan trọng tạo nên sự
thành công khi truyền và nhận. Khung truyền bao gồm các quy định về số bit trong mỗi
lần truyền, các bit “báo” như bit Start và bit Stop, các bit kiểm tra như Parity, ngoài ra số
lượng các bit trong một data cũng được quy định bởi khung truyền.

Khung truyền này được bắt đầu bằng một start bit, tiếp theo là 8 bit data, sau đó là
1 bit parity dùng kiểm tra dữ liệu và cuối cùng là 1 bits stop.
2. PHƯƠNG THỨC TRUYỀN THÔNG NỐI TIẾP UART TRÊN AVR:
Thuật ngữ USART trong tiếng anh là viết tắt của cụm từ: Universal Synchronous
& Asynchronous serial Reveiver and Transmitter, nghĩa là bộ truyền nhận nối tiếp đồng
bộ và không đồng bộ.
Vi điều khiển Atmega8 có 1 module truyền thông nối tiếp USART. Có 3 chân
chính liên quan đến module này đó là chân xung nhịp - XCK (chân số 1), chân truyền dữ
liệu – TxD (Transmitted Data) và chân nhận dữ liệu – RxD (Reveived Data). Trong đó
chân XCK chỉ được sử dụng như là chân phát hoặc nhận xung giữ nhịp trong chế độ
truyền động bộ. Tuy nhiên bài này chúng em không khảo sát chế độ truyền thông đồng
bộ, vì thế chỉ cần quan tâm đến 2 chân TxD và RxD. Vì các chân truyền/nhận dữ liệu chỉ
đảm nhiệm 1 chức năng độc lập (hoặc là truyền, hoặc là nhận), để kết nối các chip AVR
với R232 (hoặc kết nối AVR với thiết bị hỗ trợ UART khác) chúng ta phải đấu “chéo” 2
chân này. TxD của thiết bị thứ nhất kết nối với RxD của thiết bị 2 và ngược lại. Module

USART trên chip Atmega8 hoạt động “song công” (Full Duplex Operation), nghĩa là quá
trình truyền và nhận dữ liệu có thể xảy ra đồng thời.
Sơ đồ ghép nối truyên thông COM với ATMega8:

TXD

TXD

TXD

RXD

RXD

GND

GND

RXD
GND

(COM)

(R232)

(ATMega8)

Nhóm sinh viên thực hiện: TRẦN HỮU LUẬN, VŨ DUY KHÔI, NGUYỄN ĐỨC ĐÔN, TRẦN QUỐC SÁNG
-6-



TRƯỜNG ĐẠI HỌC CÔNG NGHIÊP HÀ NỘI

ĐỒ ÁN MÔN GHÉP NỐI MÁY TÍNH

2.1 Các thanh ghi của module UASRT:
Tất cả hoạt động và tráng thái của module USART được điều khiển và quan sát
thông qua các thanh ghi trong vùng nhớ I/O. Có 5 thanh ghi được thiết kế riêng cho hoạt
động và điều khiển của USART, đó là:
UDR: hay thanh ghi dữ liệu, là 1 thanh ghi 8 bit chứa giá trị nhận được và phát đi
của USART. Thực chất thanh ghi này có thể coi như 2 thanh ghi TXB (Transmit data
Buffer) và RXB (Reveive data Buffer) có chung địa chỉ. Đọc UDR thu được giá trị thanh
ghi đệm dữ liệu nhận, viết giá trị vào UDR tương đương đặt giá trị vào thanh ghi đệm
phát, chuẩn bị để gởi đi. Chú ý trong các khung truyền sử dụng 5, 6 hoặc 7 bit dữ liệu,
các bit cao của thanh ghi UDR sẽ không được sử dụng.

UCSRA (USART Control and Status Register A): là 1 trong 3 thanh ghi điều
khiển hoạt động của module USART

Thanh ghi UCSRA chủ yếu chứa các bit trạng thái như bit báo quá trình nhận kết thúc
(RXC), truyền kết thúc (TXC), báo thanh ghi dữ liệu trống (UDRE), khung truyền có lỗi
(FE), dữ liệu tràn (DOR), kiểm tra parity có lỗi (PE).
Một số bit quan trọng của thanh ghi này cần chú ý:
 UDRE (USART Data Register Empty) khi bit bày bằng 1 nghĩa là thanh
ghi dữ liệu UDR đang trống và sẵn sàng cho một nhiệm vụ truyền hay nhận
tiếp theo. Vì thế nếu muốn truyền dữ liệu đầu tiên phải kiểm tra xem bit
UDRE có bằng 1 hay không, sau khi chắc chắn rằng UDRE=1 hãy viết dữ
liệu vào thanh ghi UDR để truyền đi.
 U2X là bit chỉ định gấp đôi tốc độ truyền, khi bit này được set lên 1, tốc độ
truyền so cao gấp 2 lần so với khi bit này mang giá trị 0.

 MPCM là bit chọn chế độ hoạt động đa xử lí (multi-processor).
UCSRB (USART Control and Status Register B): đây là thanh ghi quan trọng
điều khiển USART. Vì thế chúng ta sẽ khảo sát chi tiết từng bit của thanh ghi này.

Các bit trong thanh ghi:
Nhóm sinh viên thực hiện: TRẦN HỮU LUẬN, VŨ DUY KHÔI, NGUYỄN ĐỨC ĐÔN, TRẦN QUỐC SÁNG
-7-


TRƯỜNG ĐẠI HỌC CÔNG NGHIÊP HÀ NỘI

ĐỒ ÁN MÔN GHÉP NỐI MÁY TÍNH

 RXCIE (Receive Complete Interrupt Enable) là bit cho phép ngắt khi quá
trình nhận kết thúc. Việc nhận dữ liệu truyền bằng phương pháp nối tiếp
không đồng bộ thường được thực hiện thông qua ngắt, vì thế bit này thường
được set bằng 1 khi USART được dung nhận dữ liệu.
 TXCIE (Transmit Complete Interrupt Enable) bit cho phép ngắt khi quá
trình truyền kết thúc.
 UDRIE (USART Data Register Empty Interrupt Enable) là bit cho phép
ngắt khi thanh ghi dữ liệu UDR trống.
 RXEN (Receiver Enable) là một bit quan trọng điều khiển bộ nhận của
USART, đề kích hoạt chức năng nhận dữ liệu bạn phải set bit này lên 1.
 TXEN (Transmitter Enable) là bit điều khiển bộ phát. Set bit này lên 1 bạn
sẽ khởi động bộ phát của USART.
 UCSZ2 (Chracter size) bit này kết hợp với 2 bit khác trong thanh ghi
UCSRC quy định độ dài của dữ liệu truyền/nhận. Chúng ta sẽ khảo sát chi
tiết khi tìm hiểu thanh ghi UCSRC.
 RXB8 (Receive Data Bit 8) gọi là bit dữ liệu 8. Bạn nhớ lại rằng USART
trong AVR có hỗ trợ truyền dữ liệu có độ dài tối đa 9 bit, trong khi thanh

ghi dữ liệu là thanh ghi 8 bit. Do đó, khi có gói dữ liệu 9 bit được nhận, 8
bit đầu sẽ chứa trong thanh ghi UDR, cần có 1 bit khác đóng vai trò bit thứ
chín, RXD8 là bit thứ chín này. chúng ta cần chú ý là các bit được đánh số
từ 0, vì thế bit thứ chín sẽ có chỉ số là 8, vì lẽ đó mà bit này có tên là RXD8
(không phải RXD9).
 TXB8 (Transmit Data Bit 8), tương tự như bit RXD8, bit TXB8 cũng đóng
vai trò bit thứ 9 truyền thông, nhưng bit này được dung trong lúc truyền dữ
liệu.
UCSRC: (USART Control and Status Register C): thanh ghi này chủ yếu quy
định khung truyền và chế độ truyền. Tuy nhiên, có một rắc rối là thanh ghi này lại có
cùng địa chỉ với thanh ghi UBRRH (thanh ghi chứa byte cao dùng để xác lập tốc độ
baud), nói một cách khác 2 thanh ghi này là 1. Vì thế bit 7 trong thanh ghi này, tức bit
URSEL là bit chọn thanh ghi. Khi URSEL=1, thanh ghi này được chip AVR hiểu là
thanh ghi điều khiển UCSRC, nhưng nếu bit URSEL=0 thì thanh ghi UBRRH sẽ được sử
dụng.

Nhóm sinh viên thực hiện: TRẦN HỮU LUẬN, VŨ DUY KHÔI, NGUYỄN ĐỨC ĐÔN, TRẦN QUỐC SÁNG
-8-


TRƯỜNG ĐẠI HỌC CÔNG NGHIÊP HÀ NỘI

ĐỒ ÁN MÔN GHÉP NỐI MÁY TÍNH

Các bit còn lại trong thanh ghi UCSRC :
 UMSEL (USART Mode Select) là bit lựa chọn giữa 2 chế độ truyền thông

đồng bộ và không đồng bộ. Nếu UMSEL=0, chế độ không đồng bộ được
chọn, ngược lại nếu UMSEL=1, chế độ đồng bộ được kích hoạt.
 UPM1 và UPM0( Parity Mode) được dùng để quy định kiểm tra pariry.


Nếu UPM1:0=00, parity không được sử dụng (mode này khá thông dụng),
UPM1:0=01 không được sử dụng, UPM1:0=10 thì parity chẵn được dùng,
UPM1:0=11 parity lẻ được sử dụng
Bảng sau thể hiện cách sử dụng bít kiểm tra(parity):

 USBS (Stop bit Select), bit Stop trong khung truyền bằng AVR USART có
thể là 1 hoặc 2 bit, nếu USBS=0 thì Stop bit chỉ là 1 bit trong khi USBS=1
sẽ có 2 Stop bit được dùng.
 Hai bit UCSZ1 và UCSZ2 (Character Size) kết hợp với bit UCSZ2 trong
thanh ghi UCSRB tạo thành 3 bit quy định độ dài dữ liệu truyền. Bảng sau

tóm tắt các giá trị có thể có của tổ hợp 3 bit này và độ dài dữ liệu
truyền tương ứng.

Nhóm sinh viên thực hiện: TRẦN HỮU LUẬN, VŨ DUY KHÔI, NGUYỄN ĐỨC ĐÔN, TRẦN QUỐC SÁNG
-9-


TRƯỜNG ĐẠI HỌC CÔNG NGHIÊP HÀ NỘI

ĐỒ ÁN MÔN GHÉP NỐI MÁY TÍNH

 UCPOL (Clock Pority) là bit chỉ cực của xung kích trong chế độ truyền
thông đồng bộ. nếu UCPOL=0, dữ liệu sẽ thay đổi thay đổi ở cạnh lên của
xung nhịp, nếu UCPOL=1, dữ liệu thay đổi ở cạnh xuống xung nhịp. Nếu
sử dụng chế độ truyền thông không đồng bộ, hãy set bit này bằng 0

UBRRL và UBRRH: (USART Baud Rate Register): 2 thanh ghi thấp và cao
quy định tốc độ baud.


Thanh ghi UBRRH dùng chung địa chỉ thanh ghi UCSRC, ta phải set bit này bằng
0 nếu muốn sử dụng thanh ghi UBRRH. Như quan sát trong hình trên, chỉ có 4 bit thấp
của UBRRH được dùng, 4 bit này kết hợp với 8 bit trong thanh ghi UBRRL tạo thành
thanh ghi 12 bit quy định tốc độ baud. Chú ý là nếu viết giá trị vào thanh ghi UBRRL, tốc
độ baud sẽ tức thì được cập nhật, vì thế phải viết giá trị vào thanh ghi UBRRH trước khi
viết vào thanh ghi UBRRL. Giá trị gán cho thanh ghi UBRR không phải là tốc độ baud,
nó chỉ được USART dùng để tính tốc độ baud

Nhóm sinh viên thực hiện: TRẦN HỮU LUẬN, VŨ DUY KHÔI, NGUYỄN ĐỨC ĐÔN, TRẦN QUỐC SÁNG
- 10 -


TRƯỜNG ĐẠI HỌC CÔNG NGHIÊP HÀ NỘI

ĐỒ ÁN MÔN GHÉP NỐI MÁY TÍNH

Sau đây là bảng tính tốc độ baud của USART dựa vào giá trị của thanh ghi
UBRR:

Trong đó fOSC là tốc tần số xung nhịp của hệ thống (thạch anh hay nguồn xung
nội…)
2.2 Cách sử dung module USART:
Thông thường, để sử dụng module USART trên AVR ta phải thực hiện 3 việc
quan trọng, đó là: cài đặt tốc độ baud (thanh ghi UBRR), định dạng khung truyền
(UCSRB, UCSRC) và cuối cùng kích hoạt bộ truyền, bộ nhận, ngắt…, Trong hầu hết các
ứng dụng, tốc độ baud và khung truyền thường không đổi, trong trường hợp này chúng ta
có thể khởi tạo trực tiếp USART ở phần đầu trong main và sau đó chỉ cần truyền hoặc
nhận dữ liệu mà không cần thay đổi các cài đặt. Tuy nhiên, nếu trường hợp giao tiếp
“linh hoạt” ví dụ muốn chế tạo một thiết bị có khả năng giao tiếp với một thiết bị đầu

cuối khác (như máy tính chẳng hạn), lúc này ta nên cho phép người dùng thay đổi tốc độ
baud hoặc các thông số khác để phù hợp với thiết bị đầu cuối. Đối với những ứng dụng
kiểu này nên viết 1 chương trình con để khởi động USART và có thể gọi lại nhiều lần khi
cần thay đổi.
3. PHƯƠNG PHÁP ĐIỀU CHẾ ĐỘ RỘNG XUNG (PWM):
Trên vi điều khiển ATmega8 có các bộ Timer/Counte 0,1,2 (các bộ định thời )
trong đề tài này chúng em sử dụng timer1 tạo ra xung PWM dùng để điều khiển động cơ.
Nên chung em đi sâu vào các chế độ hoạt động và phương pháp điều chế độ rộng xung
(Fast PWM) của timer counter1, ngoài ra những Timer/Counte và chế độ hoạt động khác
trong đề tài này sẽ không đề cập đến.
3.1 Giới thiệu Timer/Counter1:
Là bộ định thời, đếm đa năng 16 bit. Bộ Timer/Counter này có 5 chế độ hoạt động
chính. Ngoài các chức năng thông thường, Timer/Counter1 còn được dùng để tạo ra xung
điều chế độ rộng PWM dùng cho các mục đích điều khiển. Có thể tạo 2 tín hiệu PWM
độc lập trên các chân OC1A (chân 15) và OC1B (chân 16) bằng Timer/Counter1. Các bộ
Timer/Counter kiểu này được tích hợp thêm khá nhiều trong các chip AVR khác.
Nhóm sinh viên thực hiện: TRẦN HỮU LUẬN, VŨ DUY KHÔI, NGUYỄN ĐỨC ĐÔN, TRẦN QUỐC SÁNG
- 11 -


TRƯỜNG ĐẠI HỌC CÔNG NGHIÊP HÀ NỘI

ĐỒ ÁN MÔN GHÉP NỐI MÁY TÍNH

3.1.1 Các thanh ghi trong timer1:
TCNT1H và TCNT1L: (Timer/Counter Register): là 2 thanh ghi 8 bit tạo thành
thanh ghi 16 bits (TCNT1) chứa giá trị vận hành của Timer/Counter1. Cả 2 thanh ghi này
cho phép đọc và ghi giá trị một cách trực tiếp, Khi có một xung đưa vào thì giá trị của
thanh ghi này tăng lên một đơn vị. Thanh ghi này chứa giá trị đếm từ 00x0 đến FFx0 trên
mỗi thanh ghi.


TCCR1A và TCCR1B: (Timer/Counter Control Register): là 2 thanh ghi điều
khiển hoạt động của T/C1. Tất cả các mode hoạt động của T/C1 đều được xác định thông
qua các bit trong 2 thanh ghi này. Tuy nhiên, đây không phải là 2 byte cao và thấp của
một thanh ghi mà là 2 thanh ghi hoàn toàn độc lập. Các bit trong 2 thanh ghi này bao
gồm các bit chọn mode hay chọn dạng sóng (Waveform Generating Mode – WGM), các
bit quy định dạng ngõ ra (Compare Output Match – COM), các bit chọn giá trị chia
prescaler cho xung nhịp (Clock Select – CS)…

Để khởi tạo các chế độ làm việc của timer/counter là rất nhiều sẽ đề cập ở phần khởi tạo
xung PWM. ở đây chúng ta thấy 3 bít quen thuộc là CS10, CS11 và CS12. Đây là các bit
chọn xung nhịp cho T/C1, Thể hiện cách dùng 3bít này ở bảng sau:

OCR1A và OCR1B: (Ouput Compare Register A và B): Là 2 thanh ghi dùng để
so sánh của hai kênh A và B. Trong lúc T/C hoạt động, giá trị thanh ghi TCNT1 tăng, giá
trị này được liên tục so sánh với các thanh ghi OCR1A và OCR1B (so sánh độc lập với
từng thanh ghi), việc so sánh này trên AVR gọi là gọi là Ouput Compare. Khi giá trị so
sánh bằng nhau thì 1 “Match” xảy ra, khi đó một ngắt hoặc 1 sự thay đổi trên chân OC1A
Nhóm sinh viên thực hiện: TRẦN HỮU LUẬN, VŨ DUY KHÔI, NGUYỄN ĐỨC ĐÔN, TRẦN QUỐC SÁNG
- 12 -


TRƯỜNG ĐẠI HỌC CÔNG NGHIÊP HÀ NỘI

ĐỒ ÁN MÔN GHÉP NỐI MÁY TÍNH

(hoặc/và chân OC1B) xảy ra (đây là cách tạo PWM bởi T/C1). Tại sao lại có A và B? Đó
là vì người thiết kế AVR muốn mở rộng khả năng ứng dụng T/C1 . A và B đại diện cho 2
kênh (channel)A và B. Cũng vì điều này mà chúng ta có thể tạo 2 kênh PWM bằng
T/C1. Tóm lại, cơ bản 2 thanh ghi này chứa các giá trị để so sánh


TIMSK: (Timer/Counter Interrupt Mask Register): Thanh ghi điều khiển ngắt.
dùng khởi tạo các ngắt cho T/C.

 TOIE1: bit quy định ngắt tràn cho thanh T/C1 (tương tự trường hợp của
T/C0)
 OCIE1B: là bit cho phép ngắt khi có 1 “Match” xảy ra trong việc so sánh
TCNT1 với OCR1B.
 OCIE1A: là bit cho phép ngắt khi có 1 “Match” xảy ra trong việc so sánh
TCNT1 với OCR1A.
 TICIE1: là bit cho phép ngắt trong trường hợp Input Capture được dùng.
Các chế độ hoạt động của T/C1được khởi tạo từ thanh ghi điều khiển TCCR1A và
TCCR1B thể hiện ở bảng sau:

Nhóm sinh viên thực hiện: TRẦN HỮU LUẬN, VŨ DUY KHÔI, NGUYỄN ĐỨC ĐÔN, TRẦN QUỐC SÁNG
- 13 -


TRƯỜNG ĐẠI HỌC CÔNG NGHIÊP HÀ NỘI

ĐỒ ÁN MÔN GHÉP NỐI MÁY TÍNH

3.1.2 Nguyên lý hoạt động của chế độ (Fast PWM)
Trong chế độ Fast PWM, 1 chu kỳ được tính trong 1 lần đếm từ BOTTOM lên
TOP (single-slope), vì thế mà chế độ này gọi là Fast PWM (PWM nhanh). Việc xác lập
chế độ hoạt động cho Fast PWM thực hiện thông qua 4 bit WGM và các bit chọn dạng
xung ngõ ra, Compare Output Mode trong thanh ghi TCCR1A. Như trên đã nói Chúng ta
chỉ sử dụng chế độ (Fast PWM) để điều khiển động cơ, Theo bảng trên chúng ta sẽ khởi
tạo thanh ghi điều khiển TCCR1A và TCCR1B ở Model5.
Vậy khởi tạo giá trị 2 thanh TCCR1A và TCCR1B như sau:

COM1A1

TCCR1A=
TCCR1B=

1

COM1A0

1

ICNC1

ICES1

0

0

COM1B1

1
-

0

COM1B0

1
WGM13


0

FOC1A

FOC1B

WGM11

WGM10

0

0

0

1

CS12

CS11

CS10

WGM12

1

0


1

1

Khi hoạt động thanh ghi TCNT1 tăng giá trị từ 0, giả sử các bit phụ COM1A=1,
COM1A0=0, lúc này trạng thái của chân OC1A (chân 15) là HIGH (5V), khi TCNT1
tăng đến bằng giá trị của thanh ghi OCR1A thì chân OC1A được xóa về mức LOW (0V),
thanh ghi đếm TCNT1 vẫn tiếp tục tăng đến khi nào nó bằng giá trị TOP là FF thì
TCNT1 tự động reset về 0 và chân OC1A trở về trạng thái HIGH, cái này gọi là “Clear
OC1A/OC1B on Compare Match, set OC1A/OC1B at TOP”.
Hình dưới mô tả cách tạo xung PWM trên chân OC1A ở mode 5.

Nhóm sinh viên thực hiện: TRẦN HỮU LUẬN, VŨ DUY KHÔI, NGUYỄN ĐỨC ĐÔN, TRẦN QUỐC SÁNG
- 14 -


TRƯỜNG ĐẠI HỌC CÔNG NGHIÊP HÀ NỘI

ĐỒ ÁN MÔN GHÉP NỐI MÁY TÍNH

OCR1A

TOP=0xFF

BOTTOM =0x00
Chân OC1A

Nhóm sinh viên thực hiện: TRẦN HỮU LUẬN, VŨ DUY KHÔI, NGUYỄN ĐỨC ĐÔN, TRẦN QUỐC SÁNG
- 15 -



TRƯỜNG ĐẠI HỌC CÔNG NGHIÊP HÀ NỘI

ĐỒ ÁN MÔN GHÉP NỐI MÁY TÍNH

PHẦN B:

I Ý TƯỞNG THIẾT KẾ MẠCH ĐIỆN:
Để thiết kế mạch điều khiển động cơ điều chúng ta hay nghĩ đến là việc chống
nhiễu cho mạch điều khiển. Trong bài thiết kế này chúng em tính đến nhiễu xung ngược
do động cơ và Rơle phát ra làm nhiễu vi điều khiển. Vì vậy phương pháp chống nhiễu
của chúng em là Cách li mạch điều khiển và mạch và mạch động lực(cách li quang) tức là
tín hiệu từ mạch điều khiển đưa sang mạch động lực thông qua Photodioe. Điều khiển tốc
độ của động cơ thì dùng tín hiệu điều chế độ rộng xung(PWM) và dựa vào những kiến
thức lý thuyết ở trên. Đảo chều động cơ dùng Rơle hai tiếp điểm để đảo hai đầu dây của
động cơ.

Nhóm sinh viên thực hiện: TRẦN HỮU LUẬN, VŨ DUY KHÔI, NGUYỄN ĐỨC ĐÔN, TRẦN QUỐC SÁNG
- 16 -


TRƯỜNG ĐẠI HỌC CÔNG NGHIÊP HÀ NỘI

ĐỒ ÁN MÔN GHÉP NỐI MÁY TÍNH

II THIẾT KẾ MẠCH
1. SƠ ĐỒ MẠCH NGUYÊN LÝ:
Vcc


1

LE D

Vcc
SC K
M IS O
M O SI

D 49

2

2

2

1
2
3
4
5
6
7
8

R 118
100K
R 117
100K

IS O 4

16
15
14
13
12
11
10
9

U N L2003

R L1

Q 12

M a
M b

1

1

1R L2

2

1N 6650
2


12V

0

1

2

1N 6650

J57

12V

D 45
D IO D E

Q 11
IR F Z 4 8

PN P C BE
2

D 46
D IO D E

R L2

C AP N P


12V

Q 1

1

2

C 41

R 111

1

24V
D 3

100K

0

0

0

J59
2
1


15V

LE D

2
1
O U T M O TO

1

D 48

2

G N D

100K
IS O 3

D 44
D I O D EJ 8

2

0R 1 1 5

D 42

5


LE D

TE S T

D 43
D IO D E

R ELAY SPD T

1

8
7
3
5
4
3
2
1
0
9
8
7
6
5

12V
R ELAY SPD T
D 41
R L 11


3

2
2
2
2
2
2
2
2
2
1
1
1
1
1

24V

4

1
2

2

)
)
)

)
)
)

5

3

3

L
L
3
2
1
0

5

C
C
C
C
C
C

12V

4


(A D C 5 /S
(A D C 4 /S
(A D
(A D
(A D
(A D

Mb

1
2
R 116
100K

5

PC 5
PC 4
PC 3
PC 2
PC 1
PC 0
G N D
AR EF
AVC C
(X T A L 1 /T O S C 1 )
(S C K ) P B 5
(X T A L 2 /T O S C 2 )
(M IS O ) P B 4
(T 1 )

(M O S I/O C 2 ) P B 3
(A IN 0 )
(S S /O C 1 B ) P B 2
(A IN 1 )
(O C 1 A ) P B 1
(IC P 1 )
(R E S E T )
(R X D )
(T X D )
(IN T 0 )
(IN T 1 )
(XC K /T O )

1

C 6
D 0
D 1
D 2
D 3
D 4
cc
N D
B6
B7
D 5
B6
B7
B0


2

P
P
P
P
P
P
V
G
P
P
P
P
P
P

K2
M a

3

4

D C IN

4

Vcc
G N D

XTA L1
XTA L2

1
2
3
4
5
6
7
8
9
10
11
12
13
14

1

U 21
R ESET
R XD
TXD

1

5

K1


1

2

R 113
100K
IS O 1

24V
R 114
100K

4

1
D 47

2

G R AM MER

2

1

C AP N P

R 112
R E S IS T O R D IP 3

1
2
3

2

2

C 43
1

C 42
C AP N P

SC K
M IS O
M O SI
R ES
G N D
Vcc

6
5
4
3
2
1

XTA L2


12V

4

J56
C R Y STAL
Y 1
XTA L11
2

0

0

0

A TM E G A 8
Vcc

G N D

C 7

1 0 u F /2 5 v

C 9

1 0 u F /2 5 v

C 11


Vcc

IN D U C T O R

C
C
C
C
V
V

1+
12+
2+
-

R XD

14
7

T1O U T

1
J58

R 1 IN

M A X232

C 12
1 0 u F /2 5 v

U 20
LM 2576

12V

T1O U T

5
9
4
8
3
7
2
6
1

P1

2
1
D C IN

C 40
1 0 0 0 u F /5 0 V

V IN


O N /O F F

T1O U T
T2O U T

12
9

G N D

VC C

T1 IN
T2 IN

15

0

1
3
4
5
2
6

R 1O U T
R 2O U T


5

1 0 u F /2 5 v
L1

11
10

R 1 IN
R 2 IN

3

TXD

13
8

G N D

R 1 IN

16

U 4

Vcc
F B

O U T


4

Vcc
L26 10uH

2

D 40
F R 107

C 39
1 0 u F /2 5 v

C O N N EC TO R D B9

1.1 Phân tích sơ đồ nguyên lý:
Khi VĐK Atmega8 đã được lập trình thì nó sẽ luôn đợi lệnh điều khiển từ máy
tính thông qua cổng COM qua Max 232 để chuyển đổi mức tín hiệu, rồi đưa đến 2 chân
RXD và TXD. Khi nhận được lệnh từ máy tính theo từng byte nó sẽ phân biệt được các
lệnh, các lệnh này do người sử dụng đặt.
Khi muốn điều chỉnh tốc độ: Xung PWM đưa ra từ chân OC1A(PIN15) sẽ điều
chỉnh tỷ lệ độ rộng xung, xung này đưa qua Photodiode, do tốc độ đột biến của ánh sáng
không nhanh nên xung đưa qua đây không vuông, tiếp theo đưa qua IC UNL 2003 và
Q1,Q12 nhằm mục đích sửa xung và đưa tiếp vào cực G của Q11 để băm xung đưa qua
động cơ. vì vậy động cơ chạy nhanh hay chậm phụ thuộc vào cách điều chế độ rộng của
xung.
Khi muốn đảo chiều động cơ: Hai tín hiệu đảo chiều đưa ra từ cổng PC1 và PC2
qua qua Photodiode và qua IC UNL 2003 để điều khiển đóng mở hai Rơle.
Nguyên tắc đảo chiều như sau: Khi Rơle A đóng(được cấp điện), Rơle B mở thì

dòng điện đi từ chân 5 đến chân 3 của Rơle B, đưa vào chân b của MOTƠ ra chân a qua
Rơle A thông qua tiếp điểm tai chân 3-4 đưa qua Q11 để băm xung rồi đưa xuống mass.
Tương tự muốn đảo chiều ngược lai thì: Rơle B đóng(được cấp điện), Rơle A mở
thì dòng điện đi từ chân 5 đến chân 3 của Rơle A, đưa vào chân a của Motơ ra chân b
qua Rơle B thông qua tiếp điểm tai chân 3-4 đưa qua Q11 để băm xung rồi đưa xuống
mass.
Diode D43,44,45,46: để chống xung ngược phát ra từ Motơ.
IC u20 dùng để ổn áp từ 12V xuống 5V nuôi VĐK.
2. SƠ ĐỒ MẠCH IN:
Nhóm sinh viên thực hiện: TRẦN HỮU LUẬN, VŨ DUY KHÔI, NGUYỄN ĐỨC ĐÔN, TRẦN QUỐC SÁNG
- 17 -


TRƯỜNG ĐẠI HỌC CÔNG NGHIÊP HÀ NỘI

ĐỒ ÁN MÔN GHÉP NỐI MÁY TÍNH

3. LẬP TRÌNH VI ĐIỀU KHIỂN:
#include <mega8.h>
#define RXB8 1
#define TXB8 0
#define UPE 2
#define OVR 3
#define FE 4
#define UDRE 5
#define RXC 7
#define FRAMING_ERROR (1<#define PARITY_ERROR (1<#define DATA_OVERRUN (1<#define DATA_REGISTER_EMPTY (1<

#define RX_COMPLETE (1<// USART Receiver buffer
#define RX_BUFFER_SIZE 8
char rx_buffer[RX_BUFFER_SIZE];
#if RX_BUFFER_SIZE<256
unsigned char rx_wr_index,rx_rd_index,rx_counter;
#else
unsigned int rx_wr_index,rx_rd_index,rx_counter;
#endif
Nhóm sinh viên thực hiện: TRẦN HỮU LUẬN, VŨ DUY KHÔI, NGUYỄN ĐỨC ĐÔN, TRẦN QUỐC SÁNG
- 18 -


TRƯỜNG ĐẠI HỌC CÔNG NGHIÊP HÀ NỘI

ĐỒ ÁN MÔN GHÉP NỐI MÁY TÍNH

// This flag is set on USART Receiver buffer overflow
bit rx_buffer_overflow;
// USART Receiver interrupt service routine
interrupt [USART_RXC] void usart_rx_isr(void)
{
char status,data;
status=UCSRA;
data=UDR;
if ((status & (FRAMING_ERROR | PARITY_ERROR | DATA_OVERRUN))==0)
{
rx_buffer[rx_wr_index]=data;
if (++rx_wr_index == RX_BUFFER_SIZE) rx_wr_index=0;
if (++rx_counter == RX_BUFFER_SIZE)

{
rx_counter=0;
rx_buffer_overflow=1;
};
};
}
#ifndef _DEBUG_TERMINAL_IO_
// Get a character from the USART Receiver buffer
#define _ALTERNATE_GETCHAR_
#pragma used+
char getchar(void)
{
char data;
while (rx_counter==0);
data=rx_buffer[rx_rd_index];
if (++rx_rd_index == RX_BUFFER_SIZE) rx_rd_index=0;
#asm("cli")
--rx_counter;
#asm("sei")
return data;
}
#pragma used#endif
// USART Transmitter buffer
#define TX_BUFFER_SIZE 8
char tx_buffer[TX_BUFFER_SIZE];
#if TX_BUFFER_SIZE<256
unsigned char tx_wr_index,tx_rd_index,tx_counter;
Nhóm sinh viên thực hiện: TRẦN HỮU LUẬN, VŨ DUY KHÔI, NGUYỄN ĐỨC ĐÔN, TRẦN QUỐC SÁNG
- 19 -



TRƯỜNG ĐẠI HỌC CÔNG NGHIÊP HÀ NỘI

ĐỒ ÁN MÔN GHÉP NỐI MÁY TÍNH

#else
unsigned int tx_wr_index,tx_rd_index,tx_counter;
#endif
// USART Transmitter interrupt service routine
interrupt [USART_TXC] void usart_tx_isr(void)
{
if (tx_counter)
{
--tx_counter;
UDR=tx_buffer[tx_rd_index];
if (++tx_rd_index == TX_BUFFER_SIZE) tx_rd_index=0;
};
}
#ifndef _DEBUG_TERMINAL_IO_
// Write a character to the USART Transmitter buffer
#define _ALTERNATE_PUTCHAR_
#pragma used+
void putchar(char c)
{
while (tx_counter == TX_BUFFER_SIZE);
#asm("cli")
if (tx_counter || ((UCSRA & DATA_REGISTER_EMPTY)==0))
{
tx_buffer[tx_wr_index]=c;
if (++tx_wr_index == TX_BUFFER_SIZE) tx_wr_index=0;

++tx_counter;
}
else
UDR=c;
#asm("sei")
}
#pragma used#endif
#include <stdio.h>
unsigned char tem;
unsigned int speed=0,percent;
void Upspeed_5(void)//19
{
if(speed < 19)
{
PORTC.2=PORTC.1;
Nhóm sinh viên thực hiện: TRẦN HỮU LUẬN, VŨ DUY KHÔI, NGUYỄN ĐỨC ĐÔN, TRẦN QUỐC SÁNG
- 20 -


TRƯỜNG ĐẠI HỌC CÔNG NGHIÊP HÀ NỘI

ĐỒ ÁN MÔN GHÉP NỐI MÁY TÍNH

speed++;
percent= (speed*100)/19;
putchar(percent);
OCR1AH=0x00;
OCR1AL=speed;
}
else

{
percent= (speed*100)/19;
putchar(percent);
OCR1AH=0x00;
OCR1AL=19;
}
}
void Upspeed_12(void)//36
{
if(speed < 36)
{
PORTC.2=PORTC.1;
speed= speed+2;
percent= (speed*100)/36;
putchar(percent);
OCR1AH=0x00;
OCR1AL=speed;
}
else
{
percent= (speed*100)/36;
putchar(percent);
OCR1AH=0x00;
OCR1AL=36;
}
}
void Upspeed_24(void)//255
{
if(speed < 255)
{

PORTC.2=PORTC.1;
speed=speed+5;
percent= (speed*100)/255;
putchar(percent);
Nhóm sinh viên thực hiện: TRẦN HỮU LUẬN, VŨ DUY KHÔI, NGUYỄN ĐỨC ĐÔN, TRẦN QUỐC SÁNG
- 21 -


TRƯỜNG ĐẠI HỌC CÔNG NGHIÊP HÀ NỘI

ĐỒ ÁN MÔN GHÉP NỐI MÁY TÍNH

OCR1AH=0x00;
OCR1AL=speed;
}
else
{
percent= (speed*100)/255;
putchar(percent);
OCR1AH=0x00;
OCR1AL=255;
}
}
void Dnspeed_5(void)//53
{
if(speed>0)
{
speed--;
percent= (speed*100)/19;
putchar(percent);

OCR1AH=0x00;
OCR1AL=speed;
}
else
{
percent= (speed*100)/19;
putchar(percent);
OCR1AH=0x00;
OCR1AL=speed;
}
}
void Dnspeed_12(void)//126
{
if(speed>0)
{
speed= speed-2;
percent= (speed*100)/36;
putchar(percent);
OCR1AH=0x00;
OCR1AL=speed;
}
else
{
Nhóm sinh viên thực hiện: TRẦN HỮU LUẬN, VŨ DUY KHÔI, NGUYỄN ĐỨC ĐÔN, TRẦN QUỐC SÁNG
- 22 -


TRƯỜNG ĐẠI HỌC CÔNG NGHIÊP HÀ NỘI

ĐỒ ÁN MÔN GHÉP NỐI MÁY TÍNH


percent= (speed*100)/36;
putchar(percent);
OCR1AH=0x00;
OCR1AL=speed;
}
}
void Dnspeed_24(void)//53
{
if(speed>0)
{
speed= speed-5;
percent= (speed*100)/225;
putchar(percent);
OCR1AH=0x00;
OCR1AL=speed;
}
else
{
percent= (speed*100)/225;
putchar(percent);
OCR1AH=0x00;
OCR1AL=speed;
}
}
void Backup(void)
{
PORTC.1=~PORTC.1;
PORTC.2=~PORTC.2;
}

void Stop()
{
speed=0;
PORTC.1=1;
PORTC.2=0;
OCR1AH=0x00;
OCR1AL=speed;
}
void main(void)
{
// Declare your local variables here
Nhóm sinh viên thực hiện: TRẦN HỮU LUẬN, VŨ DUY KHÔI, NGUYỄN ĐỨC ĐÔN, TRẦN QUỐC SÁNG
- 23 -


TRƯỜNG ĐẠI HỌC CÔNG NGHIÊP HÀ NỘI

ĐỒ ÁN MÔN GHÉP NỐI MÁY TÍNH

PORTB=0x06;
DDRB=0x06;
PORTC=0x00;
DDRC=0x06;
PORTD=0x00;
DDRD=0x00;
TCCR0=0x00;
TCNT0=0x00;
TCCR1A=0xF1;
TCCR1B=0x0B;
TCNT1H=0x00;

TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;
ASSR=0x00;
TCCR2=0x00;
TCNT2=0x00;
OCR2=0x00;
MCUCR=0x00;
TIMSK=0x00;
// USART initialization
UCSRA=0x00;
UCSRB=0xD8;
UCSRC=0x86;
UBRRH=0x00;
Nhóm sinh viên thực hiện: TRẦN HỮU LUẬN, VŨ DUY KHÔI, NGUYỄN ĐỨC ĐÔN, TRẦN QUỐC SÁNG
- 24 -


TRƯỜNG ĐẠI HỌC CÔNG NGHIÊP HÀ NỘI

ĐỒ ÁN MÔN GHÉP NỐI MÁY TÍNH

UBRRL=0x67;
ACSR=0x80;
SFIOR=0x00;
#asm("sei")

while (1)
{
if (rx_counter>0)
{
tem = getchar();
if(tem==1)
{
Upspeed_5();
}

// nếu có dữ liệu

if(tem==21)
{
Upspeed_12();
}
if(tem==31)
{
Upspeed_24();
}
if(tem==2)
{
Dnspeed_5();
}
if(tem==22)
{
Dnspeed_12();
}
if(tem==32)
{

Dnspeed_24();
}
if(tem==3)
{
Backup();
}
Nhóm sinh viên thực hiện: TRẦN HỮU LUẬN, VŨ DUY KHÔI, NGUYỄN ĐỨC ĐÔN, TRẦN QUỐC SÁNG
- 25 -


×