输入捕获测量频率误差 ppm计算公式有误差怎么办

查看: 1471|回复: 4
关于输入捕获测频率有误差的问题
主题帖子精华
新手上路, 积分 37, 距离下一级还需 13 积分
在线时间0 小时
原子哥我用例程输入捕获测量外部类似于PWM的信号,2KHZ左右,误差在百分之十,怎么降低误差呢。
我发现输入捕获只是测量信号的半个周期,如果我想测几个周期的时间,再求出平均频率,该怎么修改程序啊?
回复【3楼】正点原子:
---------------------------------
脉宽有细微差别吧,不过我通过连续三次捕获上升沿的计数减去第一次捕获的计数的方法,求出平均频率,得到的结果误差只有百分之0.0几了。用求平均就可以降低误差了~谢谢原子哥
主题帖子精华
新手上路, 积分 37, 距离下一级还需 13 积分
在线时间0 小时
回复【3楼】正点原子:
---------------------------------
脉宽有细微差别吧,不过我通过连续三次捕获上升沿的计数减去第一次捕获的计数的方法,求出平均频率,得到的结果误差只有百分之0.0几了。用求平均就可以降低误差了~谢谢原子哥
主题帖子精华
新手上路, 积分 37, 距离下一级还需 13 积分
在线时间0 小时
求大神来回答呀。。
主题帖子精华
金钱117328
在线时间902 小时
我们例程的精度是1us左右,1Khz的波形,周期是1ms,10%的误差,算50%占空比的方波,就是50us左右的误差,比较大了。
你的pwm是固定脉宽么?
我是开源电子网站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺:
微信公众平台:正点原子& &
主题帖子精华
新手上路, 积分 22, 距离下一级还需 28 积分
在线时间4 小时
我们例程的精度是1us左右,1Khz的波形,周期是1ms,10%的误差,算50%占空比的方波,就是50us左右的误差,比 ...
原子哥你好,我也在用这个例程做测频。
不知道有没有相关程序给我来一份,或是帮忙指点下改进思路。
Powered by输入捕获测频率和占空比
说明:&&STM32测量频率和占空比,可调节测量范围(STM32 measurement of frequency and duty cycle)
文件列表:
输入捕获测频率和占空比
输入捕获测频率和占空比\BSP
输入捕获测频率和占空比\BSP\ADC.c
输入捕获测频率和占空比\BSP\ADC.h
输入捕获测频率和占空比\BSP\OLED.c
输入捕获测频率和占空比\BSP\OLED.h
输入捕获测频率和占空比\BSP\led.c
输入捕获测频率和占空比\BSP\led.h
输入捕获测频率和占空比\BSP\systick.c
输入捕获测频率和占空比\BSP\systick.h
输入捕获测频率和占空比\BSP\usart.c
输入捕获测频率和占空比\BSP\usart.h
输入捕获测频率和占空比\FONTS
输入捕获测频率和占空比\FONTS\asc12.c
输入捕获测频率和占空比\FONTS\asc16.c
输入捕获测频率和占空比\FONTS\fonts.h
输入捕获测频率和占空比\FONTS\hz12.c
输入捕获测频率和占空比\FONTS\hz16.c
输入捕获测频率和占空比\FONTS\oledfont.h
输入捕获测频率和占空比\FONTS\说明.txt
输入捕获测频率和占空比\Libraries
输入捕获测频率和占空比\Libraries\CMSIS
输入捕获测频率和占空比\Libraries\CMSIS\CM3
输入捕获测频率和占空比\Libraries\CMSIS\CM3\CoreSupport
输入捕获测频率和占空比\Libraries\CMSIS\CM3\CoreSupport\core_cm3.c
输入捕获测频率和占空比\Libraries\CMSIS\CM3\CoreSupport\core_cm3.h
输入捕获测频率和占空比\Libraries\CMSIS\CM3\DeviceSupport
输入捕获测频率和占空比\Libraries\CMSIS\CM3\DeviceSupport\ST
输入捕获测频率和占空比\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x
输入捕获测频率和占空比\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x\startup
输入捕获测频率和占空比\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x\startup\TrueSTUDIO
输入捕获测频率和占空比\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x\startup\TrueSTUDIO\startup_stm32f10x_cl.s
输入捕获测频率和占空比\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x\startup\TrueSTUDIO\startup_stm32f10x_hd.s
输入捕获测频率和占空比\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x\startup\TrueSTUDIO\startup_stm32f10x_hd_vl.s
输入捕获测频率和占空比\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x\startup\TrueSTUDIO\startup_stm32f10x_ld.s
输入捕获测频率和占空比\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x\startup\TrueSTUDIO\startup_stm32f10x_ld_vl.s
输入捕获测频率和占空比\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x\startup\TrueSTUDIO\startup_stm32f10x_md.s
输入捕获测频率和占空比\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x\startup\TrueSTUDIO\startup_stm32f10x_md_vl.s
输入捕获测频率和占空比\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x\startup\TrueSTUDIO\startup_stm32f10x_xl.s
输入捕获测频率和占空比\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x\startup\arm
输入捕获测频率和占空比\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x\startup\arm\startup_stm32f10x_cl.s
输入捕获测频率和占空比\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x\startup\arm\startup_stm32f10x_hd.s
输入捕获测频率和占空比\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x\startup\arm\startup_stm32f10x_hd_vl.s
输入捕获测频率和占空比\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x\startup\arm\startup_stm32f10x_ld.s
输入捕获测频率和占空比\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x\startup\arm\startup_stm32f10x_ld_vl.s
输入捕获测频率和占空比\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x\startup\arm\startup_stm32f10x_md.s
输入捕获测频率和占空比\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x\startup\arm\startup_stm32f10x_md_vl.s
输入捕获测频率和占空比\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x\startup\arm\startup_stm32f10x_xl.s
输入捕获测频率和占空比\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x\startup\gcc_ride7
输入捕获测频率和占空比\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x\startup\gcc_ride7\startup_stm32f10x_cl.s
输入捕获测频率和占空比\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x\startup\gcc_ride7\startup_stm32f10x_hd.s
输入捕获测频率和占空比\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x\startup\gcc_ride7\startup_stm32f10x_hd_vl.s
输入捕获测频率和占空比\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x\startup\gcc_ride7\startup_stm32f10x_ld.s
输入捕获测频率和占空比\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x\startup\gcc_ride7\startup_stm32f10x_ld_vl.s
输入捕获测频率和占空比\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x\startup\gcc_ride7\startup_stm32f10x_md.s
输入捕获测频率和占空比\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x\startup\gcc_ride7\startup_stm32f10x_md_vl.s
输入捕获测频率和占空比\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x\startup\gcc_ride7\startup_stm32f10x_xl.s
输入捕获测频率和占空比\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x\startup\iar
输入捕获测频率和占空比\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x\startup\iar\startup_stm32f10x_cl.s
输入捕获测频率和占空比\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x\startup\iar\startup_stm32f10x_hd.s
输入捕获测频率和占空比\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x\startup\iar\startup_stm32f10x_hd_vl.s
输入捕获测频率和占空比\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x\startup\iar\startup_stm32f10x_ld.s
输入捕获测频率和占空比\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x\startup\iar\startup_stm32f10x_ld_vl.s
输入捕获测频率和占空比\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x\startup\iar\startup_stm32f10x_md.s
输入捕获测频率和占空比\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x\startup\iar\startup_stm32f10x_md_vl.s
输入捕获测频率和占空比\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x\startup\iar\startup_stm32f10x_xl.s
输入捕获测频率和占空比\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x\stm32f10x.h
输入捕获测频率和占空比\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x\system_stm32f10x.c
输入捕获测频率和占空比\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x\system_stm32f10x.h
输入捕获测频率和占空比\doc
输入捕获测频率和占空比\Libraries\CMSIS\License.doc
输入捕获测频率和占空比\Libraries\STM32F10x_StdPeriph_Driver
输入捕获测频率和占空比\Libraries\STM32F10x_StdPeriph_Driver\inc
输入捕获测频率和占空比\Libraries\STM32F10x_StdPeriph_Driver\inc\misc.h
输入捕获测频率和占空比\Libraries\STM32F10x_StdPeriph_Driver\inc\stm32f10x_adc.h
输入捕获测频率和占空比\Libraries\STM32F10x_StdPeriph_Driver\inc\stm32f10x_bkp.h
输入捕获测频率和占空比\Libraries\STM32F10x_StdPeriph_Driver\inc\stm32f10x_can.h
输入捕获测频率和占空比\Libraries\STM32F10x_StdPeriph_Driver\inc\stm32f10x_cec.h
输入捕获测频率和占空比\Libraries\STM32F10x_StdPeriph_Driver\inc\stm32f10x_conf.h
输入捕获测频率和占空比\Libraries\STM32F10x_StdPeriph_Driver\inc\stm32f10x_crc.h
输入捕获测频率和占空比\Libraries\STM32F10x_StdPeriph_Driver\inc\stm32f10x_dac.h
输入捕获测频率和占空比\Libraries\STM32F10x_StdPeriph_Driver\inc\stm32f10x_dbgmcu.h
输入捕获测频率和占空比\Libraries\STM32F10x_StdPeriph_Driver\inc\stm32f10x_dma.h
输入捕获测频率和占空比\Libraries\STM32F10x_StdPeriph_Driver\inc\stm32f10x_exti.h
输入捕获测频率和占空比\Libraries\STM32F10x_StdPeriph_Driver\inc\stm32f10x_flash.h
输入捕获测频率和占空比\Libraries\STM32F10x_StdPeriph_Driver\inc\stm32f10x_fsmc.h
输入捕获测频率和占空比\Libraries\STM32F10x_StdPeriph_Driver\inc\stm32f10x_gpio.h
输入捕获测频率和占空比\Libraries\STM32F10x_StdPeriph_Driver\inc\stm32f10x_i2c.h
输入捕获测频率和占空比\Libraries\STM32F10x_StdPeriph_Driver\inc\stm32f10x_iwdg.h
输入捕获测频率和占空比\Libraries\STM32F10x_StdPeriph_Driver\inc\stm32f10x_pwr.h
输入捕获测频率和占空比\Libraries\STM32F10x_StdPeriph_Driver\inc\stm32f10x_rcc.h
输入捕获测频率和占空比\Libraries\STM32F10x_StdPeriph_Driver\inc\stm32f10x_rtc.h
输入捕获测频率和占空比\Libraries\STM32F10x_StdPeriph_Driver\inc\stm32f10x_sdio.h
输入捕获测频率和占空比\Libraries\STM32F10x_StdPeriph_Driver\inc\stm32f10x_spi.h
输入捕获测频率和占空比\Libraries\STM32F10x_StdPeriph_Driver\inc\stm32f10x_tim.h
输入捕获测频率和占空比\Libraries\STM32F10x_StdPeriph_Driver\inc\stm32f10x_usart.h
输入捕获测频率和占空比\Libraries\STM32F10x_StdPeriph_Driver\inc\stm32f10x_wwdg.h
输入捕获测频率和占空比\Libraries\STM32F10x_StdPeriph_Driver\inc\usrbool.h
输入捕获测频率和占空比\Libraries\STM32F10x_StdPeriph_Driver\src
输入捕获测频率和占空比\Libraries\STM32F10x_StdPeriph_Driver\src\misc.c
近期下载者:
相关文件:查看: 1811|回复: 40
STM32 PWM 输入捕获,计算占空比和频率时,捕获的值都必须加1,千万注意。
STM32 PWM 输入捕获,计算占空比和频率时,捕获的值都必须加1,千万注意。
1-如果你捕获的PWM的频率很低,都是在1KHZ以内,那么加一个1和少一个1去计算,对结果的影响不是很大,这个时候你就会认为是误差,而不是错误
2-当你捕获的PWM频率在100KHZ以上时,这个时候少一个1和加一个1,那么对结果的影响就很大了,如果你不知道原理,你就会认为是你自己的程序写错了。
1.jpg (24.15 KB, 下载次数: 4)
16:07 上传
3-PWM输入是输入捕获的特殊例子,很多初学者是不知道我说什么的,即使你用过,你一般也是捕获低频率的PWM信号,基本用的都是错误的公式,因为网络上还有ST官方的例程提供的都是没有加1的错误例程。
4-输入捕获能捕获到的最低的PWM频率为:// 输入捕获能捕获到的最小的频率为 TIM_CLK /{ (ARR+1)*(PSC+1) },这个前提是 捕获定时器没有溢出的情况下,如果计数溢出了,那么需要在中断里面进行额外的处理,但是这种应用非常少,基本不会溢出。
5-该例程已经在霸道和指南者上面验证过,实验设计为:通过定时器TIM3的通道1:PA6 产生一个 100K 的 PWM 波,然后通过 高级定时器TIM1的通道1:PA8来捕获,然后计算出PWM信号的频率和占空比,其中TIM1的能捕获到的最低的PWM频率为1K,所以大于1K的PWM信号都可以被捕获到。
(380.81 KB, 下载次数: 276)
16:08 上传
点击文件名下载附件
* 如果是第一个上升沿中断,计数器会被复位,锁存到CCR1寄存器的值是0,CCR2寄存器的值也是0,
* 无法计算频率和占空比。当第二次上升沿到来的时候,CCR1和CCR2捕获到的才是有效的值。其中
* CCR1对应的是周期,CCR2对应的是占空比。
*/
void ADVANCE_TIM_IRQHandler(void)
{
&&/* 清除中断标志位 */
&&TIM_ClearITPendingBit(ADVANCE_TIM, TIM_IT_CC1);
&&/* 获取输入捕获值 */
&&IC1Value = TIM_GetCapture1(ADVANCE_TIM);
&&IC2Value = TIM_GetCapture2(ADVANCE_TIM);
& && &&&
&&// 注意:捕获寄存器CCR1和CCR2的值在计算占空比和频率的时候必须加1
& && &&&if (IC1Value != 0)
&&{
& & /* 占空比计算 */
& & DutyCycle = (float)((IC2Value+1) * 100) / (IC1Value+1);
& & /* 频率计算 */
& & Frequency = 1000000/(float)(IC1Value+1);
& && && && && & printf(&占空比:%0.2f%%& &频率:%0.2fHz\n&,DutyCycle,Frequency);
&&}
&&else
&&{
& & DutyCycle = 0;
& & Frequency = 0;
&&}
}复制代码
为什么在低频的时候不加1影响却很小?
1-频率低,那周期就大,在计算占空比和频率的时候,周期都是作为分母,当分母很大的时候,分子和分母少加了一个1对计算结果影响是很小的,不知道的人都会认为是误差,而不是错误。
2-当频率高的时候,周期就很小,当一个很小的数做分母的时候,少加了1,那对结果就影响很大。
当我捕获一个100KHZ的PWM信号的时候,周期我设置的是10,占空比我设置的是5,可捕获出来的周期即CCR1的值是9,占空比即CCR2的值却是4,所以都要加1.
QQ图片02.png (23.29 KB, 下载次数: 0)
16:11 上传
这个只是32才存在的问题吗?我以前用过stm8做过这个实验,不用加1
本帖最后由 panxing 于
16:21 编辑
& && && && && && && && && && && && && && && && && && && && && && && && && && && && && && &&&
为什么在低频的时候不加1影响却很小?
当我捕获一个100KHZ的PWM信号的时候,周期我设置的是10,占空比我设置的是5,可捕获出来的周期即CCR1的值是 ...
帮顶,还没用过,不知道以后会不会用到,打个预防针先。
1-频率低,那周期就大,在计算占空比和频率的时候,周期都是作为分母,当分母很大的时候,分子和分母少加 ...
学习了& && && && && && && && && && && &
这个只是32才存在的问题吗?我以前用过stm8做过这个实验,不用加1
你测试的频率如果是1KHZ以内,你是发现不出来的,因为频率太低,具体的原因看我6楼的分析。
学习了,居然不用先评论就能看帖了,哈哈哈
研究这些细节的人都是越来越少了,网络上的那些博客都你抄我我抄你,而且有些还是错的。
你测试的频率如果是1KHZ以内,你是发现不出来的,因为频率太低,具体的原因看我6楼的分析。
额,好像我的频率是没有达到1K,就几百Hz
对于这个资料,我只能跪拜了,谢谢火哥
最近火哥为群里的小伙伴解答问题很积极啊,还专门写个帖子,GOOD
火哥,这个例程可以用在F429上面吗
可以哦,分析的很到位。我点赞
默默的看大神们分享,期待自己有一天可以做个资料分享的楼主
火哥用了多长时间发现这个问题的
支持支持!!!
谢谢火哥的总结和开源,简直是初学者的指路明灯啊
v2的板子可以用吗
意思就是ST官方给的例程也是有BUG的吗?
赶紧下载资料压压惊
5-该例程已经在霸道和指南者上面验证过,实验设计为:通过定时器TIM3的通道1:PA6 产生一个 100K 的 PWM 波,然后通过 高级定时器TIM1的通道1:PA8来捕获,然后计算出PWM信号的频率和占空比,其中TIM1的能捕获到的最低的PWM频率为1K,所以大于1K的PWM信号都可以被捕获到。
我也去验证下,看看结果和火哥的是否一致
火哥,这个例程可以用在F429上面吗
可以,差不多& && && && && && && && && &
如果误以为是程序问题,那就尴尬了,调死都调不出来
我刚学习到PWM就遇到了这么给力的资料?牛逼
谢谢火哥的分享
在群里讨论的很激烈啊,这么快有大神分享了
捕获低频率的PWM信号的时候,用的都是错误的公式
这个公式要来个命名嘛,野火PWM捕获公式
可以,差不多
那意思就是要修改了
5-该例程已经在霸道和指南者上面验证过,实验设计为:通过定时器TIM3的通道1:PA6 产生一个 100K 的 PWM 波 ...
试出来了吗?
用TIM的CH1和CH2捕捉一路PWM的同时,CH3和CH4还能捕捉另一路吗?
多谢提醒,学习了。
额,好像我的频率是没有达到1K,就几百Hz
还是有误差的,只是误差很小而已,这个时候我们就会以为不是错误,而仅仅是误差。
用TIM的CH1和CH2捕捉一路PWM的同时,CH3和CH4还能捕捉另一路吗?
同问能不能检测多路PWM
当我捕获一个100KHZ的PWM信号的时候,周期我设置的是10,占空比我设置的是5,可捕获出来的周期即CCR1的值是 ...
火哥&&我用了高级定时器PWM输入捕获的例程测一个10K的方波&&
ADVANCE_TIM_PERIOD& && && && &(1000-1)
ADVANCE_TIM_PSC& && && && && && &(72-1)
IC1Value的值在99和一百之间来回跳动&&导致频率跳的很大
不知道是为什么
然后我想让IC1Value大一点好让跳动小一点&&就改了下
ADVANCE_TIM_PERIOD& && && && &(10000-1)
ADVANCE_TIM_PSC& && && && && && &(2-1)
结果IC1Value是变大了& &但是跳动也大了&&几十几十的跳
为什么只有大于1K才能捕获呢,有没有地方可以调整呢
其中TIM1的能捕获到的最低的PWM频率为1K,所以大于1K的PWM信号都可以被捕获到
请问为什么大于1K才能捕获到呢,能不能调整呢
火哥 通用定时器pwm4路输出时 仿真时PB.0无波形显示 其他三路均有波形
野火电子论坛电子测量 频率测量及其误差分析_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
电子测量 频率测量及其误差分析
阅读已结束,下载文档到电脑
想免费下载本文?
定制HR最喜欢的简历
你可能喜欢}

我要回帖

更多关于 交接频率误差最大 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信