Cách thiết lập một hệ thống cảnh báo khi đo điện áp với USB-6001
- CN, 04 / 2016
- 4283 lượt đã xem
Tổng quan
Bạn thường dựa trên các phép đo để phát hiện và đưa ra các quyết định chính. NI cung cấp một số lượng lớn các sản phẩm thu thập dữ liệu, bao gồm dòng DAQ giá thành thấp cho các ứng dụng cơ bản như ghi dữ liệu đơn giản, các phép đo di dộng, và các phòng thí nghiệm ở các trường đại học. Lựa chọn đúng phần cứng theo yêu cầu cho các ứng dụng và ngân sách của bạn.
Ưu điểm của các nguồn tài nguyên miễn phí của NI có thể giúp bạn phát triển các phép đo nhanh hơn. Trong phần hướng dẫn này, thay đổi một ví dụ trong hàng trăm các ví dụ đo lường được bao gồm với thiết bị của bạn để học cách xây dựng một ứng dụng cơ bản để đo điện áp và cung cấp cho bạn một báo động khi điện áp vượt quá một giá trị cụ thể. Đặc trưng của các sản phẩm NI DAQ giá thành thấp là sự đa dạng của các thiết bị cho các ứng dụng cơ bản loại này. Với hướng dẫn này, chúng ta làm việc với NI USB-6001, tuy nhiên, bạn có thể áp dụng code này với bất kỳ thiết bị NI DAQ có ngõ vào analog và ngõ ra digital.
Các thiết bị này hỗ trợ các phần mềm ANSI C, Visual C++, C#.NET, Visual Basic.NET, NI Labview, NI LabWindowsTM/CVI, và NI Measurement Studio cũng như các phần mềm cấu hình. Chúng tôi sử dụng ANSI cho hướng dẫn này, nhưng bạn có thể thực hiện hướng dẫn này trong các môi trường phát triển ứng dụng hoặc các ngôn ngữ lập trình khác.
Bạn cần những gì?
Phần cứng
- Thiết bị NI DAQ đa năng (hướng dẫn này sử dụng một USB-6001)
- Nguồn cung cấp điện áp
- LED
- Dây điện
Phần mềm
- Trình biên dịch ANSI C (hướng dẫn này sử dụng Microsoft Visual Studio)
- Phiên bản driver NI-DAQmx hỗ trợ thiết bị của bạn (USB-6001 yêu cầu NI-DAQmx 9.9 hoặc cao hơn)
Hướng dẫn phần cứng
Thiết lập thiết bị
Trước tiên, chắc rằng bạn đã cài đặt phiên bản driver NI-DAQmx. Nếu bạn đang sử dụng một thiết bị USB DAQ, một đèn LED màu xanh lá hoặc xanh dương nên bật khi thiết bị được chấp nhận bởi host PC. Mở Measurement & Automation Explorer và xác nhận thiết bị xuất hiện dưới Devices and Interfaces. Chọn nút Seft-Test và xác nhận thiết bị được chấp nhận.
Kết nối nguồn cung cấp điện áp
Để đo điện áp với dạng một single-ended, nối các dây tín hiệu theo sơ đồ bên dưới:
- Nối dây dương của nguồn cung cấp điện áp với AI0
- Nối dây âm của nguồn cung cấp điện áp với AI GND
Nối LED
Trên một LED chuẩn, có hai dây với hai chiều dài khác nhau. Dây dài hơn là dương và ngắn hơn là âm. Chúng ta cấu hình ngõ ra digital như một cực thu hở điều khiển một LED. Nối các tín hiệu theo cấu hình 1 trên sơ đồ bên dưới. Chúng tôi không sử dụng môt điện trở trong hướng dẫn này, tuy nhiên, nhiều LED có thể bị hỏng nếu một điện trở không được sử dụng để hạn dòng cho LED. Sử dụng thông số kỹ thuật của LED để tính toán giá trị điện trở.
- P0.0 được cấu hình như một ngõ ra digital cực thu để hở điều khiển một LED
- P0.2 được cấu hình như một ngõ ra digital tích cực điều khiển một LED
- P0.4 được cấu hình như một ngõ vào digital nhận một tín hiệu TTL từ một cổng đảo
- P0.7 được cấu hình như một ngõ vào digital nhận một tín hiệu 0V hoặc 5V từ một công tắc.
Hướng dẫn phần mềm
Sơ đồ dòng chảy chương trình và bắt đầu với một ví dụ
Đối với ứng dụng của bạn, chúng ta cần cấp nguồn cho LED khi điện áp vượt quá 5V, Đề làm điều này, chúng ta cần thiết lập một chương trình tạo và cấu hình một kênh ngõ vào analog và ngõ ra digital, thu một mẫu điện áp, và xác định nếu điện áp lớn hơn 5V. Nếu điện áp lớn hơn 5V, chúng ta cần ghi vào ngõ ra digital và nếu nó không lớn hơn, chúng ta cần đọc một mẫu khác. Sau khi chúng ta đã thu tất cả các giá trị đọc mà chúng ta cần, chúng ta có thể xóa tác vụ và thoát khỏi chương trình.
Thay vì phải xây dựng toàn bộ ứng dụng, chúng tôi sẽ sử dụng một trong các chương trình ví dụ được bao gồm với thiết bị DAQ của bạn. Bạn có thể tìm các chương trình ví dụ này cho OS của bạn bằng cách vào ni.com/info và nhập vào daqmxexp. Chúng ta làm việc với một ví dụ ANSI C. Cụ thể, chúng ta sẽ điều chỉnh một ví dụ đo điện áp được gọi là VC_Acq_IntClk, để thu một số lượng dữ liệu hữu hạn.
Chép chương trình ví dụ vào thư mục cá nhân của bạn
Chép chương trình ví dụ từ vị trí ban đầu của nó vào thư mục cá nhân của bạn, sau đó sửa chương trình của bạn, không ghi đè lên ví dụ ban đầu.
Mở chương trình
Điều đầu tiên bạn nên thông báo trong chương trình của bạn bằng các chú thích mở rộng trong đoạn code, việc này cung cấp hướng dẫn về cách chạy chương trình, cách kết nối I/O của bạn, và nơi các chức năng hiện có được thực thi trong code của bạn. Trong ví dụ này, có bốn phần trong đoạn code: DAQmx Configure Code, DAQmx Start Code, DAQmx Read Code, và DAQmx Stop Code.
Điều chỉnh code của bạn
Để đạt được các chức năng bạn cần từ chương trình của chúng tôi, bạn phải điều chỉnh ví dụ để thêm vào một tác vụ digital output và để thay đổi analog input từ thu thập hữu hạn thành liên tục. Làm theo các bước sau để điều chỉnh chương trình.
- Khai báo một tác vụ digital output và đặt lại tên tác vụ analog input của bạn
Một tác vụ là một sự thu thập của các kênh ảo, định thời và thông tin trigger, và các thuộc tính khác liên quan đến thu thập hoặc khởi tạo. Trong NI-DAQmx, bạn phải có một tác vụ duy nhất được dành riêng cho các chức năng khác nhau như analog input và digital output. Trong đoạn code, chúng ta cần khai báo các tác vụ này với các ký hiệu riêng biệt để chúng ta có thể tham chiếu chúng thông qua đoạn code. Đặt lại tên tác vụ analog input của bạn bằng cách sử dụng Find and Replace để tìm tất cả các tham chiếu đến tác vụ của bạn và thay thế tham chiếu với ký hiệu riêng biệt. Trong đoạn code bên dưới, chúng ta thay thế taskHandle bằng AltaskHandle để phân biệt giữa tác vụ analog input và tác vụ digital output.
int32 error = 0;
TaskHandle AItaskHandle = 0;
TaskHandle DOtaskHandle = 0;
float64 data = 0.0;
int32 i = 0;
char errBuff[2048] = { ‘\0’ };
- Cấu hình các tác vụ analog input và digital output
Để tương tác với thiết bị, trước tiên bạn phải tạo các tác vụ và giữ các kênh bạn cần để đo lường dữ liệu vào hoặc ghi dữ liệu đến. Cho phép các giá trị mặc định cho các tác vụ analog input. Đối với tác vụ digital output, thêm code sau để tạo tác vụ và tham chiếu thiết bị và kênh vật lý. Trong đoạn code dưới đây, USB -6001 chúng ta đang sử dụng được đặt tên Dev1 và chúng ta cấu hình cả hai tác vụ AI và DO trong phần này của code.
Nhận thấy rằng đối với ví dụ này, chúng ta triệt tiêu cấu hình của mẫu clock định thời. Thay vào đó, chúng ta kiểm tra mỗi giá trị mẫu cho một giá trị lớn hơn 5V.
/*********************************************/
// DAQmx Configure AI and DO Code
/*********************************************/
DAQmxErrChk(DAQmxCreateTask(“”, &AItaskHandle));
DAQmxErrChk(DAQmxCreateAIVoltageChan(AItaskHandle, “Dev1/ai0”, “”, DAQmx_Val_Cfg_Default, -10.0, 10.0,DAQmx_Val_Volts, NULL));
DAQmxErrChk(DAQmxCreateTask(“”, &DOtaskHandle));
DAQmxErrChk(DAQmxCreateDOChan(DOtaskHandle, “Dev1/port2/line0”, “”, DAQmx_Val_ChanForAllLines));
- Thêm digital output vào Start code
Khi chương trình thực thi, bạn cần các tác vụ analog và digital bắt đầu tại cùng thời điểm. Điều này cho phép việc ghi giá trị số xảy ra càng sớm càng tốt khi phát hiện một giá trị đọc lớn hơn 5V, thay vì mỗi lần bắt đầu tác vụ bạn cần ghi một giá trị số. Mỗi lần bắt đầu một tác vụ cần rất nhiều tài nguyên và không cho phép chương trình của bạn chạy một cách hiệu quả.
/*********************************************/
// DAQmx Start Code
/*********************************************/
DAQmxErrChk(DAQmxStartTask(AItaskHandle));
DAQmxErrChk(DAQmxStartTask(DOtaskHandle));
- Cấu hình một vòng lặp For để đọc và kiểm tra các giá trị điện áp với mỗi lần đọc
Đối với phần này của code, chúng ta thay thế hoàn toàn code đang tồn tại trong ví dụ, đọc số lượng các mẫu hữu hạn và in số lượng mẫu đọc. Với ứng dụng này, chúng ta thực hiện một vòng lặp For để thu thập 100 mẫu và in giá trị điện áp của mỗi mẫu đó và sau đó sử dụng một cấu trúc Case kiểm tra giá trị điện áp. Nếu giá trị vượt quá 5V, chúng ta sẽ ghi đến đường digital và cấp nguồn LED.
Lưu ý chức năng sleep trong đoạn code. Chức năng này delay thời gian thu thập dữ liệu khoảng 100 ms, cho chúng ta thời gian để điều chỉnh điện áp và thấy được sự đáp ứng của chương trình.
*********************************************/
// DAQmx Read Code and Write if Value Exceeds 5 V
/*********************************************/
for (i = 0; i < 100; i++) {
DAQmxErrChk(DAQmxReadAnalogScalarF64(AItaskHandle, 10, &data, NULL));
printf(“Voltage value: %0.2f\r”, data);
if (data > 5.0)
{
DAQmxErrChk(DAQmxWriteDigitalScalarU32(DOtaskHandle, TRUE, 10, FALSE, NULL));
}
else
{
DAQmxErrChk(DAQmxWriteDigitalScalarU32(DOtaskHandle, TRUE, 10, TRUE, NULL));
}
_sleep(100);
}
- Thêm xử lý lỗi cho tác vụ digital output
Một cách tốt nhất để thực hành lập trình là ra lệnh cho chương trình xử lý một lỗi. Trong trường hợp này, chúng ta đã xác định để Stop và Clear tác vụ khi một lỗi xảy ra. Tác vụ Stop dừng thực hiện trong code và tác vụ Clear rời khỏi tài nguyên được dành riêng cho tác vụ, như thiết bị và kênh.
Ngoài ra, chúng ra cần chú ý người dùng chương trình rằng một lỗi đã xảy ra vì thế chương trình dừng đột xuất mà không có bất kỳ giải thích nào. Sau khi các tác vụ đã được xóa một thông báo được hiển thị đến người dùng rằng một lỗi đã xảy ra và ký hiệu lỗi được hiển thị, vì thế người dùng có thể bắt đầu gỡ lỗi.
Error:
if (DAQmxFailed(error))
DAQmxGetExtendedErrorInfo(errBuff, 2048);
if (DOtaskHandle != 0) {
DAQmxStopTask(DOtaskHandle);
DAQmxClearTask(DOtaskHandle);
}
if (AItaskHandle != 0) {
DAQmxStopTask(AItaskHandle);
DAQmxClearTask(AItaskHandle);
}
if (DAQmxFailed(error))
printf(“DAQmx Error: %s\n”, errBuff)
Chạy chương trình của bạn
Khi chương trình bắt đầu thu thập điện áp, mở nút On nguồn cung cấp để điều chỉnh điện áp cao hơn 5V và quan sát LED sáng. Giảm điện áp dưới 5V và quan sát LED tắt.
Dịch từ NI Tutorial “How to Set up A Voltage Measurement Alarm System”