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

Обсуждаем контроллеры компании Atmel.
Ответить
Родился
Сообщения: 5
Зарегистрирован: Пн янв 30, 2017 17:14:30

Сообщение Illay »

Есть ардуина леонардо на 32u4 от китайского бренда.

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

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

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

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

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

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

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

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

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

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

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

Прошу гуру помочь с разгадкой такого поведения )
Реклама
Говорящий с текстолитом
Аватара пользователя
Сообщения: 1663
Зарегистрирован: Вт апр 03, 2012 20:36:41
Откуда: Сочи

Сообщение Enigm »

Что значит analogWrite(3,100); ?
Реклама
Родился
Сообщения: 5
Зарегистрирован: Пн янв 30, 2017 17:14:30

Сообщение Illay »

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

PS третий пин выбран не случайно, дорожку этого пина четко удалось рассмотреть на плате и посмотреть на ножку микроконтроллера и по даташиту на нее можно выводить шим.
Открыл глаза
Аватара пользователя
Сообщения: 52
Зарегистрирован: Вс фев 20, 2011 21:05:17

Сообщение sporeon »

А с каких пор ШИМ стал аналоговым сигналом?
Контактная информация:
Реклама
Эиком - электронные компоненты и радиодетали
Родился
Сообщения: 5
Зарегистрирован: Пн янв 30, 2017 17:14:30

Сообщение Illay »

sporeon писал(а):А с каких пор ШИМ стал аналоговым сигналом?
Я же написал в теме, что с ардуины идет простейший RC фильтр который выпрямляет волну. Ну а постоянное напряжение, чем не аналоговый сигнал?
Проблема не в выпрямлении, а в том что меняется заполнение причем по случайно сгенерированному алгоритму по прошествии нескольких минут. и вот тут встает вопрос, а как такое возможно?
Реклама
Открыл глаза
Аватара пользователя
Сообщения: 52
Зарегистрирован: Вс фев 20, 2011 21:05:17

Сообщение sporeon »

Пардон, не увидел про фильтр. Осциллографом смотрели что на выходе?
Контактная информация:
Реклама
Родился
Сообщения: 18
Зарегистрирован: Чт ноя 24, 2016 20:16:46

Сообщение krash_artem »

это весь код или контроллер делает что-то ещё?
Родился
Сообщения: 5
Зарегистрирован: Пн янв 30, 2017 17:14:30

Сообщение 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 без всяких буратиноподобных лоадеров и прочего. Путь сложнее дольше, но предсказуемие ибо ну его такие шутки ))))
Говорящий с текстолитом
Аватара пользователя
Сообщения: 1663
Зарегистрирован: Вт апр 03, 2012 20:36:41
Откуда: Сочи

Сообщение Enigm »

Я ардуинки пользую как платы, а прошивку заливаю по ISP.
Средой ардуино не пользуюсь.
Родился
Сообщения: 5
Зарегистрирован: Пн янв 30, 2017 17:14:30

Сообщение Illay »

Enigm писал(а):Я ардуинки пользую как платы, а прошивку заливаю по ISP.
Средой ардуино не пользуюсь.
И правильно делаешь, как показал опыт )
Ответить

Вернуться в «AVR»