Giáo trình Điều khiển hệ thống cơ điện tử sử dụng vi điều khiển

Khái niệm vi điều khiển (microcontroller – MC) đã khá quen thuộc với các

sinh viên CNTT, điện tử, điều khiển tự động cũng như Cơ điện tử Nó là một

trong những IC thích hợp nhất để thay thế các IC số trong việc thiết kế mạch logic.

Ngày nay đã có những MC tích hợp đủ tất cả các chức năng của mạch logic. Nói

như vậy không có nghĩa là các IC số cũng như các IC mạch số lập trình được khác

như PLC không cần dùng nữa. MC cũng có những hạn chế mà rõ ràng nhất là

tốc độ chậm hơn các mạch logic MC cũng là một máy tính – máy tính nhúng vì

nó có đầy đủ chức năng của một máy tính. Có CPU, bộ nhớ chương trình, bộ nhớ

dữ liệu, có I/O và các bus trao đổi dữ liệu.

Cần phân biệt khái niệm MC với khái niệm vi xử lý (microprocessor – MP)

như 8088 chẳng hạn. MP chỉ là CPU mà không có các thành phần khác như bộ nhớ

I/O, bộ nhớ. Muốn sử dụng MP cần thêm các chức năng này, lúc này người ta gọi

nó là hệ vi xử lý (microprocessor system). Do đặc điểm này nên nếu để lựa chọn

giữa MC và MP trong một mạch điện tử nào đó thì tất nhiên người ta sẽ chọn MC

vì nó sẽ rẻ tiền hơn nhiều do đã tích hợp các chức năng khác vào trong chip.

Giáo trình Điều khiển hệ thống cơ điện tử sử dụng vi điều khiển trang 1

Trang 1

Giáo trình Điều khiển hệ thống cơ điện tử sử dụng vi điều khiển trang 2

Trang 2

Giáo trình Điều khiển hệ thống cơ điện tử sử dụng vi điều khiển trang 3

Trang 3

Giáo trình Điều khiển hệ thống cơ điện tử sử dụng vi điều khiển trang 4

Trang 4

Giáo trình Điều khiển hệ thống cơ điện tử sử dụng vi điều khiển trang 5

Trang 5

Giáo trình Điều khiển hệ thống cơ điện tử sử dụng vi điều khiển trang 6

Trang 6

Giáo trình Điều khiển hệ thống cơ điện tử sử dụng vi điều khiển trang 7

Trang 7

Giáo trình Điều khiển hệ thống cơ điện tử sử dụng vi điều khiển trang 8

Trang 8

Giáo trình Điều khiển hệ thống cơ điện tử sử dụng vi điều khiển trang 9

Trang 9

Giáo trình Điều khiển hệ thống cơ điện tử sử dụng vi điều khiển trang 10

Trang 10

Tải về để xem bản đầy đủ

pdf 128 trang duykhanh 8920
Bạn đang xem 10 trang mẫu của tài liệu "Giáo trình Điều khiển hệ thống cơ điện tử sử dụng vi điều khiển", để tải tài liệu gốc về máy hãy click vào nút Download ở trên

Tóm tắt nội dung tài liệu: Giáo trình Điều khiển hệ thống cơ điện tử sử dụng vi điều khiển

Giáo trình Điều khiển hệ thống cơ điện tử sử dụng vi điều khiển
 
không được chia thành các ô để hiển thị các mã ASCII vì GLCD không có bộ nhớ 
CGRAM (Character Generation RAM). GLCD 128x64 có 128 cột và 64 hàng 
tương ứng có 128x64=8192 chấm (dot). Mỗi chấm tương ứng với 1 bit dữ liệu, và 
như thế cần 8192 bits hay 1024 bytes RAM để chứa dữ liệu hiển thị đầy mỗi 
128x64 GLCD. Tùy theo loại chip điều khiển, nguyên lý hoạt động của GLCD có 
thể khác nhau, bài này sẽ giới thiệu loại GLCD được điều khiển bởi chip KS0108 
của Samsung, có thể nói GLCD với KS0108 là phổ biến nhất trong các loại GLCD 
loại này (chấm, không màu) 
 Hình ảnh GLCD 
 Chip KS0108 chỉ có 512 bytes RAM (4096 bits = 64x64) và vì thế chỉ điều 
