关于pwm模式控制步进,同为低电平输出,电机振动和噪音问题

2019-07-20 13:01发布

本人用的是STM32F407,使用TIM12的pwm模式输出指定频率的50%占空比的pwm波。初始化略过,由于F407的时钟频率是168Mhz,设置prescaler为84-1,所以计数频率为1Mhz,控制PWM频率方式如下:

TIM_SetAutoreload(TIM12,1000000/Freq-1);//设置重装载值,其中Freq为输出pwm所需频率
TIM_SetCompare1(TIM12,500000/Freq-1);//设置占空比
temp1=1000000/Freq-1;//temp1和temp2用于debug时查看计算结果。
temp2=500000/Freq-1;

*已经测试,当Freq等于0时,1000000/Freq-1会变成u32的最大数,不会报错。所以这里没加判断。

问题1:当设置Freq=0,1,2,3,4,5时,pwm输出均为低电平,但是理论上应该分别输出低电平,1Hz,2Hz,3Hz,4Hz和5Hz的pwm。(temp1和temp2读数正确)
当设置Freq=6,7时,会输出pwm,但是频率错误。
当设置Freq=8~15时,不输出pwm
设置Freq=16以上时开始输出正确的pwm

我觉得应该是库函数的bug,TIM12可能不是32位定时器,但是TIM_SetAutoreload函数却是32位的,所以调用这个函数的时候貌似参数正确,但其实输入的是后16位。当Compare截取后16位比重装载值大时,会出现这个问题。
不知道我这个想法是不是正确,求大佬解释

问题2
同样是Freq=0,1,2,3,4,5.将pwm口接到TB6560,Freq=0时,电机会发出周期性的噪音,声音挺大,并且电机会震动,加负载后(手拧)声音更大,电机周期性锁定,而且锁定能力弱。
但是当Freq=1-5时,没有这个问题,电机会随机发出不同频率的连续噪音(偶尔不出声),声音不大,电机锁定稳定。
那么同样是输出低电平(示波器测试),为什么电机的表现会不一样?


ps:驱动电路板是共阳接法,GPIO接到阴极会有噪波,悬空直接接示波器就没有。不知道为什么,也不知道对这个有没有影响。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
3条回答
lkposible4
2019-07-20 17:39
换了个写法,加了if(Freq==0){
TIM_SetAutoreload(TIM12,5000-1);
TIM_SetCompare1(TIM12,5000);//pwm输出低电平
}
else{
...
}
这种写法,当Freq=0时,不会有抖动和周期性的噪音,偶尔会有高频噪音和电流声。但是示波器显示输出没变。

还有一个很奇怪的现象,我用的那块驱动板子用的6N137光耦做输入隔离,当我打开24V电源时,明显看到DIR口和PUL口有噪波,关掉24v的电源就没有。这地方我也有点懵逼。

一周热门 更多>