梁工
发表于 4 天前
深度陶醉 发表于 2025-6-14 14:25
一阶低通滤波的算法公式为:
Y(n)=αX(n) + (1-α)Y(n-1)
一阶低通滤波的算法公式为:Y(n)=(1-a)*Y(n-1) + a*X(n)。为了快速计算,我使用定点(整数)运算。
我的例子是a=1/16=0.0625:Y(n)=X(n)/16 + (1-1/16)*Y(n-1) = Y(n-1)*15/16 + X(n)/16。
为了消除截断误差,去掉“X(n)/16”中的/16:
Y(n)=Y(n-1)*15/16 + X(n)
但是这样一来,结果会变成16倍,原来12位的ADC值,滤波后等效于16位ADC值,所以实际取值要/16。
上面就是从数学角度来推导的结果。
当a=1/16=0.0625时,截止频率 fc = 0.01*fs,即截止频率是采样率的0.01倍。
Kem_L
发表于 前天 11:49
dong97512 发表于 2023-5-30 10:49
梁工,你好!正反转数字调整,上升,下降沿更换好就行了。看到后面有个程序段没理解,帮忙介绍一下不?
...
你好。这段程序我也没理解,请问你现在理解了吗?如果理解了还请帮忙解释一下,谢谢
szmwyqhe
发表于 10 小时前
梁工,我在无霍尔的代码里想增加PWMB测外部信号占空比,来直接控制电机转速,只增加了
{
P_SW2 = 0x80;
PWMB_PS=0X01;//PWM5=P1.7
//(CC5捕获TI5上升沿,CC6捕获TI5下降沿)
//CC5捕获周期宽度,CC6捕获高电平宽度
PWMB_CCER1 = 0x00;
PWMB_CCMR1 = 0x01; //CC5为输入模式,且映射到TI5FP5上
PWMB_CCMR2 = 0x02; //CC6为输入模式,且映射到TI5FP6上
PWMB_CCER1 = 0x11; //使能CC5/CC6上的捕获功能
PWMB_CCER1 |= 0x00; //设置捕获极性为CC5的上升沿
PWMB_CCER1 |= 0x20; //设置捕获极性为CC6的下降沿
PWMB_SMCR = 0x54; //TS=TI1FP1,SMS=TI1上升沿复位模式
PWMB_CR1 = 0x01;
PWMB_IER = 0x06; //使能CC5/CC6捕获中断
}
还没有更新ADC11,电机就直接不转了,可能是哪里的问题啊?
梁工
发表于 6 小时前
szmwyqhe 发表于 2025-6-18 11:22
梁工,我在无霍尔的代码里想增加PWMB测外部信号占空比,来直接控制电机转速,只增加了
{
1、不要使用P_SW2 = 0x80;,会影响别的位,使用下面操作:
P_SW2 |= 0x80;
2、你允许了PWMB中断,有中断函数吗?
如果是用PPM信号,则只需要测量高电平时间,使用P3.3(INT1)+定时器1的门控定时就可以了,最简单。