Проблема с выходным контактом ШИМ (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 и т. д.), но по какой-то причине светодиод всегда горит. Есть идеи?


, 👍1

Обсуждение

Локс прав, увы. Попробуйте другой контакт и посмотрите, изменится ли он. Попробуйте включить/выключить цифровую запись, чтобы убедиться, что порт ведет себя должным образом. Возможен плохой порт. Какой контакт подключен к серийному номеру?, @Russell McMahon

Убедитесь, что шина заземления (-) на макетной плате обязательно заземляется на Arduino. Если вместо этого будет +5 В, и если ваш светодиод установлен неправильно, вы можете получить, что он будет гореть постоянно. (Пин 9 в основном будет действовать как земля.), @Peter Bloomfield

Смотрите мой обновленный ответ. Ваш код работает, как и ожидалось, на Nano. Проблема, вероятно, связана с аппаратным обеспечением., @Russell McMahon

Куда идет этот красный провод? т.е. другая сторона светодиода случайно не подключена к 5 В? Попробуйте запустить пример скетча Fade (File=>Examples=>01.Basic=>Fade)., @Gerben


4 ответа


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

0

Хорошо, похоже, мое понимание ШИМ было неправильным. Я попробовал схему и код отсюда (http://arduino.cc/en/Tutorial/Fade), и это сработало. как и ожидалось (появляется и исчезает).

На самом деле, когда я писал исходный код, я ожидал, что светодиод будет мигать. Итак, когда я приблизился к 255, я ожидал, что он будет тратить больше времени на «освещение», по сравнению с 0, где он должен тратить меньше времени на «освещение».

Я даже меняю выходное значение pinNine на (64, 127 и т. д.), но для некоторых причина, по которой светодиод всегда горит.

То, что оно освещено, имеет смысл. Что я упустил, так это то, что при меньшем значении яркость становилась тусклее.

Спасибо за вашу помощь.

,

0

У меня есть несколько вещей, которые вы можете попробовать:

  1. Удалите pinMode(pinNine, OUTPUT), он используется только для digitalWrite(), это может повлиять на ШИМ-контроллер.
  2. Вы выбрали правильный чип Arduino в IDE? Arduino сопоставляет контакт 9 с аппаратным контактом (PB1 для UNO), что не одинаково для разных плат.
  3. Попробуйте вставить delay(100) после analogWrite(...). Я не уверен, что вызов AnalogWrite перезапускает цикл ШИМ, что приводит к очень быстрому переключению, которое можно рассматривать как «всегда включенное».

В остальном ваш скетч кажется правильным. Я предполагаю, что черный провод на макетной плате подключен к земле, верно?

,

1

Добавлено вверху:

Ваш код корректно работает на Arduino Nano за 3$ :-)

Весьма вероятно, что у вас какая-то аппаратная проблема.

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

  1. Отсоедините светодиод и т. д. от контакта 9.
    Измерьте напряжение между контактом 5 В и землей. При питании от USB оно обычно будет немного ниже 5 В.

  2. Запустите код со значением AnalogWrite, равным 128, т.е.

    analogWrite(pinNine, 128);

  3. Измерьте напряжение на контакте 9 относительно земли. Оно должно быть близко к половине напряжения на выводе 5 В в пункте 1 выше. Это связано с тем, что значение аналоговой записи контролируется ШИМ со значениями от 0 до 255. 128/255 ~= 50%, поэтому по умолчанию выход составляет 50% от Vref = 5 В. в системе 5 В.

  4. Установите для AnalogWrite значение

     analogWrite(pinNine, 25); 
    
  5. Напряжение на контакте 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


1

Плоская сторона светодиода — -. Это означает, что ваш белый провод находится на стороне -, а красный провод — на стороне +. Следовательно, у вас перепутано соединение шины питания... и, следовательно, ваш светодиод горит, когда вы отправляете 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