Перейти к содержанию
    

STM32G030F6 надо привязать ADC к PWM

STM32G030F6. Нужен одноканальный PWM, и чтобы после фронта, с задержкой в десяток микросекунд, запускался ADC, сканируя несколько каналов.

Выливать ADC непрерывно через DMA я умею. Но тут надо чтобы он не сам гонял, а синхронно с PWM и небольшой задержкой после открытия ключа.

Подскажите, как это лучше устроить. Если можно - сразу через CubeMX. Ну или на словах, какие таймеры как между собой стыковать.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

25 минут назад, p_v сказал:

Подскажите, как это лучше устроить.

Можно взять что-то из XMC4xxx. Там это всё есть: разные сложные варианты синхронизации периферии между собой аппаратными сигналами.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

3 minutes ago, jcxz said:

Там это всё есть

Без Azure нещитово, я так думаю :)

 

31 minutes ago, p_v said:

Ну или на словах, какие таймеры как между собой стыковать.

В мануале смотрите доступные триггеры АЦП, выбираете подходящий таймер для формирования "задержки в десяток мкс", его запускаете от своего ШИМ'а.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

6 minutes ago, aaarrr said:

В мануале смотрите доступные триггеры АЦП, выбираете подходящий таймер для формирования "задержки в десяток мкс", его запускаете от своего ШИМ'а.

Я в кубе смотрю. Там есть

  • "Timer 3 trigger out event"
  • "Timer 1 trigger out event 2"
  • "Timer 1 capture compare 4 event"

Не совсем понял два момента:

  1. Как таймер PWM заставить генерить trigger out event по фронту (и что номера в списке выше означают)
  2. Как таймер "задержки" заставить автоматически "перевзводиться" и ждать следующего события.

Сорри за странные вопросы, просто ни разу так не конфигурировал периферию.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1977871877_.png.ce62c375e4a3c11089d47eb420e9b861.png

Самое простое настроить запуск по TRG1=TIM1_CC4.

Канал 4 таймера 1 программируете на заданную задержку, а ШИМ получаете с помощью оставшихся каналов.

Цитата

Bits 6:4 MMS[2:0]: Master mode selection
These bits allow selected information to be sent in master mode to slave timers for
synchronization (TRGO). The combination is as follows:
000: Reset - the UG bit from the TIMx_EGR register is used as trigger output (TRGO). If the
reset is generated by the trigger input (slave mode controller configured in reset mode)
then the signal on TRGO is delayed compared to the actual reset.
001: Enable - the Counter Enable signal CNT_EN is used as trigger output (TRGO). It is
useful to start several timers at the same time or to control a window in which a slave
timer is enable. The Counter Enable signal is generated by a logic AND between CEN
control bit and the trigger input when configured in gated mode. When the Counter
Enable signal is controlled by the trigger input, there is a delay on TRGO, except if the
master/slave mode is selected (see the MSM bit description in TIMx_SMCR register).
010: Update - The update event is selected as trigger output (TRGO). For instance a master
timer can then be used as a prescaler for a slave timer.
011: Compare Pulse - The trigger output send a positive pulse when the CC1IF flag is to be
set (even if it was already high), as soon as a capture or a compare match occurred.
(TRGO).
100: Compare - OC1REFC signal is used as trigger output (TRGO)
101: Compare - OC2REFC signal is used as trigger output (TRGO)
110: Compare - OC3REFC signal is used as trigger output (TRGO)
111: Compare - OC4REFC signal is used as trigger output (TRGO)
Note: The clock of the slave timer or ADC must be enabled prior to receive events from the
master timer, and must not be changed on-the-fly while triggers are received from the

Bits 23:20 MMS2[3:0]: Master mode selection 2
These bits allow the information to be sent to ADC for synchronization (TRGO2) to be
selected. The combination is as follows:
0000: Reset - the UG bit from the TIMx_EGR register is used as trigger output (TRGO2). If
the reset is generated by the trigger input (slave mode controller configured in reset
mode), the signal on TRGO2 is delayed compared to the actual reset.
0001: Enable - the Counter Enable signal CNT_EN is used as trigger output (TRGO2). It is
useful to start several timers at the same time or to control a window in which a slave
timer is enabled. The Counter Enable signal is generated by a logic AND between the
CEN control bit and the trigger input when configured in Gated mode. When the
Counter Enable signal is controlled by the trigger input, there is a delay on TRGO2,
except if the Master/Slave mode is selected (see the MSM bit description in
TIMx_SMCR register).
0010: Update - the update event is selected as trigger output (TRGO2). For instance, a
master timer can then be used as a prescaler for a slave timer.
0011: Compare pulse - the trigger output sends a positive pulse when the CC1IF flag is to
be set (even if it was already high), as soon as a capture or compare match occurs (TRGO2).
0100: Compare - OC1REFC signal is used as trigger output (TRGO2)
0101: Compare - OC2REFC signal is used as trigger output (TRGO2)
0110: Compare - OC3REFC signal is used as trigger output (TRGO2)
0111: Compare - OC4REFC signal is used as trigger output (TRGO2)
1000: Compare - OC5REFC signal is used as trigger output (TRGO2)
1001: Compare - OC6REFC signal is used as trigger output (TRGO2)
1010: Compare Pulse - OC4REFC rising or falling edges generate pulses on TRGO2
1011: Compare Pulse - OC6REFC rising or falling edges generate pulses on TRGO2
1100: Compare Pulse - OC4REFC or OC6REFC rising edges generate pulses on TRGO2
1101: Compare Pulse - OC4REFC rising or OC6REFC falling edges generate pulses on TRGO2
1110: Compare Pulse - OC5REFC or OC6REFC rising edges generate pulses on TRGO2
1111: Compare Pulse - OC5REFC rising or OC6REFC falling edges generate pulses on TRGO2
Note: The clock of the slave timer or ADC must be enabled prior to receive events from the
master timer, and must not be changed on-the-fly while triggers are received from the
master timer.

