Jump to content
artos5

Тактирование одного таймера от другого таймера stm32f100

Recommended Posts

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

112244.jpg.0fa4f68b517675d3abf1670da4331eab.jpg

Я имел ввиду вот такие преобразования.

Share this post


Link to post
Share on other sites

Доброй ночи Вам! Ага , всё-таки группа непрерывно преобразует входные сигналы после команды старт.

Получается что если нужно 4 семпла на период , то нужно второй таймер в 4 раза быстрее чтоб тикал от таймера меандра . А как их синхронизировать правильно?

 

И что это у вас за скрин документа ? Можете оригинал скинуть?

Share this post


Link to post
Share on other sites

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

Книга называется "Мартин М. Инсайдерское руководство по STM32". Если не найдете могу скинуть.

Share this post


Link to post
Share on other sites

Тестирование литиевых батареек Fanso в нормальных условиях

Компания Компэл, эксклюзивный дистрибьютор компании Fanso, предлагает широкий перечень ЛХИТ, позволяющий подобрать элемент питания, в наибольшей степени соответствующий конкретным требованиям. Для тестирования параметров, указанных в Datasheet, специалисты Компэл организовали в апреле 2019 г. полугодовой тест на постоянный разряд в нормальных условиях четырех наиболее популярных моделей литий-тионилхлоридных и литий-диоксидмарганцевых батареек Fanso.

Посмотреть результаты первого среза

1 час назад, MasterElectric сказал:

Вопрос

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

Share this post


Link to post
Share on other sites

Новое бюджетное семейство микроконтроллеров STM32G0 и планы его развития

Семейство STM32G0 сочетает в себе лучшие качества представителей семейств STM32F0 и STM32L0 - относительно высокую производительность и низкое энергопотребление. Модели STM32G0 имеют упрощенную схему питания, улучшенную периферию, систему тактирования и быстрые порты в/в, доп.средства защиты ПО, повышенную устойчивость к статическим разрядам, широкий ассортимент корпусов, обновленные пакеты библиотек для STM32CubeMX. STMicroelectronics планирует развивать новое семейство.

Подробнее...

Ну если аппаратно, то вот так. На вход делителя частоты можно подать не совсем правильный прямоугольник и получить на выходе правильный меандр в 2-16 раз меньше по частоте. Это проще, чем следить в коде за генерацией импульса и быть загруженным только на это. Освободится время для опроса, надо дождаться фронта, дать команду на оцифровку и ждать спада импульса, за это время можно еще много чего подсчитать в коде. На вход можно дать ШИМ с МК или заюзать генератор на микросхеме с кварцем например 1 МГц, это будет 1/16=62500 Гц, то есть на МК можно пропускать импульсы и цифровать на 20830 ... 31250 Гц

Screenshot_416.png

Share this post


Link to post
Share on other sites

Да проще всего использовать два таймера ведущий считает быстро это выборки АЦП пусть оно будет по апдейту. Подчиненный считает тики этого таймера, делает нужное количество выборок на период (0 - ARR - 1), посредине ШИМ для меандра. Работать с буфером можно по событиям подчиненного таймера, если успеешь обработать за период данные с АЦП, то можно ДМА настроить на кольцевой емкостью 2 периода, на половине по прерыванию ДМА обраюатывать. Можно еще настроить и третий таймер, который будет считать тики второго таймера, т.е ты будешь знать какую выборку по счету обрабатываешь. Примерно так. Ну или сложнее на одном таймере при помощи DMA Burst можно генерировать сложный сигнал, но это возможно и не подойдет. 

 

Share this post


Link to post
Share on other sites
28.07.2019 в 01:45, artos5 сказал:

А как их синхронизировать

Может  фапч на 4046 подойдет ?

Share this post


Link to post
Share on other sites

Всем привет! Вернулся из командировке и сел снова за АЦП и таймеры по данной задаче. Я набросал в графическом виде как мне нужно организовать оцифровку сигнала. Как сделать так чтобы софтово вызывать преобразование Инжектированной группы АЦП а не по прерываниям? Нужно мне это делать скажем два раза в секунду. Остальное время заниматься оцифровкой 1 канала регулярной группы и складывать при помощи ПДП в буфер . Буфер будет 16 байт .

Чтобы выполнить преобразование инжектированной группы я так понимаю мне нужно:

1) остановить ПДП и преобразование регулярной группы.

2) вызвать преобразование инжектированной группы и скопировать значения в переменные , для последующего их отображения.
 

Как это все инициализировать и потом применять ? Интересует инициализация инжектированной группы и ее вызов.

