OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4200|回复: 2

STM32 PWM风机调速问题

[复制链接]

3

主题

5

帖子

0

精华

初级会员

Rank: 2

积分
171
金钱
171
注册时间
2016-4-9
在线时间
27 小时
发表于 2016-4-20 12:00:51 | 显示全部楼层 |阅读模式
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);

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

4

主题

49

帖子

0

精华

初级会员

Rank: 2

积分
193
金钱
193
注册时间
2016-1-14
在线时间
42 小时
发表于 2016-4-20 13:01:06 | 显示全部楼层
我想 那应该是驱动电路的问题吧

再检查一下硬件电路
回复

使用道具 举报

3

主题

5

帖子

0

精华

初级会员

Rank: 2

积分
171
金钱
171
注册时间
2016-4-9
在线时间
27 小时
 楼主| 发表于 2016-4-20 14:44:16 | 显示全部楼层
ywlzh 发表于 2016-4-20 13:01
我想 那应该是驱动电路的问题吧

再检查一下硬件电路

驱动电路是这样,以前用的是直流风机,现在是直流无刷风机,有区别么?

驱动电路

驱动电路
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-17 20:26

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表