Система генерации импульсов по конфигурации, заданной диаграммой Ганта
Предназначен для тестирования механических систем (например, топливной системы автомобиля) на стенде с использованием эмуляции сигналов, которые обычно формируются бортовым компьютером в рабочем режиме. Серийный бортовой компьютер не всегда позволяет варьировать параметры в необходимом диапазоне. Поэтому используется данная система, к которой подключаются выходы датчиков и управление исполнительными механизмами (формами, клапанами и т.д.).
Поскольку контроллер генерирует логические сигналы с напряжением 5В, субдатчики и исполнительные устройства необходимо подключать через дополнительные цепи понижения или повышения напряжения или через быстродействующие реле.
Последовательность импульсов задается программно путем изменения прошивки контроллера, подключенного к ПК.
Начало генерации импульсов может быть привязано как к окончанию предыдущей последовательности, так и к срабатыванию подключенного датчика (появление логического нуля или единицы) или к нажатию кнопок управления.
Программирование пульса
Последовательность импульсов задается программно путем создания объектов типа Импульс
в соответствующем месте прошивки
Для этого используется следующая структура:
Impulse(ValvePin, Start, Time, Pause, Number, TriggerPulse, TriggerSensor, TriggerLimit)
Здесь:
ValvePin
– номер контакта контроллера, на который будет формироваться импульс;
Start
– задержка включения импульса после старта, мс;
Time
– Длительность импульса, мс;
Pause
– Задержка между импульсами, мс (необязательный параметр, по умолчанию Pause=0
);
Number
– Количество импульсов (необязательный параметр, по умолчанию Number=1
);
TriggerPulse
— номер предыдущей последовательности, завершение которой приведет к запуску текущей последовательности. (необязательный параметр, по умолчанию TriggerPulse =-1
);
TriggerSensor
– Количество датчиков, запускающих запуск последовательности импульсов (необязательный параметр, по умолчанию TriggerSensor=-1
);
TriggerLimit
– значение от датчика, превышение которого приведет к запуску текущей последовательности. Указывается в диапазоне от 0 до 1024, что соответствует напряжению на соответствующем выводе от 0 до 5В с шагом 0,005В (Необязательный параметр, по умолчанию TriggerLimit=615
, что соответствует срабатыванию при напряжение выше 3В);
[!NOTE]
Если последние три дополнительных параметра не указаны, то задержка импульса будет отсчитываться от начала рабочего режима (нажатия кнопки «Старт»)
Примеры задачи для разных конфигураций импульсов:
Формирование одиночного импульса:
Например, команда Impulse(2,1300,100)
сгенерирует один импульс длительностью 6 мс на выводе № 4 через 1,3 секунды после команды «Выполнить».
Формирование последовательности повторяющихся импульсов:
Например, команда Impulse(2,10000,1000,500,10)
сгенерирует последовательность из 10 импульсов на выводе №2, длительность каждого импульса 1 секунда, пауза между импульсами составляет 0,5 секунды. В этом случае последовательность запускается через 10 секунд после команды запуска.
Последовательность импульсов, в которой начало одного импульса зависит от завершения предыдущего импульса:
Чтобы создать зависимость, необходимо указать необязательный параметр TriggerPulse. Он указывает порядковый номер последовательности, конец которой будет служить началом текущей.
Например, команда Impulse(3,4000,100,300,15,2)
сгенерирует на выводе №3 последовательность из 15 импульсов длительностью 100 мс с паузой между импульсами 300 мс. Эпизод начинается через 4 секунды после окончания эпизода №2
Последовательность импульсов, инициируемая показаниями датчика:
Чтобы создать зависимость последовательности от датчика, необходимо указать дополнительный параметр TriggerSensor. Он указывает количество датчиков. которые запускают начало последовательности импульсов. По умолчанию порог срабатывания установлен на 3В (порог перехода от логического нуля к логической 1)
Например, команда Impulse(5,0,7000,0,1,-1,0)
сгенерирует один 7-секундный импульс на выводе №3, который начнется в тот момент, когда С датчика №0 поступает напряжение более 3В.
При необходимости триггер может быть установлен на любое напряжение в пределах измерений; для этого после параметра TriggerPulse необходимо также установить параметр TriggerLimit
. Значение может находиться в диапазоне от 0 до 1024, что будет соответствовать напряжению срабатывания от 0 до 5В с шагом 0,005В.
Например, команда Impulse(6, 1500, 2000, 500, 2,1,1, 920)
создаст последовательность из 2 импульсов длительностью 2000 мс и паузой между импульсами 500 мс. Последовательность начинается через 1,5 с после того, как датчик №1 получает напряжение более 4,5 В
Регулирование частоты импульсов в зависимости от показаний датчика (регулирование частоты)
Позволяет изменять частоту импульсов одной из последовательностей пропорционально напряжению с датчика.
Чтобы создать зависимость, необходимо добавить объект типа SensorScaler
Для этого используется следующая структура:
Impulse(SensorNumber, TargetPulseNumber, ZeroPulseDelay, ZeroPulseTime, ZeroPulsePause, StartScaling, TimeScaling,PauseScaling)
Здесь:
SensorNumber
– Номер датчика, который будет изменять пульс;
TargetPulseNumber
– номер последовательности импульсов, которую нужно контролировать;
StartScaling
– Коэффициент, на который увеличится задержка перед началом последовательности импульсов;
TimeScaling
— Коэффициент, на который увеличится длительность импульса;
PauseScaling
— Коэффициент, на который увеличится пауза между импульсами;
ZeroPulseDelay
– Задержка перед началом импульсов, соответствующая показаниям датчика 0 В (опционально, по умолчанию ZeroPulseDelay =-1
);
ZeroPulseTime
— длительность импульса, соответствующая показаниям датчика 0 В. (необязательно, по умолчанию ZeroPulseTime =-1
);
ZeroPulsePause
— пауза импульса, соответствующая показаниям датчика 0 В. (необязательно, по умолчанию ZeroPulsePause =-1
);
[!NOTE]
Значения коэффициентов масштабирования
StartScaling
,TimeScaling
,PauseScaling
соответствуют тому, во сколько раз изменится исходное значение при напряжении с датчика 5В. . Например, коэффициент 2 увеличит исходное значение параметра в два раза при напряжении 5В, а при напряжении 0,5В увеличит его всего на 20%. Отрицательный коэффициент уменьшит параметр относительно исходного значения. Например, дляTimeScaling=-1
при напряжении 2,5В значение параметра будет 50% от исходного, при напряжении 0,5В – 10% от исходного
[!NOTE] Значение 0 для коэффициентов масштабирования
StartScaling
,TimeScaling
илиPauseScaling
не приведет к изменению соответствующего параметра в зависимости от датчика.
[!NOTE] Значение -1 для параметров
ZeroPulseDelay
,ZeroPulseTime
илиZeroPulsePause
не будет дополнительно устанавливать значение параметра равным 0. , т.е. будет учитываться только исходное значение параметра.
Например, следующая комбинация команд:
Impulse(3, 0, 100, 300, 100)
SensorScaler(3, 3, 0, 3.33, 3.33, 1, 0, 0)
сформирует на выводе D3 серию импульсов, параметры которых будут соответствовать напряжению на выводе A3. Для напряжения 1,5 В – длительность импульса 100 мс с паузой 300 мс, для напряжения 4,5 В – 300 мс и 900 мс соответственно
Основные характеристики
- Главный контроллер — Arduino Uno
- Процессор – 16 МГц, ATmega328P
- Память контроллера — 32 КБ Flash + 2 КБ SRAM + 1 КБ EEPROM.
- Аналоговый вход контроллера – 10 бит (1024 уровня)
- Разрешение аналогового входа контроллера – 0,00448 В
- Выходное напряжение для импульсов – 5В
- Максимальная частота импульсов — 1000 Гц (длительность 1 мс).
- Номинальная входная мощность –5 В 0,5 А
- Рабочая температура: – -10..+85 °С)
- Размеры – 50x25x20 мм (компоненты собраны в корпусе).
- Вес – 50 г (с пластиковым футляром).
Компоненты
- Arduino Uno – 1шт.
- Кнопка без фиксации – 1 шт.
- Клапаны – до 12шт.
- Аналоговые датчики – до 6 шт.
Схема подключения
Дальнейшее развитие системы
- Добавление дополнительных опций логики формирования импульсов и триггеров (появление сигнала определенной частоты и т.п.);
- Добавление графического интерфейса для генерации импульсной задачи (настольное или мобильное приложение);
- Добавление элементов управления для запуска независимых программ тестирования, наборов параметров и т. д.
- Беспроводное управление (Bluetooth, 1,2 ГГц и т. д.);
- Добавление ЖК-экрана, отображающего состояние пульса и показания датчиков в режиме реального времени;
- Регистрация всех данных;
- Добавление триггера превышения показания с дополнительными действиями (включение/выключение реле, выдача логических сигналов, звуковая сигнализация и т.д.);
- Добавление независимого источника питания;
- Веб-интерфейс;
- Перенос и сохранение данных в облаке;