khiển hiển thị được 64 dòng x 64 cột. Để điều khiển GLCD 168x64 cần 2 chip 
KS0108, và thực thế trong các loại GLCD có 2 chip KS0108, GLCD 128x64 do đó 
tương tự 2 GLCD 64x64 ghép lại 
 Các GLCD 128x64 dùng KS0108 thường có 20 chân trong đó chỉ có 18 chân là 
thực sự điều khiển trực tiếp GLCD, 2 chân (thường là 2 chân cuối 19 và 20) là 2 
chân Anode và Cathode của LED nền. Trong 18 chân còn lại, có 4 chân cung cấp 
nguồn và 14 chân điều khiển+dữ liệu. Khác với các Text LCD HD44780U, GLCD 
KS0108 không hỗ trợ chế độ giao tiếp 4 bit, do đó bạn cần dành ra 14 chân để điều 
khiển 1 GLCD 128x64. 
 Sơ đồ chân GLCD 
 Chân VSS được nối trực tiếp với GND, chân VDD nối với nguồn +5V, một 
biến trở khoảng 20K được dùng để chia điện áp giửa Vdd và Vee cho chân Vo, 
bằng cách thay đổi giá trị biến trở chúng ta có thể điều chỉnh độ tương phản của 
GLCD. Các chân điều khiển RS, R/W, EN và các đường dữ liệu được nối trực tiếp 
với vi điều khiển. Riêng chân Reset (RST) có thể nối trực tiếp với nguồn 5V. 
EN (Enable): cho phép một quá trình bắt đầu, bình thường chân EN được giữ ở 
mức thấp, khi một thực hiện một quá trình nào đó (đọc hoặc ghi GLCD), các chân 
điều khiển khác sẽ được cài đặt sẵn sàng, sau đó kích chân EN lên mức cao. Khi 
EN được kéo lên cao, GLCD bắt đầu làm thực hiện quá trình được yêu cầu, chúng 
ta cần chờ một khoảng thời gian ngắn cho GLCD đọc hoặc gởi dữ liệu. Cuối cùng 
là kéo EN xuống mức thấp để kết thúc quá trình và cũng để chuẩn bị chân EN cho 
quá trình sau này. 
RS (Register Select): là chân lựa chọn giữa dữ liệu (Data) và lệnh (Instruction), vì 
thế mà trong một số tài liệu bạn có thể thấy chân RS được gọi là chân DI 
(Data/Instruction Select). Chân RS=1 báo rằng tín hiệu trên các đường DATA 
(D0:7) là dữ liệu ghi hoặc đọc từ RAM của GLCD. Khi RS=0, tín hiệu trên đương 
DATA là một mã lệnh (Instruction). 
RW (Read/Write Select): chọn lựa giữa việc đọc và ghi. Khi RW=1, chiều truy 
cập từ GLCD ra ngoài (GLCD->AVR). RW=0 cho phép ghi vào GLCD. Giao tiếp 
với GLCD chủ yếu là quá trình ghi (AVR ->GLCD), chỉ duy nhất trường hợp đọc 
dữ liệu từ GLCD là đọc bit BUSY và đọc dữ liệu từ RAM. Đọc bit BUSY thì 
chúng ta đã khảo sát cho Text LCD, bit này báo GLCD có đang bận hay không, 
việc đọc này sẽ được dùng để viết hàm wait_GLCD. Đọc dữ liệu từ RAM của 
GLCD là một khả năng mới mà Text LCD không có, bằng việc đọc ngược từ 
GLCD vào AVR, chúng ta có thể thực hiện nhiều phép logic hình (hay mặt nạ, 
mask) làm cho việc hiển thị GLCD thêm thú vị. 
CS2 và CS1 (Chip Select): như tôi đã trình bày trong phần trên, mỗi chip KS0108 
chỉ có khả năng điều khiển một GLCD có kích thước 64x64, trên các GLCD 
128x64 có 2 chip KS0108 làm việc cùng nhau, mỗi chip đảm nhiệm một nữa LCD, 
2 chân CS2 và CS1 cho phép chọn một chip KS0108 để làm việc. Thông thường 
nếu CS2=0, CS1=1 thì nửa trái được kích hoạt, ngược lại khi CS2=1, CS1=0 thì 
nửa phải được chọn. Chúng ta sẽ hiểu rõ hơn cách phối hợp làm việc của 2 nửa 
GLCD trong phần khảo sát bộ nhớ của LCD. 
Tổ chức bộ nhớ. 
 Chip KS0108 có một loại bộ nhớ duy nhất đó là RAM, không có bộ nhớ 
