我买了套 无刷电机+电调
老板说 50Hz + 1-2ms 电平 就能驱动,为什么我写入后还是没反应。
白 {MOD}我接的TIM3 CH1口。  
A6
void PWM_Config(){
TIM_TimeBaseInitTypeDef timeBaseStance;
TIM_OCInitTypeDef ocStance;
TIM_DeInit(TIM3);
timeBaseStance.TIM_Period = 20;
timeBaseStance.TIM_Prescaler = 0;
timeBaseStance.TIM_CounterMode = TIM_CounterMode_Up;
timeBaseStance.TIM_ClockDivision = TIM_CKD_DIV1;
TIM_TimeBaseInit(TIM3,&timeBaseStance);
ocStance.TIM_OCMode = TIM_OCMode_PWM1;
ocStance.TIM_OutputState = TIM_OutputState_Enable;
ocStance.TIM_Pulse = 1;
TIM_OC1Init(TIM3, &ocStance);
TIM_OC1PreloadConfig(TIM3, TIM_OCPreload_Enable);
TIM_ARRPreloadConfig(TIM3,ENABLE);
TIM_Cmd(TIM3,ENABLE);
}
void GPIO_Config(){
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_DeInit(GPIOA);
GPIO_AFIODeInit();
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6 |GPIO_Pin_7;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP ;
GPIO_Init(GPIOA, &GPIO_InitStructure);
}
其他时钟已经开启。
timeBaseStance.TIM_Prescaler = 0;
楼主这里设置不合理啊,要求的PWM是50Hz,即周期是20ms,你这个PWM的周期是远小于20ms的。
应设置成这样
timeBaseStance.TIM_Period = 200-1; //设置ARR的值为199,从0计数到199,刚好是20ms
timeBaseStance.TIM_Prescaler = 7200-1;//设置PSC的值为7199,这样的话每计数一次为0.1ms
然后你再通过控制CCR来调节占空比,就可以控制无刷电机转动了。
一周热门 更多>