Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: stm32f100 ацп, сдвиг тактовой относительно CPU
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > ARM
Neekeetos
Привет всем!

Есть ацп в ф100 , который делает регулярные замеры по таймеру. Тактовая частота ацп равна половине тактовой процессора.
При этом заметил такую вещь - видимо есть зависимость момента выборки ацп от сдвига его тактовой!
Грубо говоря есть два варианта расположения тактов ацп по отношению к выходу таймера, который запускает преобразование -
без сдвига и со сдвигом на 1 такт процессора. При этом если сдвиг равен нулю то все работает замечательно, если же он равен 1 то выборка видимо происходит
в два разных момента времени на соседних тактах процессора!
Измеряю я треугольный периодический сигнал, поэтому сдвиг увх очень важен, а тут такой косяк возник sad.gif.
Собственно кто что посоветует? может сталкивались с такой проблемкой? Я сейчас думаю синхронизировать таймер с тактами ацп, но как это сделать ума не приложу , прескалер ацп по моему недоступен.

ЗЫ Период таймера естественно четный и соотв должен быть фиксирован относительно тактов ацп.
ЗЫЗЫ Все выводы сделаны по результатам замеров, конкретно поймать джиттер на осцилографе я не пытался, возможно сам эффект возникает по каким либо другим причинам, о которых я не в курсе.

Измерения рушатся примерно так:

изменений никаких , просто два графика между которыми происходил сброс процессора.
Golikov A.
может запускать АЦП мерить сигнал, потом сдвигать на 1 такт запуск, мерить сигнал, оценивать шум, и работать в том режиме в котором шум меньше?
Neekeetos
После специального исследования вопрос немного поменялся. Джиттера обнаружено не было, однако эффект возник именно из за того , что фаза тактов ацп может быть со сдвигом относительно начала счета таймера на один такт процессора. В результате в моей схеме иногда измерение ацп завершалось ровно в начале периода таймера и все работало отлично, а иногда было позднее и захватывало переходный процесс, а ошибки соотв результат осреднения этого процесса.

Цитата(Golikov A. @ Feb 7 2014, 13:01) *
может запускать АЦП мерить сигнал, потом сдвигать на 1 такт запуск,

Именно, теперь все сводится к корректной синхронизации тактовой ацп и таймера, чтобы у них взаимно фаза не плавала sm.gif.
Интересно как это лучше сделать в стмке?
scifi
Есть режим запуска одного таймера от другого. Тактируем "запускающий" таймер с частотой проца, при обнаружении сдвига делаем перезапуск таймера АЦП со сдвигом на 1 такт.
Golikov A.
я бы сделал 2 функции запуска АЦП одну простую, другую с NOP в начале.
После того как все стартануло и работает, таймер имеет какой-то стабильный такт запуска относительно тактов проца.
запускаем в этом таймере одну функцию, потом другую, и смотрим как лучше....
Neekeetos
Цитата(scifi @ Feb 7 2014, 14:50) *
при обнаружении сдвига делаем перезапуск таймера АЦП со сдвигом на 1 такт.

Таймер имеет тактирование с точностью тактов процессора, это у ацп тактовая в два раза ниже. Сдвинуть именно таймер на один такт нет проблемы (достаточно уменьшить его период на единицу один раз). Непонятно как обнаружить что есть сдвиг у тактов ацп или задать его жестко при запуске программы.

Цитата(Golikov A. @ Feb 7 2014, 15:31) *
После того как все стартануло и работает, таймер имеет какой-то стабильный такт запуска относительно тактов проца.

Из за того что прескалер ацп нельзя сбросить вариант с ноп не сработает, поскольку изначальное состояние делителя тактовой ацп не определено.
scifi
Цитата(Neekeetos @ Feb 7 2014, 15:40) *
Непонятно как обнаружить что есть сдвиг у тактов ацп или задать его жестко при запуске программы.

В схеме завести один из выходов таймера на вход АЦП. Тогда сдвиг можно будет измерить.
Neekeetos
Цитата(scifi @ Feb 7 2014, 15:47) *
В схеме завести один из выходов таймера на вход АЦП.

Я сейчас именно такой вариант и делаю, хотя конечно получается довольно коряво sm.gif
Golikov A.
Цитата(Neekeetos @ Feb 7 2014, 15:40) *
Таймер имеет тактирование с точностью тактов процессора, это у ацп тактовая в два раза ниже. Сдвинуть именно таймер на один такт нет проблемы (достаточно уменьшить его период на единицу один раз). Непонятно как обнаружить что есть сдвиг у тактов ацп или задать его жестко при запуске программы.


Из за того что прескалер ацп нельзя сбросить вариант с ноп не сработает, поскольку изначальное состояние делителя тактовой ацп не определено.


если у вас есть схема старт АЦП
и схема НОП, Старт АЦП

то эти 2 схемы покрывают все варианты старта АЦП с 0 или задержкой в 1 клок после таймера. Дальше вопрос какой из вариантов выбрать. Я предлагаю выбирать по минимальному шуму, но можно и таймер мерить. Выбрав одну, ее и использовать, не меняя таймер.


Или же в вашем варианте: измерить АЦП, сдвинуть таймер, опять померить. и решить какой вариант лучше.
Neekeetos
Цитата(Golikov A. @ Feb 7 2014, 15:52) *
если у вас есть схема старт АЦП
и схема НОП, Старт АЦП