chứa bộ font hay chứa mã font tự tạo như chip HD44780U của Text LCD. Vì vậy, 
dữ liệu ghi vào RAM sẽ được hiển thị trực tiếp trên GLCD. 
 Mỗi chip KS0108 có 512 bytes RAM tương ứng với 4096 chấm trên một 
nửa (64x64) LCD. RAM của KS0108 không cho phép truy cập từng bit mà theo 
từng byte, điều này có nghĩa là mỗi lần chúng ta viết một giá trị vào một byte nào 
đó trên RAM của GLCD, sẽ có 8 chấm bị tác động, 8 chấm này nằm trên cùng 1 
cột. Vì lý do này, 64 dòng GLCD thường được chia thành 8 pages, mỗi page có độ 
cao 8 bit và rộng 128 cột (cả 2 chip gộp lại). Hình 3 mô tả “bề mặt” một GLCD và 
cũng là cách sắp xếp RAM của các chip KS0108. 
 Tổ chức RAM của 2 chip KS0108 trái và phải hoàn toàn tương tự, việc đọc 
hay ghi vào RAM của 2 chip cũng được thực hiện như nhau. Chúng ta sẽ chọn nửa 
trái GLCD để khảo sát. Như bạn thấy trên hình 3, 64 dòng từ trên xuống dưới được 
chia thành 8 “dãy” mà ta gọi là 8 pages. Page trên cùng là page 0 và page dưới 
cùng la page 7. Trong các GLCD, page còn được gọi là địa chỉ X (X address), hay 
nói cách khác X=0 là địa chỉ của page trên cùng, tương tự như thế, X=7 là địa chỉ 
của page dưới cùng. Mỗi page chứa 64 cột (chỉ xét 1 chip KS0108), mỗi cột là một 
byte RAM 8 bit, mỗi bit tương ứng với 1 chấm trên LCD, bit có trọng số thấp 
(LBS - tức bit D0 như trong hình 3) tương ứng với chấm trên cao nhất. Bit có trọng 
số cao nhất (MBS - tức bit D7 như trong hình 3) tương ứng với chấm thấp nhất 
trong 1 page. Thứ tự các cột trong 1 page gọi là địa chỉ Y (Y address), như thế cột 
đầu tiên có địa chỉ Y = 0 trong khi cột cuối cùng có địa chỉ Y là 63. 
 Bằng cách phối hợp địa chỉ X và địa chỉ Y chúng ta xác định được vị trí của 
byte cần đọc hoặc ghi. Chip KS0108, tất nhiên, sẽ hỗ trợ các lệnh di chuyển đến 
địa chỉ X và Y để ghi hay đọc RAM 
Tập lệnh cho chip KS0108. 
 So với HD44780U của Text LCD, lệnh cho KS0108 của GLCD đơn giản và 
ít hơn và vì thế viết chương trình điều khiển GLCD cũng tương đối dễ hơn Text 
LCD. Có tất cả 7 lệnh (Instruction) có thể giao tiếp với KS0108. Tôi sẽ lần lượt 
giải thích ý nghĩa và cách sử dụng của từng lệnh. 
 Display ON/OFF – Hiển thị GLCD: lệnh này cho phép GLCD hiển thị nội dung 
