初级会员

- 积分
- 171
- 金钱
- 171
- 注册时间
- 2016-4-9
- 在线时间
- 27 小时
|
2金钱
最近在弄一个新的PWM风机调速,原来那个直流风机噪音太大,买了一个新的无刷直流风机,都是12V的,可是这个风机调速很奇怪,满转4500转,在0~95%左右的占空比风机速度变化很小,最多也就1300转左右,可是在加那最后的5%的时候风机速度一下就变为满转了,风机的驱动频率也是按厂家给的来的,控制引脚的电压也是正常的从0~5V增加的,所以就感觉很奇怪,求大神解答~~~注:以前的那个风机调速是正常的
附上代码:
/*定时器初始化部分*/
TIM_DeInit(TIM1); TIM_TimeBaseStructure.TIM_Period = 999; //当定时器从0计数到999,即为1000次为一个定时周期40ms
TIM_TimeBaseStructure.TIM_Prescaler = 2879; //设置预分频:3600预分频,即为72MHz 转为 25KHz
TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1; //设置时钟分频系数:不分频
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //向上计数模式
TIM_TimeBaseInit(TIM1, &TIM_TimeBaseStructure);
TIM_BDTRInitStructure.TIM_OSSRState = TIM_OSSRState_Disable;
TIM_BDTRInitStructure.TIM_OSSIState = TIM_OSSIState_Disable;
TIM_BDTRInitStructure.TIM_LOCKLevel = TIM_LOCKLevel_OFF;
TIM_BDTRInitStructure.TIM_DeadTime = 0x90;
TIM_BDTRInitStructure.TIM_Break = TIM_Break_Disable;
TIM_BDTRInitStructure.TIM_BreakPolarity = TIM_BreakPolarity_Low;
TIM_BDTRInitStructure.TIM_AutomaticOutput = TIM_AutomaticOutput_Disable;
TIM_BDTRConfig(TIM1, &TIM_BDTRInitStructure);
/*PWM配置部分*/
//PWM1 Mode configuration: Channel1
TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1; //选择定时器模式:TIM脉冲宽度调制模式1
TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; //连接外部输出
TIM_OCInitStructure.TIM_OutputNState = TIM_OutputState_Disable;
TIM_OCInitStructure.TIM_Pulse = u16CmpValue;
TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_Low; //有效电平为低
TIM_OCInitStructure.TIM_OCNPolarity = TIM_OCNPolarity_High;
TIM_OCInitStructure.TIM_OCIdleState = TIM_OCIdleState_Reset;
TIM_OCInitStructure.TIM_OCNIdleState = TIM_OCIdleState_Reset;
TIM_OC1Init(TIM1, &TIM_OCInitStructure);
TIM_OC1PreloadConfig(TIM1, TIM_OCPreload_Enable); //使能TIM1在CCR2上的预装载寄存器,即TIM1_CCR2的预装载值在更新事件到来时才能被传送至当前寄存器中。
TIM_ARRPreloadConfig(TIM1, ENABLE); // 使能TIM1重载寄存器ARR
TIM_GenerateEvent(TIM1,TIM_EventSource_Update); // 产生软件更新事件,立即更新数据,使重载寄存器中的数据立即生效
TIM_ClearFlag(TIM1,TIM_FLAG_Update); //清除标志位。定时器一打开便产生更新事件,若不清除,将会进入中断
TIM_ITConfig(TIM1,TIM_IT_Update | TIM_IT_CC1,DISABLE); //允许更新中断
TIM_Cmd(TIM1, ENABLE); //使能TIM1
TIM_CtrlPWMOutputs(TIM1, ENABLE);
|
|