stm32输入捕获出现偏差

2019-07-21 05:29发布

单片机选择的stm32f103zet6,现在做一个频率采样的产品,为了测试程序,先用了一个定时器输出一个pwm,在用一个定时器去采集;计算频率的方法是测量两个上升沿的时间作为一个周期计算频率;
程序都是在原子哥的程序上修改的;仿真时发现频率有偏差;
下面是计算一个周期的时间的程序
void TIM3_IRQHandler(void)
{

if (TIM_GetITStatus(TIM3, TIM_IT_Update) != RESET)
                {            
                        if(TIM3CH4_CAPTURE_STA&0X40)
                        {
                                if((TIM3CH4_CAPTURE_STA&0X3F)==0X3F)
                                {
                                        TIM3CH4_CAPTURE_STA|=0X80;
                                        TIM3CH4_CAPTURE_VAL=0XFFFF;
                                }else TIM3CH4_CAPTURE_STA++;
                        }         
                }
                if (TIM_GetITStatus(TIM3, TIM_IT_CC4) != RESET)
                {       
                        if(TIM3CH4_CAPTURE_STA&0X40)       
                        {                                 
                                TIM3CH4_CAPTURE_STA|=0X80;               
                                TIM3CH4_CAPTURE_VAL=TIM_GetCapture4(TIM3);
                          
                        }else                                                         
                        {
                                TIM3CH4_CAPTURE_STA=0;                       
                                TIM3CH4_CAPTURE_VAL=0;
                                 TIM_SetCounter(TIM3,0);
                                TIM3CH4_CAPTURE_STA|=0X40;                       
                        }                    
                }

   TIM_ClearITPendingBit(TIM3, TIM_IT_CC4|TIM_IT_Update); //Çå3yÖD¶Ï±ê־λ

}

实际计算时发现两个上升沿的时间计数值:
在4M的采样频率时和我用定时器输出pwm的值差10,
在12M的时候差30,在1M的时候差3;这个误差是哪里的?是在因为在定时器中断中执行的上述语句的问题吗?

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
11条回答
lvkanger
1楼-- · 2019-07-21 19:07
lvkanger 发表于 2019-1-25 17:05
是不是涉及到采集分辨率的问题了?

是的,精度要求高,在低频时还好,几K时就不太满足要求;我在编程的时候把这个误差强制补上,计算结果也能满足要求,只是对这个原因有点不确定
啦啦啦德玛西亚
2楼-- · 2019-07-21 23:25
啦啦啦德玛西亚 发表于 2019-1-25 17:10
是的,精度要求高,在低频时还好,几K时就不太满足要求;我在编程的时候把这个误差强制补上,计算结果也 ...

我的意思是定时器采集的时候会不会由于定时器导致采集分辨率降低?用中断计数会好些吧
lvkanger
3楼-- · 2019-07-22 00:03
 精彩回答 2  元偷偷看……
lvkanger
4楼-- · 2019-07-22 03:45
lvkanger 发表于 2019-1-28 10:00
http://www.openedv.com/forum.php?mod=viewthread&tid=275545&extra=

你用的L4,程序我不是很理解,原理上的是说用1个定时器计时1s去读取采样到的脉冲数,有个问题是低频怎么办,你用一个标准波去测试感觉上可以,如果方波频率是5.5hz,你这个方式计算的就有问题了,如果我理解的不对请指正
啦啦啦德玛西亚
5楼-- · 2019-07-22 05:48
如果将定时器清零的话确实存在计数误差,我做的一个试验中直接用72MHz的时钟,结果是每次都差2个时钟周期

一周热门 更多>