ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Вторник
2 июля
529112
Argon (09.07.2014 19:03 - 19:23, просмотров: 2455)
STM32F2: по какой причине частота PWM может отличаться от расчетной? Вот такая у меня инициализация T9Freq = 10000000; //близкая к желаемой частота инкремента таймера /* Compute the prescaler value */ PrescalerValue = (uint16_t) (((&rcc_clocks)->SYSCLK_Frequency) / T9Freq) - 1; // //пересчет реальной частоты с учетом округления предделителя T9Freq = ((&rcc_clocks)->SYSCLK_Frequency)/(PrescalerValue + 1); T9Period = (T9Freq*10/36000 + 5)/10; // период апдейта таймера ~36 кГц с округлением. /* Time base configuration */ TIM_TimeBaseStructure.TIM_Period = T9Period; TIM_TimeBaseStructure.TIM_Prescaler = PrescalerValue; TIM_TimeBaseStructure.TIM_ClockDivision = 0; TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; TIM_TimeBaseInit(TIM9, &TIM_TimeBaseStructure); /* PWM1 Mode configuration: Channel1 */ TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1; TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; TIM_OCInitStructure.TIM_Pulse = T9Period/2; TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; TIM_OC1Init(TIM9, &TIM_OCInitStructure); TIM_OC2Init(TIM9, &TIM_OCInitStructure); TIM_OC1PreloadConfig(TIM9, TIM_OCPreload_Enable); TIM_ARRPreloadConfig(TIM9, ENABLE); Внешний кварц имею: 11059200 Гц, частота системного клока 59788800 Гц. предделитель TIM9: 4 Реальная частота TIM9 11957760 Гц (ну это с учетом целочисленного вычисления предделителя) Период T9Period = 332 Итого частота ШИМ должна быть 11957760/332 = 36017 Гц. Тремя разными частотомерами меряется что-то около 35800 Гц. Частотомеры не прецизионные, можно было бы сказать, врут. Но занижают - все 3! Здесь причина где-то в другом. Но где?