Как создать короткий (0,5 мкс) электрический импульс (амплитуда 50 мВ)

Я работаю над детектором заряженных частиц, состоящим из пластикового сцинтиллятора и SiPM для создания электрического сигнала, и использую Arduino с АЦП для обнаружения этих импульсов.

Я хотел бы создать схему, которая могла бы эмулировать импульс от детектора дома, в то время как я оставляю детектор в лаборатории, пока разрабатываю осциллограф Arduino.

В идеале я хотел бы создать два импульса, как я описал в заголовке, с интервалом в 1-2 микросекунды между ними и иметь возможность изменять это время.

Создать периодический сигнал с этими свойствами достаточно просто, но как лучше всего создать всего один или два импульса?

, 👍1


3 ответа


0

Если вам требуется управление синхронизацией примерно в 0,5 микросекунды, я думаю, этого можно добиться даже с помощью платы класса Arduino Uno, используя активное ожидание, как обсуждается на следующем веб-сайте. (Но на практике лучшим способом подтверждения будет мониторинг генерируемого импульса с помощью осциллографа.)

Ссылка: Очень короткие задержки — Форум Arduino

Что касается амплитуды 50 мВ, стандартные платы Arduino не имеют порта ЦАП (цифро-аналогового преобразователя), который мог бы управляться такими короткими импульсами, поэтому напрямую это может быть невозможно. Однако, если выходное сопротивление не имеет значения, можно понизить выходное напряжение 5 В до 50 мВ с помощью резистивного делителя напряжения (например, с коэффициентом 1/100). Если же сопротивление имеет значение, потребуется буферная схема, например, транзистор или операционный усилитель.

Надеюсь, это поможет!

,

1

Предполагая, что вы используете Arduino на базе AVR с частотой 16 МГц, вы можете добиться такого результата. коротких импульсов, если:

  • Вы используете прямое управление портами
  • Вы учитываете тот факт, что изменение выходных данных таким образом занимает два циклы ЦП
  • Вы создаете задержки с помощью _delay_us(), который объявлен в <util/delay.h>
  • вы отключаете прерывания во время импульсов

Вот пример функции, которая делает это на выводе 2 (PD2 на AVR микроконтроллер):

// Подаем импульс длительностью 0,5 мкс на вывод 2 = PD2.
void send_short_pulse()
{
    noInterrupts();
    PORTD |= _bit(PD2);  // устанавливаем выход HIGH
    _delay_us(0.375);
    PORTD &= ~_bit(PD2);  // устанавливаем выход в НИЗКИЙ уровень, это занимает 0,125 мкс
    interrupts();
}

Как отметил Ацуши Ёкояма, вам придется настроить сигнал вне Arduino.

,

0

Если хотите упростить себе жизнь и избежать хлопот с управлением портами и т.п., используйте более продвинутую (32-битную) плату. Например, Arduino Nano 33 или Teensy4.

Также обратите внимание, что АЦП работают гораздо медленнее микросекунд, поэтому создать импульс легко, но обнаружить его сложнее. В Teensy есть быстрый компаратор, который, вероятно, справится с этой задачей. Это фантастический зверь, быстрее и дешевле, чем Nano33, насколько я знаю, и Пол Стоффегрен предлагает поддержку, так что вы не пожалеете, если решите пойти этим путём.

,

Этот ответ был бы более полным, если бы вы могли показать код, который создает импульс длительностью 0,5 мкс на любой из этих плат., @Edgar Bonet