Jump to content

    
p_v

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

Recommended Posts

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

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

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

Share this post


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

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

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

Share this post


Link to post
Share on other sites
3 minutes ago, jcxz said:

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

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

 

31 minutes ago, p_v said:

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

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

Share this post


Link to post
Share on other sites
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. Как таймер "задержки" заставить автоматически "перевзводиться" и ждать следующего события.

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

Share this post


Link to post
Share on other sites

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.

Share this post


Link to post
Share on other sites

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

 

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

 

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

Share this post


Link to post
Share on other sites
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 сам наберет нужное количество отсчетов оверсамплинга для каждого канала? Или будет по одному отсчету за каждый триггер собирать? Ни разу не пользовался этой фичей. Вроде общий смысл понятен, а нюансы не очень.

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

Share this post


Link to post
Share on other sites

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

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

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

Edited by Eddy_Em

Share this post


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

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

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

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

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

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

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

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

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

Share this post


Link to post
Share on other sites
13 hours ago, aaarrr said:

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

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

Share this post


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

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

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

Share this post


Link to post
Share on other sites

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

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

 

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  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.