Биты регистра TIM1_CR2. Можно задавать, что для данного таймера будет TRGO и TRGO2.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

Я правильно понял?

 

И еще вопрос насчет оверсамплинга ADC. Эта опция "прозрачна" для внешнего наблюдателя? Если у меня запуск сканирования по триггеру, то ADC сам наберет нужное количество отсчетов оверсамплинга для каждого канала? Или будет по одному отсчету за каждый триггер собирать? Ни разу не пользовался этой фичей. Вроде общий смысл понятен, а нюансы не очень.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

16 минут назад, p_v сказал:

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

Задержка точно не будет зависеть от скважности, а будет зависеть только от значения в CCR4.

Фронт может начинаться и от нуля и от точки сравнения:

Цитата

0110: PWM mode 1 - In upcounting, channel 1 is active as long as TIMx_CNT<TIMx_CCR1 else inactive. In downcounting, channel 1 is inactive (OC1REF=‘0’) as long as TIMx_CNT>TIMx_CCR1 else active (OC1REF=’1’).
0111: PWM mode 2 - In upcounting, channel 1 is inactive as long as TIMx_CNT<TIMx_CCR1 else active. In downcounting, channel 1 is active as long as TIMx_CNT>TIMx_CCR1 else inactive.

16 минут назад, p_v сказал:

И еще вопрос насчет оверсамплинга ADC. Эта опция "прозрачна" для внешнего наблюдателя? Если у меня запуск сканирования по триггеру, то ADC сам наберет нужное количество отсчетов оверсамплинга для каждого канала? Или будет по одному отсчету за каждый триггер собирать? Ни разу не пользовался этой фичей. Вроде общий смысл понятен, а нюансы не очень.

С оверсемплингом не работал.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Чтобы сделать оверсемплинг, нужно соответствующим образом настроить DMA. Я обычно в циклическом режиме работаю, собирая по 9 точек с каждого канала. А как нужно измерить, вычисляю медиану.

В случае работы с триггером все будет точно так же, только DMA будет в однократном режиме пинать АЦП. А сам DMA включится по триггеру — другому таймеру, связанному с вашим и работающему в однократном режиме.

P.S. "Куб" советую выкинуть и забыть об этой дряни! По RM и даташиту намного шустрей все можно сделать. И не убиваться, пытаясь понять хоть какую-то логику в дебрях "хала".

Изменено пользователем Eddy_Em

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

27 минут назад, Eddy_Em сказал:

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

Речь про STM32G, у них передискретизация аппаратная.

29 минут назад, Eddy_Em сказал:

об этой дряни!

Модератор: Утомили, реально. Держите себя в рамках или премодерация сменится читательским билетом.

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

И еще вопрос насчет оверсамплинга ADC. Эта опция "прозрачна" для внешнего наблюдателя?

Первый же абзац описания передискретизатора (oversampler) в руководстве пользователя (user manual) отвечает на ваш вопрос. "Чтение документации из интернета вслух - 100 евро в час".

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

13 hours ago, aaarrr said:

Без Azure нещитово, я так думаю :)

OFF: куда делся @AlexandrY? Он просто ушёл с форума? Вообще, если так, то жаль. Человек с неординарным мышлением!

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

OFF: куда делся @AlexandrY? Он просто ушёл с форума? Вообще, если так, то жаль. Человек с неординарным мышлением!

Думаю - заключает следующий рекламный контракт с новым производителем чипов. И скоро мы услышим хвалебные оды в их честь. Как ранее уже слышали про Кинетис, Ренесас, ...  :biggrin:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Привет всем. 
Стал редко заходить. Нет времени. Кризис видите-ли.
Чипы на ходу пропадают из продажи.
Кучу проектов надо переделывать на новые uC.

А так, пиарюсь теперь на Хабре:mail1: под ником Indemsys - https://habr.com/ru/users/Indemsys/posts/
Заходите, комментируйте, ставьте лайки. 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

13 minutes ago, AlexandrY said:


Кучу проектов надо переделывать на новые uC.

 

Не подскажите , на какие uC можно ориентироваться  сейчас ?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

26 minutes ago, AlexandrY said:

Заходите, комментируйте, ставьте лайки. 

О, у Вас новые статьи на хабре! Почитаю! Рад, что Вы в порядке)))

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

35 минут назад, AlexandrY сказал:

А так, пиарюсь теперь на Хабре

"Развертывание Azure RTOS и USB стека на STM32H753" - ничего не меняется))))))))

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...