trên RAM ra “bề mặt” GLCD. Để viết lệnh này cho GLCD, 2 chân RS và RW cần 
được kéo xuống mức thấp (RS=0: đây là Instrucion, RW=0: AVR->GLCD). Mã 
lệnh (code) được chứa trong 7 bit cao (D7:1) và bit D0 chứa thông số. Quan sát 
bảng 2, dễ thấy mã lệnh nhị phân cho Display ON/OFF là 0011111x (0x3E+x) 
trong đó x=1: cho phép GLCD hiển thị, x=0: tắt hiển thị. 
Set Address – chọn địa chỉ: đúng hơn đây là lệnh chọn cột hay chọn địa chỉ Y. Hai 
bit D7 và D6 chứa mã lệnh (01000000=0x40=64) và 6 bit còn lại chứa chỉ số của 
cột muốn di chuyển đến. Chú ý là mỗi nửa GLCD có 64 cột nên cần 6 bit để chứa 
chỉ số này (26=64). Vậy lệnh này có dạng 0x40+Y. Ví dụ nếu chúng ta muốn di 
chuyển đến cột 36 chúng ta ghi vào GLCD mã lệnh: 0x40+36. Hai chân RS và RW 
được giữ ở mức thấp khi thực hiện lệnh này. 
Set Page – chọn trang: lệnh cho phép chọn page (hay địa chỉ X) cần di chuyển đến, 
do GLCD chỉ có 8 pages nên chỉ cần 3 bit để chứa địa chỉ page. Mã lệnh cho lệnh 
này có dạng 0xB8+X. Trong đó biến X là chỉ số page cần di chuyển đến. Hai chân 
RS và RW được giữ ở mức thấp khi thực hiện lệnh này. 
Display Start Line – chọn line đầu tiên: hay còn gọi là lệnh “cuộn”, lệnh này cho 
phép di chuyển toàn bộ hình ảnh trên GLCD (hay RAM) lên phía trên một số dòng 
nào đó, chúng ta gọi là LOffset. Số lượng LOffset có thể từ 0 đến 63 nên cần 6 bit 
chứa giá trị này. Mã lệnh Display Start Line có dạng 0xC0+LOffset. Hai chân RS 
và RW được giữ ở mức thấp khi thực hiện lệnh này. Khi di chuyển GLCD lên phía 
trên, phần dữ liệu phía trên bị che khuất sẽ “cuộn” xuống phía dưới. Hình 5 là một 
ví dụ “cuộn” GLCD lên 20 dòng. 
Status Read – đọc trạng thái GLCD: đây là một trong 2 lệnh đọc từ GLCD. Cũng 
giống như với Text LCD, lệnh đọc trạng thái GLCD chủ yếu để xét bit BUSY (bit 
thứ 7) xem GLCD có đang bận hay không, lệnh này sẽ được dùng để viết một hàm 
wait_GLCD chờ cho đến khi GLCD rảnh. Vì đây là lệnh đọc từ GLCD nên chân 
RW phải được set lên mức 1 trước khi thực hiện, chân RS vẫn ở mức thấp (đọc 
Instruction). 
Write Display Data – ghi dữ liệu cần hiển thị vào GLCD hay RAM: vì đây là 1 
lệnh ghi dữ liệu hiển thị nên chân RS cần được set lên 1 trước khi thực hiện, chân 
RW giữ ở mức 0. Lệnh này cho phép ghi một byte dữ liệu vào RAM của KS0108 
và cũng là dữ liệu sẽ hiển thị lên GLCD tại vị trí hiện hành của 2 con trỏ địa chỉ X 
và Y. 8 bit dữ liệu này sẽ tương ứng với 8 chấm trên cột Y ở page X. Chú ý là sau 
lệnh Write Display Data, địa chỉ cột Y tự động được tăng lên 1 và vì thế nếu có 
một dữ liệu mới được ghi, dữ liệu mới sẽ không “đè” lên dữ liệu cũ. Việc tăng tự 
động địa chỉ Y rất có lợi cho việc ghi dữ liệu liên tiếp, nó giúp giảm thời gian set 
lại địa chỉ cột Y. Sau khi thực hiện ghi ở cột Y=63 (cột cuối cùng trong 1 page, đối 
với 1 chip KS0108), Ysẽ về 0. 
Read Display Data – đọc dữ liệu hiển thị từ GLCD (cũng là dữ liệu từ RAM của 
KS0108): lệnh đọc này mới so với Text LCD, nó cho phép chúng ta đọc ngược 1 
byte dữ liệu từ RAM của KS0108 tại vị trí hiện hành về AVR. Sau khi đã đọc được 
giá trị tại vị trí hiện hành, chúng ta có thể thực hiện các phép Logic như đảo bit, or 
hay andlàm tăng khả năng thao tác hình ảnh. Trước khi thực hiện đọc chúng ta 
cần di chuyển đến vị trí muốn đọc bằng 2 lệnh set địa chỉ X và Y, sau khi đọc giá 
trị địa chỉ page X và cột Y không thay đổi, do đó nếu đọc tiếp mà không di chuyển 
địa chỉ thì vẫn thu được giá trị cũ. 
 2. Ví dụ minh họa 
