I.GIỚI THIỆU
Trong những phần trước ta đã được biết đến 2 loại mạch tuần tự cơ bản là mạch lật và mạch ghi dịch; và cũng biết rằng nhiều FF nối lại với nhau có thể hoạt động như một mạch đếm hay thanh ghi (nhớ nhiều bit).
Nhưng đó mới chỉ là những mạch nhớ cơ bản, phần này sẽ đề cập đến chi tiết hơn cấu tạo, hoạt động và nhiều ứng dụng của nhiều mạch đếm khác nhau.
Phần lớn chúng ở dạng mạch tích hợp. Hệ thống số ngày nay sử dụng khá nhiều loại mạch đếm, có thể dùng để đếm xung, đếm sản phẩm, đếm làm đồng hồ, định thời gian … và rõ ràng chúng là các mạch logic nên chính xác và dễ dàng thiết kế hơn nhiều so với các loại mạch tương tự.
I.Đếm không đồng bộ theo hệ nhị phân (chia 2)
1.1.Mạch đếm lên
Hình dưới đây trình bày một mạch đếm gồm 4 FF T mắc nối tiếp. Các ngõ vào T (hay J=K) của cả 4 tầng FF đều để trống hay nối lên +Vcc. Xung cần đếm được đưa vào ngõ ck tác động cạnh xuống của tầng FF đầu tiên (nó có thể là một chuỗi xung vuông có chu kì không cố định)
Các ngõ ra Q lần lượt được nối tới ngõ vào đếm ck của tầng sau nó (nếu có). Chúng được đặt tên là Q0 (LSB), Q1, Q2, Q3 (MSB)
Hình 3.3.1 Bộ đếm nhị phân 4 bit không đồng bộ cơ bản
Hình 1.1 Giản đồ thời gian xung của ngõ vào và các ngõ ra bộ đếm :
Mạch sẽ đếm như thế nào?
Mạch đếm thường hoạt động ở trạng thái ban đầu là 0000 do đó một xung tác động mức thấp sẽ được áp vào ngõ Cl của các tầng FF để đặt trạng thái ngõ ra là 0000.
Khi xung đếm ck tác động cạnh xuống đầu tiên thì Q0 lật trạng thái tức là Q0 = 1. Ở cạnh xuống thứ 2 của xung ck, Q0 lại lật trạng thái một lần nữa, tức là Q0 = 0. Như vậy cứ sau mỗi lần tác động của ck Q0 lại lật trạng thái một lần, sau 2 lần ck tác động, Q0 lặp lại trạng thái ban đầu, do đó nếu xung ck có chu kì là T và tần số là f thì xung ngõ ra Q0sẽ có chu kì là 2T và tần số còn 1/2f. Như vậy xung đếm ck đã được chia đôi tần số sau 1 tầng FF.
Do Q0 lại trở thành ngõ vào xung đếm của FF thứ 2 (FF B) nên tương tự tần như vậy fQ1 bằng một nửa fQ0. Với 4 tầng FF thì
fQ3 = 1/2fQ2 = 1/4fQ1 = 1/8fQ0 = 1/16f
Như vậy với 4 FF ta có 16 trạng thái logic ngõ ra từ 0000(010) ở xung đếm đầu tiên đến 1111 (1510) ở xung đếm thứ 16, tức là trị thập phân ra bằng số xung đếm vào và vì vậy đây là mạch đếm nhị phân 4 bit (có 4 tầng FF, tần số được chia đổi sau mỗi tầng) hay mạch đếm chia 16
Mạch được xếp vào loại mạch đếm lên vì khi số xung đếm vào tăng thì số thập phân ra tương ứng cũng tăng. Nhưng để ý rằng chỉ có 16 trạng thái ra nên ở xung đếm ck thứ 16 mạch được tự động xoá về 0 để đếm lại. Muốn có nhiều trạng thái ra hơn thì phải nối thêm tầng FF. Tổng quát với hoạt động như trên nếu có n FF thì sẽ tạo ra 2ntrạng thái ngõ ra. Số trạng thái ngõ ra hay số lượng số đếm khác nhau còn được gọi là Modulus (viết tắt : Mod) do đó, mạch đếm trình bày ở trên còn gọi là mạch đếm mod 16
Bảng sự thật của mạch đếm nhị phân 4 bit như sau :
Số xung vào | Mã số ra sau khi có xung vào | Trị thập phân ra | |||
Q3 | Q2 | Q1 | Q0 | ||
Xoá
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
0
0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 0 0 |
0
0 0 0 1 1 1 1 0 0 0 0 1 1 1 1 0 0 |
0
0 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 0 |
0
1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 |
0
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 0
1 |
Nhìn vào giản đồ xung và bảng trạng thái hoạt động của mạch đếm này ta thấy rằng không phải lúc nào các trạng thái logic các ngõ ra đều thay đổi theo nhịp xung đếm ck đầu vào nên ở đây chỉ là mạch đếm không đồng bộ.
1.2.Giải mã mạch đếm
Với bộ đếm như trên thì có thể làm được gì ?
Chắc chắn là nó có nhiều ứng dụng rồi, hãy xét qua một số ví dụ sau :
Ở phần mạch giải mã để hiển thị led 7 đoạn, mạch đếm đã được ứng dụng để tạo số đếm cho mạch giải mã từ 0000(0) đến 1010(910)
Còn đây là 1 ứng dụng đơn giản khác : yêu cầu được đặt ra là phải biết được mạch đếm đến một số nào đó (chẳng hạn 5) rồi hiển thị ra led.
Bạn đọc có thể dễ dàng nghĩ ngay đến việc sử dụng cổng logic để tạo trạng thái ngõ ra làm sáng led từ tổ hợp trạng thái logic ngõ vào khi mạch đếm đến 5. Cách mắc sẽ như sau :
Hình 1.2.1 Giải mã mạch đếm để hiển thị ra led
Vậy là ta đã có một trò chơi điện tử đơn giản theo kiểu may mắn. Cho bộ đếm hoạt động, người chơi sẽ nhấn một nút vào một thời điểm bất kì để ngưng cấp xung đếm ck, mạch đếm sẽ dừng lại ở con số đang đếm đến. Nếu số này làm đèn led sáng thì người chơi sẽ thắng.
Tất nhiên để hoàn chỉnh ta cần phải có một mạch dao động để cấp xung ck cho mạch đếm chạy (bạn có thể tạo mạch dao động từ cổng logic hay mạch chốt kết hợp với linh kiện thụ động R, C như đã nói ở phần trước).
Một ứng dụng đơn giản khác là dùng mạch đếm này để tạo khoảng xung vuông điều khiển tải (chẳng hạn động cơ chạy hay mở van xả) trong khoảng thời gian 3s đếm từ số 7 đến số 10
Giải pháp để giải bài toán trên là sẽ dùng cổng logic để tạo mạch giải mã số 0111(710) để kích ngõ ra lên cao rồi giải mã số 1010(1010) để kích ngõ ra xuống thấp trở lại. Hai đường giải mã này được đưa vào ngõ Pr và Cl của mạch chốt để đặt ngõ ra lên mức cao khi Pr và xoá nó khi Cl. Mạch thực hiện kết nối như sau :
Hình 1.2.2 Giải mã mạch đếm điều khiển tải
Trong đó NAND1 sẽ giải mã số 7 còn Nand2 sẽ giải mã cho số 10. Ở số đếm thứ 7 của mạch đếm ngõ ra Nand1 xuống thấp preset mạch chốt đặt Q lên cao. Đến khi đếm tới 10 thì ngõ ra nand2 khi này xuống thấp (tất nhiên Nand1 đã trở lại cao rồi) thực hiện xoá ngõ ra Q làm Q xuống thấp.
Khi mạch đếm đến 7 trở lại thì khoảng xung vuông lại xuất hiện. Nó có tính chu kỳ.
Thời gian tồn tại xung vuông được quyết định bởi tần số (chu kì) mạch dao động cấp cho xung ck của mạch đếm, nếu Tck = 1s thì T = 3s. Do đó ta có thể thay đổi f mạch dao động để thay đổi khoảng thời gian điều khiển tải.
Bây giờ bạn hãy thiết kế bộ trò chơi đó chỉ cần dùng 3 FF T (tạo 8 trạng thái ra). Khi người chơi nhấn dừng mạch đếm ở số 5 hay số 10 thì đèn led sẽ sáng.
1.3.Mạch đếm xuống
Ở trước là mạch đếm lên lần lượt chia 2 tần số, số hệ 10 ra tương ứng là từ 0 đến 15. Cũng có khi cần mạch đếm xuống từ 15 xuống 0 chẳng hạn, cách nối mạch sẽ như thế nào?
Hình dưới trình bày cấu trúc mạch đếm xuống nhị phân 4 bit. Ngõ ra Q lần lượt của tầng trước sẽ được nối đến ngõ vào ck của tầng sau đó. Xung đếm ck vẫn tác động ở mức thấp
Hình 1.3.1 Mạch đếm xuống 4 bit không đồng bộ
Các ngõ ra và cách thức xoá mạch, đưa xung vào giống như ở trước.
Ngõ ra Q của tầng FF đầu dổi trạng thái ở đổi cạnh xuống của xung vào các ngõ ra khác đổi trạng thái ở cạnh xuống của ngõ ra Q’, tức là cạnh lên của ngõ ra Q0của FF kề trước.
Dạng sóng ở ngõ vào và các ngõ ra cùng với mức logic sau mỗi xung vào và kết quả số đếm được trình bày như hình dưới đây.
Để ý rằng sau xung ck đầu tiên thì mạch se đếm ngay lên số đếm cao nhất là 15 rồi dần dần xuống 14, … cho tới 0 tổng cộng sau 15 xung ck và tới xung ck thứ 16 mạch sẽ tự động xoá về 15 để đếm xuống trở lại.
Hình dưới đây trình bày cả 2 dạng sóng của mạch đếm lên và xuống bạn có thể so sánh chúng để thấy rõ hơn nguyên lí của sự đếm lên và đếm xuống.
hình 1.3.2 So sánh dạng sóng đếm lên và đếm xuống
Hãy nối dây 4 FF T để tạo ra mạch đếm lên, mạch đếm xuống chia 16, có ngõ ck tác động mức cao.
Hãy thay FF T bằng FF JK và thiết kế tương tự
Thêm một bước nữa là cũng với từng ấy FF ta sẽ thiết kế mạch để có thể đếm lên đếm xuống đều được.
Nhận thấy mạch đếm lên hay xuống là do nối từ ngõ raĠ của tầng trước tới ngõ vào ck của tầng sau do đó ở đây sẽ phải dùng một cổng OR cho 2 ngõ vào. Việc đếm lên xuống được quyết định bởi một ngõ điều khiển chọn chế độ lên hay xuống. Cấu trúc của mạch sẽ được thiết kế như sau :
Hình 1.3.3 Mạch đếm lên hay xuống
Muốn có cả hai dạng sóng đếm lên và đếm xuống như hình ta có thể lấy ra cùng lúc từ các ngõ đảo và không đảo của các tầng FF giống như hình sau :
Hình 1.3.4 Mạch đếm lấy ra dạng sóng đếm lên và đếm xuống
1.4.Mạch đếm tự dừng
Các mạch đếm ở trước tự động quay vòng (đếm lên hết 15 rồi reset để trở lại đếm từ đầu hay đếm xuống đến 0 thì reset trở lại đếm từ 15 xuống) nếu tiếp tục cấp xung Ck cho mạch đếm.
Bây giờ có một yêu cầu là mạch sẽ phải dừng đếm ở một con số nào đó định trước (chẳng hạn 10).
Để thực hiện nó ta phải tìm cách dừng FF đầu tiên. Một cách mà chúng ta đã dùng ở phần “trò chơi may mắn” đó là ngưng cấp xung ck vào .
Nếu muốn mạch tự động làm, có thể dùng cổng logic tổ hợp để khống chế ngõ vào T (chung) của tầng đầu, các ngõ vào cổng logic sẽ là các mã số đếm của số đang đếm tới mà muốn dừng. Hình dưới đây trình bày cách thực hiện:
Hình 1.4.1 Mạch đếm tự dừng ở số đếm 10
II.Mạch đếm không đồng bộ không theo hệ nhị phân (chia 2)
Với mạch đếm dùng n FF mắc nối tiếp thì số mod (số trạng thái logic ra) là 2n, và mạch sẽ đếm từ 0 đến 2n – 1 (4 FF đếm tới 16 trạng thái).
Trong nhiều trường hợp ta cần mạch đếm có số mod không theo 2n, chẳng hạn đếm mod 10 (còn gọi là mạch đếm thập giai hay mạch đếm chia 10) rất hay dùng để hiển thị kết quả đếm ở dạng hệ 10, hay ví dụ khác là trong đồng hồ số cần mạch đếm chia 6 và chia 12 để hiển thị giờ và phút hay bất kì mạch đếm chia mod n nào.
Thường thì trong mạch đếm lên số đếm tăng theo thứ tự liên tục từ 0 đền 2n – 1 rồi quay về 0 để đếm trở lại. Nhưng cũng có thể không tăng theo thứ tự hay thứ tự nhưng không liên tục miễn là đủ số trạng thái n.
Trở lại mạch đếm tự dừng ở hình trên : khi đếm tới một số định sẵn (số 10) mạch sẽ tự dừng, vậy ta có thể cho mạch tiếp tục chạy để đếm trở lại bằng cách đưa ngõ đó tới chân clear thay vì đưa tới chân J, K.
Hình mạch đếm mod 10 được nối như sau :
Hình 2.1.1 Mạch đếm mod 10
Cần để ý là ở xung đếm ck thứ 10 khi số đếm vừa lên 10 thì các trạng thái logic ngõ ra được đưa về khống chế ngõ Cl ngay do đó có thể thấy là số 10 không kịp hiện ra đã phải chuyển về 0.
Thực tế thì do thời gian trì hoãn giữa các cổng logic khoảng vài ns nên vẫn có số đếm 10 trong khoảng thời gian này, ta chỉ quan tâm tới ảnh hưởng này khi cần đòi hỏi mạch hoạt động với độ chính xác cao như trong máy vi tính chẳng hạn.
Ảnh hưởng của trì hoãn được thể hiện rõ hơn qua giản đồ xung sau
Hình 2.1.2 Trì hoãn truyền của mạch đếm không đồng bộ mod 10
Thực tế thì cách thiết kế mạch đếm không theo hệ nhị phân lợi dụng ngõ clear như ở trên không được dùng do:
- Các ngõ ra do được nối với tải khác nhau ảnh hưởng đến ngõ đưa về, rồi trì hoãn truyền qua các cổng logic nữa sẽ phát sinh xung nhọn, các tầng FF sẽ không được xoá đồng thời
- Hơn nữa ngõ clear không còn được tự do để xoá mạch lúc mong muốn.
Do vậy có một cách tạo mạch đếm trên là nghiên cứu sự liên hệ giữa các trạng thái ở các ngõ ra rồi thử nối chúng với các ngõ vào J, K của tầng nào đó cho tới khi thoả bảng trạng thái. Hãy xem cách nối như thế nào:
Trước hết hãy nhìn vào giản đồ xung của mạch đếm mod 16. Tới số đếm thứ 10 thì mạch phải reset trở lại.
- Ngõ ra Q0 không thay đổi gì dù có được xoá hay không vì nó theo xung ck
- Ngõ ra Q1 tới đó phải giữ nguyên trạng thái trong 2 chu kì của xung ck nữa do đó ngõ J, K phải ở mức 0 trong khoảng thời gian này, ta có thể nối từ chân Q3 về J1, K1 vì lúc này Q3 đang ở mức 0 (nó cũng lên 1 sau khi bị xoá)
- Ngõ ra Q2 tới lúc xoá vẫn ở 0 nên không cần thay đổi gì tầng FF 2
- Ngõ ra Q3 khi xoá phải trở lại mức 0 ban đầu, lúc này Q1 ở cao, Q2 ở thấp đồng thời Q0 đang đi xuống, do đó có thể nối Q0 tới ngõ ck của FF 3 và nối cổng and từ Q1 và Q2
Kết quả nối mạch như sau:
hình 2.1.3 Mạch đếm mod 10
Cuối cùng kiểm tra lại thấy thoả hoạt động. Nhưng cách này xem ra “khá rắc rối và như là đoán mò”. Thực ra nó lại rất hay, nó có một phương pháp thiết kế rất đúng và bài bản ta sẽ gặp lại ở phần thiết kế mạch đếm đồng bộ ở phần sau.
Có rất nhiều IC đếm không đồng bộ cả họ TTL và CMOS. Ở đây chỉ giới thiệu một số IC hay dùng :
74LS293
Cấu tạo gồm 4 FF JK với các đầu ra Q0 (LSB), Q1, Q2, Q3(MSB), Q0 để riêng biệt cho phép mạch hoạt động linh hoạt. Các đầu vào J, K đều được nối mức cao ở bên trong.
Mạch có tới 2 đầu vào xung nhịp CP (clock pulse) cũng chính là xung ck mà ta đã biết) cho tầng 0 và tầng 1 để dễ thiết kế nhiều ứng dụng.
Hai ngõ vào không đồng bộ MR1 và MR2 (master reset) nếu cùng tác động mức cao thì sẽ hoạt động như chân clear để xoá mạch.
Sơ đồ logic và sơ đồ khối của IC như sau :
Hình 2.1.4. Kí hiệu khối và chân ra của 74LS293
Hình 2.1.5. Cấu trúc mạch của 74LS293
74LS293 là IC đếm không đồng bộ nhiều kiểu bit ra tuỳ cách mắc dây.
Đếm mod 16 :
Xung nhịp vào sẽ vào chân CP0; chân CP1 nối tới ngõ ra Q0; MR1, MR2 nối chung xuống mass để mạch xoá tự động
Hình 2.1.6. 74LS293 đếm mod 16
Đếm mod 10:
Xung nhịp vẫn vào chân CP0; chân CP1 nối tới Q0 để cho đủ số trạng thái lên đến 10, khi đếm đến 10 Q1, Q3 lên mức cao nên được nối về MR1 và MR2 để xoá mạch
Hình 2.1.7. 74LS293 đếm mod 10
Đếm mod 14:
CP0, CP1 vẫn nối dây như cũ khi đếm tới 14 thì Q3Q2Q1Q0 là 1110 do đó phải nối Q3 tới MR1, Q2, Q1 tới MR2 qua cổng nand.
Hình 2.1.8. 74LS293 đếm mod 14
74LS90, 74LS92, 74LS93
3 IC trên cùng các loạt của nó (LS, HC, …) cũng rất hay dùng. Sơ đồ mạch và sơ đồ chân như hình. Cũng giống như 74LS293 tầng FF đầu khá độc lập để dùng linh hoạt hơn, muốn đếm đầy đủ số trạng thái của IC thì cần phải nối ngõ ra Q0 tới ngõ vào B; hai ngõ reset thường nối AND đề xoá mạch đếm khi đưa lên cao. Khi đếm lên thì cần phải cho 1 trong 2 ngõ này lên cao trong chốc lát (khoảng vài mươi ns) rồi đưa xuống thấp trở lại. Riêng 74LS90 có thêm 2 ngõ reset 9 (R9(0) và R9(1)). Bình thường một trong hai hoặc cả 2 ngõ này được giữ ở thấp, muốn ngõ ra có số đếm là 9 thì phải đưa cả 2 ngõ lên cao.Như vậy ta có thể dùng 74LS93 để làm mạch đếm mod 10, mod 12 hay mod 16 giống như 74LS293 ở trên. Cách mắc dây bạn có thể dễ dàng làm được.
Hình 2.1.9. Chân ra IC đếm 74LS90 74LS92 74LS93
Hình 2.1.10. kí hiệu khối của 74LS90 74LS92 74LS93
Còn khi cần số mod lớn ta có thể dùng 4020 (mod 16384 tức 14 tầng FF) hay 4040 (mod 4096 tức 12 tầng FF). Do dùng nhiều tầng FF và lại thuộc loại CMOS cũ nên tần số hoạt động khá giới hạn chỉ khoảng 2MHz.