一种贴片晶振异常情况,及晶振频率评估方法

在之前写的文章[1] https://blog.csdn.net/NoDistanceY/article/details/103858833 中,我提及了我将NUCLEO-H743ZI2评估板进行修改,将通信芯片上25MHz的晶振换到MCU的HLE的晶振接口上。发现的现象是晶振频率变成了8M。但这里要说的是,如果出现这种现象,请直接换晶振,否则将画大量时间在时间异常的处理上。

如果知道出现这种异常的原理,请解释一下。

使用到的代码

uint32_t TIM_get_TIM2_CNT(void)

{

return (TIM2_Handler.Instance->CNT)&(0x7fffffffffffffff);

}

void TIM_set_TIM2_CNT(uint32_t cnt)

{

HAL_TIM_Base_Stop(&TIM2_Handler);

TIM2_Handler.Instance->CNT = cnt & (0x7fffffffffffffff);

HAL_TIM_Base_Start(&TIM2_Handler);

//TIM2_Init(1000-1,2000-1);

}

 

异常分析

 

虽然这里可以看出频率大概是8M,但正常的25M晶振测量的震荡频率就是25M,并且是正弦波波形,由于当初没记录,请遇到类似情况的人自行用示波器检测。另外,因为是大概估计,并不能准确的获取震荡频率的误差值。

 

黄线时GPS芯片的PPS信号,这个信号每1s中会得到一个误差为微妙级的持续时间为100ms的秒冲,它将作为晶振频率评估的参考对象。设置一个每10ms产生一次的定时器,有定时器控制一个GPIO翻转,GPIO信号也接到示波器,即为上图的蓝线。当收到PPS信号时,用TIM_set_TIM2_CNT(0)重置定时器,于是在下一个1s到达时,假设测得的是99个完成10ms数据段和一段不足10ms的时间段(如上图所示),利用游标卡尺的思想,可知时间1s种慢了2.5ms,即可根据此值计算出晶振的频率实际为8*(1-0.0025)=7.98MHz。

 

正常晶振的评估

正常晶振的误差较小,不能通过下图来看出误差。

定时器方案不变,但有定时器中寄存器值来评估晶振。这个增量寄存器时每10ms增加1000,并到1000时自动归零。于是,在1PPS中断发生时,读取一下这个增量寄存器的值,并观察每秒钟的区别。

以我测试为例,使用函数TIM_get_TIM2_CNT()获取寄存器值,第1s测得531,第2s测得532,依次规律每秒增加1。也就是说晶振比参考源每秒增加10us,这就是晶振的误差。

当然,更准确的方法是通过更长时间尺度的测量来测得晶振的误差了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值