Проблема с выходным контактом ШИМ (PWM)
Я только начинаю использовать Arduino и изучаю ШИМ
(http://arduino.cc/en/Tutorial/PWM).
Ниже показано, как выглядит моя схема.
Ниже приведен очень простой код.
const int pinNine = 9; // светодиод подключен к цифровому выводу 9
void setup() {
// инициализируем последовательную связь со скоростью 9600 бит/с:
Serial.begin(9600);
// устанавливаем цифровые контакты как выходы
pinMode(pinNine,OUTPUT);
}
void loop() {
analogWrite(pinNine, 0);
}
Я ожидал, что мой светодиод не загорится, поскольку его рабочий цикл равен 0%. Я даже меняю выходное значение pinNine на (64, 127 и т. д.), но по какой-то причине светодиод всегда горит. Есть идеи?
@noi.m, 👍1
Обсуждение4 ответа
Лучший ответ:
Хорошо, похоже, мое понимание ШИМ было неправильным. Я попробовал схему и код отсюда (http://arduino.cc/en/Tutorial/Fade), и это сработало. как и ожидалось (появляется и исчезает).
На самом деле, когда я писал исходный код, я ожидал, что светодиод будет мигать. Итак, когда я приблизился к 255, я ожидал, что он будет тратить больше времени на «освещение», по сравнению с 0, где он должен тратить меньше времени на «освещение».
Я даже меняю выходное значение pinNine на (64, 127 и т. д.), но для некоторых причина, по которой светодиод всегда горит.
То, что оно освещено, имеет смысл. Что я упустил, так это то, что при меньшем значении яркость становилась тусклее.
Спасибо за вашу помощь.
У меня есть несколько вещей, которые вы можете попробовать:
- Удалите
pinMode(pinNine, OUTPUT)
, он используется только для digitalWrite(), это может повлиять на ШИМ-контроллер. - Вы выбрали правильный чип Arduino в IDE? Arduino сопоставляет контакт 9 с аппаратным контактом (PB1 для UNO), что не одинаково для разных плат.
- Попробуйте вставить
delay(100)
послеanalogWrite(...)
. Я не уверен, что вызов AnalogWrite перезапускает цикл ШИМ, что приводит к очень быстрому переключению, которое можно рассматривать как «всегда включенное».
В остальном ваш скетч кажется правильным. Я предполагаю, что черный провод на макетной плате подключен к земле, верно?
Добавлено вверху:
Ваш код корректно работает на Arduino Nano за 3$ :-)
Весьма вероятно, что у вас какая-то аппаратная проблема.
Если у вас есть вольтметр, вы можете попробовать выполнить эти простые проверки.
Я выполнил это, чтобы быть уверенным, что получил то, что ожидалось, и результаты такие, как вы от меня ожидаете. Используйте измеритель, настроенный на напряжение постоянного тока — типичная схема обычного измерителя хорошо усредняет ШИМ.
Отсоедините светодиод и т. д. от контакта 9.
Измерьте напряжение между контактом 5 В и землей. При питании от USB оно обычно будет немного ниже 5 В.Запустите код со значением AnalogWrite, равным 128, т.е.
analogWrite(pinNine, 128);
Измерьте напряжение на контакте 9 относительно земли. Оно должно быть близко к половине напряжения на выводе 5 В в пункте 1 выше. Это связано с тем, что значение аналоговой записи контролируется ШИМ со значениями от 0 до 255. 128/255 ~= 50%, поэтому по умолчанию выход составляет 50% от Vref = 5 В. в системе 5 В.
Установите для AnalogWrite значение
analogWrite(pinNine, 25);
Напряжение на контакте 9 должно составлять около 10 % от напряжения на контакте 5 В.
ЕСЛИ вы получаете напряжение примерно такое же, как показано в пунктах 3 и 5, ваш код работает нормально и ваше оборудование в порядке. Если нет, то «summat aglae».
Попробуйте другой аналоговый контакт.
Убедитесь, что красный провод светодиода соединяется с землей UNO.
Вольтметр — более надежный способ проверить исправность светодиода, поскольку вы можете видеть фактические числовые значения.
СТАРШЕ:
Всегда очень полезно показывать PIN-коды на фотографиях, чтобы люди могли быть уверены в том, что вы сделали.
Если вы просмотрите весь разъем UNO-R2-R3 с нумерацией, то станет очевидно, что важные выводы одинаковы. Однако если вы видите часть разъема без нумерации/названий контактов, то на R3 на конце ARef разъема имеются дополнительные контакты, которые затрудняют сравнение).
ВИДИМО, у вас есть Arduino UNO R3
Было бы полезно, если бы вы в будущем предоставили реальную модель и ссылку на веб-сайт «на всякий случай». .
Похоже, вы подключились к контакту 9 (как и планировали) При необходимости контакт 9 имеет возможность ШИМ. Кажется, ваш код должен работать.
Таким образом
ЕСЛИ красный провод соединяется с землей, цепь кажется электрически исправной.
Правда?
Код ВЫГЛЯДИТ ОК.
Попробуйте включить/выключить цифровую запись на контакте 9, чтобы увидеть, меняется ли светодиод и работает ли порт должным образом. Возможно, плохой контакт порта.
Какой контакт имеет серийный номер?
Попробуйте другой контакт с возможностью ШИМ и посмотрите, изменится ли он.
ARDUINO UNO R3 с домашней страницы UNO
Распиновка разъема сильно различается в зависимости от модели UNO.
Распиновка UNO менялась между версиями? Я почти уверен, что он подключил его правильно. Изменить: по кнопке сброса на его изображении видно, что это Rev.3., @Allan Nørgaard
@Allan Посмотрите на указанную страницу, чтобы увидеть различия. | Я полагаю, что заядлый поклонник Arduino может сказать не только версию, но и то, в каком уголке виноградника она была выращена и как долго она оставалась в бочке для созревания. НО, когда вы задаете вопрос и у ВАС есть под рукой информация, имеет смысл рассказать как можно больше из того, что вы знаете, что имеет отношение к делу, чтобы лица, отвечающие на вопрос, могли избежать дублирования «исследований»., @Russell McMahon
Я полностью согласен, что это следует отмечать, когда это возможно. ОП, вероятно, не осознавал, что это пригодится (у меня даже нет UNO... :) Я нигде в вашей ссылке не вижу, чтобы распиновка изменилась. Все они оснащены одним и тем же чипом с ШИМ на 3,5,6,9,10,11. Мой старый Duemillanove такой же :), @Allan Nørgaard
@AllanNørgaard - с моей стороны свободная терминология - я имел в виду распиновку или функциональность разъема. На его фотографии вы не видите маркировку модуля, которую можно увидеть на добавленных мною фотографиях. Он подключил его правильно, и на моем UNO за $US3 код работает как положено. У него какая-то аппаратная проблема. Я собираюсь обновить свой ответ., @Russell McMahon
@Рассел МакМахон. Спасибо. В следующий раз, когда я опубликую публикацию, я не забуду показать PIN-коды и фактическую модель. Возможно, вид схемы сверху является наиболее идеальным., @noi.m
Плоская сторона светодиода — -
. Это означает, что ваш белый провод находится на стороне -
, а красный провод — на стороне +
. Следовательно, у вас перепутано соединение шины питания... и, следовательно, ваш светодиод горит, когда вы отправляете 0
на ШИМ. Кстати, вы выключите светодиод, написав 255
на PWM.
Решение: правильно подключите шины питания, и все вернется в норму.
Может быть. Х сказал: «... я даже изменил выходное значение pinNine на (64, 127 и т. д.) ...». Так что это зависит от диапазона значений «etc». При 5 В вы ожидаете ~~~~ I=V/R = (5-3)/220 = ~ 9 мА, а при 2,5 В — около 0 мА. По его словам, он пробовал уровень ШИМ 128 при напряжении ~= 2,5 В, и можно ожидать, что светодиод изменится очень существенно. |"Плоская сторона"? - Мне нужно обновить свои (старые) глаза :-)., @Russell McMahon
Да, я видел, что он написал. Но может быть трудно увидеть изменение интенсивности от 50% до 100%, поскольку наши глаза не линейны, в основном для яркой световой точки. Он не написал, что пробовал 255. Что касается плоской стороны, то это то, что я (тоже старые глаза) вижу слева от светодиода на картинке (не очень отчетливо, признаться)., @MAC
Возможно, ты прав. Никакой уверенности, пока он не ответит на вопросы. Я тоже спрашивал про полярность питания. | НО, похоже, он заметит при полном и половинном напряжении, от 0 до 128, напряжение уменьшается вдвое, но для работы светодиода требуется минимальное напряжение Vf, поэтому яркость будет значительно ниже. |Зеленый светодиод InGaAlP может давать Vf в диапазоне 1,7 В – низкое 2,xV, а зеленый светодиод InGaN может давать напряжение 2,7 В. Даже при 1,7В и 5В приводе I~~~= (5-1,7)/220 =~15 мА, а при 2,5В ~~~= 4 мА. Это зеленый светодиод с очень низким напряжением, а для более высоких значений Vf коэффициент еще больше. При поиске изменений соотношение более 2:1 чрезвычайно заметно., @Russell McMahon
@РасселМакМахон. Поскольку он не фильтрует выходной сигнал, он никогда не будет генерировать напряжение 2,5 В, поэтому средний ток должен быть линейным с кодом. Что не линейно, так это наше восприятие яркости. Но, согласно его ответу ниже, проблема была более фундаментальной, и теперь все решено., @MAC
да/может быть/нет/ ... :-). [**Я создаю светодиодные фонари**](http://public.fotki.com/RussellMc/atw/bogo/sl2africa01/?view=roll#17) – это не делает меня автоматически правым :-) но я прав испытал с этим. . ШИМ Arduino (я читал) имеет частоту 490 Гц, так что да, минимальная фильтрация с паразитной емкостью. | Совместная реакция глаз и светодиодов достаточно близка к линейной при таких уровнях тока. При соотношении 2:1 большинство людей могут различать два источника, просматриваемых по одному. При одновременном просмотре обычно видна разница 1,5:1. При мытье смежных стен среднестатистический пользователь может заметить разницу > 20%., @Russell McMahon
- Какова частота PWM-выхода на Arduino
- Как вывести истинное аналоговое напряжение на выходной контакт
- Не могу контролировать скорость двигателей постоянного тока с помощью analogWrite()
- L298N издает звуковые сигналы и дает сбой при получении определенных значений AnalogWrite
- AnalogWrite никогда не выводит ненулевое напряжение
- «Вручную» генерация ШИМ-сигнала
- Запись нескольких входов в последовательный порт с использованием цикла while
- Что должно произойти при отправке сигнала AnalogWrite на не-ШИМ-вывод?
Локс прав, увы. Попробуйте другой контакт и посмотрите, изменится ли он. Попробуйте включить/выключить цифровую запись, чтобы убедиться, что порт ведет себя должным образом. Возможен плохой порт. Какой контакт подключен к серийному номеру?, @Russell McMahon
Убедитесь, что шина заземления (-) на макетной плате обязательно заземляется на Arduino. Если вместо этого будет +5 В, и если ваш светодиод установлен неправильно, вы можете получить, что он будет гореть постоянно. (Пин 9 в основном будет действовать как земля.), @Peter Bloomfield
Смотрите мой обновленный ответ. Ваш код работает, как и ожидалось, на Nano. Проблема, вероятно, связана с аппаратным обеспечением., @Russell McMahon
Куда идет этот красный провод? т.е. другая сторона светодиода случайно не подключена к 5 В? Попробуйте запустить пример скетча
Fade
(File
=>Examples
=>01.Basic
=>Fade
)., @Gerben