Пока пытаюсь вывести ШИМ на фазу, т.е. тупо запитать ее током и регулировать без обратной связи, т.е. задавать скважность от 0 до 1000. С точностью десятых.
Т.е. настраиваю таймер:
CODE
uint16_t Freq = 20000;//Частота
uint16_t TimerPeriod = 0;
uint16_t Pulse = 0;
TimerPeriod = (uint16_t) (SystemCoreClock / Freq) - 1;
Pulse = (uint16_t) (((uint32_t) 500 * (TimerPeriod- 1)) / 1000);
TIM_TimeBaseStructure.TIM_Prescaler = 0;
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
TIM_TimeBaseStructure.TIM_Period = TimerPeriod;
TIM_TimeBaseStructure.TIM_ClockDivision = 0;
TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;
TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;
TIM_OCInitStructure.TIM_OCIdleState = TIM_OCIdleState_Set;
И далее устанавливаю скважность:
Код
Pulse = (uint16_t) (((uint32_t) 600 * (TimerPeriod- 1)) / 1000); //ВЫХОД
TIM_SetCompare3(TIM3, Pulse);
Так вот от 500 до 1000 что эквивалентно 50% - 100%, ток регулируется, а ниже 500 что-то нет устанавливается ток.
Если сменить полярность шим на TIM_OCPolarity_Low:
то ситуация обратная от 0 до 500 регулируется, а выше 500 нет.
Где я пролетел?
Вобщем снизил до 18 кгц стал изменяться от 0 до 100.
Походу это связано с работой IR2104
Сообщение отредактировал IgorKossak - Apr 26 2013, 12:42
Причина редактирования: [codebox] для длинного кода, [code] - для короткого!!!