STC8H8K64U PWMA同时用作捕获和输出采集时,出现捕获遗漏问题
问题描述:时钟频率24M,在设定PWM频率为20kHz的情况下,用PWMA第二个通道作为捕获,其他部分通道作为pwm输出。配置为不分频,ARR寄存器写入1199,并且同时打开输入捕获中断和PWMA溢出更新中断,以用来计算捕获周期,实际捕获计数约在16*1199~17*1199之间。发现单片机有漏捕获的情况,即溢出计数由正常的16概率性的变为32。这是为什么呀?有哪位大神遇到过没?麻烦赐教。 将 CPU 主频先提高到 40MHz, 优化程序,再有障碍,问梁工 用示波器仔细看信号,估计有抖动,刚好是2倍。另外,如果捕获之后、读出数据之前出现溢出,则可能会多一个溢出计数,应对方法是,进中断后先处理捕获中断读出捕获值和溢出次数,再处理溢出中断,并且清除溢出中断计数。 神农鼎 发表于 2023-11-5 16:36
将 CPU 主频先提高到 40MHz, 优化程序,再有障碍,问梁工
好的,谢谢 梁工 发表于 2023-11-5 16:53
用示波器仔细看信号,估计有抖动,刚好是2倍。
另外,如果捕获之后、读出数据之前出现溢出,则可能会多一个 ...
好的,我是在捕获中断里面更新的溢出计数值,如果存在抖动的话,不应该每次都是2倍,所以只能推断是漏捕了。另一个现象就是,默认不配置ARR寄存器的话,暂时没出现这种现象。我试着先把捕获中断处理提前试试。 pelion 发表于 2023-11-5 21:58
好的,我是在捕获中断里面更新的溢出计数值,如果存在抖动的话,不应该每次都是2倍,所以只能推断是漏捕 ...
捕捉中断是硬件完成的,不会漏的,除非你的程序响应不过来(比如某个中断耗时太多),但那样也不会是固定的关系,你这里是固定的2倍,则肯定是程序的问题,请仔细测试查找。 代码如附件,配置工作频率40M,还是会有同样的问题 梁工 发表于 2023-11-5 23:20
捕捉中断是硬件完成的,不会漏的,除非你的程序响应不过来(比如某个中断耗时太多),但那样也不会是固定 ...
代码如上,这是测试结果 pelion 发表于 2023-11-6 11:34
代码如上,这是测试结果
你在捕获中断中取反一个IO来指示,示波器观察,输入频率稳定的信号,则IO输出信号频率的一半,就能知道是否及时响应了。刚好两倍,说明白要么(有规律的)没及时响应,要么检测时间变成2倍了。 本帖最后由 pelion 于 2023-11-6 13:52 编辑
梁工 发表于 2023-11-6 13:05
你在捕获中断中取反一个IO来指示,示波器观察,输入频率稳定的信号,则IO输出信号频率的一半,就能知道是 ...
如图,黄色线为输入信号,蓝色线为捕捉后的翻转输出波形,通过脉宽触发捕捉到了如图所示的漏捕的情况。另外,目前程序仅有此中断和串口中断,且串口中断无数据传输,应该不是响应不及时。void PWMA_ISR() interrupt 26
{
uint8_t sr1;
sr1 = PWMA_SR1;
PWMA_SR1 = 0;
if(sr1 & 0x01)
{
cnt++;
}
if(sr1 & 0x04)
{
P40 = ~P40;
}
}
页:
[1]
2