Страница 1 из 1

Странное поведение шим на atmel 32u4

Добавлено: Пн янв 30, 2017 17:18:57
Illay
Есть ардуина леонардо на 32u4 от китайского бренда.

На 3 (9, 10 всякие пробовал) пин вешаю проводок до другого прибора, у которого есть аналоговый вход (просто замеряет вольтаж)

Вешаю полуторовольтовую батарейку на прибор - он сообщает что намерил 50 попугаев (все отлично).

Делаю простой RC фильтр из конденсатора и резистора на питании.

Вешаю ардуину и пишу простейший код

Код: Выделить всё

void setup() {
}
void loop() {
	analogWrite(3,100);
}
Прибор насчитал 147 попугаев. Все отлично.

Проходит 15 минут попугаев 67.

Еще через 5 минут 102

Еще через 5 минут 87.

как не крутил как не вертел не могу понять причины такого поведения. Гугл тоже молчит.

При этом замеры тестером на шиме показывают что действительно на выходе скачки.

Прошу гуру помочь с разгадкой такого поведения )

Re: Странное поведение шим на atmel 32u4

Добавлено: Пн янв 30, 2017 17:40:15
Enigm
Что значит analogWrite(3,100); ?

Re: Странное поведение шим на atmel 32u4

Добавлено: Пн янв 30, 2017 17:46:43
Illay
Это отголоски буратины (ардуины), проще будет прямо скопипастить
Выдает аналоговую величину (ШИМ волну) на порт вход/выхода. Функция может быть полезна для управления яркостью подключенного светодиода или скоростью электродвигателя. После вызова analogWrite() на выходе будет генерироваться постоянная прямоугольная волна с заданной шириной импульса до следующего вызова analogWrite (или вызова digitalWrite или digitalRead на том же порту вход/выхода).
я пишу 100, т.е. скважность чуть меньше 50%. Напряжение около 2,3 вольта. И оно таким и является, пока вдруг не начинает гулять как кошка, само по себе

PS третий пин выбран не случайно, дорожку этого пина четко удалось рассмотреть на плате и посмотреть на ножку микроконтроллера и по даташиту на нее можно выводить шим.

Re: Странное поведение шим на atmel 32u4

Добавлено: Пн янв 30, 2017 17:55:38
sporeon
А с каких пор ШИМ стал аналоговым сигналом?

Re: Странное поведение шим на atmel 32u4

Добавлено: Пн янв 30, 2017 18:01:32
Illay
sporeon писал(а):А с каких пор ШИМ стал аналоговым сигналом?
Я же написал в теме, что с ардуины идет простейший RC фильтр который выпрямляет волну. Ну а постоянное напряжение, чем не аналоговый сигнал?
Проблема не в выпрямлении, а в том что меняется заполнение причем по случайно сгенерированному алгоритму по прошествии нескольких минут. и вот тут встает вопрос, а как такое возможно?

Re: Странное поведение шим на atmel 32u4

Добавлено: Пн янв 30, 2017 20:04:25
sporeon
Пардон, не увидел про фильтр. Осциллографом смотрели что на выходе?

Re: Странное поведение шим на atmel 32u4

Добавлено: Пн янв 30, 2017 20:25:57
krash_artem
это весь код или контроллер делает что-то ещё?

Re: Странное поведение шим на atmel 32u4

Добавлено: Вт янв 31, 2017 07:10:09
Illay
sporeon писал(а):Пардон, не увидел про фильтр. Осциллографом смотрели что на выходе?
Я станцую у нашего руководства полгода выпрашивал, а такую вещь - так лет 10 ждать буду. Один вариант самому собрать, но пока не брался.
это весь код или контроллер делает что-то ещё?
Код не весь, но когда столкнулся с проблемой, отложил один контроллер взял другой и начал играться. Код для игрушек и привел.
С ним глюк на месте

Добавлено after 4 hours 49 minutes 44 seconds:
Проблема решена и скрывалась не в аппаратной части а в программной.
Стандартные библиотеки буратины используют для генерации шима нулевой таймер, скорее всего для совместимости, плюсом устанавливают низкую частоту, которая к тому же и не регулируется (для 32u4). Нулевой таймер так же используется и в других целях (delay, delayMicroseconds) и подключение любого заголовочного файла может привести к вызову этих функций из инклюдов. Вот и привет рандомным глюкам.
Если писать в регистры напрямик то можно задействовать все таймеры, мне потребовался 4 таймер (см даташит) и соответственно указать частоту (мне чем выше тем лучше)
Очень помогла вот эта статья
http://r6500.blogspot.nl/2014/12/fast-p ... nardo.html
Сверху еще дописав функцию самопроверки через чтение регистров удалось не только нейтрализовать скачки полностью, но и достигнуть погрешности в 5 тысячных попугая. Что просто идеальная точность при данной схеме и попдподает под допуски погрешности резистора и конденсатора :)) .
Всем ответившим Большое спасибо!

PS одно остается загадкой, почему глюки были и на 9 и 10 пине, когда за них отвечает первый таймер. Но есть подозрение в жутком хардкоре от ардуинщиков, которые могли сэмулировать шим с использованием первого таймера на всех пинах. Тогда все плохо с буратиной.
PPS лично я в следующем проекте буду использовать STM32 без всяких буратиноподобных лоадеров и прочего. Путь сложнее дольше, но предсказуемие ибо ну его такие шутки ))))

Re: Странное поведение шим на atmel 32u4

Добавлено: Вт янв 31, 2017 09:59:46
Enigm
Я ардуинки пользую как платы, а прошивку заливаю по ISP.
Средой ардуино не пользуюсь.

Re: Странное поведение шим на atmel 32u4

Добавлено: Вт янв 31, 2017 10:18:03
Illay
Enigm писал(а):Я ардуинки пользую как платы, а прошивку заливаю по ISP.
Средой ардуино не пользуюсь.
И правильно делаешь, как показал опыт )