Кстати это интересный вопрос, сбрасывается ли прескалер ацп если ацп выключать, если так то можно вполне определенно все сделать с нопами без каких либо дополнительных настроек! Либо же замерять фактическое положение фронта на выходе таймера как второй вариант. По шуму сложно что либо определить, те графики которые я привел по куче измерений а не по одному.
Tahoe
Цитата(Neekeetos @ Feb 7 2014, 11:27) *
Измерения рушатся примерно так:

А есть уверенность, что проблема после АЦП, а не до? Хорошо бы сначала посмотреть на антиалиас фильтр и вообще, хоть пару слов о сигнале сказать. Если судить по картинке, то очень похоже на биения. Но лечить их таймерами/прескейлерами - как мертвому припарки.
Neekeetos
Цитата(Tahoe @ Feb 7 2014, 17:19) *
А есть уверенность, что проблема после АЦП, а не до?

Уверенность есть, на картинке не сам сигнал. Сам сигнал примерно такой

, при этом ацп осуществляет выборку напряжения условно говоря на верхушках этих треугольников, так что выборка заканчивается ровно перед сменой направления. После смены там идет переходный процесс из за оу, так что если выборка не точно спозиционирована, то он захватывается и искажает измерения. Самих переходов разное количество в зависимости от измеряемого сигнала, так что эта ошибка измерения зависит от него дискретно. График который я привел в начале это замеры для линейно меняющегося сигнала, видны ступеньки где суммарное количество переходов поменялось.
Tahoe
Цитата(Neekeetos @ Feb 7 2014, 18:32) *
Уверенность есть, на картинке не сам сигнал.

"Оптимизм обоснованный"(с) ?

Цитата(Neekeetos @ Feb 7 2014, 18:32) *
График который я привел в начале это замеры для линейно меняющегося сигнала, видны ступеньки где суммарное количество переходов поменялось.

Информативность ответа потрясает. Видимо, на свете существует всего один линейно меняющийся сигнал и его параметры можно опустить, т.к. они и так всем известны.

Кроме того, ни на графике, ни вокруг него, нет ни слова об антиалиас фильтре. Ни о его частоте и порядке, ни о требуемом кол-ве разрядов. Видимо, для данного случая, Найквист с Котельниковым сделали исключение? Где можно об этом почитать?
Если же измерение производится в т.н. "стробоскопическом режиме", тогда причем тут график с неким линейным сигналом, неизвестной частоты и формы?

Неужели так трудно просто ответить, мол, фильтр такой-то, частота среза такая-то, порядок такой-то. Я понимаю, что все мы тут самые умные и нет времени, а точнее просто лениво, расписывать некие подробности, которые считаем несущественными, к тому же "точно знаю, что дело не в этом". Но тогда зачем идти с вопросами в конфу?
Neekeetos
Цитата(Tahoe @ Feb 7 2014, 19:38) *
Информативность ответа потрясает. Видимо, на свете существует всего один линейно меняющийся сигнал и его параметры можно опустить, т.к. они и так всем известны.

Там скрин с осцилографа, все параметры четко видны, какие еще неизвестные пропущены? инструкция пользователя?

Цитата(Tahoe @ Feb 7 2014, 19:38) *
Неужели так трудно просто ответить, мол, фильтр такой-то, частота среза такая-то, порядок такой-то. Я понимаю, что все мы тут самые умные и нет времени, а точнее просто лениво, расписывать некие подробности, которые считаем несущественными, к тому же "точно знаю, что дело не в этом". Но тогда зачем идти с вопросами в конфу?

Так вопрос уже по большому счету решен. Смысл воду в ступе толочь. Фильтр есть, первого порядка в виде рц цепочки, но служит он для согласования увх ацп и выхода оу. Оцифровка как вы верно подметили синхронная, так что найквист и прочие тут не при чем. Схема - это управляемый интегратор, замеры нужны чтобы оценить остаток заряда на нем, по какой траектории движется сигнал между точками измерения абсолютно не важно.
Golikov A.
а как вы синхронизируетесь с сигналом? как вы узнаете время и прочее? Сигнал тоже вы генерите?
Сергей Борщ
Может глупость скажу, но что если врубить максиальный делитель apb, настроить таймер, настроить и запустить АЦП и после этого максимально быстро запустить таймер, пока предделитель apb не успел тикнуть?
Neekeetos
Цитата(Сергей Борщ @ Feb 7 2014, 21:41) *
настроить и запустить АЦП и после этого максимально быстро запустить таймер, пока предделитель apb не успел тикнуть?
По моему для настройки как раз такты и нужны sm.gif. Мне тут более хитрый способ придумали, можно запустить таймер и преобразование ацп, затем уснуть и ждать прерывания от ацп в основном потоке. После просыпания считанное значение счетчика таймера будет напрямую зависеть от того в какой фазе работает ацп.
scifi
Цитата(Neekeetos @ Feb 7 2014, 22:02) *
После просыпания считанное значение счетчика таймера будет напрямую зависеть от того в какой фазе работает ацп.

Ловко. Интересно, сработает ли? Кстати, считывать можно и через DMA. Даже засыпать не обязательно.
Neekeetos
Цитата(scifi @ Feb 7 2014, 22:17) *
Ловко. Интересно, сработает ли? Кстати, считывать можно и через DMA. Даже засыпать не обязательно.

Должно сработать. С дма скорее всего не выйдет поскольку он сам работает через такт и может быть вытеснен, так что там нет определенности с тем когда произойдет чтение, как минимум придется усыплять мк чтобы не помешал. Последний раз замерял получилось так -

Синий сигнал должен быть выровнен относительно фронта желтого но поскольку дма, то не вышло sm.gif.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.