Чтение аналогового значения при генерации сигнала ШИМ
Я пытаюсь одновременно сгенерировать яркость двух светодиодных лент, генерируя два сигнала ШИМ на основе значения потенциометра. Горшок определяет, насколько яркой будет каждая светодиодная лента. Для этого я использую Arduino Pro Micro с чипом Atmel 32u4.
Я использую следующий код:
int sensorValue = 0;
int outputValue = 0;
void setup() {
}
void loop() {
sensorValue = analogRead(A0);
outputValue = map(sensorValue, 0, 1023, 0, 255);
analogWrite(5, outputValue);
analogWrite(6, 255 - outputValue);
delay(2);
}
Проблема в том, что analogRead
никогда не возвращает 1023, когда горшок полностью открыт. Значение всегда около 980. Само по себе это не имеет большого значения.
Основная проблема заключается в том, что analogRead
невероятно шумен. Значение, возвращаемое для максимальной позиции, находится в диапазоне [940–1020].
Когда я не использую analogWrite
для генерации ШИМ, проблема исчезает, и входной сигнал кристально чист в диапазоне [0-1023], как и ожидалось.
Я пытался отключить ШИМ перед считыванием значения, но это вызывает мерцание, поскольку светодиоды временно выключены.
Есть ли какое-либо аппаратное или программное решение этой проблемы? Я не против написать какую-нибудь сборку, если потребуется.
@jnovacho, 👍0
Обсуждение1 ответ
Проблема связана с источником питания. Это светодиодная лента USB, поэтому я запитал ее через Arduino, что, как оказалось, было плохой идеей.
Когда я добавил в схему внешний источник питания, все стало работать правильно.
- AnalogWrite никогда не выводит ненулевое напряжение
- «Вручную» генерация ШИМ-сигнала
- Arduino включение/затухание 5 светодиодов, схема действия
- Помогите с простым постепенно более ярко светящим светодиодом
- Какова частота PWM-выхода на Arduino
- Как вывести истинное аналоговое напряжение на выходной контакт
- Отправка значения с одного Arduino на другой
- Проблема с выходным контактом ШИМ (PWM)
Похоже на колебания мощности, вызванные переключением светодиодов. Добавьте несколько больших конденсаторов по линии питания рядом со светодиодами., @Majenko
Вы проверили свой источник питания? Если это импульсный источник, вы можете добавить несколько конденсаторов, чтобы нейтрализовать пульсации. Я предлагаю вам использовать прицел. Если у вас нет прицела, просто подключите источник напряжения к A1 и аналоговому считыванию (A1)., @RubenDefour
Попробуйте добавить некоторую задержку, скажем, пробуйте банк всего 10 или 20 раз в секунду вместо примерно 500 раз в секунду, которые ваш код делал бы сейчас. Это дает выходам ШИМ возможность работать, а не постоянно получать новые значения для использования., @CrossRoads
@Маженко, это была проблема с источником питания. Это светодиодная лента USB, поэтому я запитал ее через Arduino, что, как оказалось, было плохой идеей., @jnovacho