16.02.2016, 17:18
|
|
Заблокирован
Регистрация: 22.04.2014
Сообщений: 0
Сказал спасибо: 15
Сказали Спасибо 366 раз(а) в 284 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
На двух таймерах. Смотрите
AN2592 Application note
How to achieve 32-bit timer resolution using the link system in STM32F10x microcontrollers
|
|
|
Сказали "Спасибо" STM32F0
|
|
|
16.02.2016, 18:10
|
|
Прописка
Регистрация: 09.02.2011
Сообщений: 164
Сказал спасибо: 1
Сказали Спасибо 27 раз(а) в 22 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
Должно получиться.
В регистр ARR - период/2
В регистры сравнения на 90 ... сдвинутый эквивалентный код.
Выхода сравнений в режим переключения (togle).
|
|
|
Сказали "Спасибо" Impartial
|
|
|
16.02.2016, 18:34
|
|
Почётный гражданин KAZUS.RU
Регистрация: 24.03.2007
Сообщений: 1,365
Сказал спасибо: 85
Сказали Спасибо 625 раз(а) в 377 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
Примерно усек. Но это если сами импульсы перекрываются, как на картинке стр. 15 AN2592.
А если импульсы очень коротки, т.е. их длительность значительно менее полупериода и задержек между фазами, они никак между собой не перекрываются. Т.е. toggle mode уже не пройдет, т.к. задержка между импульсами значительно больше их длительности.
Получается в этом случае уже не сделать?
|
|
|
|
16.02.2016, 18:44
|
|
Прописка
Регистрация: 09.02.2011
Сообщений: 164
Сказал спасибо: 1
Сказали Спасибо 27 раз(а) в 22 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
Сообщение от nerozero
|
STM32F103 + USB + USB-FS, CDC. часто все подвисает наглухо от импульсных помех. Незнаю как диагностировать куда все это дело вываливается.
|
Проконтролируйте прерывание обработки автомата состояний юсб.
Начните с SOF.
Обычно при сбое нужно все перезапускать как при сбросе. Отловить сбой можно по сбою автомата состояний. Им управляет хост.
|
|
|
|
16.02.2016, 18:48
|
|
Прописка
Регистрация: 09.02.2011
Сообщений: 164
Сказал спасибо: 1
Сказали Спасибо 27 раз(а) в 22 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
Сообщение от pambaru
|
реализовать аппаратно на одном таймере 4 выхода, одинаковые прямоугольники, сдвинутые по фазе на 90 градусов относительно друг друга
|
Вы же сами такую задачу поставили.
Сообщение от pambaru
|
А если импульсы очень коротки, т.е. их длительность значительно менее полупериода и задержек между фазами, они никак между собой не перекрываются.
|
Это уже совсем другая задача.
Чем нужно управлять?
|
|
|
|
17.02.2016, 08:05
|
|
Почётный гражданин KAZUS.RU
Регистрация: 24.03.2007
Сообщений: 1,365
Сказал спасибо: 85
Сказали Спасибо 625 раз(а) в 377 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
Сообщение от Impartial
|
Вы же сами такую задачу поставили.
|
Я не говорил, что импульсы перекрываются. Я писал, что сдвиг фаз 90 град., импульсы прямоугольные. А перекрытие может быть, а может и не быть (короткие импульсы).
|
|
|
|
17.02.2016, 10:21
|
|
Заблокирован
Регистрация: 22.04.2014
Сообщений: 0
Сказал спасибо: 15
Сказали Спасибо 366 раз(а) в 284 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
Да можно попробовать и на одном таймере, через DMAR.
|
|
|
|
17.02.2016, 20:35
|
|
Заблокирован
Регистрация: 22.04.2014
Сообщений: 0
Сказал спасибо: 15
Сказали Спасибо 366 раз(а) в 284 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
Попробовал, работает через DMAR. Т.е. таймер и ДМА по переполнению, крутится само, без вмешательства. Оно?
|
|
|
Сказали "Спасибо" STM32F0
|
|
|
18.02.2016, 08:01
|
|
Почётный гражданин KAZUS.RU
Регистрация: 24.03.2007
Сообщений: 1,365
Сказал спасибо: 85
Сказали Спасибо 625 раз(а) в 377 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
Да, то что надо!
А теперь, поясните, плз, верно ли я понял,
1. DMA конфигурируем на запись из буфера памяти в DMAR, кольцевой режим. В буфере лежат значения регистров CCR1 - CCR4, 4x4=16 значений.
2. Выставляем в DIER таймера биты CC1DE - CC4DE.
3. В DCR выставляем трансфер в 4 слова и адрес CCR1.
4. Запускаем все это хозяйство.
Теперь по каждому событию capture compare у нас прописываются новые CCRx и видим то, что нужно
Верно?
|
|
|
|
18.02.2016, 12:18
|
|
Заблокирован
Регистрация: 22.04.2014
Сообщений: 0
Сказал спасибо: 15
Сказали Спасибо 366 раз(а) в 284 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
Сообщение от pambaru
|
1. DMA конфигурируем на запись из буфера памяти в DMAR, кольцевой режим. В буфере лежат значения регистров CCR1 - CCR4, 4x4=16 значений.
|
Да.
Код:
|
const uint16_t Duty_Cycle_Table[] =
{
// CCR1 CCR2 CCR3 CCR4
50, 0, 0, 0,
0, 50, 0, 0,
0, 0, 50, 0,
0, 0, 0, 50
}; |
Сообщение от pambaru
|
2. Выставляем в DIER таймера биты CC1DE - CC4DE.
|
Нет. Только лишь
Код:
|
TIMx-›DIER |= TIM_DIER_UDE; // Update DMA request enable |
Сообщение от pambaru
|
3. В DCR выставляем трансфер в 4 слова и адрес CCR1.
|
Не адрес, а смещение
Код:
|
TIMx-›DCR = ((4 - 1) ‹‹ 8) + (((uint32_t)&TIMx-›CCR1 - (uint32_t)&TIMx-›CR1) ›› 2); |
А в счётчик ДМА занести 16.
Код:
|
DMA_TIM_DMAR-›CNDTR = 16; // DMA channel x number of data register |
Сообщение от pambaru
|
4. Запускаем все это хозяйство.
|
Да, сначала ДМА, потом таймер.
Сообщение от pambaru
|
Теперь по каждому событию capture compare у нас прописываются новые CCRx и видим то, что нужно
|
Нет.
Т.е. частота выходного сигнала в 4 раза меньше. И не забыть включить прелоад.
Код:
|
TIMx-›CCMR1 |= (TIM_CCMR1_OC1M_1 | TIM_CCMR1_OC1M_2 | TIM_CCMR1_OC1PE); // PWM Mode1
TIMx-›CCMR1 |= (TIM_CCMR1_OC2M_1 | TIM_CCMR1_OC2M_2 | TIM_CCMR1_OC2PE); // PWM Mode1
TIMx-›CCMR2 |= (TIM_CCMR2_OC3M_1 | TIM_CCMR2_OC3M_2 | TIM_CCMR2_OC3PE); // PWM Mode1
TIMx-›CCMR2 |= (TIM_CCMR2_OC4M_1 | TIM_CCMR2_OC4M_2 | TIM_CCMR2_OC4PE); // PWM Mode1 |
Последний раз редактировалось STM32F0; 18.02.2016 в 12:23.
|
|
|
Сказали "Спасибо" STM32F0
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 09:23.
|
|