Изолированный аналоговый вход для Arduino
Компоненты и расходные материалы
| | × | 2 | |
| | × | 1 | |
| | × | 1 | |
| | × | 1 | |
| | × | 1 | |
| | × | 1 | |
| | × | 1 | |
| | × | 1 | |
| | × | 1 | |
| | × | 1 | |
| | × | 1 | |
| | × | 1 | |
| многооборотный прецизионный потенциометр 5 кОм | | × | 1 | |
| | × | 1 | |
| | × | 1 | |
| | × | 1 | |
| | × | 1 | |
| | × | 1 | |
| | × | 1 | |
| | × | 4 | |
| | × | 1 | |
Приложения и онлайн-сервисы
Об этом проекте
На сигналы от датчиков поля могут влиять шум, создаваемый скачками напряжения, ударами молнии или другими источниками EMI (электромагнитных помех), а также разностью потенциалов земли. Один из способов избежать большинства этих проблем - использовать полную изоляцию от поля.
Изоляция входного датчика потребует отдельного источника питания для питания полевого устройства и схемы, которая реализует саму изоляцию.
Более подробную информацию можно найти в сообщении, опубликованном в моем блоге:http://ardupiclab.blogspot.it/.
Код
- Интерфейс и программа Arduino
Интерфейс и программа Arduino Arduino
Arduino может измерять частоту двумя способами:
• измерение периода с помощью функции pulsein ();
• измерение частоты с помощью таймеров / счетчиков ЦП с использованием специальных библиотек.
В первом методе дважды используется функция pulsein () для измерения времени ВЫСОКОГО и НИЗКОГО времени сигнала с разрешением в микросекунды. Сумма двух измерений - это период сигнала. Для сигнала 5 кГц период составляет 200 мкс =ВЫСОКОЕ время + НИЗКОЕ время =125 + 75 мкс. Разрешение по времени относительно низкое, и на точность измерения также влияет время программных инструкций.
Положительным моментом этого метода является скорость измерения, которая немного превышает измеряемый период. Недостатком является то, что помимо меньшей точности, он наиболее чувствителен к шуму электрической сети (50 или 60 Гц).
По этим причинам я предпочитаю измерение частоты относительно периода. Время измерения больше, но вы получаете более высокую точность и точное время выборки. Кроме того, выбор периода измерения, кратного периоду измерения электрической сети, обеспечивает превосходную помехозащищенность.
Я использую библиотеку FreqCounter от Мартина Наврата KHM LAB3:
http://interface.khm.de/wp-content/uploads/2009/01/FreqCounter_1_12.zip
Эта библиотека использует Timer / Counter1 для подсчета импульсов на переднем фронте T1 / PD5 / digitalPin5 и Timer / Counter2 для генерации времени стробирования с прерываниями 1 мс.
Я выбрал время стробирования, равное 1000 мс, чтобы отсчитать период в 50 или 60 сетевых циклов. В этом случае вы получите разрешение в пять раз больше, чем у Arduino Uno. #include void setup () {Serial.begin (9600); // подключаемся к последовательному порту Serial.println ("Оптоизолированный аналоговый вход");} long int frq; void loop () {FreqCounter ::f_comp =0; // Устанавливаем компенсацию на 0 FreqCounter ::start (1000); // Начинаем отсчет с гейтом 1000 мс while (FreqCounter ::f_ready ==0) // ждем, пока счетчик не будет готов frq =FreqCounter ::f_freq; // читаем результат Serial.println (frq); // вывод результата delay (100);}
Схема
Схема принимает входное напряжение от 20 мВ до 5 В или ток от 4 до 20 мА (при вставленной перемычке W1). Два параллельных резистора R2 и R3 дают значение около 250 Ом, чтобы иметь ток от 1 до 5 В для входного тока от 4 до 20 мА.
Для подключения схемы к Arduino Uno требуется всего три провода и резистор. Выход оптрона должен быть подключен к цифровому входу D5 с подтягивающим резистором 2,2 кОм, подключенным к + 5В Arduino.
Если требуется входной диапазон 10 В, необходим источник питания 15 В, поэтому вам необходимо заменить регулятор 7808 на 7815. Трансформатор T1 также должен питать датчик, поэтому он должен иметь соответствующее напряжение и мощность. Подстроечный резистор P1 необходимо отрегулировать так, чтобы получить коэффициент преобразования около 1 кГц / В.