Một tính năng phổ biến được sử dụng trong hầu hết các ứng dụng nhúng là mô-đun ADC (Bộ chuyển đổi tương tự sang kỹ thuật số). Các Bộ chuyển đổi Analog sang kỹ thuật số này có thể đọc điện áp từ các cảm biến tương tự như Cảm biến nhiệt độ, Cảm biến nghiêng, Cảm biến dòng điện, Cảm biến Flex và nhiều hơn thế nữa. Vì vậy, trong hướng dẫn này, chúng ta sẽ học cách sử dụng ADC trong MSP430G2 để đọc điện áp Analog bằng Energia IDE. Chúng tôi sẽ giao tiếp một chiết áp nhỏ với bo mạch MSP và cung cấp điện áp thay đổi cho chân Analog, đọc điện áp và hiển thị trên Màn hình nối tiếp.
Tìm hiểu mô-đun ADC:
Tin tưởng tôi, sẽ khó mất 10 phút để kết nối và lập trình MSP430G2 để đọc điện áp Analog. Tuy nhiên, chúng ta hãy dành thời gian tìm hiểu mô-đun ADC trong bảng MSP để có thể sử dụng nó một cách hiệu quả trong tất cả các dự án sắp tới của mình.
Vi điều khiển là một thiết bị kỹ thuật số, có nghĩa là nó chỉ có thể hiểu được số 1 và số 0. Nhưng trong thế giới thực, hầu hết mọi thứ như nhiệt độ, độ ẩm, tốc độ gió, v.v. đều có bản chất tương tự. Để tương tác với những thay đổi tương tự này, bộ vi điều khiển sử dụng một mô-đun gọi là ADC. Có nhiều loại mô-đun ADC khác nhau, loại được sử dụng trong MSP của chúng tôi là ADC 10 bit kênh SAR 8.
ADC xấp xỉ kế tiếp (SAR): SAR ADC hoạt động với sự trợ giúp của bộ so sánh và một số hội thoại logic. Loại ADC này sử dụng điện áp tham chiếu (có thể thay đổi) và so sánh điện áp đầu vào với điện áp tham chiếu bằng bộ so sánh và chênh lệch, sẽ là đầu ra kỹ thuật số, được lưu từ bit quan trọng nhất (MSB). Tốc độ của phép so sánh phụ thuộc vào tần số Đồng hồ (Fosc) mà MSP đang hoạt động.
Độ phân giải 10 bit: ADC này là ADC 8 kênh 10 bit. Ở đây thuật ngữ kênh 8 ngụ ý rằng có 8 chân ADC sử dụng mà chúng ta có thể đo điện áp tương tự. Thuật ngữ 10-bit ngụ ý độ phân giải của ADC. 10-bit có nghĩa là 2 với lũy thừa của mười (2 10) là 1024. Đây là số bước mẫu cho ADC của chúng tôi, vì vậy phạm vi giá trị ADC của chúng tôi sẽ từ 0 đến 1023. Giá trị sẽ tăng từ 0 đến 1023 dựa trên giá trị của điện áp mỗi bước, có thể được tính bằng công thức dưới đây
Lưu ý: Theo mặc định trong Energia, điện áp tham chiếu sẽ được đặt thành Vcc (~ 3v), bạn có thể thay đổi điện áp tham chiếu bằng cách sử dụng tùy chọn analogReference () .
Ngoài ra, hãy kiểm tra cách giao tiếp ADC với các Bộ vi điều khiển khác:
- Làm thế nào để sử dụng ADC trong Arduino Uno?
- Giao tiếp ADC0808 với Vi điều khiển 8051
- Sử dụng Mô-đun ADC của Vi điều khiển PIC
- Hướng dẫn sử dụng Raspberry Pi ADC
Sơ đồ mạch:
Trong hướng dẫn trước, chúng ta đã học cách giao tiếp LCD với MSP430G2, bây giờ chúng ta sẽ thêm một chiết áp vào MSP430 để cung cấp cho nó một điện áp thay đổi và hiển thị giá trị điện áp trên LCD. Nếu bạn không biết về giao diện màn hình LCD, hãy quay lại liên kết ở trên và đọc qua nó, vì tôi sẽ bỏ qua thông tin để tránh ăn năn. Sơ đồ mạch hoàn chỉnh của dự án được đưa ra dưới đây.
Như bạn có thể thấy, có hai chiết áp được sử dụng ở đây, một được sử dụng để thiết lập độ tương phản của màn hình LCD trong khi một được sử dụng để cung cấp điện áp thay đổi cho bo mạch. Trong chiết áp đó, một đầu cực của chiết áp được nối với Vcc và đầu kia được nối với đất. Chân giữa (dây màu xanh) được kết nối với chân P1.7. Đây P1.7 pin sẽ cung cấp một điện áp biến từ 0V (mặt đất) để 3.5V (VCC). Vì vậy, chúng ta phải lập trình chân P1.7 để đọc điện áp thay đổi này và hiển thị nó trên màn hình LCD.
Ở Energia, chúng ta cần biết chân P1.7 thuộc kênh analog nào? Điều này có thể được tìm thấy bằng cách tham khảo hình ảnh dưới đây
Bạn có thể thấy chân P1.7 ở phía bên tay phải, chân này thuộc về A7 (Kênh 7). Tương tự, chúng ta cũng có thể tìm thấy số kênh tương ứng cho các chân khác. Bạn có thể sử dụng bất kỳ chân nào từ A0 đến A7 để đọc điện áp tương tự ở đây tôi đã chọn A7.
Lập trình MSP430 của bạn cho ADC:
Lập trình MSP430 của bạn để đọc điện áp tương tự rất đơn giản. Trong chương trình này sẽ đọc tương tự của giá trị và tính toán điện áp với giá trị đó và sau đó hiển thị cả hai trên màn hình LCD. Các chương trình đầy đủ có thể được tìm thấy ở dưới cùng của trang này, thêm dưới đây tôi giải thích chương trình trong đoạn để giúp bạn hiểu rõ hơn.
Chúng tôi bắt đầu bằng cách xác định các chân LCD. Chúng xác định chân LCD được kết nối với chân nào của MSP430. Bạn có thể tham khảo kết nối của bạn để đảm bảo rằng các chân được kết nối tương ứng
#define RS 2 #define EN 3 #define D4 4 #define D5 5 #define D6 6 #define D7 7
Tiếp theo, chúng tôi bao gồm tệp tiêu đề cho màn hình LCD. Điều này gọi thư viện chứa mã về cách MSP giao tiếp với màn hình LCD. Thư viện này sẽ được cài đặt trong IDE Energia theo mặc định nên bạn không cần phải thêm nó. Ngoài ra, hãy đảm bảo rằng chức năng Liquid Crystal được gọi bằng các tên pin mà chúng ta vừa xác định ở trên.
#include
Bên trong hàm setup () , chúng tôi chỉ đưa ra một thông báo giới thiệu được hiển thị trên màn hình LCD. Tôi không đi sâu nhiều vì chúng ta đã học cách sử dụng LCD với MSP430G2.
lcd.begin (16, 2); // Chúng tôi đang sử dụng màn hình LCD 16 * 2 lcd.setCursor (0,0); // Đặt con trỏ ở hàng thứ nhất, cột thứ nhất lcd.print ("MSP430G2553"); // Hiển thị thông báo giới thiệu lcd.setCursor (0, 1); // đặt con trỏ ở cột thứ nhất, hàng thứ 2 lcd.print ("- CircuitDigest"); // Hiển thị thông báo giới thiệu
Cuối cùng, bên trong hàm loop () vô hạn của chúng tôi, chúng tôi bắt đầu đọc điện áp được cung cấp cho chân A7. Như chúng ta đã thảo luận, bộ vi điều khiển là một thiết bị kỹ thuật số và nó không thể đọc mức điện áp trực tiếp. Sử dụng kỹ thuật SAR, mức điện áp được ánh xạ từ 0 đến 1024. Các giá trị này được gọi là giá trị ADC, để có được giá trị ADC này, chỉ cần sử dụng dòng sau
int val = analogRead (A7); // đọc giá trị ADC từ chân A7
Ở đây hàm analogRead () được sử dụng để đọc giá trị tương tự của chân, chúng tôi đã chỉ định A7 bên trong nó vì chúng tôi đã kết nối điện áp biến đổi ra chân P1.7. Cuối cùng, chúng tôi lưu giá trị này trong một biến gọi là " val ". Kiểu của biến này là số nguyên vì chúng ta sẽ chỉ nhận các giá trị từ 0 đến 1024 được lưu trữ trong biến này.
Bước tiếp theo sẽ là tính toán giá trị điện áp từ giá trị ADC. Để làm điều này, chúng tôi có các công thức sau
Điện áp = (Giá trị ADC / Độ phân giải ADC) * Điện áp tham chiếu
Trong trường hợp của chúng tôi, chúng tôi đã biết rằng độ phân giải ADC của bộ vi điều khiển của chúng tôi là 1024. Giá trị ADC cũng được tìm thấy trong dòng trước đó và được lưu trữ biến có tên là val. Các điện áp tham chiếu tương đương với điện áp mà tại đó các vi điều khiển đang hoạt động. Khi bo mạch MSP430 được cấp nguồn qua cáp USB thì điện áp hoạt động là 3.6V. Bạn cũng có thể đo điện áp hoạt động bằng cách sử dụng đồng hồ vạn năng trên Vcc và chân nối đất trên bảng. Vì vậy, công thức trên phù hợp với trường hợp của chúng tôi như được hiển thị bên dưới
điện áp float = (float (val) / 1024) * 3.6; // công thức chuyển đổi giá trị ADC thành điện áp
Bạn có thể nhầm lẫn với dòng float (val). Điều này được sử dụng để chuyển đổi biến "val" từ kiểu dữ liệu int thành kiểu dữ liệu "float". Sự chuyển đổi này là cần thiết vì chỉ khi chúng ta nhận được kết quả là val / 1024 trong float, chúng ta có thể nhân nó với 3,6. Nếu giá trị nhận được ở dạng số nguyên, nó sẽ luôn là 0 và kết quả cũng sẽ là 0. Khi chúng tôi đã tính toán giá trị ADC và điện áp, tất cả những gì còn lại là hiển thị kết quả trên màn hình LCD. Điều này có thể được thực hiện bằng cách sử dụng các dòng sau
lcd.setCursor (0, 0); // đặt con trỏ vào cột 0, dòng 0 lcd.print ("ADC Val:"); lcd.print (val); // Hiển thị giá trị ADC lcd.setCursor (0, 1); // đặt con trỏ ở cột 0, dòng 1 lcd.print ("Voltage:"); lcd.print (điện áp); // Hiển thị điện áp
Ở đây chúng tôi đã hiển thị giá trị của ADC ở dòng đầu tiên và giá trị của Điện áp ở dòng thứ hai. Cuối cùng, chúng tôi đưa ra độ trễ 100 mili giây và xóa màn hình LCD. Đây là giá trị sẽ được cập nhật sau mỗi 100 triệu.
Kiểm tra kết quả của bạn!
Cuối cùng, chúng tôi đi đến phần thú vị, đó là thử nghiệm chương trình của chúng tôi và chơi với nó. Chỉ cần thực hiện các kết nối như được hiển thị trong sơ đồ mạch. Tôi đã sử dụng một breadboard nhỏ để tạo kết nối và sử dụng dây nhảy để kết nối breadboard với MSP430. Sau khi các kết nối được thực hiện của tôi trông như thế này dưới đây.
Sau đó, tải chương trình được cung cấp bên dưới lên bảng MSP430 thông qua Energia IDE. Bạn sẽ có thể xem văn bản giới thiệu trên màn hình LCD, nếu không điều chỉnh độ tương phản của màn hình LCD bằng chiết áp cho đến khi bạn nhìn thấy các từ rõ ràng. Ngoài ra, hãy thử nhấn nút đặt lại. Nếu mọi thứ hoạt động như mong đợi thì bạn sẽ có thể xem màn hình sau.
Bây giờ hãy thay đổi chiết áp và bạn cũng sẽ thấy điện áp hiển thị trên màn hình LCD ngày càng thay đổi. Hãy để chúng tôi xác minh xem chúng tôi có đang đo điện áp chính xác để làm điều đó hay không, sử dụng đồng hồ vạn năng để đo điện áp qua tâm của POT và mặt đất. Điện áp hiển thị trên đồng hồ vạn năng phải gần với giá trị hiển thị trên màn hình LCD như trong hình dưới đây.
Vậy là xong, chúng ta đã học được cách đo điện áp analog bằng ADC của board MSP430. Giờ đây, chúng ta có thể giao tiếp nhiều cảm biến tương tự với bảng của mình để đọc các thông số thời gian thực. Hy vọng bạn đã hiểu hướng dẫn và thích học nó, nếu bạn có bất kỳ vấn đề gì, vui lòng liên hệ với phần bình luận bên dưới hoặc thông qua diễn đàn. Hãy bắt kịp hướng dẫn khác của MSP430 với một chủ đề mới.