АЦП STM32.pdf

ADC STM32.png

Share this post


Link to post
Share on other sites
Posted (edited)

т.е. ты хочешь между выборками (непрекращающимися) основного канала, делать раз в секунду по 2 каналам? А если это будет не раз в секунду, а допустим раз на сто периодов меандра так можно? Это чтобы не вносить асинхронных процессов.

Edited by MasterElectric

Share this post


Link to post
Share on other sites

Я хочу выполнять выборки например 0.5сек. непрерывно . Потом остановить регулярную группу и запустить инжектированную , измерить два канала и потом снова регулярную группу измерять. Нужно это очень быстро выполнять (в смысле переключаться между группами).

Share this post


Link to post
Share on other sites
28.07.2019 в 12:51, artos5 сказал:

очень желательно аппаратно .

Это как понять ? Внешним генератором ? Для точности только этот вариант и выше схема есть

И понятия прямая группа и инжектированная группа надо пояснить. Я так понимаю, надо переключаться между группами для считывания, это надо делать через подсчет количества выборок или поднимать флаги

Share this post


Link to post
Share on other sites
18 минут назад, colorad сказал:

многоядерный ?

Да, 4 ядра 8 потоков ))

...

...

...

правда у моего ПК в процессоре.

10 минут назад, РадиоНастройщик сказал:

Это как понять ? Внешним генератором ?

Нет , не внешним клоком. 
Нужно генерировать модулем ШИМ . В принципе при помощи таймера я это уже без проблем делаю, осталось только АЦП правильно настроить .

Share this post


Link to post
Share on other sites
11 минут назад, artos5 сказал:

Ну так вот плавать не должно. 

 

28.07.2019 в 12:51, artos5 сказал:

Программно получается большой джитер

 

2 часа назад, РадиоНастройщик сказал:

Внешним генератором ? Для точности только этот вариант

И никак иначе. Или глобальный счетчик, пусть крутит постоянно и с него сверяться, например - ждать, пока не будет 111111, так точнее будет. Потом инкремент переменной, делаем выборку и опять ждем например 222222

Share this post


Link to post
Share on other sites
1 час назад, РадиоНастройщик сказал:

И никак иначе. Или глобальный счетчик,

Все немного проще . Просто не пойму как инициализировать правильно модули.

Share this post


Link to post
Share on other sites
Posted (edited)

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

Edited by colorad

Share this post


Link to post
Share on other sites

Наверно лучший вариант взять STM32F103 с двумя АЦП. Там они будут работать независимо. На вашем можно сделать иначе. Если 3 преобразования не получается, то делайте по 2. При 22 кГц время между двумя выборками 2.8 мкс ( меандр 45 мкс и 16 выборок  = 2.8 мкс ). При Sample time = 1.5 время одного преобразования 1.17 мкс и двух соответственно 2.34 мкс.Делаете регулярные группы 0, 1, 0, 2 и запускаете по два канала. В буфере будет по 32 значения, канал 0 обрабатываете постоянно, а 1 и 2 по желанию.

Share this post


Link to post
Share on other sites
8 часов назад, snn_krs сказал:

Наверно лучший вариант взять STM32F103 с двумя АЦП

Железо уже имеется . Оно "запилено" под STM32F100C8T6 . И в железе используется ЦАП. По этой причине STM32F103C8T6 не подойдет. Разве что , если вместо ЦАП применить ШИМ модуляцию.

8 часов назад, snn_krs сказал:

Если 3 преобразования не получается, то делайте по 2. При 22 кГц время между двумя выборками 2.8 мкс ( меандр 45 мкс и 16 выборок  = 2.8 мкс ). При Sample time = 1.5 время одного преобразования 1.17 мкс и двух соответственно 2.34 мкс.

Я считал , получается если в документацию смотреть , то входное сопротивление 400 Ом при 1.5 такта. У меня на такой скорости какие то глюки с вольтметром и амперметром :)

Но по две выборки вариант интересный ! Как раз вкладываемся в интервал :)

Share this post


Link to post
Share on other sites

Я понял в чем дело, тс не нужны алгоритмы, ему нужен готовый кусок кода, причем именно начальная инициализация счетчиков и АЦП, то есть программа еще не написана, есть только мысли и графики

Share this post


Link to post
Share on other sites

Неправильно вы поняли. У меня программа уже больше половины написана. Пришло время к отладке модуля АЦП , и такой косяк вылез..

Share this post


Link to post
Share on other sites

Join the conversation

You are posting as a guest. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...

×
×
  • Create New...