PDA

View Full Version : Giao tiếp 3.3V với 5V


vntsinh
16-04-2013, 10:13 AM
Giao tiếp 3.3V với 5V

Bạn đã bao giờ thử nối một cảm biến 3.3V với một vi điều khiển 5V chưa? Việc mà chúng ta đang nói tới là cả một vấn đề ! Tuy nhiên cũng có một số cách mà các thiết bị 3.3V có thể nối một cách an toàn với vi điều khiển 5V. Dưới đây là một ví dụ về cách mà bạn KHÔNG nên mắc một thiết bị 3.3V (như cảm biến áp suất SCP1000-D01 với giao tiếp SPI) với một vi điều khiển 5V (như PIC hay AVR chạy với nguồn 5V). Mặc dù bạn có thể thấy là mạch hoạt động bình thường nhưng tuổi thọ của thiết bị 3.3V sẽ bị rút ngắn lại kha khá. http://i1082.photobucket.com/albums/j361/diendandien/st1.jpg
Nối trực tiếp hai thiết bị sẽ làm quá tải thiết bị 3.3V và thậm chí có thể dẫn đến việc hỏng thiết bị. Thông thường, có một vài cách để giao tiếp hai bộ SPI này với nhau. Có rất nhiều IC bán sắn trên thị trường được thiết kế đặc biệt để chuyển đổi giữa các mức logic. Chúng ta sẽ không bao giờ dùng chúng ! Lý do là trong quá khứ các IC này rất khó để cấp nguồn, ngoài ra dưới đây có một số cách tương đối đơn giản để giao tiếp các mức logic này. Điện trở inline Đây là cách dễ nhất và đơn giản nhất để nối hai thiết bị. Dưới đây là sơ đồ mạch: http://i1082.photobucket.com/albums/j361/diendandien/st2.jpg
R7 và R8 : Điện trở 10K được đặt giữa đường MOSI ( Master Output Slave Input) cũng như đường SCK (Clock). Các điện trở này sẽ làm giảm cường độ dòng điện sẽ chạy tới thiết bị 3.3V. Các diode kẹp nội bộ bên trong thiết bị 3.3V sẽ cố gắng để kiểm soát các tín hiệu đầu vào thiết bị 3.3V do đó có thể bảo vệ các phần còn lại của thiết bị. Các diode kẹp này thường được thấy ở ngõ vào của các thiết bị điện áp thấp. Diode kẹp là những diode được sử dụng để hạn chế điện áp cực đại trên một đường dây với một điện thế cực đại được quết định từ trước. Các điện trở sẽ giảm cường độ dòng điện chạy vào các diode với một cách sắp xếp độ lớn điện trở nhất định. Hạn chế dòng điện sẽ làm giảm khả năng các diode bị hư hại vĩnh viễn. Nếu không có các điện trở được đặt đúng chỗ, những dòng điện cường độ cao sẽ chạ qua diode và mức năng lượng này sẽ phá hủy các diode kẹp này và sau đó là gây hư hại tới các thiết bị. Sự thận trọng luôn cần thiết với phương pháp tiếp cận này khi chúng ta không được đảm bảo rằng các thiết bị 3.3V sẽ chứa các diode kẹp bên trong. Mặc dù hầu hết các thiết bị có diode kẹp này nhưng nếu thiết bị của bạn không có, thì phương pháp này sẽ không làm giảm điện áp ngõ vào của thiết bị. MISO : bạn nên chú ý ràng không có điện trở trên ngõ ra của thiết bị 3.3V (MISO). Bạn không cần bất cứ thứ gì giữa đường này khi nối với thiết bị 5V. http://i1082.photobucket.com/albums/j361/diendandien/st4.jpg
Đây là bảng đặc điểm DC của ATmega8. Chúng ta cần phải kiểm tra xem điện áp tối thiểu với tín hiệu số “1” và điện áp tối đa với tín hiệu số “0”. Nếu vi điều khiển của bạn được cấp nguồn 5V, chúng ta sẽ thấy điện áp cực đại cho VIL là 0.2*5V = 1V. Vì vậy tất cả những tín hiệu điện áp dưới 1V sẽ được coi là tín hiệu số “0”. 0.6*5V = 3V. Tất cả những tín hiệu trên 3V đều được ATmega8 coi là logic “1”. Điều gì sẽ xảy ra nếu bạn có điện áp nằm giữa hai khoảng này ? Đó là một bit không được xác định. Nếu nghi ngờ, hãy làm thử để xem vi điều khiển của bạn có thể diễn giải các tín hiệu được truyền đến không. Miễn là các thiết bị 3.3V có thể xuất ra một tín hiệu 3V (cho logic 1) thì ATmega8 có thể lắng nghe mà không cần phải nối thêm gì ở ngõ ra cả. Bạn nên kiểm tra datasheet của thiết bị 5V để chắc chắn rằng điện áp ngưỡng sẽ nằm trong khoảng 3.3V mà thiết bị của bạn có thể xuất ra. R5 : Điện trở 1K có thể thấy ở đường CS – việc này là có mục đích. Hai điện trở này tạo thành một mạch chia áp trên đường CS đi vào thiết bị 3.3V. Có 3 trường hợp có thể xảy ra : 1. Thiết bị 5V đang reset và CS sẽ được đẩy cao qua R4. 2. Thiết bị 5V yêu cầu CS, dòng điện sẽ được hạn chế qua R5, và thiết bị 3.3V sẽ có điện áp 3.3 – 3.8 V tại chân CS. 3. Thiết bị 5V đặt đường CS vào mức thấp sau đó thiết bị 3.3V sẽ thấy 0.33V trên đường CS. Nếu ta thay đổi điện trở R5 thành 10K thì sao ? Chúng ta sẽ tính lại công thức và thiết bị 3.3V sẽ thấy (10K/20K)*3.3V = 1.65V khi đường CS bị kéo xuống thấp bởi thiết bị 5V. 1.65V không là “1” hay “0” theo thiết bị 3.3V, nó nằm ở ngay giữa! Thiết bị 3.3V sẽ thực sự bối rối. Đó là lí do tại sao chúng ta sử dụng điện trở 1K inline và 10K pull up. Diode Phương pháp này được coi là “an toàn” hơn so với điện trở inline. Phương pháp này cũng hiệu quả dù cho thiết bị 3.3V của bạn có các diode kẹp hay không. http://i1082.photobucket.com/albums/j361/diendandien/st3.jpg
Khi thiết bị 5V truyền mức năng lượng số cao thì diode sẽ chặn bất cứ dòng điện nào chạy vào thiết bị 3.3V. Thiết bị 3.3K sẽ không thấy có sự thay đổi gì và do đó sẽ vẫn được kéo lên tới 3.3V qua điện trở 10K. Còn khi thiết bị 5V truyền mức năng lượng số thấp đến thì diode sẽ được gắn với đất. Điều này sẽ cho phép dòng điện chạy qua diode từ đường 3.3V. Đường ngõ vào của các thiết bị 3.3V sẽ thấy điện áp tới bị tụt qua các diode - thay thế cho điện áp 0V ở chân MOSI, thiết bị 3.3V sẽ có điện áp 0.6V được đặt ở chân MOSI. 0.6V là đủ nhỏ để được coi như số “0” trên nhiều thiết bị. Các diode silicon chuẩn sẽ có điện áp tới trong khoảng 0.6V. Nếu có điện áp thấp hơn điện áp tới này thì sẽ tốt hơn cho ứng dụng này do đó bạn có thể cân nhắc đến việc dùng diode Schottky. Các diode này có điện áp tới chỉ khoảng 0.2V.
MOSFET Đây là một phương án khá phức tạp nhưng cũng có thể dùng để giao tiếp giữa các chân tín hiệu điện áp thấp với tín hiệu điện áp cao. Nếu 3V là quá thấp để có thể coi như là tín hiệu số “1” trong các thiết bị 5V thì mô hình MOSFET sau sẽ giúp bạn. http://i1082.photobucket.com/albums/j361/diendandien/st5.jpg
Trong sơ đồ mạch, thiết bị 3.3V đang truyền tín hiệu đến thiết bị 5V. Khi thiết bị 3.3V truyền “1” (3V), MOSFET sẽ được nối cao, và chân TX-5V sẽ thấy điện áp 5V qua diện trở pull-up R3. Khi thiết bị 3.3V truyền “0” (0V) thì MOSFET sẽ nối đất và chân TX-5 sẽ thấy 0V. Mạch này là một phương pháp tốt để giao tiếp một điện áp thấp với một điện áp cao. Nhưng phải chắc chắn rằng thiết bị điện áp thấp sẽ nằm bên trái của MOSFET. Mạch này sẽ không hoạt dộng với chiều ngược lại (điện áp cao đến điện áp thấp) vởi vì các diode bên trong của MOSFET sẽ được phân cực thuận. Nếu bạn muốn tìm hiểu thêm về mạch MOSFET có thể được dùng để giao tiếp các thiết bị có điện áp khác nhau trên I2C bus thì có thể tham khảo tại : Bi-directional level shifter (http://wwwasic.kip.uni-heidelberg.de/lhcb/Publications/external/AN97055.pdf) d.holmes page on level shifting (http://delphys.net/d.holmes/hardware/levelshift.html) Cách tốt nhất là các bạn nên có tất cả các thiết bị có chung bus. Nếu bạn có một cảm biến 3.3V, bạn nên có vi điều khiển cũng chạy ở 3.3V. Còn nếu không, sử dụng điện trở inline và diode là tất cả những gì bạn cần.