Phần này sẽ trình bày các hàm hỗ trợ cơ bản để giao tiếp với GLCD : 
Bài tập 
 Dựa vào driver đã cung cấp ở trên, bạn hãy lập trình để hiển thị các hình 
2D như hình chữ nhật, hình vuông, hình tròn 
 BÀI 15 : GIAO TIẾP VỚI ADC 
 - Cơ bản về ADC 
 - Ví dụ giao tiếp với ADC0804 
 1. Cơ bản về ADC 
 Chúng ta biết rằng các tín hiệu ở thế giới xung quanh chúng ta toàn là các tín 
hiệu tương tự : dòng điện 220VAC, dòng điện 5V, sức gió, tốc độ động cơ, tuy 
nhiên vi điều khiển chỉ xử lí được các tín hiệu số : 10101, như vậy, cần phải có 1 
thiết bị nào đó để chuyển đổi qua lại giữa 2 loại tín hiệu này, đó là lí do vì sao 
chúng ta có các bộ ADC và DAC. 
 ADC là 1 thiết bị dùng để chuyển đổi tín hiệu tương tự thành tín hiệu số. 
Còn DAC thì ngược lại, chuyển tín hiệu số thành tín hiệu tương tự. 
 Chip ADC0804 là bộ chuyển đổi tương tự số trong họ các loạt ADC0800 từ 
hãng National Semiconductor. Nó cũng được nhiều hãng khác sản xuất, điện áp 
làm việc 0-5v và có độ phân giải là 8 bít. 
 Ngoài độ phân giải thì thời gian chuyển đổi cũng là một yếu tố quan trọng 
khác khi đánh giá một bộ ADC. Thời gian chuyển đổi được định nghĩa như là thời 
gian mà bộ ADC cần để chuyển một đầu vào tương tự thành một số nhị phân. 
 Trong ADC0804, thời gian chuyển đổi thay đổi phụ thuộc vào tần số đồng 
hồ được cấp tới chân CLK và CLK IN nhưng không thể nhanh hơn 110µs. Các 
chân của ADC0804 được mô tả như sau : 
 - Chân chọn chíp: Là một đầu vào tích cực mức thấp được sử dụng để kích 
 hoạt chíp ADC 804. Để truy cập ADC0804thì chân này phải ở mức thấp. 
 - Chân (đọc): Đây là một tín hiệu đầu vào được tích cực mức thấp. Các bộ 
 ADC chuyển đổi đầu vào tương tự thành số nhị phân tương đương với nó và 
 giữ no trong một thanh ghi trong. được sử dụng để nhận dữ liệu được 
 chuyển đổi ở đầu ra của ADC 804. Khi CS = 0 nếu một xung cao – xuống – 
 thấp được áp đến chân thì đầu ra số 8 bít được hiển diện ở các chân dữ liệu 
 D0 – D7. Chân cũng được coi như cho phép đầu ra. 
- Chân ghi (thực ra tên chính xác là “Bắt đầu chuyển đổi”). Đây là chân đầu 
 vào tích cực mức thấp được dùng để báo cho ADC0804bắt đầu quá trình 
 chuyển đổi. Nếu CS = 0 khi tạo ra xung cao – xuống – thấp thì bộ 
 ADC0804bắt đầu chuyển đổi giá trị đầu vào tương tự V¬¬in ¬về số nhị phân 
 8 bít. Lượng thời gian cần thiết để chuyển đổi thay đổi phụ thuộc vào tần số 
 đưa đến chân CLK IN và CLK R. Khi việc chuyển đổi dữ liệu được hoàn tất 
 thì chân INTR được ép xuống thấp bởi ADC 804. 
