Создать входной сигнал линейного изменения с помощью Arduino Uno

Можно ли как-нибудь сгенерировать входной сигнал линейного изменения от Arduino Uno? Визуальное изображение пульса, который я ищу, выглядит следующим образом: Ввод линейного изменения

С другими микроконтроллерами я мог использовать встроенные ЦАП, однако я знаю, что у Arduino UNO их нет? Есть ли способ использовать PWM или AnalogWrite для вывода импульсов такого типа? Я новичок в программировании Arduino, поэтому немного не уверен. Однако моей следующей догадкой будет использование лестницы R-2R для вывода импульсов такого типа?

, 👍1

Обсуждение

Резисторная лестница – хороший вариант. Например 4 контакта на 16 шагов. Какова частота сигнала, насколько крутым и точным должно быть изменение? Arduino Uno не имеет аналогового выхода. Функция AnalogWrite — это ШИМ (ее следует называть pwmWrite)., @Jot

Да, я думал об использовании лестницы R2R. Время нарастания должно быть очень быстрым (около 150 микросекунд), а затем 50 микросекунд постоянного напряжения. После этого оно может мгновенно упасть до 0. Да, я боялся, что мне может понадобиться лестница R2R., @Muhammad

Функция digitalWrite на Arduino Uno составляет 5 микросекунд. Это может быть (намного) быстрее при записи непосредственно в выходные регистры микроконтроллера. Вместе с функцией задержкиМикросекунды и отключением прерываний тогда это возможно. Частота ШИМ по умолчанию составляет 500 Гц при использовании библиотек Arduino, что слишком медленно., @Jot

@Джот, ааа, я понимаю. Я попробую попробовать. На самом деле я генерирую этот импульс, чтобы активировать мышцы. Хорошо, но вместо прямого вывода в регистры, разве только digitalWrite не сможет достичь этого времени нарастания?, @Muhammad

Нет, это очень быстро, и замедлить его невозможно. 5 микросекунд используются для вызова функции, проверки правильности вывода и поиска регистра и бита для этого вывода: https://github.com/arduino/ArduinoCore-avr/blob/master/cores/arduino/wiring_digital. c#L138 Возможна ли установка подтягивающего резистора, конденсатора и транзистора? Резистор и конденсатор будут подниматься медленно, а транзистор быстро падать., @Jot

@Jot, ааа, я об этом не подумал. Да, я обязательно попробую эти средства. Да, это интересно. Можно ли показать схему того, как выглядит этот тип схемы?, @Muhammad


2 ответа


Лучший ответ:

0

RC-фильтр создаст медленную скорость нарастания.

schematic

Схема создает этот сигнал:

Медленно нарастающий сигнал и быстро падающий сигнал можно создать с помощью дополнительного транзистора (сигнал будет инвертирован).

schematic

Для линейного нарастающего и спадающего фронта простым решением является резисторная сеть с несколькими цифровыми выводами. Я думаю, что его также можно создать с помощью схемы на операционных усилителях, но есть также специальные микросхемы, называемые «ограничителем скорости нарастания».

,

Это невероятно полезно! Большое спасибо!, @Muhammad


1

Похоже, что под «рампой» вы подразумеваете прямоугольную волну с наклонными, а не вертикальными краями между + и -. Можете ли вы уточнить вопрос: должны ли наклонные части быть линейными?

Прямой синтез сигнала может быть выполнен с использованием портов цифрового вывода и лестницы R2R, как предложено в комментариях. Каждый выход таймера ШИМ AVR может управлять выходом двух цифровых выводов и определенно с точностью синхронизации лучше 1 микросекунды. Если требуется высокое разрешение по напряжению, этот метод может не дать желаемого результата.

Другие возможные решения:

  • Форма сигнала, изображенная в исходном сообщении, выглядит как усеченная синусоидальная волна. Такую форму сигнала можно получить путем обрезки синусоидального сигнала с помощью операционного усилителя. Для получения синусоидального сигнала подключите Arduino к модулю DDS, например AD9850/1.

  • Используйте внешний цифро-аналоговый преобразователь, например, MCP48x2

  • Используйте Arduino Zero или другой 32-битный микроконтроллер (например, ARM STM32). Эти микроконтроллеры имеют настоящий аналоговый выходной контакт, но он не биполярный.

,

Да, это может быть любое. Синусоидальная волна или наклонная прямоугольная волна. Я обновлю вопрос. Я рассмотрю все предложенные вами решения. Спасибо вам за помощь!, @Muhammad