AnalogWrite никогда не выводит ненулевое напряжение

Благодаря очень простому подключению светодиода (выдерживающего напряжение 5 В) к земле и к контакту моего Galileo gen2 я никогда не смогу вывести ненулевое напряжение с контакта через analogWrite, независимо от того, является ли вывод цифровым или аналоговым (хотя цифровая ШИМ работает)

Светодиод находится в правильном смещении, и я вызываю pinMode(pin, OUTPUT), прежде чем пытаться вызвать analogWrite(pin, 255) (или любой второй параметр между), хотя в этом нет необходимости.
Светодиод светится, если я вызываю digitalWrite(pin, HIGH) как для аналоговых, так и для цифровых контактов, но не светится вообще для analogWrite(pin, 255) с той же конфигурацией и контакты, а также для любого второго параметра в [0, 255]. Это относится к тому, предпринимается ли попытка вызова в loop() или setup().

Единственный возможный способ заставить светодиод получать питание от analogWrite — это цифровой вывод ШИМ, но я знаю, что другие цифровые выводы могут генерировать прямоугольные импульсы с помощью таймеров и аналогового сигнала. контакты, безусловно, должны иметь возможность использовать ШИМ.

(До сих пор я боялся коротких замыканий, чтобы подключить выход AnalogWrite напрямую к аналоговому входу для считывания напряжения)

Я что-то не понимаю в базовой плате или у меня какая-то странная неисправность?

Спасибо,
Тайсон

, 👍0

Обсуждение

(Я мог бы понять, что это не работает с цифровыми контактами без ШИМ, потому что, возможно, analogWrite не использует таймеры, необходимые для имитации прямоугольной волны, в отличие от функции tone. Но почему бы аналоговым контактам не записывать аналог?!, @Anti Earth

При моделировании на 123d.circuits.io снова только цифровые контакты PWM работают должным образом, но аналоговые и цифровые контакты интерпретируют «analogWrite» как двоичные «digitalWrite», пороговое значение превышает 255/2 (немного отличается от того, что всегда равно 0 на моем Galileo)., @Anti Earth

В соответствии с другим ответом: AnalogWrite ** ТОЛЬКО ** работает на контактах с аппаратной поддержкой PWM *. То, что вы видите, является правильной операцией. * Контроллеры ЦАП с ЦАП могут разрешать аналоговую запись на контактах оборудования ЦАП., @Russell McMahon


3 ответа


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

1

На большинстве плат стандартная реализация analogWrite() Arduino будет производить только ШИМ и только на определенном наборе (цифровых) контактов. Обычно это контакты 3, 5, 6, 9, 10 и 11, хотя на некоторых платах они немного отличаются.

Единственная официальная плата с «настоящим» аналоговым выходом — это Due (контакты DAC0 и DAC1).

Если вам нужно какое-либо другое поведение (например, вывод ШИМ на нестандартные контакты), вам нужно либо изменить реализацию Arduino, либо напрямую манипулировать специальными регистрами микроконтроллера. Однако обратите внимание, что изменение конфигурации чипа может привести к тому, что другие стандартные функции Arduino не будут работать должным образом.

,

Значит, аналоговые контакты не поддерживают ШИМ (они названы так только потому, что могут **считывать** аналог)? Как насчет использования таймеров для создания прямоугольных сигналов, которые имитируют аналоговые сигналы, как обсуждалось здесь: http://arduinoprosto.ru/q/8357/, @Anti Earth

@AntiEarth Да, аналоговые контакты предназначены только для аналогового чтения. Теоретически для выходного сигнала прямоугольной формы таймеры MC обычно могут быть направлены на любой вывод GPIO. Например, функция tone() может выводить на любой вывод, но у нее есть свои ограничения. Важно отметить, что Arduino предназначена только для поддержки подмножества базовых возможностей MC. Официальный веб-сайт Arduino документирует все это, если вам нужно что-то найти., @Peter Bloomfield

Итак, чтобы уточнить / подытожить: только цифровые выводы PWM могут фактически генерировать прямоугольные волны при вызове analogWrite. Другие контакты (обычный и аналоговый) могут получать прямоугольные импульсы с помощью таймеров, но это не реализовано ни в функции analogWrite, ни в определении сервопривода. Я правильно понял?, @Anti Earth

@AntiEarth Вы правы во всем, кроме библиотеки Servo. Он может работать с любым выводом, потому что не использует analogWrite(). Он управляет таймерами напрямую. К сожалению, это означает, что в некоторых случаях он может помешать работе ШИМ, поэтому вы должны быть осторожны с тем, как вы его используете., @Peter Bloomfield

Это прямо противоположно тому, что я обнаружил экспериментально; простые вызовы функций Servo работают только с цифровыми выводами PWM на моем Galileo (gen2); они абсолютно не работают с другими цифровыми или аналоговыми контактами. Тайна продолжается!, @Anti Earth

@AntiEarth Я полагаю, возможно, что Galileo отличается, поскольку в его основе другой чип. Я просто исхожу из того, что говорится в [документации библиотеки Servo] (http://arduino.cc/en/Reference/ServoAttach)! :), @Peter Bloomfield


0

Я не верю, что у Galileo есть цифро-аналоговый преобразователь, а это то, что вы ожидаете. В «экосистеме» Arduino функция AnalogWrite() устанавливает рабочий цикл ШИМ — это что-то вроде аналогового выхода, но не совсем. Вы можете добавить внешнюю схему для фильтра нижних частот ШИМ и создать какой-то пропорциональный постоянный ток, но это может быть хорошим трюком, чтобы он был достаточно чистым для всего, что вы планируете поместить в нисходящий поток.

,

Как обсуждалось здесь http://arduinoprosto.ru/q/8357/why-does-a-piezo-buzzer-not-require-a-pwm-digital-pin-gallileo-gen2/8363?noredirect=1#comment15232_8363 , я просто пытаюсь эмулировать аналоговый сигнал цифровыми прямоугольными импульсами, @Anti Earth


0

Я не уверен, где вы покупаете светодиоды, но те, что я покупаю, не выдерживают 5 вольт. Вам нужно поставить последовательно резистор, что-то в диапазоне от 220 до 510 Ом. Когда вы получаете резисторы для проверки светодиодов, возможно, вы также повредили их. Хорошим признаком этого является наличие цвета, если он явно выключен или тусклый. Если таймеры настроены правильно, цифровая запись установит значение ШИМ, где-то от 8 до 16 бит, в зависимости от используемого Arduino и таймера. Этот выход PWM будет управлять яркостью светодиода. Он делает это, просто включая и выключая его со скоростью, за которой глаза не могут уследить. чем дольше он горит, тем ярче. Надеюсь, это поможет вам освоить трассу.

,