• Лови промокод з яким знижка 50 грн - promo50grn

ADC STM32F103 - ноль смещен на 50мВ от физического. WTF?

Статус: Offline
Реєстрація: 08.04.2009
Повідом.: 18271
ADC STM32F103 - ноль смещен на 50мВ от физического. WTF?

Кто-то видел такое?
Цепляю крутилку и тестер. Вывожу в STM-Studio вид переменной, куда читается АЦП. Кручу. Ноль наступает при напряжении на 51мВ (48 - 51 в разных платах) выше нижней рельсы.

Опорное - AVCC, 3,3, питание VDD - 3,3 от другого стабилизатора, разница незначительная, не похожа на эти 50мВ.
Землю проверял и даже превентивно проводом повторил звезду к общей точке от AGND и DGND вблизи от их ножек.

STM32F103C8T6.
Кто понимает что происходит?
 
если с низкоимпедансного выхода да на вход - ничего такого не наблюдается
а в чем сабж впаян? если в модуле maple mini - то там к аналоговой части у многих вопросы
 
если с низкоимпедансного выхода да на вход - ничего такого не наблюдается
а в чем сабж впаян? если в модуле maple mini - то там к аналоговой части у многих вопросы

Впаян в мою плату. Эффект наблюдается как с выхода ОУ, так и с подстроечника 20кОм. 50 нижних милливольт до рельсы - обрезано. Выглядит, как будто земля АЦП на 50мВА выше физической земли. Но вольтметр говорит, что на всех ногах всё в порядке.
 
P.S. К аналоговой части вопросов быть не должно, так как её там практически НЕД.
Рассматривается отдельная плата без всей системы, там на входе 1 ОУ, который валит прямо на вход АЦП через простенький фильтр.
Может убрать конденсатор насовсем и подать низкоомный выход без фильтрации?
Однако, ток заряда измерительной емкости влияет абсолютно не так. Он подтягивает в 1/2 VDDA, а не уводит ноль АЦП за физю ноль вниз...

Да, и проверялось же не только на ОУ, но и на непорочном потенциометре.
P.S. Начинаю подозревать микроконтроллер...
 
кусок платы с понятными питаниями(откуда что и куда) в студию
ну и вопрос традиционный - калибровка делается в программе?
у меня были грабли с питанием AVDD AVSS и с кодом - приходилось отключать калибровку, иначе зависал.
потом косяк выгреб, но проблемы с AVDD оставались достаточно долго.
и тоже - то отключил ее то включил - иногда забываешь.
 
кусок платы с понятными питаниями(откуда что и куда) в студию
ну и вопрос традиционный - калибровка делается в программе?
у меня были грабли с питанием AVDD AVSS и с кодом - приходилось отключать калибровку, иначе зависал.
потом косяк выгреб, но проблемы с AVDD оставались достаточно долго.
и тоже - то отключил ее то включил - иногда забываешь.

Калибровка? По подробнее...
У меня нет проблем с АВДД - оно стоит как вкопаное.
А на ноль калибровка влияет?
 
P.S. У меня проект генереный кубом. Там HAL, делает ли он калибровку при инициализации АЦП я понятия не имею :) Это ж HAL, он, по идее, для того, чтобы програмист, как раз, не лазил туда, где калибровка...
 
Ответ найден вручную:

1. Это таки калибровка и кубок победителя отправляется к Паше.
2. HAL содержит функции калибровки, но вызывается ли она - я ещё не проверил, факт - она делается неправильно, или не делается совсем.
3. В отладчике ставим РСТКАЛ, иссчезает, ставим бит КАЛ в CR2 - отключаемся.
идём в студию, выводим переменную и о чудо - ноль уже на месте.
 
P.S. Не, сука, ну нахуй писать HAL и не включать в нём существующие в нём же функции?
Они заебали, USB - допилить напильником. Теперь ещё ADC вручную доинициализировать...
 
Они заебали, USB - допилить напильником.
да вроде работает usb из примеров
кста. из куба F107 эзернет под RMII LAN8720 - пошел без вопросов, я туда httpd добавил - и всё.
а перед этим ебался с десятком вариантов - на 407м работало, на 107 -нет

