Создать входной сигнал линейного изменения с помощью Arduino Uno
Можно ли как-нибудь сгенерировать входной сигнал линейного изменения от Arduino Uno? Визуальное изображение пульса, который я ищу, выглядит следующим образом:
С другими микроконтроллерами я мог использовать встроенные ЦАП, однако я знаю, что у Arduino UNO их нет? Есть ли способ использовать PWM или AnalogWrite для вывода импульсов такого типа? Я новичок в программировании Arduino, поэтому немного не уверен. Однако моей следующей догадкой будет использование лестницы R-2R для вывода импульсов такого типа?
@Muhammad, 👍1
Обсуждение2 ответа
Лучший ответ:
RC-фильтр создаст медленную скорость нарастания.
Схема создает этот сигнал:
Медленно нарастающий сигнал и быстро падающий сигнал можно создать с помощью дополнительного транзистора (сигнал будет инвертирован).
Для линейного нарастающего и спадающего фронта простым решением является резисторная сеть с несколькими цифровыми выводами. Я думаю, что его также можно создать с помощью схемы на операционных усилителях, но есть также специальные микросхемы, называемые «ограничителем скорости нарастания».
Это невероятно полезно! Большое спасибо!, @Muhammad
Похоже, что под «рампой» вы подразумеваете прямоугольную волну с наклонными, а не вертикальными краями между + и -. Можете ли вы уточнить вопрос: должны ли наклонные части быть линейными?
Прямой синтез сигнала может быть выполнен с использованием портов цифрового вывода и лестницы R2R, как предложено в комментариях. Каждый выход таймера ШИМ AVR может управлять выходом двух цифровых выводов и определенно с точностью синхронизации лучше 1 микросекунды. Если требуется высокое разрешение по напряжению, этот метод может не дать желаемого результата.
Другие возможные решения:
Форма сигнала, изображенная в исходном сообщении, выглядит как усеченная синусоидальная волна. Такую форму сигнала можно получить путем обрезки синусоидального сигнала с помощью операционного усилителя. Для получения синусоидального сигнала подключите Arduino к модулю DDS, например AD9850/1.
Используйте внешний цифро-аналоговый преобразователь, например, MCP48x2
Используйте Arduino Zero или другой 32-битный микроконтроллер (например, ARM STM32). Эти микроконтроллеры имеют настоящий аналоговый выходной контакт, но он не биполярный.
Да, это может быть любое. Синусоидальная волна или наклонная прямоугольная волна. Я обновлю вопрос. Я рассмотрю все предложенные вами решения. Спасибо вам за помощь!, @Muhammad
- Почему пассивный зуммер щелкает, а не гудит, когда установлен на ВЫСОКИЙ?
- Как получить общее среднее полученных данных
- Датчик напряжения Калибровка
- Можно ли питать Wemos D1 R2 через контакты VIN и GND?
- Как запитать 6 серводвигателей от батареи для создания робота-манипулятора?
- Питание Arduino от батареи и считывание напряжения батареи
- Подключение ACS 712 30A к солнечной панели с помощью Arduino
- Функция AnalogRead Возможности считывания напряжения переменного тока
Резисторная лестница – хороший вариант. Например 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