22.07.2019, 00:00
|
|
Частый гость
Регистрация: 10.12.2008
Адрес: Кривой Рог
Сообщений: 15
Сказал спасибо: 2
Сказали Спасибо 2 раз(а) в 2 сообщении(ях)
|
Помогите с таймерами STM32F0
Доброго времени суток!
Решил для себя заморочиться с фазовым регулятором мощности с дисплейчиком, с шиной SPI. Выбор контроллера пал на STMF030F4, его ног и переферии достаточно (ADC, SPI, и таймеры). В чем вышел затык, выход SPI и таймера физически находятся на одних и тех же ногах МК, и ремапить нельзя.
Для организации регулятора мощности выбрал TIM3 и One-pulse mode. Все делается апаратно. Но тогда нельзя использовать ногу SPI MOSI.
Я пытался заставить работать связку таймеров TIM1 и TIM3: TIM1 использовать в качестве Input Capture (детектор перехода через ноль) и по сигналу TRGO запускать TIM3 в одноимпульсном режиме. Но увы, не работает, не пойму где я затупил.
Таймер TIM3 настроенный на внешний вход отрабатывает корректно, но если перевожу на TIM1 ITR0 то все, затык...
В идеале конечно хорошо было бы использовать TIM3_CH3 И TIM3_CH1, но как их связать не вижу возможности
Код:
|
// **** IO config ****
RCC-›AHBENR |= RCC_AHBENR_GPIOAEN;
RCC-›APB1ENR |= RCC_APB1ENR_TIM3EN; // enable TIM3 clock;
RCC-›APB2ENR |= RCC_APB2ENR_TIM1EN; // enable clock TIM1
// TIM3 CH1 - output PA6
GPIOA-›MODER |= GPIO_MODER_MODER6_1; // alternate function mode
GPIOA-›OTYPER &= ~GPIO_OTYPER_OT_6; // out is Push-Pull
GPIOA-›OSPEEDR |= GPIO_OSPEEDER_OSPEEDR6_0; // Medium speed
GPIOA-›PUPDR &= ~GPIO_PUPDR_PUPDR6; // No pull-up
GPIOA-›AFR[0] |= 0x01000000; // p. 140 Alternate function AF1, p. 33 datasheet
// TIM1 CH2 - input PA9 (pin 17)
GPIOA-›MODER |= GPIO_MODER_MODER9_1;
GPIOA-›OTYPER &= ~GPIO_OTYPER_OT_9; // out is Push-Pull
GPIOA-›OSPEEDR |= GPIO_OSPEEDER_OSPEEDR9_0; // Medium speed
GPIOA-›PUPDR &= ~GPIO_PUPDR_PUPDR9; // No pull-up
GPIOA-›AFR[1] |= 0x00000020; // p. 140 Alternate function AF2, p. 33 datasheet
// **** end IO config ****
/* - - - - - - - timer 1 config - - - - - - -*/
TIM1-›CCMR1 |= TIM_CCMR1_CC2S_0; // channel CC2 is configured as input, IC2 is mapped on TI2
TIM1-›CCER |= (TIM_CCER_CC2P |TIM_CCER_CC2NP); // add: both edges
// select slave mode:
TIM1-›SMCR &= ~TIM_SMCR_TS_0;
TIM1-›SMCR |= (TIM_SMCR_TS_2 | TIM_SMCR_TS_1); // TS[2:0] = 0b110 -› Filtered Timer Input 2 (TI2FP2)
// Gated mode SMS :
TIM1-›SMCR |= (TIM_SMCR_SMS_2 | TIM_SMCR_SMS_0);
// MMS: Master mode selection --›
// 010: Update - The update event is selected as a trigger output (TRGO).
TIM1-›CR2 |= ( TIM_CR2_MMS_1 );
TIM1-›CR2 &= ~(TIM_CR2_MMS_2 | TIM_CR2_MMS_0) ;
//TIM1-›CR1 |= TIM_CR1_OPM; // 1 - OnePulseMode, 0 - RepetitiveMode
TIM1-›CCER |= TIM_CCER_CC2E; // Enable chanel CC2 only after config CCMR !!!
TIM1-›CR1 |= TIM_CR1_CEN;
/* - - - - - - - timer 3 config - - - - - - -*/
//Значение регистров выбраны только для отладки!
// будут меняться программно из основного цикла
TIM3-›PSC = 8-1; // 8 MHz / 8 = 1 MHz to counter
TIM3-›ARR = 9000-1; // 1 MHz / 10000 = 100 Hz cycle
TIM3-›CCR1 = 5500-1; // delay "start"
// TIM3 config PWM2 OP mode
TIM3-›CCMR1 &= ~TIM_CCMR1_CC1S; // CC1 channel is configured as output
TIM3-›CCER &= ~TIM_CCER_CC1P; // activ - high
TIM3-›CCMR1 |= (TIM_CCMR1_OC1M | // PWM mode 2
TIM_CCMR1_OC1PE); // Output compare enable
// select triger Internal Trigger 0 (ITR0) -- TIM1
// Trigger Mode - The counter starts at a rising edge of the trigger TRGI
TIM3-›SMCR &= ~(TIM_SMCR_TS_0 | TIM_SMCR_TS_1 | TIM_SMCR_TS_2 | TIM_SMCR_SMS_0);
TIM3-›SMCR |= ( TIM_SMCR_SMS_2 | TIM_SMCR_SMS_1); // Only the start of the counter is controlled
// finishing setup and start:
TIM3-›CCER |= TIM_CCER_CC1E; // enable output pin
TIM3-›CR1 |= TIM_CR1_OPM; // 1 - OnePulseMode, 0 - RepetitiveMode
TIM3-›BDTR |= TIM_BDTR_MOE; // out enable
TIM3-›CR1 |= TIM_CR1_CEN; // enable timer |
Последний раз редактировалось ConstantX; 22.07.2019 в 09:20.
|
|
|
|
22.07.2019, 10:11
|
|
Гражданин KAZUS.RU
Регистрация: 22.07.2007
Адрес: Владивосток
Сообщений: 984
Сказал спасибо: 435
Сказали Спасибо 375 раз(а) в 197 сообщении(ях)
|
Re: Помогите с таймерами STM32F0
А почему бы не использовать external interrupt? Вроде он вешается на любой порт F030.
|
|
|
|
22.07.2019, 10:44
|
|
Почётный гражданин KAZUS.RU
Регистрация: 27.01.2005
Адрес: Россия, КЧР, Нижний Архыз
Сообщений: 3,653
Сказал спасибо: 117
Сказали Спасибо 815 раз(а) в 592 сообщении(ях)
|
Re: Помогите с таймерами STM32F0
Шимить регулятор мощности таймером? Зачем? В зависимости от характеристик объекта регулирования достаточно дергать грелку с периодом от пары секунд до пары десятков минут.
Не нужен там ШИМ.
__________________
Если ты пользуешься Windows, то ты финансируешь мировой терроризм!
|
|
|
|
22.07.2019, 11:15
|
|
Гражданин KAZUS.RU
Регистрация: 22.07.2007
Адрес: Владивосток
Сообщений: 984
Сказал спасибо: 435
Сказали Спасибо 375 раз(а) в 197 сообщении(ях)
|
Re: Помогите с таймерами STM32F0
Чтоб 2 раза не вставать - использую такой детектор нуля.
|
|
|
|
22.07.2019, 11:30
|
|
Почётный гражданин KAZUS.RU
Регистрация: 10.12.2007
Адрес: Екатеринбург
Сообщений: 2,731
Сказал спасибо: 2,454
Сказали Спасибо 893 раз(а) в 580 сообщении(ях)
|
Re: Помогите с таймерами STM32F0
А,если просто на вход оптрона подать синус 220в через 1 мегом. Только защитить оптрон обратно включенным диодом. И после резистора диод на +питания.
|
|
|
|
22.07.2019, 11:48
|
|
Гражданин KAZUS.RU
Регистрация: 22.07.2007
Адрес: Владивосток
Сообщений: 984
Сказал спасибо: 435
Сказали Спасибо 375 раз(а) в 197 сообщении(ях)
|
Re: Помогите с таймерами STM32F0
Сообщение от baiderin
|
А,если просто на вход оптрона подать синус 220в через 1 мегом. Только защитить оптрон обратно включенным диодом. И после резистора диод на +питания.
|
Будут широкие импульсы. А надо как можно четче ноль детектировать. А то тиристоры - они такие. Вместо подачи маленького импульса можно наоборот включить его на следующие полпериода.
|
|
|
|
22.07.2019, 12:19
|
|
Заблокирован
Регистрация: 17.07.2010
Адрес: мурмурляндия
Сообщений: 10,715
Сказал спасибо: 189
Сказали Спасибо 3,199 раз(а) в 2,074 сообщении(ях)
|
Re: Помогите с таймерами STM32F0
нафига такой детектор??
мне хватает оптрона, резистор на 56к и диод шоп оптрон не пробило обратным напряжением. работает 3 фазный регулятор на 18 люстр в ресторане.
шим делается на прерываниях ногодрыгом. 18 фаз.
вот любят люди усложнять себе задачи.
|
|
|
Эти 2 пользователя(ей) сказали Спасибо индюк за это сообщение:
|
|
|
22.07.2019, 12:29
|
|
Почётный гражданин KAZUS.RU
Регистрация: 10.12.2007
Адрес: Екатеринбург
Сообщений: 2,731
Сказал спасибо: 2,454
Сказали Спасибо 893 раз(а) в 580 сообщении(ях)
|
Re: Помогите с таймерами STM32F0
Сообщение от ampy
|
Будут широкие импульсы.
|
Главное-нарастающий фронт. А он будет крутым.И будет соответствовать моменту перехода через "0".Причем точнее, чем в симисторах с встроенной схемой детектора.
|
|
|
|
22.07.2019, 12:48
|
|
Заблокирован
Регистрация: 17.07.2010
Адрес: мурмурляндия
Сообщений: 10,715
Сказал спасибо: 189
Сказали Спасибо 3,199 раз(а) в 2,074 сообщении(ях)
|
Re: Помогите с таймерами STM32F0
регулировать тэны вообще спокойно можно без всякого шима привязанного к сети. это актуально только для лампочек.
паяльные станции вон посмотрите - там частота регулирования меньше 1герца.
да и помех меньше. тиристоры ой как быстро включаются
|
|
|
|
22.07.2019, 13:21
|
|
Гражданин KAZUS.RU
Регистрация: 22.07.2007
Адрес: Владивосток
Сообщений: 984
Сказал спасибо: 435
Сказали Спасибо 375 раз(а) в 197 сообщении(ях)
|
Re: Помогите с таймерами STM32F0
Встречался, что стояли отдельные трансформаторы для определения перехода через 0, а вся схема охвачена ОС по RMS выходного напряжения с использованием AD536... Так что случаи бывают разные, а пара транзисторов не беда.
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 22:22.
|
|