完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
我在使用STM32H743做外部方波的频率计算。外部高速晶振25M,SYSCLK=400MHz, 使用了两种方法都有误差。
方法一,tiM5,200Mhz没有分频,捕获两次上升沿时间,运行后时间为23.74us(换算频率:42122Hz),实际示波器显示23.94us(41771Hz).不清楚这个误差 少200ns哪里产生的? 方法二,方法一基础上做计数,TIM3定义1s的溢出中断,每次中断读取上升沿的次数(TIM5中断中Frq_cnt计数),TIM3 200MHz时钟,Prescaler=20000-1,产生1s的溢出中断,运行后计数为41493Hz(换算单周期时间:24.1us),同上示波器是23.94us(41771),误差 多160ns,两种方法偏差还有差异。 示波器截图如下 代码如下: void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)//更新中断(溢出)发生时执行{ if(htim==( amp;TIM3_Handler)) { LED1_Toggle; //LED0反转 FRQ_FLAG = 1; Frq_data = Frq_cnt; Frq_cnt = 0; } if(htim==( amp;TIM5_Handler)) { if((TIM5CH1_CAPTURE_STA amp;0X80)==0)//还未成功捕获 { if(TIM5CH1_CAPTURE_STA amp;0X40)//已经捕获到高电平了 { if((TIM5CH1_CAPTURE_STA amp;0X3F)==0X3F)//高电平太长了 { TIM5CH1_CAPTURE_STA|=0X80; //标记成功捕获了一次 TIM5CH1_CAPTURE_VAL=0XFFFFFFFF; }else TIM5CH1_CAPTURE_STA++; } } }}void HAL_TIM_IC_CaptureCallback(TIM_HandleTypeDef *htim)//捕获中断发生时执行{ if((TIM5CH1_CAPTURE_STA amp;0X80)==0)//还未成功捕获 { if(TIM5CH1_CAPTURE_STA amp;0X40) //捕获到第二个上升沿 { TIM5CH1_CAPTURE_STA|=0X80; //标记成功捕获到一次高电平脉宽 TIM5CH1_CAPTURE_VAL=HAL_TIM_ReadCapturedValue( amp;TIM5_Handler,TIM_CHANNEL_1);//获取当前的 }else //还未开始,第一次捕获上升沿 { TIM5CH1_CAPTURE_STA=0; //清空 TIM5CH1_CAPTURE_VAL=0; TIM5CH1_CAPTURE_STA|=0X40; //标记捕获到了第一个上升沿 __HAL_TIM_SET_COUNTER( amp;TIM5_Handler,0); //计数器清零xs } } Frq_cnt++; |
|
相关推荐
2个回答
|
|
如果待测频率较高的话,采用第二种方式可能更好点, 测量N+1个上沿或者下沿,得到N个脉冲的数据。这里你要注意两点:
第一,注意统计溢出次数;第二,在一轮测试完成前在中断程序里尽量不要逗留太久以免丢失脉冲统计。这样有篇文章可以参考下: 基于定时基于定时器捕获测量脉宽的应用示例 ,它介绍了基于单个定时器通道和双通道PWM输入模式的测量方式。 |
|
|
|
产生误差的原因可能有以下几点:
1. 系统时钟和外部晶振的精度不一致。可能是外部晶振的频率并非精确的25MHz,或者系统时钟的频率并非精确的400MHz,这会导致计算频率的结果产生误差。 2. 定时器的精度限制。定时器的精度可能受到硬件限制,无法完全精确地测量时间或计数频率。 3. 捕获和计数的误差。捕获两次上升沿的时间和计数上升沿的次数都可能存在测量误差,如计数的起始点和结束点的采样时间不精确等。 4. 示波器的测量误差。示波器本身的精度也可能会导致测量结果与实际频率存在偏差。 为了减少误差,可以尝试以下方法: 1. 校准外部晶振和系统时钟的频率,确保它们的测量值与所配置的数值相符。 2. 考虑使用更高精度的定时器或外部计数器组件,以提高测量的精度。 3. 进一步优化测量算法,确保捕获和计数的起始点和结束点的采样时间更精确。 4. 对示波器进行校准,确保测量结果更加准确。 通过以上方法的调整,可以减少误差并提高频率计算的准确性。 |
|
|
|
只有小组成员才能发言,加入小组>>
调试STM32H750的FMC总线读写PSRAM遇到的问题求解?
1645 浏览 1 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
1564 浏览 1 评论
992 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
691 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
1610 浏览 2 评论
1871浏览 9评论
STM32仿真器是选择ST-LINK还是选择J-LINK?各有什么优势啊?
656浏览 4评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
526浏览 3评论
542浏览 3评论
stm32cubemx生成mdk-arm v4项目文件无法打开是什么原因导致的?
515浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-27 01:40 , Processed in 0.750053 second(s), Total 49, Slave 43 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号