Professional Documents
Culture Documents
3
1.1. Phương pháp truyền dữ liệu..................................................................... .....3
1.2. Giao tiếp qua Slot Card................................................. ...............................9
1.3. Cổng song song(LPT)................................................................................ ...9
1.4. Giới thiệu về truyền thông qua chuẩn RS232.............................................12
1.5. Giới thiệu về truyền thông qua chuẩn RS-485............................... .............16
CHƯƠNG 2. TỔNG QUAN VỀ VI ĐIỀU KHIỂN..............................................22
2.1. Giới Thiệu Họ Vi Điều Khiển MCS – 51 :.................................................22
2.2. Tổng quan về vi điều khiển AVR................................................. ...............25
2.2.1. Giới thiệu tổng quan họ vi điều khiển AVR.........................................25
2.2.2. Kiến trúc AVR. .................................................................... ....26
2.2.3. Bộ nhớ EEPROM......................................................... .......................56
2.2.4. Bộ nhớ SRAM.................................................................... .................61
2.2.5. Bộ định thời.......................................................................... ...............63
2.2.6. Bộ truyền nhận UART......................................................... ................66
2.2.7. Cấu trúc ngắt....................................................................................... .70
2.2.8. Bộ so sánh Analog........................................................... ....................74
2.2.9. Bộ biến đổi A/D bên trong....................................................... ............75
2.2.10. Bộ định thời Watchdog bên trong.............................. ........................77
2.2.11.Chế độ hoạt động tiết kiệm năng lượng..............................................78
CHƯƠNG 3.......................................................................... ................................80
CÁC LINH KIỆN SỬ DỤNG TRONG MẠCH.............................................. ......80
3.1. C1815.................................................................................... .....................80
3.2. A1015.................................................................................... .....................80
3.3. IC 74HC14.................................................................... .............................81
3.4. OPTO P521.................................................................... ............................82
3.5. Rơle cuộn hút.............................................................. ...............................82
3.6. MAX232................................................................................................... ..83
3.7. MAX485................................................................................................... ..84
3.8. ATMEGA16................................................................................................ 85
3.9.ATMEGA88. .................................................... ................................86
3.10. ATTINY 2313............................................................................ ...............87
3.11. IRF 540........................................................................................... ..........88
3.12. LM 7805..................................................................................... ..............89
CHƯƠNG 4.......................................................................... ................................90
GIỚI THIỆU MỘT SỐ PHẦN MỀM ĐÃ SỬ DỤNG..........................................90
4.1. Giới thiệu phần mềm thiết kế mạch OrCad 10.......................................... ..90
4.2. Giới thiệu phần mềm Visual C++......................................... ......................96
4.3. Phần mềm lập trình cho vi điều khiển :CODEVISION AVR....................103
CHƯƠNG 5................................................................................................ .........111
THIẾT KẾ MẠCH ĐIỀU KHIỂN............................................................. ..........111
5.1. Nhiệm vụ thiết kế................................................................................. .....111
5.2. Sơ đồ và chức năng từng khối............................................................ .......111
Đồ án tốt nghiệp Cơ điện tử 3 - K47
2
Đồ án tốt nghiệp Cơ điện tử 3 - K47
Kỹ thuật truyền tải thông tin trong hệ thống CIM và robot với máy tính
được truyền qua chuẩn RS-485 ( qua chuyển đổi RS-232 → RS485 ) nên trong
mục này ta sẽ trình bày các phương pháp truyền thông trong các mạng công
nghiệp.
3
Đồ án tốt nghiệp Cơ điện tử 3 - K47
4
Đồ án tốt nghiệp Cơ điện tử 3 - K47
Truyền dẫn chênh lệch đối xứng sử dụng điện áp giữa hai dây dẫn ( A và B
hay dây - và dây + ) để biểu diễn trạng thái logic 1 và 0 của tín hiệu, không phụ
thuộc vào đất.
Khái niệm " chênh lệch đối xứng " ở đây được thể hiện qua sự cân xứng
( tương đối ) về mặt điện áp của hai dây A và B đối với điện áp chế độ chung trong
điều kiện làm việc bình thường. Một tác động nhiễu ở bên ngoài sẽ làm tăng hay
giảm tức thời điện áp ở cả hai dây một giá trị gần tương đương nhau, vì thế tín
hiệu sẽ ít bị sai lệch. Sự khác nhau về điện áp đất giữa các thiết bị tham gia truyền
thông cũng hầu như không ảnh hưởng trực tiếp đến việc đánh giá giá trị logic của
tín hiệu. Một nguyên nhân gây nhiễu khác là sự xuyên âm cũng được loại trừ
đáng kể khi dùng đôi dây xoắn ( twisted pair ). Những ưu điểm trên đây dẫn đến
sự phổ biến của phương thức truyền dẫn chênh lệch đối xứng trong các hệ thống
tốc độ cao và phạm vi rộng.
5
Đồ án tốt nghiệp Cơ điện tử 3 - K47
Bốn thông số sau đây chiếm vai trò quan trọng trong phương thức truyền
dẫn chênh lệch đối xứng:
• VOD: điện áp chênh lệch đầu ra của bộ kích thích qua trở đầu cuối
( giữa hai dây A và B ), còn được gọi là điện áp đầu cuối ( termination
voltage ) VT. VOD không phụ thuộc vào điện áp của đất. Theo chuẩn qui
định thì VOD tối thiều bằng 1,5V tại đầu ra của bộ kích thích. Dọc theo
đường dây dài, điện áp này sẽ bị suy giảm bởi điện trở DC hoặc bị sai
lệch do nhiễu, tuy nhiên bộ thu chỉ cần mức 200mV để có thể xác định
trạng thái logic của tín hiệu.
• VOS: điện áp dịch của bộ kích thích ( driver's offset voltage ), còn được
gọi là điện áp chế độ chung đầu ra V OC ( output common mode
voltage ). Nó được xác định bằng chênh lệch từ điểm giữa của tải đầu
ra so sánh với đất của bộ kích thích. VOC liên quan trực tiếp đến điện áp
chế độ chung VCM ( common mode voltage ).
• VCM: điện áp chế độ chung, được tính bằng giá trị trung bình của điện
áp hai dây, tức là VA và VB, có kể tới nhiễu và chênh lệch điện áp đất.
VCM cũng được tính như sau:
VCM = VOS + Vnoise + VGPD
6
Đồ án tốt nghiệp Cơ điện tử 3 - K47
Thông thường một tín hiệu được phát đi khi tới một đầu dây sẽ phản xạ
ngược trở lại, giống như hiện tượng phản xạ ánh sáng. Khi tốc độ truyền tương đối
thấp hoặc dây dẫn tương đối ngắn, sao cho thời gian bit TB lớn hơn gấp nhiều lần
so với thời gian lan truyền tín hiệu TS, tín hiệu phản xạ sẽ suy giảm và triệt tiêu
sau một vài lần qua lại, không gây ảnh hưởng tới chất lượng của tín hiệu mang bit
dữ liệu được phát tiếp theo. Trong trường hợp khác sẽ xảy ra xung đột tín hiệu, vì
vậy người ta dùng một trở kết thúc, hay trở đầu cuối để hấp thụ tín hiệu ban đầu. Ý
tưởng ở đây là khi một đường dây dẫn dài vô hạn thì sẽ không xảy ra hiện tượng
phản xạ tín hiệu. Vì vậy, trở đầu cuối được chọn có giá trị tương đương với trở
kháng đặc trưng ( trở kháng sóng ) của cáp truyền.
Để giao tiếp với máy tính ta có thể sử dụng các cách :
+ Ghép nối theo chuẩn của máy in ( cổng LPT )
+ Ghép nối theo cổng nối tiếp ( cổng COM )
+ Ghép nối bằng cổng USB
+ Ghép nối bằng các giao tiếp …
Trong các cách trên mỗi cách đều có những ưu điểm riêng. Với giao tiếp
cổng USB sẽ cho tốc độ cao nhưng việc sử dụng cổng USB rất khó. Mạch ngoài
cần một IC chuyên dụng làm nhiệm vụ giao tiếp , phía trong máy tính phải viết
phương thức giao tiếp riêng cho cổng. Với những giao tiếp ngoại vi đơn giản cổng
USB không thích hợp.
Giao tiếp thông qua card giao tiếp , các giao tiếp là một card cắm vào rãnh
cắm mở rộng trong máy tính , cho phép mở rộng giao tiếp về số cổng. Nhưng để
thực hiện cần phải mua các giao tiếp với chi phí không rẻ .
Giao tiếp bằng cổng song song ( cổng LPT ) hay cổng máy in. Giao tiếp
cổng song song có ưu điểm là tốc độ nhanh, truyền nhận từng Byte một ( 8 Bit ).
Nhưng có nhược điểm là không truyền được xa , dễ nhiều . Là một cổng chuẩn
trên máy PC có nhiều hỗ trợ về giao tiếp , cách sử dụng đơn giản . Để điều khiển
các thiết bị ngoại vi cổng song song cũng được dùng rất phổ biến.
Giao tiếp qua cổng nối tiếp , cách giao tiếp này rất hay được sử dụng trong
giao tiếp với thiết bị ngoại vi. Ưu điểm của cách này là đơn giản , dễ sử dụng,
truyền được khoảng cách xa, ít nhiễu, là một giao tiếp chuẩn được hầu hết các họ
Vi Điều Khiển hỗ trợ. Nhược điểm của cách này là tốc độ chậm, Vi Điều Khiển
tốn tài nguyên để hoạt động cổng nối tiếp.
7
Đồ án tốt nghiệp Cơ điện tử 3 - K47
Trong đồ án này chúng em chọn cổng nối tiếp RS232-RS485 để thực hiện
giao tiếp giữa máy tính PC với mạch ngoài.
8
Đồ án tốt nghiệp Cơ điện tử 3 - K47
Cho đến nay các card dùng để giao tiếp với máy tính đều tuân theo tiêu
chuẩn ISA
9
Đồ án tốt nghiệp Cơ điện tử 3 - K47
Các đường trong giắc cắm 25 chân được chia thành 3 nhóm :
- Các đường dữ liệu ( Data lines )
- Các đường điều khiển ( Control lines )
- Các đường trạng thái ( Status lines )
Như tên mô tả, dữ liệu được chuyền qua những đường dữ liệu, đường điều
khiển được sử dụng để điều khiển ngoại vi và tất nhiên, ngoại vi trả lại tình trạng
báo hiệu máy tính sau khi chuyền qua đường Trạng thái. Những đường này được
nối tới Dữ liệu, những thanh ghi Điều khiển và Trạng thái nội tại.
10
Đồ án tốt nghiệp Cơ điện tử 3 - K47
Với các tên đã chỉ rõ, thanh ghi Dữ liệu được nối tới những đường Dữ liệu,
thanh ghi Điều khiển được nối tới những đường Điều khiển và thanh ghi Trạng
thái được nối tới những đường Trạng thái. Những gì ta ghi vào các thanh ghi sẽ
xuất hiện giá trị tại đường tương ứng.
Trong máy PC IBM, những thanh ghi này là “IO map” và sẽ có địa chỉ duy
nhất. Chúng ta phải tìm những địa chỉ đó để có thể làm việc với cổng song song.
Với một PC tiêu biểu, địa chỉ cơ sở của LPT1 là 0 x378 và LPT2 là 0 x278. Thanh
ghi Dữ liệu tại địa chỉ cơ sỏ này, thanh ghi Trạng thái ở địa chỉ cơ sở + 1 và thanh
ghi Điều khiển ở địa chỉ cơ sở + 2. Mỗi cổng có một địa chỉ cơ sở, chúng ta có thể
tính toán địa chỉ của những thanh ghi trong trường hợp này. Địa chỉ các thanh ghi
của LPT1 và LPT2 :
Register
LPT1
LPT2
data registar(baseaddress + 0)
0x378
0x278
status register (baseaddress + 1)
0x379
0x279
control register (baseaddress + 2)
0x37a
11
Đồ án tốt nghiệp Cơ điện tử 3 - K47
x27a
Lập trình giao tiếp với cổng song song.
Hầu hết các ngôn ngữ lập trình đều cung cấp cho chúng ta các lệnh để giao
tiếp với cổng song song như : Borland C cung cấp "Inportb" và "Outportb” ,
Visual C++ cung cáp các hàm '_inp' cho đọc và '_outp' cho xuất dữ liệu. Nhưng
các hàm này chỉ hoạt động tốt trên môi trường DOS , Win98,Me nhưng không thể
hoạt động được trên WinXP.
Để có thể thực hiện giao tiếp trên tất cả các môi trường ta sử dụng một thư
viện Inpout32.dll được cung cấp miễn phí trên trang web :
http://www.logix4u.net/parallelport1.htm.
12
Đồ án tốt nghiệp Cơ điện tử 3 - K47
Trở kháng đầu ra khi cắt nguồn -2V < V0 < 2V 300Ω
- Giao diện cơ học: chuẩn EIA/TIA-232F qui định ba loại giắc cắm RS-232
là DB-9 ( 9 chân ), DB-25 ( 25 chân ) và ALT-A ( 26 chân ), trong đó hai loại đầu
13
Đồ án tốt nghiệp Cơ điện tử 3 - K47
được sử dụng rỗng rãi hơn. Loại DB-9 cũng đã được chuẩn hóa riêng trong
EIA/TIA-574.
Ý nghĩa của các chân quan trọng được mô tả dưới đây:
• RxD ( receive data ): đường nhân dữ liệu.
• TxD ( transmit data ): đường gửi dữ liệu.
• DTR ( Data terminal ready ): chân DTR thường ở trạng thái On khi thiết
bị đầu cuối sẵn sàng thiết lập kênh truyền thông. Qua việc giữ mạch
DTR ở trạng thái ON, thiết bị đầu cuối cho phép DCE của nó ở chế độ "
tự trả lời "chấp nhận lời gọi không yêu cầu. Mạch DTR ở trạng thái OFF
chỉ khi thiết bị đầu cuối không muốn DCE của nó chấp nhận lời gọi tử
xa ( chế độ cục bộ ).
• DSR ( data set ready, DCE ready ): cả hai modem chuyển mạch DSR
sang ON khi một đường truyền thông đã được thiết lập giữa hai bên.
• DCD ( data carrier detect ): chận DCD được sử dụng để kiểm soát truy
nhập đường truyền. Một trạm nhận tín hiệu DCD là OFF sẽ hiểu là trạm
đối tác chưa đóng mạch yêu cầu gửi dữ liệu ( chân RTS ) và vì thế có
thể đoạt quyền kiểm soát đường truyền nếu cần thiết. Ngược lại, tín hiệu
DCD là ON chỉ thị bên đối tác đã gửi tín hiệu RTS và giành quyền kiểm
soát đường truyền.
• RTS ( request to send ): đường RTS kiểm soát chiều truyền dữ liệu. Khi
một trạm cần gửi dữ liệu, nó đóng mạch RTS sang ON để báo hiệu với
modem của nó. Thông tin này cũng được chuyển tiếp tới modem xa.
• CTS ( clear to send ): khi CTS chuyển sang ON, một trạm được thông
báo rằng modem của nó đã sẵn sàng nhận dữ liệu từ trạm và kiểm soát
đường điện thoại cho việc truyền dữ liệu đi xa.
• RI ( ring indicator ): khi modem nhận được một lời gọi, mạch RI chuyển
ON/OFF một cách tuần tự với chuông điện thoại để báo hiệu cho trạm
đầu cuối. Tín hiệu này chỉ thị rằng một modem xa yêu cầu thiết lập liên
kết dial-up.
14
Đồ án tốt nghiệp Cơ điện tử 3 - K47
- Chế độ làm việc: chế độ làm việc của hệ thống RS-232 là hai chiều toàn
phần ( full-duplex ), tức là hai thiết bị tham gia cùng có thể thu và phát tín hiệu
cùng một lúc. Như vậy, việc thực hiện truyền thông cần tối thiểu 3 dây dẫn - trong
đó hai dây tín hiệu nối chéo các đầu thu phát của hai trạm và một dây đất. Với cấu
hình tối thiều này, việc đảm bảo độ an toàn truyền dẫn tín hiệu thuộc về trách
nhiệm của phần mềm.
15
Đồ án tốt nghiệp Cơ điện tử 3 - K47
Ta còn có thể ghép nối trực tiếp giữa hai thiết bị thực hiện chế độ bắt tay
( handshake mode ) không thông qua modem. Qua việc sử dụng các dây dẫn DTR
và DSR, độ an toàn giao tiếp sẽ được đảm bảo. Trong trường hợp này các chân
RTS và CTS được nối ngắn.
Độ nhạy cảm đầu vào -7V < VCM < 12V ± 200mV
16
Đồ án tốt nghiệp Cơ điện tử 3 - K47
RS-485 có khả năng ghép nối nhiều điểm. Có thể ghép nối 32 trạm, được
định địa chỉ và giao tiếp đồng thời qua một đoạn RS-485 mà không cần lắp bộ. Để
đạt được điều này, trong một thời điểm chỉ một trạm được phép kiểm soát đường
dẫn và phát tín hiệu. Vì thế một bộ kích thích đều phải đưa về chế độ trở kháng
cao mỗi khi rỗi, tạo điều kiện cho các bộ kích thích ở các trạm khác tham gia. Chế
độ này gọi là chế độ tri-state. Một số vi mạch RS-485 tự động xử lý tình huống
này, trong nhiều trường hợp khác việc đó thuộc về trách nhiệm của phần mềm điều
khiển truyền thông. Trong mạch của bộ kích thích RS-485 có một tín hiệu vào '
enable ' được dùng cho mục đích chuyển bộ kích thích về trạng thái phát tín hiệu
hoặc tri-state.
17
Đồ án tốt nghiệp Cơ điện tử 3 - K47
Quan hệ giữa tốc độ truyền và chiều dài dây dẫn tối đa trong RS-485 sử
dụng đôi dây xoắn AWG24.
18
Đồ án tốt nghiệp Cơ điện tử 3 - K47
Tốc độ truyền tối đa phụ thuộc vào chất lượng cáp mạng, cụ thể là đôi dây
xoắn kiểu STP có khả năng chống nhiễu tốt hơn loại UPT và vì thế có thể truyền
với tốc độ cao hơn. Có thể sử dụng các bộ lặp để tăng số trạm trong một mạng,
cũng như chiều dài dây dẫn lên nhiều lần, đồng thời đảm bảo được chất lượng tín
hiệu.
+ Cấu hình mạng: RS-485 là chuẩn duy nhất do EIA đưa ra mà có khả năng
truyền thông đa điểm thực sự chỉ dụng một đường dẫn chung duy nhất, được gọi là
bus. Chính vì vậy mà nó được làm chuẩn cho lớp vật lý ở đa số các hệ thông bus
hiện thời.
Cấu hình phổ biến nhất là sử dụng hai dây dẫn cho việc truyền tín hiệu.
Trong trường hợp này, hệ thống chỉ có thể làm việc với chế độ hai chiều gián đoạn
( half-duplex ) và các trạm có thể nhận quyên bình đẳng trong việc truy nhập
đường dẫn. Chú ý, đường dẫn được kết thúc bằng hai trở tại hai đầu chứ không
được phép ở giữa đường dây. Trên hình trên không vẽ dây nối đất song trên thực tế
việc nối đất là rất quan trọng.
19
Đồ án tốt nghiệp Cơ điện tử 3 - K47
20
Đồ án tốt nghiệp Cơ điện tử 3 - K47
Phương pháp thứ hai được gọi là chặn RC, sử dung kết hợp một tụ C mắc
nối tiếp với điện trở R. Mạch RC này cho phép khắc phục nhược điểm của cách sử
dụng một điện trở thần nêu trên. Trong lúc tín hiệu ở giai đoạn qua độ, tụ C có tác
dụng ngắn mạch và trở R có tác dụng chặn đầu cuối. Khi tụ C đảo chiều sẽ cản trở
dòng một chiều và vì thế có tác dụng giảm tải. Tuy nhiên, hiệu ứng sẽ cản trở
thông thấp ( lowpass ) của mạch RC không cho phép hệ thống làm việc với tốc độ
cao.
Một biến thể của phương pháp chặn song song cũng được sử dụng rộng rãi
là chặn tin cậy, bởi nó có tác dụng khác nữa là tạo thiên áp tin cậy ( fail-safe
biasing ) đảm bảo một dòng tối thiểu cho trường hợp bus rỗi hoặc có sự cố.
+ Nối đất: Mặc dù mức tín hiệu được xác định bằng điện áp chênh lệch
giữa hai dây dẫn A và B không liên quan tới đất, hệ thống RS485 vẫn cần một
đường dây nối đất để tạo một đường thoát cho nhiễu chế độ chụng và các dòng
khác, ví dụ dòng đầu vào bộ thu. Một sai lầm thương gặp là chỉ dùng hai dây để
nối hai trạm. Trong trường hợp này dòng chế độ chung sẽ tìm cách quay ngược trở
lại nguồn phát, bức xạ nhiễu ra môi trường xung quanh. ảnh hưởng tối tính tương
thích điện từ của hệ thống. Nối đất sẽ có tác dụng tạo một đương thoát trở kháng
nhỏ tại một vị trí xác định, nhờ vậy giảm thiểu tác hại gây nhiễu. Hơn thế nữa với
cấu hình trở đầu cuối tin cậy, việc nối đất tạo thiên áp sẽ giữ một mức điện áp tối
thiểu giữa hai dây A và B trong trường hợp kể cả bus rỗi hoăc có sự cố
21
Đồ án tốt nghiệp Cơ điện tử 3 - K47
Ngày nay, những ứng dụng của Vi điều khiển đã đi sâu vào đời sống sinh
hoạt và sản xuất của con người. Thực tế hiện nay là hầu hết các thiết bị điện dân
dụng hiện nay đều có sự góp mặt của Vi Điều Khiển và vi xử lí . Ứng dụng vi điều
khiển trong thiết kế hệ thống làm giảm chi phí thiết kế và hạ giá thành sản phẩm
đồng thời nâng cao tính ổn định của thiết bị và hệ thống. Trên thị trường có rất
nhiều họ vi điều khiển: họ 8051 của Intel, 68HC11 của Motorola, Z80 của hãng
Eilog, PIC của hãng Microchip, H8 của Hitachi,vv.. và cuối cùng là AVR của hang
Atmel.
22
Đồ án tốt nghiệp Cơ điện tử 3 - K47
39 21
38 P 0 .0 /A D 0 P 2 .0 /A 8 22
37 P 0 .1 /A D 1 P 2 .1 /A 9 23
36 P 0 .2 /A D 2 P 2 .2 /A 1 0 24
35 P 0 .3 /A D 3 P 2 .3 /A 1 1 25
34 P 0 .4 /A D 4 P 2 .4 /A 1 2 26
33 P 0 .5 /A D 5 P 2 .5 /A 1 3 27
32 P 0 .6 /A D 6 P 2 .6 /A 1 4 28
P 0 .7 /A D 7 P 2 .7 /A 1 5
1 10
2 P 1 .0 P 3 .0 /R XD 11
3 P 1 .1 P 3 .1 /T XD 12
4 P 1 .2 P 3 .2 /IN T 0 13
5 P 1 .3 P 3 .3 /IN T 1 14
6 P 1 .4 P 3 .4 /T 0 15
7 P 1 .5 P 3 .5 /T 1 16
8 P 1 .6 P 3 .6 /W R 17
P 1 .7 P 3 .7 /R D
19 30
18 X1 ALE 29
X2 PSEN
31
9 EA
R ST
40
VC C
8051
23
Đồ án tốt nghiệp Cơ điện tử 3 - K47
Chân 9 (RST) là chân để RESET cho 8051. Bình thường các chân này ở
mức thấp. Khi ta đưa tín hiệu này lên cao (tối thiểu 2 chu kỳ máy). Thì những
thanh ghi nội của 8051 được LOAD những giá trị thích hợp để khởi động lại hệ
thống. Từ chân 10 ÷17 là Port3 (P3.0, P3.1, . . ., P3.7) dùng vào hai mục đích :
dùng là Port xuất / nhập I/O hoặc mỗi chân giữ một chức năng cá biệt được tóm tắt
sơ bộ như sau :
P3.0 (RXD) : Nhận dữ liệu từ Port nối tiếp.
P3.1 (TXD) : Phát dữ liệu từ Port nối tiếp.
P3.2 (INT0) : Ngắt 0 bên ngoài.
P3.3 (INT1) : Ngắt 1 từ bên ngoài.
P3.4 (T0) : Timer/Counter 0 nhập từ bên ngoài.
P3.5 (T1) : Timer/Counter 1 nhập từ bên ngoài.
P3.6 (WR) : Tín hiệu Strobe ghi dữ liệu lên bộ nhớ bên ngoài.
P3.7 (RD) : Tín hiệu Strobe đọc dữ liệu lên bộ nhớ bên ngoài.
Các chân 18,19 (XTAL2 và XTAL1) được nối với bộ dao động thạch anh
12 MHz để tạo dao động trên CHIP. Hai tụ 30 pF được thêm vào để ổn định dao
động.
Chân 20 (Vss) nối đất (Vss = 0).
Từ chân 21 - 28 là Port 2 (P2.0, P2.1, . . ., P2.7) dùng vào hai mục đích:
làm Port xuất/nhập I/O hoặc dùng làm byte cao của Bus địa chỉ thì nó không còn
tác dụng I/O nữa. Bởi vì ta muốn dùng EPROM và RAM ngoài nên phải sử dụng
Port 2 làm byte cao bus địa chỉ.
Chân 29 (PSEN)(program store enable) là tín hiệu điều khiển xuất ra của
8051, nó cho phép chọn bộ nhớ ngoài và được nối chung với chân của OE (Outout
Enable) của EPROM ngoài để cho phép đọc các byte của chương trình. Các xung
tín hiệu PSEN hạ thấp trong suốt thời gian thi hành lệnh. Những mã nhị phân của
chương trình được đọc từ EPROM đi qua bus dữ liệu và được chốt vào thanh ghi
lệnh của 8051 bởi mã lệnh.(chú ý việc đọc ở đây là đọc các lệnh (khác với đọc dữ
24
Đồ án tốt nghiệp Cơ điện tử 3 - K47
liệu), khi đó VXL chỉ đọc các bit opcode của lệnh và đưa chúng vào hàng đợi lệnh
thông qua các Bus địa chỉ và dữ liệu)
Chân 30 (ALE : Adress Latch Enable) là tín hiệu điều khiển xuất ra của 8051,
nó cho phép phân kênh bus địa chỉ và bus dữ liệu của Port 0.
Chân 31 (EA : Eternal Acess) được đưa xuống thấp cho phép chọn bộ nhớ
mã ngoàiđối với 8031.
Đối với 8051 thì :
EA = 5V : Chọn ROM nội.
EA = 0V : Chọn ROM ngoại.
EA = 21V : Lập trình EPROM nội.
Các chân từ 32 39 là Port 0 (P0.0, P0.1, . . . , P0.7) dùng cả hai mục đích :
Vừa làm byte thấp cho bus địa chỉ, vừa làm bus dữ liệu, nếu vậy Port 0 không còn
chức năng xuất nhập I/O nữa.
Chân 40 (Vcc) được nối lên nguồn 5V.
25
Đồ án tốt nghiệp Cơ điện tử 3 - K47
Hầu hết các lệnh đều thực hiện trong 1 chu kỳ xung nhịp.
Hoạt động với tốc độ đồng hồ đến 12 MHZ , vi điều khiển AVR có khả
năng đạt đến tốc độ xử lý 12MPIS (1 triệu lệnh trên giây).
Bộ nhớ chương trình và dữ liệu tích hợp ngay trên chip .AVR có 3 công
nghệ bộ nhớ khác nhau : EPROM( luôn lập trinh mới được) xoá được kiểu
flash , EEPROM xoá được bằng tín hiệu xung điện nhưng nội dung bộ nhơ
vẫn dữ nguyên khi mất điện áp nguồn , RAM dung cho các biến thông
thường.
Khả năng lập được trình trong hệ thống ,do cách thiết kế và công nghệ bộ
nhớ có thể lập trình ngay trong khi đang được cấp nguồn trên mạch , ko cần
phải nhấc chip ra như các vi điều khiển khác.
Hỗ trợ lập trình bằng ngôn ngữ C.
Điện áp làm việc thay đổi trong khoảng rộng từ 2.7->6V.
26
Đồ án tốt nghiệp Cơ điện tử 3 - K47
EPROM và RAM được nhìn nhận như là bộ nhớ dữ liệu và được dùng để
cất giữ các hằng và biến.
4. Hoạt động với xung giữ nhịp có tần số từ 0 đến 10MHz. Hầu hết các lệnh
được thực hiện trong 1 chu kỳ đồng hồ và điều này dẫn đến sự cải thiện tính
năng với tốc độ xử lý khoảng 10 lần lớn hơn các bộ xử lý thông thường
(chẳng hạn, họ 8051) hoạt động ở cùng tần số cuẩ đồng hồ giữ nhịp.
5. Có mạch đặt lại trạng thái mỗi khi cấp lại điện nguồn cho hệ thống (Power
On Reset).
6. Có bộ định thời ngay trên chip và lập trình được với mạch chia tần số
(prescalr) tách biệt. Bộ định thời này được sử dụng cho các ứng dụng cần
có sự phân định thời gian (timing) của các sự kiện.
7. Có các nguồn ngắt bên trong và bên ngoài.
8. Có bộ định thời watchdog ngay trên chip và lập trình được với bộ dao động
độc lập. Bộ phận này được sử dụng để khôi phục lại trạng thái hoạt động
của hệ thống trong trường hợp xảy ra lỗi (treo) khi chạy phần mềm, nhưng
cũng có thể được sử dụng cho các ứng dụng đáng quan tâm khác, như sẽ
được bàn luận đến trong một ứng dụng sẽ được trình bày về sau.
9. Có chế độ hoạt động: SLEPP (ngủ) và POWER DOWN (nghỉ hay giảm
dòng tiêu thụ khi không cần thiết). Đặc điểm này cho phép tiết kiệm năng
lượng khi bộ xử lý không có công việc cần xử lý, đặc biệt có ý nghĩa đối
với các thiết bị cầm tay dùng pin.
10. Nhiều chip có mạch dao động đồn hồ RC ngay trên chip. Khi sử dụng bộ
giao động RC trên chip, số lượng các linh kiện phụ trợ sẽ giảm đi.
11. Có một phạm vi rộng các đặc tính của bộ xử lý (từ các bộ xử lý cỡ nhỏ với
8 chân ra đến bộ xử lý 68 chân), nhờ vậy ta có thể lựa chọn một bộ xử lý
cho thích hợp với yêu cầu đã đặt ra, cả về chi phí và tính năng kỹ thuật
cũng như về các công cụ phát triển.
27
Đồ án tốt nghiệp Cơ điện tử 3 - K47
28
Đồ án tốt nghiệp Cơ điện tử 3 - K47
thi lệnh. Lối ra của thanh nghi lệnh được giải mã bằng bộ giải mã lệnh để quyết
định chọn tín hiệu điều khiển nào sẽ được kích hoạt để thoàn thành lệnh hiện tại.
Bộ nhớ chương trình, bên cạnh các lệnh lưu trữ, cũng như chứa các vectơ
ngắt bắt đầu ở địa chỉ $0000. Chương trình hiện tại sẽ bắt đầu ở vị trí bộ nhớ phía
bên khia vùng dùng cho các vectơ. Số lượng các vectơ cũng khác nhau giữa các bộ
xử lý. Bộ xử lý AT90S1200 có 3 vectơ còn AT90S8515 có 13 vectơ. Bảng 3-1
minh họa toàn bộ không gian vectơ dùng cho bộ xử lý AT90S8515.
Bộ nhớ dữ liệu, mặt khác, được phân chia thành những loại khác nhau. Hình 3-
2 minh họa các bản đồ bộ nhớ khác nhau có trên một vi điều khiển AVR. Bộ nhớ
dữ liệu có tất cả 5 thành phần khác nhau:
1. Một tệp thanh ghi (register file) với 32 thanh ghi có độ rộng 8 bit. Tất cả
các bộ điều khiển của họ AVR đều có tệp thanh ghi này.
29
Đồ án tốt nghiệp Cơ điện tử 3 - K47
2. 64 thanh ghi vào/ra (I/O), mỗi thanh ghi 8 bit. Tất cả các bộ xử lý không
phải đều có đúng 64 thanh ghi. Một số trong đó có nhiều hơn số còn lại, tùy
thuộc vào các bộ phận ngoại vi có trên chip. Các thanh nghi vào/ra này thực
chất là một phần của bộ nhớ SRAM trên chip và có thể được truy nhập
hoặc như bộ nhớ SRAM với các địa chỉ giữa $20 và $5F hoặc như các
thanh ghi I/O với các địa chỉ giữa $00 và $3F. Hầu hết các thanh ghi này
thường được trao đổi như các thanh nghi I/O chứ không phải như bộ nhớ
SRAM.
3. Bộ nhớ SRAM bên trong. Bộ nhớ này có trên hầu hết các bộ xử lý AVR, chỉ
trừ các bộ xử lý loại cơ sở (baseline), chẳng hạn như loại AT90S1200. dụng
lượng bộ nhớ SRAM thay đổi từ 128 byte đến 4 kbyte. Bộ nhớ SRAM
được sử dụng cho ngăn xếp cũng như để lưu trữ các biến. Trong thời gian
có ngắt và gọi đoạn chương trình (subroutine), giá trị hiện tại của bộ đếm
chương trình được lưu trữ trong ngăn xếp. Kích thước của ngăn xếp bị giới
hạn bởi bộ nhớ SRAM có mặt trên chip. Vị trí của ngăn xếp được chỉ thị
bởi con trỏ ngăn xếp. Con trỏ ngăn xếp có dụng lượng 1 kbyte trên các vi
điều khiển nhỏ hơn, chẳng hạn như loại AT90S2313 và bằng 2 byte trên các
bộ xử lý lớn hơn, chẳng hạn như loại AT90S8515. Con trỏ ngăn xếp cần
phải được khởi tạo sau khi đặt lại (reset) và trước khi ngăn xếp có thể được
sử dụng. Các bộ xử lý này không có bộ nhớ SRAM trên chip, chẳng hạn
như loại AT90S1200. Ngăn xếp bằng phần cứng được thiết kế để lưu trữ
các địa chỉ trả lại chương trình. Một ngăn xếp bằng phần cứng này chỉ có
thể lưu trữ đến 3 giá trị trả lại.
4. Bộ nhớ SRAM bên ngoài. Đặc tính này chỉ có ở các bộ xử lý cỡ lớn trong
họ vi điều khiển AVR. Các bộ xử lý này có các cổng để truy nhập bộ nhớ và
dữ liệu bên ngoài (chẳng hạn như AT90S8515) có thể sử dụng bất kỳ bộ
nhớ SRAM ngoài nào mà người dụng có thể tùy ý quyết định khi thiết kế.
5. EEROM. Bộ nhớ EEROM có sẵn trên hầu như tất cả các bộ vi điều khiển
AVR và được truy nhập theo một bản đồ bộ nhớ tách biệt. Địa chỉ bắt đầu
của bộ nhớ EEPROM luôn là $0000. Các bộ xử lý khác nhau có từ 64 byte
đến 4 kbyte bộ nhớ EEPROM. Bộ nhớ EEPROM có thể được đọc và ghi
bởi bất kỳ chương trình nào. Việc đọc bộ nhớ EEPROM diễn ra nhanh hơn
việc ghi vào bộ nhớ EEROM. Bộ nhớ EEPROM có thể ghi vào được
khoảng 100.000 lần.
30
Đồ án tốt nghiệp Cơ điện tử 3 - K47
Hầu hết các lệnh dùng cho bộ điều khiển AVR đều có chiều dài1 từ (2 byte)
và vì thế chiếm 1 ô nhớ chương trình. Nhiều lệnh được thực thi trong một chu kỳ
đồng hồ đơn lẻ, trongkhi một số khác có thể chiếm 2 hoặc nhiều chu kỳ đồng hồ.
Việc thực thi trong một chu trình đơn lẻ đạt được là do việc sử dụng một kiểu cấu
trúc đường ống (pipeline) hai tầng. Đường ống làm việc theo cách tiếp nhận đồng
thời một lệnh mới từ bộ nhớ chương trình trong khi lệnh trước đó đang được thực
thi trong phần khác của bộ xử lý. Việc tìm nạp/giải mã và thực thi các lệnh như
vậy gọi là những quá trình được thực hiện bởi bộ xử lý một cách đồng thời.
Bây giờ ta thử tìm hiểu các bộ phận khác nhau hình thành bộ xử lý AVR, đó là:
+ Tệp thanh ghi + Bộ truyền nhận UART
+ Khối số học logic + Cấu trúc ngắt.
+ Bộ nhớ vào/ra + Bộ định thời.
+ Bộ nhớ EEPROM + Bộ watchdog
+ Cổng vào/ra + Bộ biến đổi A/D
+ Bộ nhớ SRAM + Bộ định thời watchdog.
31
Đồ án tốt nghiệp Cơ điện tử 3 - K47
32
Đồ án tốt nghiệp Cơ điện tử 3 - K47
chu kỳ đồng hồ đơn lẻ. Mỗi một hao tác ALU đều làm ảnh hưởng đến các cờ trong
thanh ghi trạng thái (STATUS), tùy thuộc vào lệnh.
Hình 3-5: Việc thực thi của ALU bao gồm tìm/nạp, thực thi, và ghi ngược vào
thanh ghi.
Mặt khác, việc truy nhập bộ nhớ SRAM chiếm mất 2 chu kỳ, như được
minh họa trên hình 3-6. Nguyên nhân là việc truy nhập bộ nhớ SRAM sử dụng
một thanh ghi con trỏ dùng địa chỉ bộ nhớ SRAM. Thanh ghi con trỏ này chỉ là
một trong các thanh ghi con trỏ (các cặp thanh ghi X, Y, hoặc Z) có trên chip. Chu
33
Đồ án tốt nghiệp Cơ điện tử 3 - K47
trình đồng hồ thứ nhất được cần đển để truy nhập tệp thanh ghi và để thao tác trên
thanh ghi con trỏ (các lệnh truy nhập bộ nhớ SRAM cho phép tăng địa chỉ
trước/sau thao tác trên thanh ghi con trỏ). Ở thời điểm kết thúc của chu kỳ đồng hồ
thứ nhất, khố ALU thực hiện phép tính này, và sau đó địa chỉ này được sử dụng để
truy nhập ô nhớ SRAM và để ghi vào ô nhớ này (hoặc đọc ra từ đó vào thanh ghi
đích), như được minh họa trên hình 3-6.
Hình 3-6: Các chu trình truy nhập dữ liệu lên thanh ghi SRAM trên chip.
Bộ nhớ vào/ra.
Bộ nhớ vào/ra là “xa lộ” đến với tất cả các bộ phận ngoại vi xủa bộ xử lý
AVR. Nó được thiết kế giống như SRAM và có thể được trao đổi theo hai cách:
giống như bộ nhớ SRAM hoặc như các thanh ghi I/O. Nếu giống như SRAM, các
địa chỉ ở phía bên kia S20 cho đến $5F, còn nếu giống như các thanh ghi I/O, các
địa chỉ bắt đầu từ $00 đến $3F.
Ta sẽ xem xét các thanh ghi vào/ra như các thanh ghi chứ không phải như
bộ nhớ SRAM và sẽ xem xét hầu hết các thanh ghi I/O cũng như chức năng của
các thanh ghi đó. Tuy nhiên, đối với một chip cụ thể, ta nên tra cứu hoặc đối chiếu
với các tài liệu về thống số kỹ thuật (data sheet) cụ thể để có được các thông tin
cập nhật và chính xác. Ở đây chỉ bàn luận đến các thanh ghi chung nhất và chức
năng của chúng.
Một điểm quan trọng cần chú ý ở đây là việc truy nhập lên các thanh ghi
vào/ra khác nhau. Để truy nhập lên các thanh ghi I/O, vi điều khiển AVR giới thiệu
các lệnh IN và OUT. Các lệnh này có thể truy nhập tất cả các thanh gh I/O từ $00
đến $3F. Bên cạnh các lệnh IN và OUT, vi điều khiển AVR cũng hỗ trợ việc định
địa chỉ bit lên một số trong các thanh ghi, cụ thể là từ $00 đến $1F. Với sự trợ giúp
của các lệnh bit SBI và CBI, bất cứ bit nào trên bất kỳ thanh ghi nào (từ $00 đến
$1F) đều có thể được đặt và đặt lại. Đây là một phương pháp tiết kiệm thời gian so
với việc đọc thanh ghi, thay đổi bit, và việc ghi giá trị ngược trở lại thanh ghi. Đối
34
Đồ án tốt nghiệp Cơ điện tử 3 - K47
với các thanh ghi còn lại, ta phải sử dụng một phương pháp khác, cần đến thời
gian dài hơn khoảng ba lần so với một chu kỳ đồng hồ.
7 6 5 4 3 2 1 0
Địa chỉ I T H S V N Z C
I/O-$3F
Giá trị 0 0 0 0 0 0 0 0
khởi tạo
Hình 3-7: Thanh ghi trạng thái bộ xử lý
3. Bit 5: H. Half Cary Flag. Chỉ báo cho thấy sự mang sang (nhớ) một nửa
trong một số lệnh số học.
4. Bit 4: S. Cờ dấu (Sing Flag). Bit này là kết quả EX – OR (hoặc loại trừ)
giữa cờ phủ định N và cờ tràn (Overflow).
5. Bit 3: V. Cờ tràn lấy bù nhị phân (Two’s Complement Overflow Flag).
6. Bit 2: N. Cờ phủ định (Negative Flag).
7. Bit 1: Z. Cờ số không (Zero Flag). Chỉ báo một kết quả bằng 0 sau khi thực
hiện một phép tính số học hoặc logic.
8. Bit 0: C. Cờ mang sang (Carry Flag), báo hiệu sự mang sang trong phép
tính số học hoặc logic.
Thanh ghi trạng thái không được lưu trữ bằng máy (machine) trong thời gian
diễn ra một thao tác ngắt. Lệnh trong một đoạn chương trình ngắt có thể sửa đổi
bit cờ trạng thái, và vì thế chương trình của người dùng phải lưu trữ và khôi phục
thanh ghi trạng thái trong thời gian có một ngắt.
35
Đồ án tốt nghiệp Cơ điện tử 3 - K47
7 6 5 4 3 2 1 0
Giá trị 0 0 0 0 0 0 0 0
khởi tạo
Hình 3-8. Thanh ghi che (mask) ngắt chung
7 6 5 4 3 2 1 0
36
Đồ án tốt nghiệp Cơ điện tử 3 - K47
Giá trị 0 0 0 0 0 0 0 0
khởi tạo
Hình 3-9: Thanh ghi cờ ngắt chung
7 6 5 4 3 2 1 0
Giá trị 0 0 0 0 0 0 0 0
khởi tạo
37
Đồ án tốt nghiệp Cơ điện tử 3 - K47
CS02 CS01 Mô tả
0 1 Dự trữ
CS02 CS01 Mô tả
0 1 Dự trữ
38
Đồ án tốt nghiệp Cơ điện tử 3 - K47
7 6 5 4 3 2 1 0
Giá trị 0 0 0 0 0 0 0 0
khởi tạo
Hình 3-11: Thanh ghi trạng thái MCU
CS02 CS01 Mô tả
0 1 Dự trữ
1 0 Reset ngoài
1 1 Reset watchdog
Bảng 3-4: Các giá trị PORF và EXTRF sau khi reset. X có nghĩa là không xác định
còn Y có nghĩa là không thay đổi.
39
Đồ án tốt nghiệp Cơ điện tử 3 - K47
0 1 0 CK/8
0 1 1 CK/64
1 0 0 CK/256
1 0 1 CK/1024
40
Đồ án tốt nghiệp Cơ điện tử 3 - K47
7 6 5 4 3 2 1 0
Giá trị 0 0 0 0 0 0 0 0
khởi tạo
7 6 5 4 3 2 1 0
Giá trị 0 0 0 0 0 0 0 0
khởi tạo
CS02 CS01 Mô tả
0 1 PWM 8 bit
1 0 PWM 9 bit
1 1 PWM 10 bit
41
Đồ án tốt nghiệp Cơ điện tử 3 - K47
tất cả các mẫu cần phải phù hợp về mức HIGH/LOW với thông số kỹ thuật
về input capture trigger quy định cho bit ICES. Tần số lấy mẫu hiện thời là
tần số đồng hồ STAL.
7 6 5 4 3 2 1 0
Giá trị 0 0 0 0 0 0 0 0
khởi tạo
Hình 3-14: Thanh ghi điều khiển Timer/Counter1A.
2. Bit 6: ICES 1: Lựa chọn sườn Input Capture 1 Edge Selec. Khi bit ICES1
được xóa thành “0”, thì nội dung của bộ Timer/Counter1 được truyền đến
thanh ghi ICR1 (Input Capture Register), trên sườn âm của chân ICP (Input
capture Pin). Khi bit ICES1 được đặt thành “1”, thì nội dung của bộ
Timer/Counter1 được truyền đến thanh ghi ICR1 (Input Capture), trên sườn
dương của chân ICP.
3. Bit 3: CTC1: Xóa Timer/Counter1 theo lần so sánh (Clear Timer/Counter1
on Compare Match). Khi bit điều khiển CTC1 được đặt thành “1” bộ
Timer/Counter1 được reset về $0000 trong chu trình đồng hồ sau một lần so
sánh. Nếu bit điều khiển CTC1 bị xóa, thì bộ Timer/Counter1 tiếp tục đếm
và không bị ảnh hưởng (tác động) bởi kết quả sau lần so sánh. Bởi vì mỗi
lần so sánh được phát hiện trong chu kỳ đồng hồ CPU kế tiếp theo lần
trước, nên chức năng này sẽ thực hiện một cách khó khăn khi số chia tần số
cao hơn 1 được sử dụng cho bộ định thời. Khi số chia tần số bằng 1 được
sử dụng, và thanh ghi so sánh A được đặt thành C, thì bộ Timer sẽ như sau
nếu CTC1 được đặt:
... C – 2 C – 1 C 0 1
Khi bộ chia tần số được đặt số chia thành 8, bộ định thời sẽ đếm giống như
sau đây:
… C-2, C-2, C-2, C-2, C-2, C-2, C-2, C-2 C-1, C-1, C-1, C-1, C-1, C-1, C-
1 C, 0, 0, 0, 0, 0, 0, 0 …
Trong chế độ PWM, bit này khôg có tác dụng.
4. Bit 2,1,1 – CS12, CS11, CS10: Clock Select1, bit 2, 1 và 0. Các bit
ClockSelect1 2; 1 và 0 quy định nguồn chia tần số của bộ Timer/Counter1
giống như với Timer/Counter0 (xem hình 3-15).
42
Đồ án tốt nghiệp Cơ điện tử 3 - K47
7 6 5 4 3 2 1 0
Giá trị 0 0 0 0 0 0 0 0
khởi tạo
43
Đồ án tốt nghiệp Cơ điện tử 3 - K47
15 14 13 12 11 10 9 8
Giá trị 0 0 0 0 0 0 0 0
khởi tạo
7 6 5 4 3 2 1 0
Giá trị 0 0 0 0 0 0 0 0
khởi tạo
TCNT1 Timer/Counter1 Read: Khi khối CPU đọc byte thấp (LOW)
TCNT1L, dữ liệu của byte LOW TCNT1L được gửi tới CPU và dữ liệu của byte
HIGH TCNT1H bị thay thế trong thanh ghi TEMP. Khi khối CPU đọc dữ liệu
trong byte HIGH TCNT1H, thì CPU nhận dữ liệu trong thanh ghi TEMP. Do đó,
byte LOW TCNT1L cần phải được truy nhập trước tiên đối với thao tác đọc trọn
vẹn thanh ghi 16 bit. Bộ Timer/Counter1 được thiết kế để hoạt động như một bộ
đếm tiến hoặc tiến/lùi (trong chế độ PWM) với thao tác truy nhập đọc và ghi. Nếu
bộ Timer/Counter1 được ghi vào và một nguồn xung nhịp được lựa chọn thì bộ
Timer/Counter 1 tiếp tục đếm trong chu trình đồng hồ bộ định thời sau khi nó
được đặt trước (preset) bằng giá trị đã được ghi.
44
Đồ án tốt nghiệp Cơ điện tử 3 - K47
thanh ghi 16 bit. Thanh ghi TEMP cũng được sử dụng khi truy nhập TCNT1 và
ICR1. Nếu chương trình chính và đoạn chương trình ngắt (routine) cũng thực hiện
thao tác truy nhập lên các thanh ghi bằng cách sử dụng TEMP, các ngắt cần phải bị
cấm trong thời gian xảy ra quá trình truy nhập từ chương trình chính hoặc các ngắt
truy nhập nếu các ngắt được cho phép lại được cho phép lại.
Các thanh ghi so sánh lối ra Timer/Counter1: OCR1 BH, OCR1 BL.
Các thanh ghi so sánh lối ra (output compare) là các thanh ghi đọc/ghi 16
bit. Các thanh ghi so sánh lối ra bộ Timer/Counter1 chứa dữ liệu được so sánh liên
tục với Timer/Counter1.
Diễn biến của những lần so sánh được chỉ định trong thanh ghi điều khiển
và trạng thái Timer/Counter1. Một lần so sánh chỉ xảy ra nếu Timer/Counter1 đếm
đến giá trị OCR. Một phần mềm thực hiện thao tác ghi, đặt TCNT1 và OCR1A
hoặc OCR1B thành cùng giá trị, sẽ không tạo ra một lần so sánh.
Một lần so sánh sẽ đặt cờ ngắt so sánh trong chu kỳ đồng hồ CPU kế tiếp
theo sự kiện so sánh. Bởi vì các thành ghi so sánh lối ra – OCR1A và OCR1B – là
các thanh ghi 16 bit, nên một thanh ghi tạm thời TEMP được sử dụng khi
OCR1A/B được ghi để đảm bảo là cả hai byte được cập nhật đồng thời. Khi CPU
ghi byte cao (HIGH), OCR1AH hoặc OCR1BH, dữ liệu được lưu trữ tạm thời vào
thanh ghi TEMP. Khi khối CPU ghi byte thập, OCR1AL hoặc OCR1BL, thanh ghi
TEMP ghi đồng thời OCR1AH hoặc OCR1BH. Do đó, byte cao (HIGH)
OCR1AH hoặc OCR1BH cần phải được ghi trước tiên đối với một thao tác ghi
trọn vẹn thanh ghi 16 bit.
7 6 5 4 3 2 1 0
Giá trị 0 0 0 0 0 0 0 0
khởi tạo
7 6 5 4 3 2 1 0
Giá trị 0 0 0 0 0 0 0 0
khởi tạo
45
Đồ án tốt nghiệp Cơ điện tử 3 - K47
Thanh ghi TEMP cũng được sử dụng khi truy nhập TCNT1 và ICR1. Nếu
chương trình chính và các đoạn chương trình ngắt thực hiện việc truy nhập đến các
thanh ghi bằng cách sử dụng TEMP, các ngắt cần phải bị cấm trong thời gian truy
nhập từ chương trình chính và từ đoạn chương trình (routine) ngắt nếu các ngắt
được cho phép từ bên trong đoạn chương trình ngắt.
7 6 5 4 3 2 1 0
Giá trị 0 0 0 0 0 0 0 0
khởi tạo
7 6 5 4 3 2 1 0
Giá trị 0 0 0 0 0 0 0 0
khởi tạo
46
Đồ án tốt nghiệp Cơ điện tử 3 - K47
7 6 5 4 3 2 1 0
Giá trị 0 0 0 0 0 0 0 0
khởi tạo
7 6 5 4 3 2 1 0
Giá trị 0 0 0 0 0 0 0 0
khởi tạo
47
Đồ án tốt nghiệp Cơ điện tử 3 - K47
0 0 0 16K 15ms
0 0 1 32K 30ms
0 1 0 64K 60ms
0 1 1 128K 120ms
1 0 0 256K 240ms
1 0 1 512K 490ms
1 1 0 1024K 970ms
1 1 1 2048K 1,9s
Bảng 3-8: Sự lựa chọn số chia tần số của bộ định thời watchdog
7 6 5 4 3 2 1 0
Giá trị 0 0 0 0 0 0 0 0
khởi tạo
48
Đồ án tốt nghiệp Cơ điện tử 3 - K47
Đoạn chương trình này sẽ ghi dữ liệu trong thanh ghi EEDR vào ô nhớ trên
bộ nhớ EEPROM có địa chỉ bằng giá trị trong EEAR.
3. Bit0: EERE: EEPROM Read Enable (Cho phép đọc EEPROM). Để đọc
dữ liệu EEPROM, nạp EEAR với địa chỉ đúng (phù hợp), đặt EERE
thành “1”, và sau đó xoá EERE thành “0”. Thao tác này sẽ chuyển dữ
liệu vào EEDR. Trước khi bắt đầu chu trình đọc, chương trình sẽ kiểm
tra (poll) cờ EEWE cho đến khi EEWE bằng “0” để đảm bảo là không
một chu trình ghi nào được tiến hành.
7 6 5 4 3 2 1 0
Giá trị 0 0 0 0 0 0 0 0
khởi tạo
49
Đồ án tốt nghiệp Cơ điện tử 3 - K47
50
Đồ án tốt nghiệp Cơ điện tử 3 - K47
1. Bit7: SPIF. Cờ ngắt SPI. Khi một cuộc truyền nối tiếp SPI được hoàn
thành và bit SPIE trên thanh ghi SPCR được đặt thành “1”. Còn các ngắt
toàn cục được cho phép, thì cờ SPIF được đặt thành “1”. Cờ SPIF bị bộ
xử lý hoá thành “0” khi ngắt tương ứng được thực thi. Bit SPIF cũng có
thể bị xoá bằng cách đọc thanh ghi trạng thái SPI khi cờ SPIF bằng “1” và
sau đó truy nhập thanh ghi dữ liệu SPI.
7 6 5 4 3 2 1 0
Giá trị 0 0 0 0 0 0 0 0
khởi tạo
7 6 5 4 3 2 1 0
Giá trị 0 0 0 0 0 0 0 0
khởi tạo
2. Bit6: WCOL. Write Collision Flag (cờ xung đột khi ghi). Bit này được
đặt nếu thanh ghi dữ liệu SPI (SPDR) được ghi trong khoảng thời gian
diễn ra trong một cuộc truyền dữ liệu. Bit này bị xoá, cùng với cờ SPIF,
thành “0” bởi trước tiên là việc đọc thanh ghi trạng thái SPI khi WCOL
được đặt thành “1” và sau đó truy nhập thanh ghi dữ liệu SPI (xem hình
3-23).
Thanh ghi điều khiển SPI.
1. Bit7: SPIE. Cho phép ngắt SPI. Bit này làm cho một ngắt SPI phải được
tạo ra nếu bit SPIF trong thanh ghi SPSR được đặt và các ngắt toàn cục
được cho phép.
2. Bit6: SPE. Cho phép SPI. Khi bit này được đặt thành “1” thì SPI được
cho phép.
51
Đồ án tốt nghiệp Cơ điện tử 3 - K47
3. Bit5: DORD. Đặt thứ tự dữ liệu. Khi đặt thành “1”. LSB của từ dữ liệu
được truyền trước tiên. Khi bị xoá thành “0”, byte MSB của từ dữ liệu
được truyền trước tiên.
4. Bit4: MSTR. Master/Slave Select. Khi đặt thành “1”, cổng SPI trong chế
độ chủ (master mode) và khi xoá thành “0”, nó là một cổng slave. Nếu
như SS được cấu hình để là lối vào và được đặt xuống mức thấp (LOW),
thì bit MSTR sẽ bị xoá thành “0” và SPIF trong SPSR sẽ được đặt. Người
dùng sẽ phải đặt MSTR thành “1” một lần nữa để bắt đầu (khởi động )
như là master.
5. Bit3: CPOL. Clock Polarity. Khi đặt thành “1”, thì SCK là cao (HIGH)
khi nghỉ (idle: không có công việc xử lý) còn khi bị xoá thành “0”, thì
SCK là thấp (LOW) khi không có công việc cần xử lý.
6. Bit2: CPHA. Clock Phase. Quy định pha kích hoạt của xung nhịp.
7. Bit1-0: SPR1, SPR0.SPI Clock Rate Select. Các bit này quy định tốc độ
đồng hồ SCK khi được đặt cấu hình như là master, phù hợp với nội dung
của bảng 3-9. Nếu như vi mạch là một slave, các bit này không ảnh hưởng
lên tần số SCK (xem hình 3-24).
0 0 Fclk/4
0 1 Fclk/16
1 0 Fclk/64
1 1 Fclk/128
Bảng 3-9: Tần số SCK, Fclk là tần số dao động của bộ xử lý.
52
Đồ án tốt nghiệp Cơ điện tử 3 - K47
7 6 5 4 3 2 1 0
Địa chỉ SPIE SPE DORD MSTR CPOL CPHA SPR1 SPR0
I/O-$34
Giá trị 0 0 0 0 0 0 0 0
khởi tạo
7 6 5 4 3 2 1 0
Giá trị 0 0 0 0 0 0 0 0
khởi tạo
1. Bit7: RXC: UART Receive Complete. Khi bit này được đặt thành “1” có
nghĩa là UART đã nhận một byte dữ liệu từ thanh ghi dịch bộ nhận. RXC
được xoá bằng việc đọc UDR.
2. Bit6: TXC: UART Transmit Complete. Bit này được đặt thành “1” khi một
byte dữ liệu đầy đủ bao gồm bit stop được dịch chuyển ra từ thanh ghi dịch
bộ truyền và không có dữ liệu mới được ghi vào UDR. TXC bị xoá thành
“0” bằng phần cứng bằng cách thực thi trình xử lý (handler) ngắt tương ứng
hoặc bằng phần mềm bằng cách ghi giá trị “1” vào bit TXC.
3. Bit5: UDRE: UART Data Register Empty, bit này được đặt thành “1”, khi
dữ liệu đã ghi vào UDR được truyền đến thanh ghi dịch bộ truyền. Bit này
chỉ cho thấy UDR đã sẵn sàng để nhận một byte mới.
4. Bit4: FE: Framing Error (lỗi khung truyền). Bit này được đặt thành “1”, khi
bit stop được đưa đến lại có giá trị bằng “0” (lẽ ra bit này phải bằng “1”).
Bit lỗi FE bị xoá khi bit stop được đưa đến có giá trị bằng “1”.
5. Bit 3: OR:Overrung Error (lỗi tràn). Bit này được đặt thành “1”, khi một dữ
liệu trong UDR không đươợcđọc trước khi một dữ liệu mới được dịch
chuyển vào UDR từ thanh ghi dịch bộ nhận UART (xem hình 3-26).
53
Đồ án tốt nghiệp Cơ điện tử 3 - K47
7 6 5 4 3 2 1 0
Giá trị 0 0 0 0 0 0 0 0
khởi tạo
Hình 3-26: Thanh ghi trạng thái UART.
2. Bit 6: TXCIE: TX Complete Interrupt Enable. Bit này khi đặt thành “1” sẽ
gây ra ngắt Transmit Complete Interrupt khi bit TxC trong USR được đặt
thành “1” và các ngắt toàn cục được cho phép.
3. Bit 5: UDRIE: UART Data Register Empty Interrupt Enable. Khi bit này
được đặt thành “1” và bit UDRE trong USR đặt thành “1”, thì ngắt UDRE
(Data Register Empty Interrupt) sẽ được thực thi khi các ngắt toàn cục được
cho phép.
4. Bit 4: RXEN: Receiver Enable (cho phép bộ nhận). Khi bit này được đặt
thành “1”, thì bộ nhận UART được cho phép.
5. Bit 3: TXEN: Transmiter Enable (cho phép bộ truyền). Bit này khi đặt
thành “1” sẽ cho phép bộ truyền. Khi cấm bộ truyền bằng cách ghi một giá
trị “0” vào bit này, thì bộ truyền sẽ bị cấm nhưng không phải trước khi bất
kỳ ký tự nào trong thanh ghi dịch bộ truyền hoặc thanh ghi dịch UDR được
đẩy ra ngoài.
6. Bit2: CHR9: 9 bit Characters (các ký tự 9 bit). Khi bit này được đặt thành
“1”, nghĩa là các ký tự được truyền và nhận có độ dài 9 bit bên cạnh bit
start và bit stop. Bit thứ 9 có thể được sử dụng như là bit stop pphụ thêm
hoặc bit parity.
7. Bit1: RXB8: Receive Data Bit 8. Khi CHR9 được đặt thành “1”, thì RXB8
là bit thứ 9 của ký tự đã nhận.
8. Bit 0: TXB8: Transmit Data Bit 8. Khi CHR9 được đặt thành “1”, thì TXB8
là bit dữ liệu thứ 9 trong ký tự được truyền, (xem hình 3 – 27)
54
Đồ án tốt nghiệp Cơ điện tử 3 - K47
7 6 5 4 3 2 1 0
Địa chỉ RXCIE TXCIE UDRIE RXEN TXEN CHR9 RXB8 TXB8
I/O-$0A
Giá trị 0 0 0 0 0 0 0 0
khởi tạo
7 6 5 4 3 2 1 0
Giá trị 0 0 0 0 0 0 0 0
khởi tạo
55
Đồ án tốt nghiệp Cơ điện tử 3 - K47
0 1 Dự trữ
56
Đồ án tốt nghiệp Cơ điện tử 3 - K47
Thanh ghi EECR có các bit điều khiển cần thiết cho việc đọc và việc ghi vào
bộ nhớ EEPROM. Việc ghi vào bộ nhớ EEPROM không đơn giản như, chẳng hạn,
vào bộ nhớ SRAM. Thời gian truy cập để ghi đối với bộ nhớ EEPROM trong các
bộ vi điều khiển AVR nằm trong khoảng 2,5 đến 4ms, tuỳ thuộc vào điện áp nguồn
nuôi. Bit điều khiển EEWE trong thanh ghi EECR cho phép người dùng phát hiện
khi một lượng dữ liệu được yêu cầu trước đó đã được ghi vào bộ nhớ EEPROM và
liệu một byte mới có thể được ghi.
Đoạn các dòng lệnh sau đây minh họa cho thấy một byte dữ liệu có thể được
đọc từ bộ nhớ EEPROM như thế nào.
7 6 5 4 3 2 1 0
Giá trị 0 0 0 0 0 0 0 0
khởi tạo
Hình 3-29: Thanh ghi trạng thái và điều khiển của bộ so sánh analog
57
Đồ án tốt nghiệp Cơ điện tử 3 - K47
------------------------------EEPROM---------------------------
eep_notrdy:
sbic EECR, 1 ; skip if EEWE clear
rjmp eep_notrdy ; waits until EEPROM ready
write:
out EEAR, ZL ; output address
out EEDR, write_data
cli ; disable all interrupts
sbi EECR, 1 ; set EEWE ( write – enable )
sbi EECR, 2 ; set EENNE ( master write – enable )
sei ; enable all interrupts
-----------------------------EEPROM data write end -------------------------
Có sự sai lạc dữ liệu trong EEPROM, chủ yếu do điện áp nguồn nuôi qua
thấp so với mức để bộ nhớ EEPROM có thể hoạt động bình thường. Theo nhà
cung cấp Atmel, giải pháp để tránh sai lạc dữ liệu đối với bộ nhớ EEPROM trên
chip cũng như việc tránh sai lạc dữ liệu trong EEPROM đối với các vi mạch
không có EEPROM trên chip.
Các biện pháp để tránh sai lạc dữ liệu đối với EEPROM có thể kể ra như sau:
1. Sử dụng mạch phát hiện brown-out ( BOD) để phát hiện các chu kỳ của
thời gian khi điện áp nguồn nuôi thấp và yêu cầu reset trong những
khoảng thời gian như vậy. Tiến hành Reset hệ thống là cách tốt hơn để
tiếp tục tiến hành mà vẫn có khả năng có thể xảy ra sai lạc dữ liệu trong
EEPROM.
2. Tránh ghi vào bộ nhớ EEPROM trong thời gian điện áp nguồn nuôi bị
giảm thấp. Giải pháp này nói ra thì dễ hơn làm vì khó mà biết được đó
là thời điểm nào.
3. Không nên sử dụng bộ nhớ EEPROM một cách lạm dụng. Nên hiểu rõ
đây là một giải pháp chỉ được sử dụng khi thực sự có yêu cầu. Tuy
nhiên, nên lưu ý là các thông báo về sai lạch dữ liệu trong EEPROM ở
địa chỉ $00 đã được nhắc tới, nên cần chú ý tránh sử dụng địa chỉ $00
của bộ nhớ EEPROM.
58
Đồ án tốt nghiệp Cơ điện tử 3 - K47
59
Đồ án tốt nghiệp Cơ điện tử 3 - K47
Hình 3-30: Mô tả chi tiết một trong các bit cổng (PORTD4)
Ngược lại, nếu một giá trị “0” được ghi vào bit cổng ở địa chỉ PORTx, thì trạng
thái pull-up được loại bỏ và chân lối vào rời bỏ trạng thái thả nổi chuyển sang
trạng thái trở kháng cao.
; sử dụng lệnh IN để đọc từ các cổng
LDI R18, 0b00000000
OUT DDRB, R18 ; làm cho tất cả các bit thành bit lối vào ở PORTB
IN R18, PINB ; đọc các chân trên cổng PORTB, R18 có kết quả xem hình
3-30.
60
Đồ án tốt nghiệp Cơ điện tử 3 - K47
61
Đồ án tốt nghiệp Cơ điện tử 3 - K47
Hình 3-31: kết nối bộ nhớ SRAM ngoài với bộ điều khiển AVR
62
Đồ án tốt nghiệp Cơ điện tử 3 - K47
Hình 3-32: Chu trình truy nhập SRAM ngoài và bộ điều khiển AVR không có các trạng
thái chờ.
Hình 3-33: Chu trình truy nhập SRAM ngoài và bộ điều khiển AVR có các trạng thái chờ
bổ xung.
63
Đồ án tốt nghiệp Cơ điện tử 3 - K47
Sơ đồ khối của bộ timer/counter0 là 8 bit được mình hoạ trên hình 3-35. Bộ
timer/counter1 8 bit có thể lựa chọn nguồn tín hiệu đồng hồ từ CK, được chia từ
CK. hoặc một chân bên ngoài.Ngoài ra nó có thể được làm ngừng bằng cách sử
dụng các bit điều khiển trong thanh ghi điều khiển timer/counter0 TCCR0
Cờ trạng thái tràn (overflow) được tìm thấy trong thanh ghi cờ ngắt bộ
timer/counter TIFR. Các tín hiệu điều khiển được tìm thấy trong thanh ghi điều
khiển bộ time/counter0 TCCR0
Hình 3-34: Một mạch chia tần số đồng hồ dùng cho Timer0 cũng như Timer1
Việc đặt cho phép/cấm ngắt đối với Timer/Counter1 được tìm thấy trong
thanh ghi che ngắt Timer/Counter TIMSK \. Khi Timer/Counter1 được giữ nhip từ
bên ngoài, tín hiệu bên ngoài được đồng bộ với tần số của bộ dao động của CPU.
Để đảm bảo lấy mẫu chính xác đối với tín hiệu giữ nhịp bên ngoài, thời gian cực
tiểu giữa 2 lần xảy ra sự chuyển mức tin hiệu đồng hồ ngoài ít nhất cũng phải bằng
một chu kỳ xung đồng hồ bên trong CPU. Tín hiệu giữ nhịp bên ngoài được lấy
mẫu theo sườn dương (dốc lên ) bằng xung đồng hồ bên trong CPU.
Bộ Timer/Counter0 8 bit thể hiện cả độ phân giải cao lẫn dộ chính xác cao và luôn
ưu tiên số chia tần số thấp hơn (xem hình 3-36)
64
Đồ án tốt nghiệp Cơ điện tử 3 - K47
65
Đồ án tốt nghiệp Cơ điện tử 3 - K47
+ Một ký tự mói đã được ghi vào UDR sau khi Bit stop (bit dừng) từ ký tự
trước đó đã được dịch chuyển ra. Thanh ghi dịch chuyển ra được nạp
ngay lập tức
+Một ký tự mới đã được ghi vào UDR trước ghi Bit stop từ ký tự trước đã
được dịch đi. Thanh ghi dịch được nạp khi Bit stop của ký tự đang được
truyền đã được dịch chuyển ra
Nếu thanh ghi dịch bộ truyền 10 (11) bit đang trống thì dữ liệu được truyền từ
UDR đến thanh ghi dịch. Ở thời điểm này bit UDRE (UART data register empty)
66
Đồ án tốt nghiệp Cơ điện tử 3 - K47
trong thanh ghi trạng thái UART, USR được đặt. Khí bit này đặt thành 1 bộ UART
dẵn sàng nhận ký tự tiếp theo. Vào cùng một thời điểm, khi dữ liệu được truyền từ
UDR đến thanh ghi dịch bộ truyền 10 (11) Bit, Bit 0 của thanh ghi dịch bị xoá
(start bit) và bit 9 hoặc 10 được đặt (stop bit).
67
Đồ án tốt nghiệp Cơ điện tử 3 - K47
Khi không có dữ liệu mới cần được ghi, và bit stop đã có mặt trên TXD đối với
mỗi một chiều dài bit, cờ TX complete, TXC, trong thanh ghi USR được đặt thành
1. Bit TXEN trên thanh ghi VCR cho phép bộ truyền UART được đặt thành 1. Khi
bit này bị xoá thành 0 thì chân PDI có thể được sử dụng cho thao tác I/0 chung.
Khi đặt thành 1 bộ truyền trong UART sẽ được nối đến chân PD1, chân này bắt
buộc trở thành một chân lối ra không đếm xỉa đến việc đặt của bit 1 trong DDRD.
Hình 3-38 minh hoạ sơ đồ khối của phần bộ phận trong UART. Khối logic
front – end cuẩ bộ nhận lấy mẫu tín hiệu trên chân RXD ở tần số bằng 16 lần tần
số tốc độ baud. Khi đường dẫn không có tín hiệu truyền, một mẫu đơn lẻ của giá
trị logic 0 sẽ được dịch như sườn âm (dốc xuống) của một bit start, và dãy phát
hiện bit start được khởi tạo.
Hãy xem như mẫu 1 là mẫu 0 đầu tiên. Tiếp theo là sự chuyển mức từ 1 sang 0,
Bộ phận lấy mẫu chân RXD ở các mẫu 8, 9 và 10 .Nếu như 2 hoặc nhiều hơn
68
Đồ án tốt nghiệp Cơ điện tử 3 - K47
trong 3 mẫu đó được tìm thấy và có giá trị logic bằng 1, thì bit start bị loại bỏ như
một xung nhiễu và bộ phận bắt đầu theo dõi sự chuyển mức kế tiếp từ 1 sang 0.
Tuy nhiên nếu một bit start hợp lệ được phát hiện, thì việc lấy mẫu các bit dữ liệu
kế tiếp bit start hợp lệ được thực hiện. Các bit này cũng được lấy mẫu ở các mẫu
8, 9 hoặc 10. Giá trị logic được tìm thấy it nhất 2 trong số 3 mẫu được lấy làm giá
trị bit. Tất cả các bit đựoc dịch chuyển vào thanh ghi dịch bộ truyền giống như
chúng đã được lấy mẫu.
Khi bit stop được đưa vào bộ phận nhận, thì đa số trong số 3 mẫu cần phải
bằng 1 để tiếp nhận bit stop. Nếu như 2 mẫu hoặc nhiều hơn là các giá trị logic 0,
thì cờ lỗi khung truyền (FE) trong thanh ghi trạng thái UART (USR) được đặt
thành 1. Trước khi đọc thanh ghi UDR, người dùng sẽ phải luôn luôn kiểm tra bit
lỗi FE để phát hiện các lỗi khung truyền. Tuỳ thuộc vào việc có hay không một bit
stop hợp lệ được phát hiện ở cuối cảu một chu kỳ tiếp nhận, dữ liệu được truyền
đến UR và cờ RXC trong thanh ghi USR được đặt. UDR trên thực ttế là hai thanh
ghi tách biệt về mặt vật lý, một dùng cho dữ liệu được truyền, một dùng cho dữ
liệu được nhận. Khi UDR được đọc, thanh ghi dữ liệu nhận (Receive Data
Register) được truy nhập, và khi UDR được ghi, thanh ghi dữ liệu truyền
(Transmit Data Register) được truy nhập. Nếu như từ dữ liệu 9 bit được lựa chọn
(bit CHR9 trong thanh ghi điều khiển UART, OCR được đặt thành 1), bit RXB8
trong thanh ghi UCR được nạp bằng bit 9 trong thanh ghi dịch truyền khi dữ liệu
được truyền tới UDR. Nếu như sau khi đã nhận được một ký tự, thanh ghi UDR
không được đọc kể từ lần nhận cuối cùng, cờ tràn OverRun (OR) trong thanh ghi
UCR được đặt thành “1”. Điều này có nghĩa là byte dữ liệu cuối cùng đã dịch
chuyển vào trong thanh ghi dịch sẽ không được truyền đến UDR và bị thất lạc. Bit
OR được đệm và được cập nhật khi byte dữ liệu hợp lệ trong thanh ghi UDR được
đọc.
Như vậy người dùng luôn luôn phải kiểm tra bit OR (HOẶC) trước tiên, sau
khi đọc thanh ghi UDR, để phát hiện bất kỳ lỗi tràn nào xuất hiện. Khi bit RXEN
trong thanh ghi UCR bị xóa thành “0”, thì bộ nhận bị cấm. Điều đó có nghĩa là
chân PD0 có thể được sử dụng làm một chân I/O chung.
Khi RXEN được đặt thành “1”, bộ nhận UART sẽ được nối với PD0, chân này
bị buộc phải trở thành một chân lối vào không đếm xỉa gì đến việc đặt của bit
DDD0 trong DDRD. Khi PD0 bị bắt buộc trở thành lối vào bởi UART, bit
PORTD0 có thể vẫn được sử dụng để điều khiển điện trở pull-up trên chân. Khi bit
CHR9 trong thanh ghi UCRđược đặt, các ký tự được truyền và được nhận có độ
dài 9 bit, công them bit start và bit stop. Bit dữ liệu thứ 9 cần được truyền là bit
TXB8 trong thanh ghi UCR. Bit này cần phải được đặt thành ghía trị mong muốn
trước khi một cuộc truyền được khởi tạo bằng việc ghi vào thanh ghi UDR. Bit thứ
9 nhận được là bit RXB8 trong thanh ghi UCR.
69
Đồ án tốt nghiệp Cơ điện tử 3 - K47
70
Đồ án tốt nghiệp Cơ điện tử 3 - K47
khác, ký hiệu là RI, thanh ghi này cần phải không được phục vụ cho bất kỳ một
mục đích nào khác, và trước khi ISR thực thi lệnh RETI, RI được sao chép ngược
trở lại SREG. Một cách khác để lưu trữ SREG là lưu nó trên ngăn xếp (bằng cách
sử dụng lệnh PUSH SREG) và su đó trước khi thực thi lệnh RETI, giá trị SREG
được sao chép ngược trở lại từ ngăn xếp (bằng cách sử dụng lệnh POP SREG).
Phương pháp này chỉ có thể áp dụng cho những bộ xử lý có ngăn xếp tổ chức bằng
phần mềm. Loại AT90S1200, chẳng hạn, không thể áp dụng phương thức này để
lưu trữ nội dung thanh ghi SREG.
Hình 3-39 minh họa chương trình chính được ngắt như thế nào. Cũng có khả
năng ngắt một ISR nếu một ngắt khác xuất hiện và cờ ngắt toàn cục đã được đặt
thành “1” bên trong ISR dùng cho ngắt 1 (bằng cách sử dụng lệnh SEI). Trong
trường hợp này, ngắt ISR1 bị ngắt và ISR khác, ISR2, thực thi. Việc thực thi ISR1
lại tiếp tục sau khi ISR2 kết thúc, và sau khi thực thi xong ISR1, chương trình
chính lại tiếp tục thực thi.
Binh thường thì sau khi một ngắt xuất hiện và đang được phục vụ bởi thanh ghi
ISR tương ứng, các ngắt toàn cục tự động bị cấm (tương đương với việc thực thi
lệnh CLI); tuy nhiên, vẫn có khả năng cho phép các ngắt khi một ISR đang thực
thi bằng việc thực thi lệnh SEI trong ISR. Nếu như ngắt khác xuất hiện trong
khoảng thời gian khi một ISR đã đang hoạt động, thì nó sẽ được phục vụ bằng việc
ngắt đoạn chương trình ISR ban đầu.
Tính ưn tiên của các ngắt được quy định bởi cách gán các vectơ ngắt. Một
vectơ ngắt ở địa chỉ thấp hơn trong bộ nhớ chương trình có mức độ ưu tiên cao
hơn. Mức độ ưu tiên của ngắt được sử dụng để quyết định xem ngắt nào sẽ được
phục vụ trước tiên nếu như có nhiều ngắt đang chờ xử lý ở bất kỳ thời điểm nào.
Tinh huống này có thể xuất hiện khi ngắt toàn cục đã bị cấm trong một hệ thống để
cho phép một số phần cấp thiết (critical) của chương trình được thực thi. Sau khi
tình huống gây khẩn cấp đã kết thúc, chương trình cho phép (enable) các ngắt toàn
cục. Bây giờ, khi phần cấp thiết đã được thực thi, hai ngắt - một ngắt Interrupt0
ngoài và ngắt UART Rx Complete - đều đã xất hiện. Khi đó, do ngắt Interrrupt0
ngoài có tính ưu việt cao hơn các ngắt UART nên ISR tương ứng với ngắt
Interrupt0 ngoài sẽ được thực thi, và tiếp đó, thanh ghi ISR dùng cho ngắt UART
sẽ được thực thi.
71
Đồ án tốt nghiệp Cơ điện tử 3 - K47
72
Đồ án tốt nghiệp Cơ điện tử 3 - K47
Một điều rất đáng quan tâm khi sử dụng các ngắt là bộ xử lý có thể đáp ứng
một ngắt nhanh đến mức nào. Câu trả lời phụ thuộc rất nhiều vào kiến trúc của bộ
xử lý. Đối với các bộ điều khiển AVR, việc thực thi ngắt đáp ứng đối với tất cả các
ngắt AVR đã được cho phép ít nhất là 4 chu kỳ đồng hồ. Bốn chu kỳ đồng hồ sau
khi cờ ngắt đã được đặt, chương trình vectơ địa chỉ dùng cho đoạn chương trình
xử lý ngắt hiện tại được thực thi. Trong khoảng thời gian 4 chu kỳ này, bộ đếm
chương trình (2 byte) được đẩy lên ngăn xếp, và con trỏ ngăn xếp bị giảm đi 2.
Vectơ thường là một lệnh nhẩy tương đối đến đoạn chương trình ngắt, và thao tác
nhảy này chiếm 2 chu kỳ đồng hồ. Nếu như một ngắt xuất hiện khi đang thực thi
một lệnh chiếm nhiều chu kỳ (multil cycle), lệnh này được hoàn thành trước khi
ngắt được phục vụ. Việc quay trở lại từ một đoạn chương trình xử lý ngắt chiếm 4
chu kỳ đồng hồ. Trong 4 chu kỳ đồng hồ này bộ đếm chương trình (2 byte) được
đẩy ngược trở lại từ ngăn xếp, con trỏ ngăn xếp được tăng thêm 2 và cờ I trong
SREG được đặt. Khi vi điều khiển AVR thoát ra khỏi một ngắt, nó sẽ luôn trở về
với chương trình chính và chấp nhận lệnh kế tiếp trước khi bất kỳ ngắt đang chờ
xử lý được phục vụ.
73
Đồ án tốt nghiệp Cơ điện tử 3 - K47
Bộ so sánh analog được điều khiển qua thanh ghi điều khiển và trạng thái bộ so
sánh analog, thường được viết tắt là ACSG, ở địa chỉ $08 trong vùng địa chỉ vào/ra
hoặc ở địa chỉ $28 trong vùng địa chỉ bộ nhớ dữ liệu.
Sự xắp xếp chân lối vào bộ so sánh analog ở các vi điều khiển khác nhau được
liệt kê trong bảng 3-12.
Bảng 3-12: Sự xắp xếp các chân lối vào của bộ so sánh analog
74
Đồ án tốt nghiệp Cơ điện tử 3 - K47
Hình 3-41: Sơ đồ khối của bộ biến đổi ADC 10 bit với 8 lối vào.
75
Đồ án tốt nghiệp Cơ điện tử 3 - K47
Thanh ghi lựa chọn bộ dồn kênh ADC: ADMUX $07 ($27)
Thanh ghi trạng thái và điều khiển ADC: ADCSR $06 ($26)
Hình 3-42: Các thanh ghi điều khiển của bộ biến đổi ADC
Bộ biến đổi ADC được điều khiển qua 4 thanh ghi ADMUX, ADCSR, ADCH và
ADCL trong vùng địa chỉ vào/ra (xem hình 3-43). Bằng thanh ghi ADMUX một trong 8
kênh được lựa chọn để biến đổi tương tự/số. Bộ biến đổi ADC có thể hoạt động trong 2
chế độ:
- Quá trình biến đổi được người dùng khởi động.
- Quá trình biến đổi diễn ra liên tục.
Bảng 3-13: Sắp xếp các chân lối vào của bộ biến đổi ADC.
Việc kết thúc quá trình biến đổi, nghĩa là thời điểm mà một tín hiệu analog
được số hoá và sẵn sàng chờ xử lý tiếp tục, sẽ được báo hiệu qua một số cờ trong
thanh ghi trạng thái ADC (ADCSR). Trong thanh ghi ADCSR này, người dùng có
thể lựa chọn một trong hai chế độ. Kết quả của quá trình biến đổi A/D được đặt ở
các thanh ghi ADCH (bit 8 và 9) và ADCL (bit 0 đến 7).
Sự sắp xếp các chân lối vào của bộ biến đổi ADC được liệt kê trong bảng 3-13.
76
Đồ án tốt nghiệp Cơ điện tử 3 - K47
Mạch định thời watchdog timer được giữ nhịp từ một bộ dao động RC riêng biệt trên
chip. Bằng cách điều khiển mạch chia tần số watchdog timer, khoảng thời gian reset
mạch watchdog có thể được hiểu chính như minh hoạ trong bảng 3-8 (trang 64). Các
khoảng reset mạch watchdog cũng phụ thuộc vào điện áp nguồn nuôi.
Mạch watchdog đặt lại lệnh. WDR, reset mạch watchdog timer. Tám chu kỳ chu trình
đồng hồ khác nhau có thể được lựa chọn để xác định chu kỳ đặt lại (reset). Nếu như
khoảng thời gian reset kết thúc mà không có sự xuất hiện các thao tác reset watchdog
khác, thì bộ điều khiển AVR được đặt lại và khởi động quá trình thực hiện chương trình
từ vectơ reset. Để tránh việc cấm không được định trước của mạch watchdog, một dãy
lệnh ngắt mạch (turn-off) đặc biệt cần phải được tieps theo khi mạch watchdog bị cấm,
như được minh hoạ trong phần mô tả về mạch watchdog, phần về thanh ghi điều khiển bộ
định thời (Timer Control Register).
77
Đồ án tốt nghiệp Cơ điện tử 3 - K47
78
Đồ án tốt nghiệp Cơ điện tử 3 - K47
Hình 3-44: Dòng điện tiêu thụ bởi bộ xử lý Tinny22 trong chế độ hoạt động đang hoạt
động bình thường và chế độ tiết kiệm năng lượng.
79
Đồ án tốt nghiệp Cơ điện tử 3 - K47
CHƯƠNG 3.
CÁC LINH KIỆN SỬ DỤNG TRONG MẠCH
3.1. C1815.
Tran C1815 là một khóa đóng mở thông thường ứng với mạch công suất
nhỏ gồm 3 cực C,B,E ( collector,base,emitter).. Khi có tín hiệu điều khiển vào cực
B thì sẽ có dòng chảy từ C->E. Thông số điện áp và dòng điện khi nối mạch được
tra theo bảng dưới.
Collector
Base Emitter
3.2. A1015.
Tran A1015 là một khóa đóng mở thông thường ứng với mạch công suất
nhỏ gồm 3 cực C,B,E( collector,base,emitter). Khi có tín hiệu điều khiển vào cực
80
Đồ án tốt nghiệp Cơ điện tử 3 - K47
B thì sẽ có dòng chảy từ E->C. Thông số điện áp và dòng điện khi nối mạch được
3.3. IC 74HC14.
* Giới thiệu IC74HC14:
74HC14 là IC dùng trong việc chuyển đổi mức logic với tốc độ cao được
sản xuất trên công nghệ CMOS IC hoạt động tương tự như LSTTL trong khi vẫn
duy trì được sự tiêu tán công suất thấp .
74HC14 giống như nhiều đường nhận tín hiệu đầu vào, nó sẽ nhận các tín
hiệu đầu vào và có trễ tại đầu ra.
Tất cả tín hiệu đầu vào của 74HC14 phải được bảo vệ bởi mạch chống sự
xả tĩnh hoặc áp vượt quá qui định
* Các thuộc tính cơ bản 74HC14:
- Tốc độ cao……………. tpd = 11ns (typ.) at Vcc=5v
- Tiêu tán công suất thấp
- Đầu ra có thể kích được 10 tải TTL
- Có trở kháng đầu ra đối xứng : IOH = IOL = 4mA (min)
- Khoảng hoạt động của áp rộng từ 2v-6v
- Giảm tạp nhiễu cao
- Chân và chức năng tương thích với 74LS14
* Cấu trúc chân của 74HC14: * Bảng giá trị :
81
Đồ án tốt nghiệp Cơ điện tử 3 - K47
Đối với động cơ bước dùng dòng chỉ 0,5 A trở xuống thì vi điều khiển có
thể điều khiển trực tiếp qua con phân kênh 8243 ,nhưng đối với mạch điều khiển
động cơ bước dùng dòng khoảng từ 0,5 đến 20A thì vi điều khiển không thể điều
khiển trực tiếp mà nó phải điều khiển gián tiếp qua cách ly quang (như hình vẽ ).
Nó cách ly hai nguồn hoàn toàn đó là nguồn bên vi điều khiển và nguồn bên cung
cấp cho động cơ vì vậy mà vi điều khiển vẫn hoạt động bình thường mà không bị
ảnh hưởng của nguồn cấp cho động cơ.
82
Đồ án tốt nghiệp Cơ điện tử 3 - K47
Cấu tạo như 1 rơle thông thường khi cung câp điện cho cuộn hút thi role sẽ
đảo tiếp điểm :bình thường 3 tiếp xúc với 4 , 6 tiếp xúc với 5 ,khi cấp điện cho
cuộn hút 1-8 thi 3 tiếp xúc với 2, 6 tiếp xúc với 7
3.6. MAX232.
Vì tín hiệu cổng COM thường ở mức +12V,-12V không tương thích với
điện áp của mạch điều khiển bên ngoài là +5V nên ta phảI chọn vi mạch chuyển
đổi điện áp cho phù hợp , ta chọn vi mạch có sử dụng Max 232
83
Đồ án tốt nghiệp Cơ điện tử 3 - K47
3.7. MAX485.
4 6
D I A
VC C
7
3 B
D E
G N D
2 1
R E R O
< V a lu e >
5
84
Đồ án tốt nghiệp Cơ điện tử 3 - K47
3.8. ATMEGA16
- Có 16 K (Flash).
- 512 B( EEPROM).
- 1 K (SRAM).
- Loại này 40 chân trong đó có 32 chân vào ra dữ liệu chia làm 4 port
A,B,C,D. các chân này đều có chế độ pull_up resitors.
- Giao tiếp ISP .
- Giao diện I2C.
- Có 8 kênh ADC 10 bit .
- Một bộ so sánh analog.
- Có 4 kênh băm xung (PWM).
- 3 bộ timer. bộ timer 0 và 2 ở chế độ 8 bit, bộ timer 1 16 bit.
- Một bộ định thời watchdog.
- Một bộ truyền nhận UART lập trình được.
Cách sử dụng và tính năng các chân khi tính toán thiết kế mạch:
+ Vcc và Gnd 2 chân cấp nguồn cho vi điều khiển hoạt động
+ Reset chân khởi động lại mọi hoạt động của vi diều khiển
+2 chân XTAL1, XTAL2 các chân tạo bộ dao động ngoài cho vi điêù khiển
, các chân này được nối với thạch anh (thường sử dụng loại 4M) , tụ gốm
(thường sử dụng loại 22p).
85
Đồ án tốt nghiệp Cơ điện tử 3 - K47
+ chân Vref chân này thường được nối lên 5v(Vcc) , nhưng khi sử dụng bộ
ADC thì chân này làm điện thế so sánh , khi đó chân này phải cấp cho nó
điện áp cố định , Có thể sử dụng diod zener.
+Chân Avcc chân này bình thường được nối lên Vcc nhưng khi sử dụng bộ
ADC thì chân này được nối qua 1 cuộn cảm lên Vcc với mục đích ổn định
điện áp cho ADC.
+PortA (PA0, PA1, PA2, …, PA7) gồm 8 chân có thể sử dụng làm đầu vào
hoặc ra có trở kéo bên trong lập trình được . Có thể sử dụng cả 8 chân làm
8 kênh đầu vào cho bộ biến đổi ADC 10 bit, khi sử dụng tuỳ vào nhu cầu có
thể chỉ sử dụng 1 hoặc 2 kênh..vv.
+PortB
- Gồm 8 chân có thể sử dụng làm đầu vào hoặc ra (PB0…PB7)
- Các chân PB3->PB7 là các chân được sử dụng trong giao tiếp SPI.
- PB0,PB1 2 chân sử dụng cho bộ timer/ counter 0,1 (input).
- PB2, PB3 còn được sử dụng làm đầu vào cho bộ so sanh analog .
- PB3(OC0) còn được sử dụng làm chân WPM của timer0.
+PortC: Các chân (PC0->PC7) có thể dùng làm đầu vào , ra có trở kéo bên
trong.
+PortD: (các chân PD0->PD7) có thể sử dụng làm đầu vào hoặc ra lập trình
được có trở kéo bên trong.
- PD7(OC2) có thể làm chân WPM của bộ timer2.
- PD5(OC1A) có thể làm chân WPM của bộ timer1.
- PD4(OC1B) có thể làm chân WPM của bộ timer1.
- PD1(TXD)(USART Ouput pin).
- PD0(RXD)(USART Input pin).
2 chân PD1, PD0 dùng để truyền thông nối tiếp máy tinh qua chuẩn RS232.
3.9. ATMEGA88.
86
Đồ án tốt nghiệp Cơ điện tử 3 - K47
87
Đồ án tốt nghiệp Cơ điện tử 3 - K47
Đối với động cơ bước dùng công suất lớn thì ta dùng loại mossfet để điều
khiển cụ thể là dùng loại IRF540 đây là transitor trường NPN có thể chịu được
dòng 20 A nên rất thích hợp cho điều khiển động cơ bước có công suất lớn.
Một số thuộc tính cơ bản của IRF540:
- Chịu dòng:20A
- áp là :200v
- SOA là giới hạn công suất tiêu tán nguồn
- Tốc độ chuyển mạch là Nanosecond
- Đặc tính chuyển đổi là tuyến tính
- Trở kháng đầu vào cao
Sơ đồ nguyên lý của IRF540: Gồm có 3 chân:
- G:Gate đây là cổng dùng để điều khiển đóng mở của IRF540
- D:Drain đây là cực máng của IRF540 dùng để nối tới ngoại vi để điều
khiển
88
Đồ án tốt nghiệp Cơ điện tử 3 - K47
- S:Soure tức là cực nguồn được nối tới nguồn tuỳ vào thiết bị cần áp bao
nhiêu .
3.12. LM 7805.
Hầu hết mạch số và vi xử lý đều dùng nguồn 5v. Vì vậy mà trong các
Project ta phải thiết kế nguồn nuôi 5v riêng. Do nguồn một chiều ta dùng thường
khoảng 9 đến 24v nên việc để tạo ra nguồn 5v nuôi cho mạch số hay vi xử lý ta
thường dùng IC LM7805
Hình ảnh của IC như sau:
LM 7805 được dùng rất đơn giản,chân input sẽ cho phép các nguồn 1 chiều
khác từ (9v-24v) vào còn chân Common dùng để chung đất cho đầu vào và đầu ra
,tức là nối mass. Còn chân output sẽ là đầu ra 5v để nuôi mạch
89
Đồ án tốt nghiệp Cơ điện tử 3 - K47
CHƯƠNG 4.
GIỚI THIỆU MỘT SỐ PHẦN MỀM ĐÃ SỬ DỤNG
Đầu tiên mở phần mềm ORcad phần Capture sau đó cửa sổ xuất hiện:
90
Đồ án tốt nghiệp Cơ điện tử 3 - K47
Khi hộp thoại xuất hiện trong khung name ta chọn tên đề án
Để lấy linh kiện cho mạch nguyên lý ,nhấp chuột vào biểu tượng Place
Part trên thanh công cụ, khi hộp thoại xuất hiện ta tiến hành lấy các linh kiện cần
dùng để thiết kế mạch, ví dụ ta lấy IRF 250 dùng để thiết kế mạch điều khiển động
cơ bước
91
Đồ án tốt nghiệp Cơ điện tử 3 - K47
Nhưng mỗi linh kiện nằm ở các thư viện khác nhau trong Orcad nên ta phải
chọn đúng thư viện trong Orcad thì ta mới tìm thấy linh kiện ,để thêm thư viện ta
ấn vào nút Add Library trong hộp thoại Place Part và đánh dấu toàn bộ thư viện
trong Orrcad để thêm vào cho dễ trong quá trình thiết kế:
92
Đồ án tốt nghiệp Cơ điện tử 3 - K47
Sau khi xong các bước ta dùng chuột nhấc linh kiện ra màn hình Capture để
thiết kế mạch nguyên lý :
Khi lấy xong linh kiện cần thiết kế ta lần lượt nối các chân lại với nhau để
được mạch nguyên lý như mạch nguyên lý
Sau khi vẽ xong mạch nguyên lý ta nhấp chuột vào biểu tượng Creat
nestlist trên thanh công cụ để tạo tập tin có đuôi *.MNL
93
Đồ án tốt nghiệp Cơ điện tử 3 - K47
Sau khi ấn vào nút Apply ECO ta có bảng lựa chọn để chọn chân linh kiện
cho phù hợp với linh kiện thực tế:
94
Đồ án tốt nghiệp Cơ điện tử 3 - K47
Ví dụ đối với điện trở ta chọn như sau trong thư viện Libraries : ta chọn
jumper và dưới Footprints chọn Jumper200
Tiếp tục chọn các linh kiện còn lại cho phù hợp với linh kiện thực tế sau đó
các linh kiện xuất hiện ở màn hình layout .
Sau đó sắp xếp linh kiện cho hợp lý và dùng chế độ tự động của máy hoặc
là vẽ tay nếu cần tối ưu hơn. Dùng chế độ tự động của máy thì sắp xếp xong linh
kiện ta dùng chế độ 2 :
95
Đồ án tốt nghiệp Cơ điện tử 3 - K47
Khi đó các đường mạch sẽ tự động được vẽ, hoặc ta có thể tự vẽ các đường
mạch, kết quả ta sẽ thu được :
96
Đồ án tốt nghiệp Cơ điện tử 3 - K47
97
Đồ án tốt nghiệp Cơ điện tử 3 - K47
98
Đồ án tốt nghiệp Cơ điện tử 3 - K47
99
Đồ án tốt nghiệp Cơ điện tử 3 - K47
1>Workspace
Không gian làm việc bên trái : có 3 lựa chọn
a> ClassView : Đây là phần hiển thị cây các lớp được sử dụng trong chương
trình.
b> Resource View : Các tệp mã nguồn, là phần cơ bản để soạn thảo, xâydựng
các yếu tố chương trình như hộp thoại (Dialog), thanh thực đơn(Menu) ...
c> File View : Đây là phần hiển thị các file *.cpp và *.h được tạo ra.
100
Đồ án tốt nghiệp Cơ điện tử 3 - K47
101
Đồ án tốt nghiệp Cơ điện tử 3 - K47
- Winzard Bar:Đây là thanh công cụ hiển thị lớp đang sử dụng và các hàm
được sử dụng trong lớp đó
- Build minibar:đây là thanh công cụ cho phép thực hiện thao tác biên
dịch và chạy chương trình
102
Đồ án tốt nghiệp Cơ điện tử 3 - K47
4.3. Phần mềm lập trình cho vi điều khiển :CODEVISION AVR.
Đây là phần mềm lập trình cho vi điều khiển AVR được sử dụng trong
mạch thiết kế.Phàn mềm tích hợp phần lựa chọn thiết lâp(khởi tao) ban đầu cho vi
điều khiển: chọn vi điều khiển,chon bộ định thời,……giúp công việc lập trình trở
lên đơn giản hơn
Giao diện phần mềm:
103
Đồ án tốt nghiệp Cơ điện tử 3 - K47
104
Đồ án tốt nghiệp Cơ điện tử 3 - K47
Chọn Project
105
Đồ án tốt nghiệp Cơ điện tử 3 - K47
Nhấn Yes.
106
Đồ án tốt nghiệp Cơ điện tử 3 - K47
Chọn khởi tạo ban đầu cho chương trinh điẻu khiển.
107
Đồ án tốt nghiệp Cơ điện tử 3 - K47
108
Đồ án tốt nghiệp Cơ điện tử 3 - K47
109
Đồ án tốt nghiệp Cơ điện tử 3 - K47
110
Đồ án tốt nghiệp Cơ điện tử 3 - K47
CHƯƠNG 5.
THIẾT KẾ MẠCH ĐIỀU KHIỂN
Máy tính PC
( tính toán số liệu điều khiển )
Cổng COM<->RS485
( trao đổi thông tin hai chiều )
Vi điều khiển
(nhận dữ liệu từ máy tính, tính
toán và truyền cho mạch công
suất )
111
Đồ án tốt nghiệp Cơ điện tử 3 - K47
- Khối giao tiếp COM<->RS485: thực hiện giao tiếp nối tiếp giữa máy
tính và VĐK
- Khối vi điều khiển : nhận dữ liệu điều khiển và tạo tín hiệu điều khiển
cho mạch công suất.
- Mạch công suất : từ tín hiệu điều khiển khuếch đại công suất lên để
động cơ có thể chạy tốt. Mạch có nhiệm vụ đóng mở nguồn cho động
cơ,xylanh.
112
Đồ án tốt nghiệp Cơ điện tử 3 - K47
Mạch sử dụng IC 74HC14 để chuẩn tín hiệu cho data ở mức 0 vá 1 với sườn
xung lên hoặc xuống luôn dựng đứng. IC 74HC14 với mỗi căp in/out được
thiết kế bởi mạch Schmitt trigger. Khi tín hiệu ngõ vào có chuyển tiếp chậm thì
tín hiệu ngõ ra thường bị rung nhiều lần trước khi thay đổi trạng thái logic, còn
tín hiệu ra ở mạch Schmitt trigger thay đổi trạng thái dứt khoát khiến dạng
sóng ra vuông vức. Chính điều này làm giảm ảnh hưởng của nhiễu trong quá
trình truyền thông.
- Để tín hiệu lấy ra giống với tín hiêu ban đầu ta phải sử dụng 2 cổng đảo mắc
nối tiếp: 232RX->485TX và 485RX->232TX
- 2 chân cho phép nhận và truyền data được nối chung vơi nhau 485CTRL và
được nối như sơ đồ dưới. luôn cho phép truyền và nhận data cùng 1 lúc , vì
113
Đồ án tốt nghiệp Cơ điện tử 3 - K47
chân DE luôn được nối lên dương nguồn,con chân RE chỉ khi nào có tin hiệu
nhận data mới cho phép nhận.
-Giữa 2 tín hiệu A,B ta mắc các đi ốt zener để chống dòng ngược.
U 8C
U 8A
232R X 1 2 5 6 485TX
D 2
D 14
74H C 14 74H C 14
D 13 485R X
D IO D E 1 n 4 1 4 8
U 8F
485TX
LED R 1 R 2
13 12
LED 33k R 220
R 5 C 10P
R 10K C AP N P
74H C 14
G N D
VC C
U 8B U 8E
U 8D
232TX 4 3 10 11 485R X
9 8 485C TR L
74H C 14 74H C 14
74H C 14
C 13
G N D
VC C
VC C
R 11
G N D
R S485+ VC C
R 13 R 6 U 1
R R _4K7 C 2 D 3 D 15
2 8 VC C C AP N P R J13
R E VC C D IO D E D IO D E
485R X 1
R D 4
485C TR L 3 6 D 1 1
D E A
G N D
485TX 4 7 G N D G N D 2
D B
D 02C Z 12 D 02C Z 12
SN 75176 D 5 D 16 C O N 2
5
D IO D E D IO D E
G N D
R S485- R 12 G N D
R
2R 1 I N _ J
3T 1 O U T
R 9
1R 1 I N
R 1 IN _ J N O N O
R 8
R 4K7
J12 232R X VC C
R 4K7 J6 J8
JU M PER 3
1 1
U 3
C O N 1 C O N 1
T 1 O U 5T _ J
R 1 IN _ J 1 3 12 232R X
T 1 O U 6T
R 1 IN R 1O U T
R 1 IN 4
8 9
R 2 IN R 2O U T J10 J9
P1
232TX 11 14 T1O U T_J 1 1
1 10 T1 IN T1O U T 7 N O N O
6 T2 IN T2O U T C O N 1 C O N 1
2 T1O U T C 6 10uF 1
C 1 +
7
3
R TS /C TS
R 1 IN C 7 10uF 4
3
C
C
1
2
-
+
D R IL L S
8 R TS /C TS 5
4 C 8 10uF 2 C 2 -
VC C V +
9 6
5 G N D C 9 V -
M A X232
10uF
R S 2 3 2 C o n n e c te r
D 11
R 4
VC C G N D
PO W ER D 6
U 2 R LED
2 1 3 VC C
1 470u IN O U T 1000u C 10 C 11 C 12
114
Đồ án tốt nghiệp Cơ điện tử 3 - K47
Đối với mạch trên chúng ta đã chuyển đổi giao thức truyền nhận RS232
thông thường sang giao thức RS485, đây là 1 chuẩn giao tiếp hổ trợ giao tiếp theo
mạng được sử dụng trong các mạng truyền thông trong công nghiệp.
Đối với mạch chuyển đổi RS232-RS485 này thì 2 chân DI và RO được đưa
vào 2 chân RX và TX của Max232 truyền và nhận tín data từ máy tính.
Còn trong các mạch giao tiếp với Vi điều khiển thì 2 chân này được đưa
vào 2 chân RX và TX của vi điều khiển truyền và nhận dữ liệu với vi điều khiển.
115
Đồ án tốt nghiệp Cơ điện tử 3 - K47
U 8E U 8C
485R X 11 10 5 6 232R X
74H C 14 74H C 14
U 8B U 8D
U 8F
232TX 3 4 9 8 485TX D 2
13 12 485C TR L
74H C 14 D IO D E 1 n 4 1 4 8
74H C 14 U 8A
74H C 14
R 1 R 2
1 2
R 220 C 1
33k C AP N P
74H C 14
G N D
G N D
R S485+
U 111
C 2 D 30 D 40
2 8 VC C C AP N P J4
R E VC C J59 D IO D E D IO D E
485R X 1
485C TR L 3 R 6 2 1 D 109 D 80 1
D E A
G N D
485TX 4 7 G N D G N D 2
D B
JU M PER R 3 D 02C Z 12
SN 75176 R D 50 D 0 2 DC 7Z 0 1 2 C O N 2
5
D IO D E D IO D E
G N D
R S485-
serial _rs232_Rs485
J55
R ST P C 6 (R E S E T ) 1 2 8 P C 5 S te p _ 4
232R X P D 0 (R X D ) 2 2 7 P C 4 S te p _ 3
232TX P D 1 (T X D ) 3 2 6 P C 3 S te p _ 2
J56 D C 2_EN PD 2 4 2 5 P C 2 S te p _ 1
D C 2 _ D IR P D 3 5 2 4 P C 1 D C 1 _ EN
G N D 1 2 PD 4 6 2 3 P C 0 D C 1 _ D IR
VC C 7 2 2 G N D
G N D 8 2 1 A R EF VC C
JU M PER PB6 X t a l _ 91 2 0 A VC C VC C
PB7 X t a l1_ 02 1 9 P B5 S ta tu s_1
D ir e c t _ 5 P D 5 1 1 1 8 P B4 S ta tu s_2
D ir e c t _ 4 P D 6 1 2 1 7 P B3 S ta tu s_3
D ir e c t _ 3 P D 7 1 3 1 6 P B2 S ta tu s_4
D ir e c t _ 2 P B 0 1 4 1 5 P B1 D ir e c t_ 1
A TM E G A 88
Như vậy trong sơ đồ này 2 chân DI và DO của max 485 được đưa vào 2
chân RX và TX của Atmega88-Attiny2313.
Khi muốn giao tiếp nhiều mạng 485 với nhau chúng ta chỉ việc phân địa chỉ
cho từng mạng để thuận tiện cho quá trình truyền nhận Data vì tại 1 thời điểm thì
chỉ có 1 mạng 485 được truyền nếu không các mạng khi cùng truyền sẽ xảy ra
xung đột.
Như vậy khi lập trình cho các địa chỉ (driver) chúng ta phải đặt dịa chỉ rõ ràng
cho từng (driver) nếu như không muốn các dữ liệu bị truyền sai địa chỉ hoặc
truyền nhầm (driver) hoặc không đến được do xung đột.
116
Đồ án tốt nghiệp Cơ điện tử 3 - K47
-Vi điều khiển atmega88 có thể hoạt được nhơ bộ tạo dao động gồm : thạch anh
20M , 2 tụ 22p nối với 2 chân PB6,PB7
-PB1->PB5 được nối với 4 công tác lựa chọn trạng thái.
-PB0,PD5->PD7 nối với tín hiệu công tắc hành trình
-PD0,PD1 giao tiếp với PC.
-PD2,PD3 tạo tín hiệu điều khiển động cơ 2 tương ứng quay thuận và ngịch.
-PC0,PC1 tạo tín hiệu điều khiển động cơ 1 tương ứng quay thuận và ngịch
-PC2->PC5 tạo tín hiệu điều khiển xylanh khí nén.
-PC6 nối với chân reset
b) Sơ đồ nguyên lý mạch vi điều khiển ATTINY2313.
Nhiệm vụ: truyền , nhận data từ vi điều khiển đên PC và ngược lại, xử lý
data để đưa tín hiệu điều khiển đến mạch công suất.
-Vi điều khiển attiny2313 có thể hoạt được nhơ bộ tạo dao động gồm :
thạch anh 20M , 2 tụ 22p nối với 2 chân PA1,PA0
-PB0->PB3 được nối với 4 công tác lựa chọn trạng thái.
-PD2->PD6 nối với tín hiệu công tắc hành trình
-PD0,PD1 giao tiếp với PC.
117
Đồ án tốt nghiệp Cơ điện tử 3 - K47
118
Đồ án tốt nghiệp Cơ điện tử 3 - K47
Mạch công suất được thiết kế nhằm khuếch đại công suất điều khiển. Từ tín
hiệu điều khiển có dòng thấp cỡ mA , áp 5V lên áp 12V hoặc 24V với dòng vài A.
Vì khác biệt mức điện điều khiển và công suất nên ta sử dụng cách ly quang
để cách ly hai phần với nhau.
Cách ly quang sử dụng loại P521, Sơ đồ gồm 4 cách ly quang :
Khóa công suất sử dụng Tran trường IRF 540 với điện trở kéo giữa chân 1
và chân 3 là 10k
Để tạo tín hiệu ổn định cho Tran trường IRF 540 ,trong mạch có sử dụng 2
tran thường C1815 và A1015 được mắc theo kiểu khuếch đại đẩy kéo làm cho góc
mở của Tran trường IRF 540 luôn ổn định. Tạo ra từ trường và tốc độ động cơ
bước luôn có xu hướng ổn định.
119
Đồ án tốt nghiệp Cơ điện tử 3 - K47
Sơ đồ nguyên lý:
120
Đồ án tốt nghiệp Cơ điện tử 3 - K47
Cũng đươc thiết kế giống với động cơ bước nhưng nối thêm RƠ_LE cuộn
hút để có thể đảo chiều đông cơ
121
Đồ án tốt nghiệp Cơ điện tử 3 - K47
122
Đồ án tốt nghiệp Cơ điện tử 3 - K47
123
Đồ án tốt nghiệp Cơ điện tử 3 - K47
CHƯƠNG 6.
LẬP TRÌNH ĐIỀU KHIỂN HỆ THỐNG.
DWORD dwErrorFlags;
COMSTAT ComStat;
BOOL bReadStatus;
DWORD dwBytesRead, dwErrorFlags;
COMSTAT ComStat;
124
Đồ án tốt nghiệp Cơ điện tử 3 - K47
Đây là các hàm hay được sử dụng ngoài ra con các hàm khác nhưng ít sử
dụng hơn.
#if !
defined(AFX_MANH_DADLG_H__19EC97BA_1724_4060_983E_E84F1A3492B
1__INCLUDED_)
#define
AFX_MANH_DADLG_H__19EC97BA_1724_4060_983E_E84F1A3492B1__INC
LUDED_
125
Đồ án tốt nghiệp Cơ điện tử 3 - K47
/////////////////////////////////////////////////////////////////////////////
// CManh_daDlg dialog
//---
#include "Serial_Port/Serial.h"
//--
#include "Gcode_class/Gcode_File.h"
#include "Gcode_class/Gcode_Ext.h"
//#include "Gcode_class/Gcode_Cmd.h"
//--
/*
#include "Grid_Ctrl/GridCtrl.h"
#include "Grid_Ctrl/GridCellCombo.h"
#include "Grid_Ctrl/GridCellNumeric.h"
*/
//--
//--
// Construction
public:
void Command(int stepx, int vx, int stepy, int vy, int stepz, int vz);
//-------------------------
// Gcode_Cmd aaa;
Gcode_File G_File;
bool
m_bCheck,m_bCheckHardware,m_bSend,m_bHardware,m_bReady;
CString m_sStr,m_sRec,m_sHardware;
CString Dirx,stra1;
126
Đồ án tốt nghiệp Cơ điện tử 3 - K47
int sd1,sj;
CString strz;
int si,ti;
// Gcode_File G_File;
Gcode_Ext G_Ext;
int m_Line,m_Cmd;
int m_index,m_type,m_temp;
bool m_bOnData,m_bChayDao,m_bStep;
// bool m_bCheck,m_bCheckHardware,m_bHardware;//,m_bSend
// CString m_sStr,m_sRec,str;
char m_buffer[1024];
int m_buflen;
char m_byterec,fag1,fag2;
//--------------------------------
int m_test;
int s_Index;
int s_Col;
CString m_sOutput;
//void Convert_num(CString m_sInput,CString &m_sOutput);
VARIANT v_data;
bool s_start,s_stop;
//------------
CSerial m_Com;
CString m_sResult;
//---------------------
//-------------------------
int sel;
//---------------------------
CHAR fag_rb;
CString fag_bt1;
char fag_bt;
// flagbt var;
CManh_daDlg(CWnd* pParent = NULL); // standard constructor
127
Đồ án tốt nghiệp Cơ điện tử 3 - K47
// Dialog Data
//{{AFX_DATA(CManh_daDlg)
enum { IDD = IDD_MANH_DA_DIALOG };
CButton m_Open;
CListBox m_listGcode;
CEdit m_Edit2;
CEdit m_Gcode;
CButton m_checkrb;
CButton m_checkbt;
int m_edit1;
CString m_htbt;
CString m_htrb;
CString m_Gcodetext;
CString m_ttbt;
CString m_stringEdit2;
CString m_lsGcode;
// CString m_edit2;
//}}AFX_DATA
// Implementation
protected:
HICON m_hIcon;
128
Đồ án tốt nghiệp Cơ điện tử 3 - K47
};
//{{AFX_INSERT_LOCATION}}
// Microsoft Visual C++ will insert additional declarations immediately before the
previous line.
#endif // !
defined(AFX_MANH_DADLG_H__19EC97BA_1724_4060_983E_E84F1A3492B
1__INCLUDED_)
129
Đồ án tốt nghiệp Cơ điện tử 3 - K47
#define pi 3.1415926535897932
class Gcode_Ext
{
public:
Gcode_Ext();
virtual ~Gcode_Ext();
public:
//- Bien ve vi tri hien tai-------------
doubleCur_X,Cur_Y,Cur_Z; // vi tri hien tai - de tinh so
voi lenh
//- Bien ve tham so tinh toan-----------
int V_chuan; // van toc chuan khi
noi suy - duoc tinh tham chieu
int V_max; // van toc hay
lenh G00 --
doubleRev_X,Rev_Y,Rev_Z; // rev_x = n buoc/ 1 mm
doubleDelta_l; // buoc de dung noi suy -
hai diem noi suy co l = delta_long
//- Bien ve mang du lieu noi suy ---------
int m_NoiSuy; // so nut duoc noi
suy
int
Step_X[1000],Step_Y[1000],V_X[1000],V_Y[1000],Step_Z[1000],V_Z[1000];
public:
//- Ham tinh toan noi suy -------------
130
Đồ án tốt nghiệp Cơ điện tử 3 - K47
};
#endif // !
defined(AFX_GCODE_EXT_H__A15D9DEF_8CF0_4F35_B9D4_52EA87E793C
8__INCLUDED_)
int Gcode_Ext::Ext_Cmd(Gcode_Cmd G_cmd){
double
t_x,t_y,t_z,x0=Cur_X,y0=Cur_Y,z0=Cur_Z,x1,y1,z1,R,a1,a2,C,delta_a,tamx,tamy,
temp;
int i;
//-------------------------
switch(G_cmd.G) {
case 0 :// lenh G00 - khong noi suy ---
m_NoiSuy = 1; // chi co mot lenh
if(G_cmd.x){
Step_X[1] = int(G_cmd.X*Rev_X) -
int(Cur_X*Rev_X); // loai bo sai so tich luy
Cur_X = G_cmd.X;
// update vi tri moi
}else Step_X[1] = 0;
//---------------
if(G_cmd.y){
Step_Y[1] = int(G_cmd.Y*Rev_Y) -
int(Cur_Y*Rev_Y); // loai bo sai so tich luy
Cur_Y = G_cmd.Y;
}else Step_Y[1] = 0;
//---------------
if(G_cmd.z){
Step_Z[1] = int(G_cmd.Z*Rev_Z) -
int(Cur_Z*Rev_Z); // loai bo sai so tich luy
Cur_Z = G_cmd.Z;
}else Step_Z[1] = 0;
131
Đồ án tốt nghiệp Cơ điện tử 3 - K47
//-----------------
//double temp; // khong noi suy - chay to do Max
//temp = sqrt(Step_X[1]*Step_X[1] + Step_Y[1]*Step_Y[1]);
V_X[1] =
V_chuan;//int(abs(Step_X[1])*V_chuan/temp);
V_Y[1] =
V_chuan;//int(abs(Step_Y[1])*V_chuan/temp);
V_Z[1] = V_chuan/5;
break;
case 1 :// Lenh G01 - Noi suy duong thang ---
Delta_l=50;
if(G_cmd.x) t_x = G_cmd.X-Cur_X; else t_x = 0;
if(G_cmd.y) t_y = G_cmd.Y-Cur_Y; else t_y = 0;
if(G_cmd.z) t_z = G_cmd.Z-Cur_Z; else t_z = 0;
for(i=1;i<m_NoiSuy+1; i++){
x1 = x0 + (t_x/m_NoiSuy)*i;
y1 = y0 + (t_y/m_NoiSuy)*i;
z1 = z0 + (t_z/m_NoiSuy)*i;
Calc_ns(m_NoiSuy-i+1,x1,y1,z1);
}
//-------------------------
break;
case 2 :// Lenh G02 - Noi suy cung tron - thuan ---
Delta_l=5;
R = sqrt(G_cmd.I*G_cmd.I + G_cmd.J*G_cmd.J);// ban
kinh cung tron noi suy
a1 = Calc_angle(G_cmd.I,G_cmd.J); // goc
bat dau ns
tamx = Cur_X+G_cmd.I; tamy = Cur_Y+G_cmd.J;
a2 = Calc_angle(tamx-G_cmd.X,tamy-G_cmd.Y); // goc
ket thuc
if(a2>=a1) a2 = a2 - 2*pi;
C = R*(a1-a2); // chu vi cung tron
m_NoiSuy = int(C/Delta_l); // so buoc noi suy
delta_a = (a1-a2)/m_NoiSuy;// delta goc noi suy
for(i=1;i<m_NoiSuy+1; i++){
x1 = tamx + R*cos(a1-delta_a*i);
132
Đồ án tốt nghiệp Cơ điện tử 3 - K47
y1 = tamy + R*sin(a1-delta_a*i);
Calc_ns(m_NoiSuy-i+1,x1,y1,0);
}
break;
case 3 :// Lenh G03 - Noi suy cung tron - nguoc ---
R = sqrt(G_cmd.I*G_cmd.I + G_cmd.J*G_cmd.J);// ban
kinh cung tron noi suy
a1 = Calc_angle(G_cmd.I,G_cmd.J); // goc
bat dau ns
tamx = Cur_X+G_cmd.I; tamy = Cur_Y+G_cmd.J;
a2 = Calc_angle(tamx-G_cmd.X,tamy-G_cmd.Y); // goc
ket thuc
if(a1>=a2) a2 = a2 + 2*pi;
C = R*(a2-a1); // chu vi cung tron
m_NoiSuy = int(C/Delta_l); // so buoc noi suy
delta_a = (a2-a1)/m_NoiSuy;// delta goc noi suy
for(i=1;i<m_NoiSuy+1; i++){
x1 = tamx + R*cos(a1+delta_a*i);
y1 = tamy + R*sin(a1+delta_a*i);
Calc_ns(m_NoiSuy-i+1,x1,y1,0);
}
break;
}
//-----------------------------
return 1;
}
Trong đoạn chương trình trên sẽ phân biệt các lệnh nội suy đường thẳng và
nội suy cung tròn.
133
Đồ án tốt nghiệp Cơ điện tử 3 - K47
temp = sqrt(Step_X[index]*Step_X[index] +
Step_Y[index]*Step_Y[index]+Step_Z[index]*Step_Z[index]);
V_X[index] = int(abs(Step_X[index])*V_chuan/temp);
V_Y[index] = int(abs(Step_Y[index])*V_chuan/temp);
V_Z[index] = int(abs(Step_Z[index])*0.5*V_chuan/temp);
Chương trình nội suy cung tròn chúng ta chia cung tròn thành các đoạn thẳng nhỏ,
số đoạn thẳng phụ thuộc vào bán kính cung tròn :
Delta_l=5;
R = sqrt(G_cmd.I*G_cmd.I + G_cmd.J*G_cmd.J);// ban
kinh cung tron noi suy
a1 = Calc_angle(G_cmd.I,G_cmd.J); // goc
bat dau ns
tamx = Cur_X+G_cmd.I; tamy = Cur_Y+G_cmd.J;
a2 = Calc_angle(tamx-G_cmd.X,tamy-G_cmd.Y); // goc
ket thuc
if(a2>=a1) a2 = a2 - 2*pi;
C = R*(a1-a2); // chu vi cung tron
m_NoiSuy = int(C/Delta_l); // so buoc noi suy
delta_a = (a1-a2)/m_NoiSuy;// delta goc noi suy
for(i=1;i<m_NoiSuy+1; i++){
x1 = tamx + R*cos(a1-delta_a*i);
y1 = tamy + R*sin(a1-delta_a*i);
Calc_ns(m_NoiSuy-i+1,x1,y1,0);
}
Tính toán ra các đoạn thẳng nhỏ sau đó gọi hàm nội suy đường thẳng như
trên.
134
Đồ án tốt nghiệp Cơ điện tử 3 - K47
Trên màn hình giao diện điều khiển chúng ta đã tích hợp được hệ thống
điều khiển chung trong 1 giao diện, việc điều khiển theo mạng sẽ giúp cho việc lập
trình trở nên đơn giản hơn, chương trình sẽ bớt phức tạp hơn.
Trong chương trình chính chúng ta quản lý toàn bộ hệ thống bằng cách liên
tục truyền lệnh kiểm tra quá trình hoạt động của tùng môdul trong hệ thống CIM
ngay sau khi truyền lệnh cho chạy chúng ta truyền ngay lệnh hỏi đáp nếu mô dul
nào hoạt động xong sẽ báo lên chương trinh phân biệt chúng bằng giá trị data
chúng gửi lên để hệ thống có thể hoạt động độc lập, song song, hoặc tuần tự, nếu
không quản lý -> không có mối lien hệ trong hệ thống và quá trình làm việc trở
nên rời rạc có thể xảy ra các hiện tượng va đập trong hệ thống khi modul thứ 1
chưa làm việc xong modul thứ 2 đã chạy.
Tất cả việc quản lí này đều được thực hiện trong hàm:
void CManh_daDlg::OnTimer(UINT nIDEvent)
Trong hàm này tục hiện quá trình truyền và kiểm tra, chúng ta có thể truyền
lệnh kiểm tra như sau:
strz.Format(">1 S");
strz.Format(">1 S");
strz += 0x0d;
135
Đồ án tốt nghiệp Cơ điện tử 3 - K47
strz += 0x0A;
m_buflen = strlen(strz);
Đoạn truyền lệnh trên chúng ta đang thực hiện quá truyền xuống dịa chỉ
thứ1
Kí tự ‘S’ theo chuẩn chung giữa chương trình trên Window và chương trình
phía dưới đó là hỏi đáp, nếu chương trình phía dưới(phàn cúng) thực hiện xong nó
sẽ gửi lên (>11) ngược lại(>10), lúc này chúng ta phải thực hiện quá trình đọc
data:
m_buflen=0;
m_buflen = m_Com.ReadDataWaiting();
if(m_buflen){
m_Com.ReadData(m_buffer,m_buflen);
CString Dir_x,Dir_y,Dir_z;
CString strx,stry,strz;
KillTimer(ID_CLOCK_TIMER);
136
Đồ án tốt nghiệp Cơ điện tử 3 - K47
strx.Format(">1 D %d %d",vx,stepx);
strx += 0x0d;
strx += 0x0A;
m_buflen = strlen(strx);
for( si=0; si<m_buflen; si++) m_buffer[si] = strx[si];
m_Com.SendData(m_buffer,m_buflen);
}
else{
strx.Format(">1 M %d %d",vx,stepx);
strx += 0x0d;
strx += 0x0A;
m_buflen = strlen(strx);
for( si=0; si<m_buflen; si++) m_buffer[si] = strx[si];
m_Com.SendData(m_buffer,m_buflen);
}
137
Đồ án tốt nghiệp Cơ điện tử 3 - K47
// end off
// end off
SetTimer(ID_CLOCK_TIMER,100,0);
}
138
Đồ án tốt nghiệp Cơ điện tử 3 - K47
m_bStep = FALSE;
strz.Format(">2 S");
strz += 0x0d;
strz += 0x0A;
m_buflen = strlen(strz);
for( si=0; si<m_buflen; si++) m_buffer[si] = strz[si];
m_Com.SendData(m_buffer,m_buflen);
m_buflen=0;
m_buflen = m_Com.ReadDataWaiting();
if(m_buflen){
m_Com.ReadData(m_buffer,m_buflen);
strz = "";
for(int ti=0; ti<m_buflen; ti++)
{
if((unsigned char)m_buffer[ti]==0x0a) ti = m_buflen;
else strz += m_buffer[ti];
}
}else strz="";
if(m_buffer[2]='0')
{
fag1=1;
}
139
Đồ án tốt nghiệp Cơ điện tử 3 - K47
else{
//m_bSend=0;//SetTimer(ID_CLOCK_TIMER,200,0);;
fag1=0;
}
strz.Format(">1 S");
strz += 0x0d;
strz += 0x0A;
m_buflen = strlen(strz);
for( si=0; si<m_buflen; si++) m_buffer[si] = strz[si];
m_Com.SendData(m_buffer,m_buflen);
m_buflen=0;
m_buflen = m_Com.ReadDataWaiting();
if(m_buflen){
m_Com.ReadData(m_buffer,m_buflen);
strz = "";
for(int ti=0; ti<m_buflen; ti++){
if((unsigned char)m_buffer[ti]==0x0a) ti = m_buflen;
else strz += m_buffer[ti];
}
}else strz="";
// m_edit2=m_buffer[4];
if(m_buffer[2]='0')
{
//m_bSend=1;
fag2=1;
}
else{
//m_bSend=0;//SetTimer(ID_CLOCK_TIMER,200,0);;
140
Đồ án tốt nghiệp Cơ điện tử 3 - K47
fag2=0;
}
if((fag1)&&(fag2)) m_bSend=1;
else m_bSend=0;
//UpdateData(FALSE);
if(m_bSend){
// m_edit2=1;
// KillTimer(ID_CLOCK_TIMER);
//---------------------------
// doan chuong trinh truyen data---
if(m_index==0){ // khoi tao lenh moi
if(m_Cmd<m_Line){
Gcode_Cmd g_lenh;
g_lenh.G_code =
G_File.m_pArrCode[m_Cmd]->G_code;
g_lenh.Gcode_Data();
G_Ext.Ext_Cmd(g_lenh);
// dat lai gia tri m_index
m_index = G_Ext.m_NoiSuy;
Command(G_Ext.Step_X[m_index],G_Ext.V_X[m_index],G_Ext.Step_Y[m_index
],G_Ext.V_Y[m_index],G_Ext.Step_Z[m_index],G_Ext.V_Z[m_index]);
//Command('k',G_Ext.Step_X[m_index],G_Ext.Step_Y[m_index]);
m_index--;
m_Cmd++;
if(m_bStep) if(m_index==0)
m_bSend = 0; // chay tunglenh
141
Đồ án tốt nghiệp Cơ điện tử 3 - K47
}else{
m_bSend = 0; // ket thuc truyen
du lieu
// MessageBox(" Da thuc hien
xong chuong trinh","CNC 2.5D Controler",MB_OK|MB_ICONINFORMATION);
}
}else{// chay du lieu da noi suy
Command(G_Ext.Step_X[m_index],G_Ext.V_X[m_index],G_Ext.Step_Y[m_index
],G_Ext.V_Y[m_index],G_Ext.Step_Z[m_index],G_Ext.V_Z[m_index]);
//Command('k',G_Ext.Step_X[m_index],G_Ext.Step_Y[m_index]);
m_index--;
if(m_bStep) if(m_index==0) m_bSend=0;
}
}
UpdateData(FALSE);
CDialog::OnTimer(nIDEvent);
}
stra1.Format(">1 M %d %d",100,200);
stra1 += 0x0d;
stra1 += 0x0A;
m_buflen = strlen(stra1);
for( sj=0; sj<m_buflen; sj++) m_buffer[sj] = stra1[sj];
142
Đồ án tốt nghiệp Cơ điện tử 3 - K47
m_Com.SendData(m_buffer,m_buflen);
}
void CManh_daDlg::OnAxitX2()
{
// TODO: Add your control notification handler code here
//
stra1.Format(">1 D %d %d",100,300);
stra1 += 0x0d;
stra1 += 0x0A;
m_buflen = strlen(stra1);
for( sj=0; sj<m_buflen; sj++) m_buffer[sj] = stra1[sj];
m_Com.SendData(m_buffer,m_buflen);
}
void CManh_daDlg::OnAxitY1()
{
// TODO: Add your control notification handler code here
//
stra1.Format(">2 M %d %d",100,300);
stra1 += 0x0d;
stra1 += 0x0A;
m_buflen = strlen(stra1);
for( sj=0; sj<m_buflen; sj++) m_buffer[sj] = stra1[sj];
m_Com.SendData(m_buffer,m_buflen);
}
void CManh_daDlg::OnAxitY2()
{
// TODO: Add your control notification handler code here
//
stra1.Format(">2 D %d %d",100,300);
143
Đồ án tốt nghiệp Cơ điện tử 3 - K47
stra1 += 0x0d;
stra1 += 0x0A;
m_buflen = strlen(stra1);
for( sj=0; sj<m_buflen; sj++) m_buffer[sj] = stra1[sj];
m_Com.SendData(m_buffer,m_buflen);
}
void CManh_daDlg::OnAxitZ1()
{
// TODO: Add your control notification handler code here
Dirx.Format(">3 D %d",1);
Dirx += 0x0d;
Dirx += 0x0a;
m_buflen = strlen(Dirx);
for( sd1=0; sd1<m_buflen; sd1++) m_buffer[sd1] = Dirx[sd1];
//
stra1.Format(">3 M %d %d",100,10);
stra1 += 0x0d;
stra1 += 0x0A;
m_buflen = strlen(stra1);
for( sj=0; sj<m_buflen; sj++) m_buffer[sj] = stra1[sj];
m_Com.SendData(m_buffer,m_buflen);
}
void CManh_daDlg::OnAxitZ2()
{
// TODO: Add your control notification handler code here
Dirx.Format(">3 D %d",0);
Dirx += 0x0d;
144
Đồ án tốt nghiệp Cơ điện tử 3 - K47
Dirx += 0x0a;
m_buflen = strlen(Dirx);
for( sd1=0; sd1<m_buflen; sd1++) m_buffer[sd1] = Dirx[sd1];
//
stra1.Format(">3 M %d %d",100,10);
stra1 += 0x0d;
stra1 += 0x0A;
m_buflen = strlen(stra1);
for( sj=0; sj<m_buflen; sj++) m_buffer[sj] = stra1[sj];
m_Com.SendData(m_buffer,m_buflen);
}
void CManh_daDlg::OnMachinRun()
{
// TODO: Add your control notification handler code here
SetTimer(ID_CLOCK_TIMER,100,0);
}
void CManh_daDlg::OnHomeCNC()
{
// TODO: Add your control notification handler code here
stra1.Format(">2 D %d %d",100,300);
145
Đồ án tốt nghiệp Cơ điện tử 3 - K47
stra1 += 0x0d;
stra1 += 0x0A;
m_buflen = strlen(stra1);
for( sj=0; sj<m_buflen; sj++) m_buffer[sj] = stra1[sj];
m_Com.SendData(m_buffer,m_buflen);
stra1.Format(">1 D %d %d",100,300);
stra1 += 0x0d;
stra1 += 0x0A;
m_buflen = strlen(stra1);
for( sj=0; sj<m_buflen; sj++) m_buffer[sj] = stra1[sj];
m_Com.SendData(m_buffer,m_buflen);
stra1.Format(">3 D %d %d",100,300);
stra1 += 0x0d;
stra1 += 0x0A;
m_buflen = strlen(stra1);
for( sj=0; sj<m_buflen; sj++) m_buffer[sj] = stra1[sj];
m_Com.SendData(m_buffer,m_buflen);
}
void CManh_daDlg::OnStopCNC()
{
// TODO: Add your control notification handler code here
stra1.Format(">2 D %d %d",0,0);
stra1 += 0x0d;
stra1 += 0x0A;
m_buflen = strlen(stra1);
for( sj=0; sj<m_buflen; sj++) m_buffer[sj] = stra1[sj];
m_Com.SendData(m_buffer,m_buflen);
stra1.Format(">1 D %d %d",0,0);
stra1 += 0x0d;
146
Đồ án tốt nghiệp Cơ điện tử 3 - K47
stra1 += 0x0A;
m_buflen = strlen(stra1);
for( sj=0; sj<m_buflen; sj++) m_buffer[sj] = stra1[sj];
m_Com.SendData(m_buffer,m_buflen);
}
void CManh_daDlg::OnRunRB()
{
// TODO: Add your control notification handler code here
if (fag_rb==1)
{
stra1.Format(">4 R");
stra1 += 0x0d;
stra1 += 0x0A;
m_buflen = strlen(stra1);
for( sj=0; sj<m_buflen; sj++) m_buffer[sj] = stra1[sj];
m_Com.SendData(m_buffer,m_buflen);
}
else
{
stra1.Format(">4 R");
stra1 += 0x0d;
stra1 += 0x0A;
m_buflen = strlen(stra1);
for( sj=0; sj<m_buflen; sj++) m_buffer[sj] = stra1[sj];
m_Com.SendData(m_buffer,m_buflen);
}
}
void CManh_daDlg::OnHomeRB()
{
147
Đồ án tốt nghiệp Cơ điện tử 3 - K47
stra1.Format(">0 H");
stra1 += 0x0d;
stra1 += 0x0A;
m_buflen = strlen(stra1);
for( sj=0; sj<m_buflen; sj++) m_buffer[sj] = stra1[sj];
m_Com.SendData(m_buffer,m_buflen);
}
void CManh_daDlg::OnNagTay()
{
// TODO: Add your control notification handler code here
stra1.Format(">4 L");
stra1 += 0x0d;
stra1 += 0x0A;
m_buflen = strlen(stra1);
for( sj=0; sj<m_buflen; sj++) m_buffer[sj] = stra1[sj];
m_Com.SendData(m_buffer,m_buflen);
}
void CManh_daDlg::OnHaTay()
{
// TODO: Add your control notification handler code here
stra1.Format(">4 X");
stra1 += 0x0d;
stra1 += 0x0A;
m_buflen = strlen(stra1);
for( sj=0; sj<m_buflen; sj++) m_buffer[sj] = stra1[sj];
m_Com.SendData(m_buffer,m_buflen);
}
148
Đồ án tốt nghiệp Cơ điện tử 3 - K47
void CManh_daDlg::OnVuonTay()
{
// TODO: Add your control notification handler code here
stra1.Format(">4 V");
stra1 += 0x0d;
stra1 += 0x0A;
m_buflen = strlen(stra1);
for( sj=0; sj<m_buflen; sj++) m_buffer[sj] = stra1[sj];
m_Com.SendData(m_buffer,m_buflen);
}
void CManh_daDlg::OnThuTay()
{
// TODO: Add your control notification handler code here
stra1.Format(">4 T");
stra1 += 0x0d;
stra1 += 0x0A;
m_buflen = strlen(stra1);
for( sj=0; sj<m_buflen; sj++) m_buffer[sj] = stra1[sj];
m_Com.SendData(m_buffer,m_buflen);
}
void CManh_daDlg::OnMoKep()
{
// TODO: Add your control notification handler code here
stra1.Format(">4 M");
stra1 += 0x0d;
stra1 += 0x0A;
m_buflen = strlen(stra1);
for( sj=0; sj<m_buflen; sj++) m_buffer[sj] = stra1[sj];
149
Đồ án tốt nghiệp Cơ điện tử 3 - K47
m_Com.SendData(m_buffer,m_buflen);
}
void CManh_daDlg::OnDongKep()
{
// TODO: Add your control notification handler code here
stra1.Format(">4 D");
stra1 += 0x0d;
stra1 += 0x0A;
m_buflen = strlen(stra1);
for( sj=0; sj<m_buflen; sj++) m_buffer[sj] = stra1[sj];
m_Com.SendData(m_buffer,m_buflen);
}
void CManh_daDlg::OnQuayTrai()
{
// TODO: Add your control notification handler code here
stra1.Format(">4 t");
stra1 += 0x0d;
stra1 += 0x0A;
m_buflen = strlen(stra1);
for( sj=0; sj<m_buflen; sj++) m_buffer[sj] = stra1[sj];
m_Com.SendData(m_buffer,m_buflen);
}
void CManh_daDlg::OnQuayPhai()
{
// TODO: Add your control notification handler code here
stra1.Format(">4 p");
stra1 += 0x0d;
stra1 += 0x0A;
m_buflen = strlen(stra1);
150
Đồ án tốt nghiệp Cơ điện tử 3 - K47
151
Đồ án tốt nghiệp Cơ điện tử 3 - K47
Đây là một ngắt giao tiếp khi có data truyền xuống tất cả được lưu vào bộ
đệm:
rx_buffer[rs_index]
Trong ngắt này có đoạn kiểm tra nếu đúng địa chỉ thì đọc toàn bộ buffer
vào mảng rs_Cmd[rs_i] , như vậy dữ liệu khi truyền từ máy tính xuống nếu đúng
địa chỉ nó sẽ lưu vào mảng rs_Cmd[rs_i] sau đó chúng ta chỉ việc lấy giá trị từ
mảng ra để dung.
Đoạn chương trình đọc giá trị từ mảng ra:
void ExtCmd(){
switch(rs_Cmd[3]){
case 'S': // lenh kiem -----------------------------------------------
putchar('>');
if(m_Step) {putchar(m_Status+'0');putchar('1');}
152
Đồ án tốt nghiệp Cơ điện tử 3 - K47
void Out_Step()
{
PORTB = step[m_Index];
}
153
Đồ án tốt nghiệp Cơ điện tử 3 - K47
putchar('>');
if(m_Step) putchar('1');
else{
if(!Limit_A) putchar('A');
else if(!Limit_Z) putchar('Z');
else {putchar(m_Status+'0'); putchar('0');}
}
break;
154
Đồ án tốt nghiệp Cơ điện tử 3 - K47
155
Đồ án tốt nghiệp Cơ điện tử 3 - K47
Chương trình cho ro bot chạy tự động khi nhận lệnh từ máy tính:
void Robotoutorun(void)
{
DC1_DIR=1;
delay_ms(10);
while(Direct_1)
{
DC1_EN=0;
}
DC1_EN=1;//tat dong co quay
delay_ms(1000);
Step_1=0;//---nang tay may len--------
delay_ms(3500);
Step_2=0;//----dua tay mmay ra--------
delay_ms(1000);
Step_3=0;//----mo kep-----
delay_ms(1000);
Step_1=1;//-----ha tay may xuong----
delay_ms(4000);
Step_3=1;//-----dong kep----
delay_ms(1000);
Step_1=0;//-----nang tay may len-----
delay_ms(3500);
//--dao chieu dong co quay---
DC1_DIR=0;//-----dao chieu dong co------
delay_ms(10);
while(Direct_2)
{
DC1_EN=0;//------quay khi nao cham sensor-----
}
DC1_EN=1;//tat dong co quay khi cham CT---
156
Đồ án tốt nghiệp Cơ điện tử 3 - K47
157
Đồ án tốt nghiệp Cơ điện tử 3 - K47
Step_2=0;
delay_ms(20000);
Step_2=1;
while(Direct_3)
{
Step_3=1;
}
Step_3=0;
delay_ms(4000);
Step_3=1;
while(Direct_4)
{
Step_4=1;
}
delay_ms(2000);
Step_4=0;
delay_ms(2000);
Step_4=1;
delay_ms(2000);
}
158