So sánh các giá trị tương tự

Một phần của tài liệu Hướng dẫn lập trình PIC với arduino (Trang 96 - 99)

Các lệnh so sánh tương tự cung cấp chức năng tương đương với mạch so sánh điện tử, đưa ra kết quả đúng / sai dựa trên tín hiệu nào trong hai tín hiệu tương tự được thử nghiệm lớn hơn.

Hình 38. Một bộ so sánh 'kiểm tra' độ lớn tương đối của hai đầu vào tương tự

Biểu tượng mạch cho bộ so sánh điện tử có hình tam giác, với hai đầu vào tương tự ở bên trái và đầu ra kỹ thuật số duy nhất ở bên trái. Một đầu ra cao được tạo ra nếu điện áp được áp dụng cho đầu vào V + , đầu cuối lớn hơn thiết bị đầu cuối được kết nối với đầu vào V thấp hơn (được gọi là đầu vào không đảo ngược và đầu vào đảo ngược, tương ứng). Nếu không, sản lượng thấp sẽ được tạo ra.

15.1 So sánh các giá trị tương tự dựa trên phần mềm

So sánh các giá trị tương tự trong phần mềm là một quá trình gồm ba bước:: 1. Nhập giá trị tương tự đầu tiên.

2. So sánh giá trị này với giá trị thứ hai. 3. Xuất kết quả so sánh ra đầu ra kỹ thuật số.

Hai biến thể có sẵn của thao tác so sánh là CompareGT() CompareLT() để kiểm tra liệu đầu vào có lớn hơn hay nhỏ hơn giá trị tham chiếu tương ứng hay không.

Ví dụ sau kiểm tra xem điện áp tương tự trên đầu vào X0 có lớn hơn điện áp trên đầu vào X1 hay không, thiết lập đầu ra Y0 nếu điều này là đúng

#include <plcLib.h>

/* Programmable Logic Controller Library for the Arduino and Compatibles Comparator - Greater than test between two input pins

Connections:

Analogue Input - potentiometer connected to input X0 (Arduino pin A0) Analogue Input - potentiometer connected to input X1 (Arduino pin A1) Digital Output - LED connected to output Y0 (Arduino pin 3)

*/

void setup() {

setupPLC(); // Setup inputs and outputs }

void loop() {

inAnalog(X0); // Read Analogue Input 0 compareGT(X1); // X0 > X1 ? out(Y0); // Y0 = 1 if X0 > X1, Y0 = 0 otherwise

}

Listing 30. Kiểm tra lớn hơn giữa hai chân đầu vào bằng bộ so sánh (Source: File

> Examples >plcLib > AnalogCompare > GreaterThan)

Cũng có thể so sánh một đầu vào tương tự với một tham chiếu cố định, như được hiển thị trong phần sau thí dụ.

#include <plcLib.h>

/* Programmable Logic Controller Library for the Arduino and Compatibles Comparator - Less than test between an input and a fixed threshold Connections:

Analogue Input - potentiometer connected to input X0 (Arduino pin A0) Digital Output - LED connected to output Y0 (Arduino pin 3)

void setup() {

setupPLC(); // Setup inputs and outputs void loop() {

inAnalog(X0); // Read Analogue Input 0 compareLT(threshold);

out(Y0); // X0 < 500?

}

Listing 31. Kiểm tra so sánh nhỏ hơn giữa đầu vào và ngưỡng cố định (Source: File

> Examples > plcLib > AnalogCompare > LessThanThreshold)

15.2 Một ứng dụng so sánh đơn giản

Trong ví dụ này, một cặp bộ so sánh được sử dụng để kiểm tra xem đầu vào tương tự có nằm trên một ngưỡng trên (lớn hơn 3,5 V) hoặc dưới ngưỡng thấp hơn (nhỏ hơn 1,5 V), như hình dưới đây.

Hình 39. Bộ so sánh ngưỡng kép cho biết đầu vào ở trên hay dưới 'cửa sổ' được phép.

Bộ so sánh trên làm cho đèn LED liên quan của nó sáng nếu điện áp đầu vào, V 1 lớn hơn giá trị cố định ngưỡng 3,5 V. Ngược lại, bộ so sánh thấp hơn cho đầu ra nếu điện áp đầu vào của nó nhỏ hơn ngưỡng điện áp 1,5 V. (Lưu ý cẩn thận cực tính của mỗi kết nối đầu vào bộ so sánh với hiểu cách đạt được các bài kiểm tra 'lớn hơn' hoặc 'nhỏ hơn'.)

Một bản phác thảo tương đương được đưa ra bên dưới, sử dụng cả hai dạng lệnh so sánh cùng nhau với các giá trị ngưỡng được tính toán dựa trên nguồn điện 5 V.

#include <plcLib.h>

/* Programmable Logic Controller Library for the Arduino and Compatibles Comparator - Maximum / minimum test using fixed threshold values Connections:

Analogue Input - potentiometer connected to input X0 (Arduino pin A0) Digital Output - 'High' LED connected to output Y0 (Arduino pin 3) Digital Output - 'Low' LED connected to output Y1 (Arduino pin 5)

Software and Documentation:

http://www.electronics-micros.com/software-hardware/plclib-arduino/

*/

unsigned int lowLimit = 307; // Analogue lower threshold = 307 void setup() {

setupPLC(); // Setup inputs and outputs void loop() {

inAnalog(X0); // Read Analogue Input 0 compareGT(highLimit);

out(Y0); // X0 > upper threshold? inAnalog(X0); // Read Analogue Input 0 compareLT(lowLimit);

out(Y1); // X0 < lower threshold? }

Listing 32. Kiểm tra bộ so sánh tối đa / tối thiểu sử dụng các giá trị ngưỡng cố định

Một phần của tài liệu Hướng dẫn lập trình PIC với arduino (Trang 96 - 99)