по остальным моментам - если нет задачи прыгать из серии в серию - лучше на регистрах все делать. один хрен голова должна быть в мануале а не в HAL или opencm3
opencm3 отличная либа но отладка шоб глянуть периферию в GDB - это с ума сойти можно.
оттуда прекрасно работают все примеры usb, легкий перепил/перенос поллинга в прерывание - и больше ниче не надо.
 
да вроде работает usb из примеров
кста. из куба F107 эзернет под RMII LAN8720 - пошел без вопросов, я туда httpd добавил - и всё.
а перед этим ебался с десятком вариантов - на 407м работало, на 107 -нет

по остальным моментам - если нет задачи прыгать из серии в серию - лучше на регистрах все делать. один хрен голова должна быть в мануале а не в HAL или opencm3
opencm3 отличная либа но отладка шоб глянуть периферию в GDB - это с ума сойти можно.
оттуда прекрасно работают все примеры usb, легкий перепил/перенос поллинга в прерывание - и больше ниче не надо.
Из примеров оно там работает только в родном режиме - по включению питания через USB.
Если требуется автономность со связью через USB, но отдельным питанием - начинаются пляски.
Там инициализация структуры неправильная у USB и не отслеживается дисконнект.
Результатом будет хардфаулт при попытке послать первый же байт в комп в режиме VCP.
Потому как структура есть, там лежит тип войд и он... не пуст. Его задействует оптимизатор для каких-то других дел при рестарте.

Указывает он не на буфер, а на луну, или Марс - я ХЗ, но куда-то туда.

Потому, что в функции отправки НЕТ проверки на корректность и существование буфера как такового. Он считает, что об этом позаботился тот, кто инициализировал структуру. Но он не позаботился. Там тип войд и ложи шо хочешь туда. Вот компилятор и кладёт. А был бы жесткий тип тип - всё было бы совсем иначе.
 
Если требуется автономность со связью через USB, но отдельным питанием - начинаются пляски.
Там инициализация структуры неправильная у USB и не отслеживается дисконнект.
Результатом будет хардфаулт при попытке послать первый же байт в комп в режиме VCP.

дисконннект и в opencm3 (по крайней мере той, что у меня, - забадали их резкие изменения API и я не обновляю) - тоже пилить нужно.
ну а неинициализированные функции драйвера - кто тут кому доктор :незнаю:
можно флаг завести и игнорить отправку на собственном уровне
т.е. топ-логика не знает что у нас пакеты уходят в /dev/null
 
дисконннект и в opencm3 (по крайней мере той, что у меня, - забадали их резкие изменения API и я не обновляю) - тоже пилить нужно.
ну а неинициализированные функции драйвера - кто тут кому доктор :незнаю:
можно флаг завести и игнорить отправку на собственном уровне
т.е. топ-логика не знает что у нас пакеты уходят в /dev/null

так я флаг и заводил.
Вернее, сначала проверял адрес на нахождение хотя-бы в памяти (костыль, конечно, но так впервые нормально заработало), а потом уже накатил управление коннектом-дисконнектом. Если не вижу USB - считает таймер, который оборвёт подтяжку резистору опознавания ЮСБ и подождет 3 секунды, потом вернёт обратно.
Теперь меня и винда нормально теряет и находит.
 
БЛ* какой все таки этот usb убогий паркетный интерфейс!!! рядом источник помех-обычный ДПР. ХУЙ!!! отвисает все, всегда и наглухо. а всего лишь осцилл по usb
:ганьба:

попробуй провод нормальный использовать. Обычно когда юсб от помех виснет - спасает самодельный экранированный провод.

P.S. А так - да, согласен, могли бы протокол и по надежнее придумать, и по защищеннее. Его свалить - 2 пальца обасфальт...
 
попробуй провод нормальный использовать. Обычно когда юсб от помех виснет - спасает самодельный экранированный провод.
не спасет. там в принципе всё такое высокоимпедансное что нуего на
осциллографы от usb - зло.
или standаlone или с эзернетом
я-то думал что я молодес - взял usb изолятор на 500вольт - включаю всякоразное то осцил то анализатор то отладчик - а оно помехи собирает везде где только можно и отваливается
 
Назад
Зверху Знизу