Пн июл 04, 2016 11:16:15
htim3.Init.Period = i;
sConfigOC.Pulse = i+20;
Пн июл 04, 2016 11:30:13
Пн июл 04, 2016 11:51:30
Пн июл 04, 2016 11:52:27
красивое решение а пример кода можно. или хотябы примеры настройки таймеров в таком режимеZ_h_e писал(а):Это можно сделать полностью аппаратно
Пн июл 04, 2016 11:57:24
так как же конкретно? пример есть? или описаниеvastani писал(а):можно реализовать любым удобным тиком, хоть этого же самого таймера
Пн июл 04, 2016 12:14:07
Пн июл 04, 2016 12:32:53
дошло. Вы и не планировали средствами таймера отрабатывать импульс для включения симистора. ИМХО считаю что аппаратно реализовать это будет правильнее. меньше кода в листинге - проще в нем навигация. кроме того Вы ж не думаете что контроллер будет только симистором рулить? у него будет чем заняться кроме того чтоб 100 раз в секунду перерывать свою работу для симистора.vastani писал(а):Так все жеж просто, как само мяу!
Пн июл 04, 2016 12:32:53
TIM2->PSC=71700-1;//каждй импульс таймера 0,1 мс, но сделаем чуток быстрее, чтобы не налезло наследующую полуволну
TIM2->CR1|=TIM_CR1_DIR;//считаем назад
TIM2->CR1|=TIM_CR1_OPM;//режим одиночного импульса
TIM2->CNT=100;
TIM2->ARR=100;//от скольки считать вниз
TIM2->CR1 |= TIM_CR1_CEN;//Запускаем счет таймера, видимо чтобы загрузить предделитель. а то с первого пуска как будето без него
while (!(TIM2->SR & TIM_SR_UIF)); //ждем пока досчитает
TIM2->SR&=~TIM_SR_UIF;//сброс флага о перезагрузке таймера
TIM2->CCMR1 |= TIM_CCMR1_CC1S_0;//Выбор активного входа. Записываем "01" в биты CC1S - связываем регистр TIM2_CCR1 со входом TI1
TIM2->CCMR1 |= (TIM_CCMR1_IC1F_0 | TIM_CCMR1_IC1F_1);//Выбор длительнотси действия фильтра - 8 тактов. IC1F = 0011.
TIM2->CCER |= TIM_CCER_CC1P;//По спаду
//Select the valid trigger input: write the TSbits to 101 in the TIMx_SMCR register
//(TI1FP1 selected)
TIM2->SMCR|=TIM_SMCR_TS_0 | TIM_SMCR_TS_2; //на слейв таймер идет сигнал TI1FP1
//Configure the slave mode controller in reset mode: write the SMS bits to 100 in the
//TIMx_SMCR register.
TIM2->SMCR|=TIM_SMCR_SMS_2|TIM_SMCR_SMS_1;// 110 запуск таймера без сброса
//Enable the captures: write the CC1E and CC2E bits to ‘1 in the TIMx_CCER register
//TIM2->CCER |= TIM_CCER_CC1E;//Разрешен захват значения счетчика в регистр TIM2_CCR1
//TIM2->CCER |= TIM_CCER_CC2E;//Разрешен захват значения счетчика в регистр TIM2_CCR1
TIM2->CR2=TIM_CR2_MMS_1;//Формируем сигнал для подчиненного таймера при обновлении
//----------
//Настраиваем таймер4, он будет выдавать импульс определенной длины когда таймер 2 скажет
#define Timer4_ovl 60 // значение для перезагрузки таймера
TIM4->PSC=72-1;//предделитель один тик таймера 1 мкс
TIM4->CR1|=TIM_CR1_DIR;//считаем назад
TIM4->CR1|=TIM_CR1_OPM;//режим одиночного импульса
TIM4->CNT=Timer4_ovl;
TIM4->ARR=Timer4_ovl;//от скольки считать вниз
TIM4->CR1 |= TIM_CR1_CEN;//Запускаем счет таймера, видимо чтобы загрузить предделитель. а то с первого пуска как будето без него
while (!(TIM4->SR & TIM_SR_UIF)); //ждем пока досчитает
TIM4->SR&=~TIM_SR_UIF;//сброс флага о перезагрузке таймера
TIM4->CCR1=Timer4_ovl-1; // регистр сравнения
TIM4->SMCR|=TIM_SMCR_TS_0 ; //на слейв таймер идет сигнал от таймера 2, то есть он его будет запускать
TIM4->SMCR|=TIM_SMCR_SMS_2|TIM_SMCR_SMS_1;// 110 запуск таймера без сброса
TIM4->CCMR1|=TIM_CCMR1_OC1M_2 |TIM_CCMR1_OC1M_1; //Шим. Высокий уровень когда счетчик меньше регистра сравнения.
TIM4->CCER |= TIM_CCER_CC1E;// | TIM_CCER_CC1P;//Разрешаем сравнение
//TIM4->CR1 |= TIM_CR1_CEN;//Запускаем счет таймера,
#undef Timer3_ovl
Вт июл 05, 2016 17:52:19
а почему нельзя использовать один таймерZ_h_e писал(а):Таймер 2 задержка фазы, таймер 4 длина импульса
Вт июл 05, 2016 18:01:47
Вт июл 05, 2016 18:12:58
аналогичноZ_h_e писал(а):Это было мое первое знакомство с таймерами STM32
согасен на все 100%Z_h_e писал(а):они сходу как-то не даются пониманию
не могу запустить. пишу на EWARM + HAL для stm32f103 у него таймеры 2 и 4 на 36МГц шине. делители переправил но код все равно не запустился.Z_h_e писал(а):Мой код то Вас не устроил, зря выковыривал из проекта?
Вт июл 05, 2016 18:21:00
У меня тот же самый контроллер.RusikOk писал(а):для stm32f103 у него таймеры 2 и 4 на 36МГц шине. делители переправил но код все равно не запустился.
Что именно Вы имеете ввиду?не могу запустить
Вт июл 05, 2016 18:28:53
Вт июл 05, 2016 18:36:52
GPIO_InitStructure.GPIO_Pin =GPIO_Pin_6; //Порт B8 выход на симистор
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP ;// альтернативная функция
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init( GPIOB , &GPIO_InitStructure);
Вт июл 05, 2016 20:31:06
Ср июл 06, 2016 03:44:20
Ср июл 06, 2016 07:38:54
Ну таймер то надо чем то запускать. У меня запускается сигналом с нуль детектора.RusikOk писал(а):только ставишь галку ван пульс мод все
Ср июл 06, 2016 10:11:10
Ср июл 06, 2016 10:36:51
Z_h_e писал(а):
Если установить коэфф. 3600, вроде так получается надо при частоте 36МГц, То таймер работает в два раза быстрее расчетов. Почему, пока не догоняю и оставлю этот вопрос на завтра или когда будет время.
....
Почему ж таймер то так считает??? Надо будет подумать.
Ср июл 06, 2016 11:13:37