Промышленное производство
Промышленный Интернет вещей | Промышленные материалы | Техническое обслуживание и ремонт оборудования | Промышленное программирование |
home  MfgRobots >> Промышленное производство >  >> Manufacturing Technology >> Производственный процесс

Точное измерение частоты и коэффициента заполнения на Arduino UNO

Компоненты и материалы

Arduino UNO 1 шт.
Символьный LCD 20×4 (HD44780-совместимый) 1 шт.

Инструменты

Программное обеспечение

О проекте

Arduino может использоваться как измерительный прибор для электрических и физических величин. Данный проект демонстрирует измерение частоты, длительности импульса (Ton, Toff) и коэффициента заполнения (duty cycle) прямоугольных импульсов, поданных на цифровой вход.

Схема подключения

Принцип работы

  1. Arduino ждёт фронт импульса на D7.
  2. pulseIn(pin, HIGH) — время высокого уровня (Ton, мкс).
  3. pulseIn(pin, LOW) — время низкого уровня (Toff, мкс).
  4. Период T = Ton + Toff.
  5. Частота f = 1 000 000 / T (Гц).
  6. Коэффициент заполнения D = Ton / T * 100 (%).
  7. Результаты выводятся на LCD каждую секунду.

Измеряемый диапазон ограничен функцией pulseIn (макс. ~3 минуты, мин. ~10 мкс). Для высоких частот (>50 кГц) лучше использовать аппаратные таймеры/прерывания.

Код (Arduino IDE)

#include <LiquidCrystal.h>
LiquidCrystal lcd(8, 9, 10, 11, 12, 13); // RS, E, D4, D5, D6, D7
#define pulse_ip 7

int ontime, offtime, duty;
float freq, period;

void setup() {
  pinMode(pulse_ip, INPUT);
  lcd.begin(16, 4); // 20x4 работает как 16x4 с этой библиотекой
  lcd.clear();
  lcd.print("Freq:"); lcd.setCursor(0,1); lcd.print("Ton:");
  lcd.setCursor(0,2); lcd.print("Toff:"); lcd.setCursor(0,3); lcd.print("Duty:");
}

void loop() {
  ontime = pulseIn(pulse_ip, HIGH);
  offtime = pulseIn(pulse_ip, LOW);
  period = ontime + offtime;
  freq = 1000000.0 / period;
  duty = (ontime * 100) / period; // целочисленно, для точности лучше float

  lcd.setCursor(5,0); lcd.print(freq); lcd.print("Hz");
  lcd.setCursor(4,1); lcd.print(ontime); lcd.print("us");
  lcd.setCursor(5,2); lcd.print(offtime); lcd.print("us");
  lcd.setCursor(5,3); lcd.print(duty); lcd.print("%");
  delay(1000);
}

Схема подключения

См. раздел «Schematics» оригинала: минимальная схема — только Arduino, LCD и входной сигнал на D7.

Производственный процесс

  1. Измерение частоты и фазы в системах питания переменного тока
  2. Надежная система учета рабочего времени на Arduino с RFID и Python
  3. Универсальный Android-пульт на Arduino, 1Sheeld и ИК-управлении
  4. Умный вольтметр на Arduino и смартфоне — простое DIY-проект
  5. Умная банка на ESP8266 + Arduino: мониторинг наполненности в реальном времени
  6. Точное измерение частоты и коэффициента заполнения на Arduino UNO
  7. Управление Arduino-роботом через Firmata и геймпад Xbox One
  8. Измерение массы Земли с Arduino: пошаговое руководство по DIY
  9. Измерение расстояния в реальном времени: Ардуино-сонар с визуализацией в Processing
  10. Цифровой компас в реальном времени на Arduino и Processing