- Chân CLK IN và CLK R: 
 Chân CLK IN là một chân đầu vào được nối tới một nguồn đồng hồ ngoài 
 khi đồng hồ ngoài được sử dụng để tạo ra thời gian. Tuy nhiên ADC0804 
 cũng có một máy tạo xung đồng hồ. Để sử dụng máy tạo xung đồng hồ 
 trong(cũng còn được gọi là máy tạo đồng hồ riêng ) của 804 thì các chân 
 CLK IN và CLK R được nối tới một tụ điện và một điện trở như chỉ ra trên 
 hình 12.5. Trong trường hợp này tần số đồng hồ được xác định bằng biểu 
 thức : 
 Giá trị tiêu biểu của các đại lượng trên R = 10kΩ và C = 150pF và tần 
 số nhận được là f = 606kHz và thời gian chuyển đổi sẽ mất là 110µs. 
- Chân ngắt (ngắt hay gọi chính xác hơn là “kết thúc chuyển đổi”). 
 Đây là chân đầu ra tích cực mức thấp. Bình thường nó ở trạng thái cao và 
 khi việc chuyển đổi hoàn tất thì nó xuống thấp để báo cho CPU biết là dữ 
 liệu được chuyển đổi sẵn sàng để lấy đi. Sau khi xuống thấp, ta đặt CS = 0 
 và gửi xung cao 0 xuống – thấp tới chân lấy dữ liệu ra của 804. 
- Chân Vin (+) và Vin(-). 
 Đây là các đầu vào tương tự vi sai mà Vin = Vin (+) - Vin(-). Thông 
 thường Vin(-) được nối xuống đất và Vin(+) được dùng như đầu vào tương 
 tự được chuyển đổi về dạng số . 
- Chân Vcc. 
 Đây là chân nguồn nối + 5v, nó cũng được dùng như điện áp tham 
 chiếu khi đầu vào Vref/2(chân 9) để hở. 
- Chân Vref/2 
 Chân này được dùng cho điện áp tham chiếu. Nếu chân này hở thì 
 điện áp đầu vào tương tự cho ADC0804 nằm trong dải 0 đến +5V. Chân 
 Vref/2 được dùng để thực thi các điện áp đầu vào khác ngoài dải 0 đến +5V 
- Các chân dữ liệu D0 – D7 
 Các chân dữ liệu D0 – D7 (D7 là bít cao nhất MBS và D0 là bít thấp 
 nhất LSB) là các chân đầu ra dữ liệu số. Đây là những chân được đệm ba 
 trạng thái và dữ liệu được chuyển đổi chỉ được truy cập khi chân CS=0 và 
 chân bị đưa xuống thấp. Để tính điện áp đầu ra ta có thể sử dụng công thức 
 sau: 
- Chân đất tương tự và chân đất số. 
 Đây là những chân đầu vào cấp đất chung cho cả tín hiệu số và tương 
 tự. Đất tương tự được nối tới đất của chân tương tự, còn đất số được nối tới 
 đất của chân . Lý do mà ta phải có hai đất là để cách ly tín hiệu tương tự từ 
 các điện áp ký sinh tạo ra việc chuyển mạch số được chính xác. Trong phần 
 trình bày của chúng ta thì các chân này được nối chung với một đất. Tuy 
 nhiên, trong thực tế thu đo dữ liệu các chân đất này được nối tách biệt. 
 Từ những điều trên ta kết luận rằng các bước cần phải thực hiện khi chuyển 
đổi dữ liệu bởi ADC0804 là : 
- Bật CS=0 và gửi một xung thấp lên cao tới chân để bắt đầu chuyển đổi. 
- Duy trì hiển thị chân . Nếu xuống thấp thì việc chuyển đổi được hoàn tất và 
 ta có thể sang bước kế tiếp. Nếu cao tiếp tục thăm dò cho đến khi nó xuống 
 thấp. 
- Sau khi chân xuống thấp, ta bật CS = 0 và gửi một xung cao - xuống - thấp 
 đến chân để lấy dữ liệu ra khỏi chíp ADC 804. Phân chia thời gian cho quá 
 trình này được trình bày trên hình sau. 
 2. Ví dụ minh họa 
Bài tập 
Bạn hãy tìm hiểu module DAC (DAC0808) và làm ví dụ mẫu như trên 

File đính kèm:

  • pdfgiao_trinh_dieu_khien_he_thong_co_dien_tu_su_dung_vi_dieu_kh.pdf