精华内容
下载资源
问答
  • stm32频率计源码

    2018-07-20 17:38:41
    stm32频率计源码stm32频率计源码stm32频率计源码stm32频率计源码stm32频率计源码stm32频率计源码
  • STM32频率计

    热门讨论 2013-08-07 21:21:29
    此程序使用STM32实现了频率计的功能,当频率比较低时,测量结果十分准确。高频时,略有误差,但是不能侧得的频率过高。
  • 基于STM32频率计

    2017-06-05 14:02:27
    基于stm32f10系列频率计,可自动调整量程,并且显示在OLED屏幕上。
  • stm32频率计

    2018-07-21 20:34:24
    stm32f103zet6简易频率计,测量范围0-65535Hz,TFT液晶屏显示频率值。
  • 基于STM32高精度频率计的设计。 这是我自己采用STM32的定时器外部计数模式,考虑到了计数溢出中断。开设1s的时钟窗口。数据均通过MATLAB二次拟合处理过,以纠正误差。理论上可以测到1hz-无穷的频率范围(但在本实验...
  • stm32 频率计 C文件

    2016-11-23 15:21:17
    stm32 频率计 C文件
  • 看清楚没有proteus仿真。
  • STM32 频率计 1HZ至高频

    2016-11-23 15:16:37
    STM32 频率计 1HZ至高频
  • 本次采用stm32F103ZET6频率计数,可以做脉冲计数,比如电机转速测量等。 方法: (1)TIM4做外部脉冲计数,TIM3做定时器用; (2)TIM3定时一段时间读取TIM4的脉冲数,再计算总数,即可计算出频率。 1MHz测试...

    本次采用stm32F103ZET6频率计数,可以做脉冲计数,比如电机转速测量等。

    方法:

    (1)TIM4做外部脉冲计数,TIM3做定时器用;

    (2)TIM3定时一段时间读取TIM4的脉冲数,再计算总数,即可计算出频率。

    1MHz测试效果(函数发生器产生):

    10MHz测试效果(函数发生器产生):

    25MHz测试效果(函数发生器产生,函数发生器最多只能产生25MHz。。。):

    展开全文
  • 数字示波器,实现ADC采样,波形显示,fft处理数据,频率计作用
  • stm32f103c8t6频率计.zip

    2019-08-23 13:17:44
    基于stm32f103c8t6的频率计,测频范围,最小0.几Hz,最大到几MHz,自动变档位,精度挺高。
  • 模拟数字化示波器源代码,拿来就能用带上位机和串口下位机
  • 一、引言 之前准备做一系列工具,但由于自己时间管理不好,方波发生器设计完后,由于一点小事就懈怠下来了。小事处理完了,继续。 (1)频率和周期的概念 ...从频率的概念我们可以看出,当单位是赫兹时,频率是指

    一、引言

    之前准备做一系列工具,但由于自己时间管理不好,方波发生器设计完后,由于一点小事就懈怠下来了。小事处理完了,继续。此频率计相对误差小于0.02% ,基本达到了工具的需求。

    (1)频率和周期的概念

    所谓频率,是指某一个信号在确定的一段时间内重复的次数。如果这个一段时间是秒,则这个次数的单位就是赫兹(HZ),该数值记为 f。如果令

    T=\frac{1}{f}

    对该信号,如果

    f(t+nT)=f(t)

    对任意正整数n均成立,那么该信号即为周期信号,我们可以通过测量T的方法间接的测量频率。

    (2)低频测周,高频测频的由来

    从频率的概念我们可以看出,当单位是赫兹时,频率是指1秒内信号重复的次数。1秒是定时的概念、次数是数数的概念。但由于我们常常不能在信号刚变化时开始定时,故可能会多记一次或者少记一次。这就是常说的 ±1 次误差。当频率较小时,±1 次误差造成的相对误差无疑较大;另外,对于小数频率(如10.5hz),常规的数数的方法也是无法适应的,这2个都是在低频时做测周的理论来源。

    二、主要问题

    从上文分析可以看出,要想实现自适应测频,主要需要解决下述问题:

    (1)如何判断信号是低频还是高频?

    (2) 测周时,如果信号频率过低或者无信号,如何解决卡死问题,如何在保证刷新率的基础上尽可能提高测周准确率。

    (3)对单片机实现的频率计,为提高准确率,在代码、中断优先级上都需要做什么工作。

    三、解决思路

    (1)对于第一个问题,常规的方法是预测频。比如可以测0.1s的信号次数,根据这个预测频的数值value1,如果小于某一个数值value2,则测周,否则测频。

    对该value2,可在程序全部功能完成后逐渐调整解决,如果不愿意优化,可以采用最高理论测量频率的平方根。

    (2)对于第二个问题,为解决卡死问题,我在开始测周前,启动了一个1s的定时器,如果定时器到之后,还没有测到规定的周期数说明信号频率过低,跳出测周流程。为保证测周准确率,我采用了等精度测周的方案,即根据预测频的value1,确定需要测的周期数,根据数完这里周期数的时间,反求频率。

    (3)对于第三个问题,计数器我采用了32位计数器,非中断模式。优先级组:测频定时器 > 时分秒时间定时器=串口中断。在代码上,核心代码主要用寄存器实现,并尽可能降低系统冗余代码,尽可能的利用汇编特性,也可以提高测量准确率。

    四、测量误差

    最终调试发现,最大相对误差 < 0.02% ,基本可满足日常需要。

     

     

    展开全文
  • 基于stm32实现频率计的几种方法,输入捕获法,定时器中断法,系统时钟+外部中断法。
  • 本资料有完整的原理图PCB和代码,成功测到150KHz,可满足课设要求
  • 基于stm32频率测量 ,只需将c h文件加入工程中即可,初始化后,通过 GetFreq()函数获得测量的频率,已和安捷伦频率发生器对比过,测量非常精准,最高可以测 量到400k左右。并且稍加修改可同时测量占空比。
  • stm32 频率计 高精度

    2015-08-12 12:07:26
    高精度的lcd显示 频率计, keil打开 原子例程改变,有详细注射
  • 基于stm32f1的频率计

    2017-08-03 15:09:41
    3种方法实现的基于stm32f1的频率计程序,可供学习参考(C语言) 1、输入捕获模式;2、外部计数模式(系统时钟+外部计数);3、外部计数模式(定时+外部计数)
  • 基于STM32的简易频率计设计.pdf
  • 利用STM32F1主控芯片,实现对信号为10HZ到15KHZ内的信号频率进行测量,该文档包含详细的硬件电路,MULTISIM仿真电路和代码
  • 基于stm32f103c8t6,测量任意占空比的pwm的频率,当待测pwm足够标准时,10k之内精度100%
  • STM32F103测频率

    热门讨论 2013-07-29 18:26:53
    使用STM32内部的定时器的捕获模式采集输入的PWM波的频率,测量范围在大约1K~100K,精度到整数位
  • 基于STM32单片机的频率计的设计.pdf
  • 前言 最近在了解电赛相关的东西,和指导老师交流一下,我决定先从...)~~ 我觉得有两个方法可以实现,第一个是采用stm32定时器的输入捕获功能,第二个就是用外部中断来实现这个功能。正如标题,我这次采用外部中断的方

    前言

    最近在了解电赛相关的东西,和指导老师交流一下,我决定先从最简单的频率计做起。
    频率计是来检测信号的频率的,在做频率计的时候可以用信号发生器发出的信号来进行测试。

    原理

    在这里插入图片描述
    这是最基础的方波,我们可以通过检测上升沿的方式来测量其频率。从周期的角度出发连续两个上升沿的时间就是这个方波的周期,那这个周期分之一就是这个方波的频率了。
    在思考了一段时间~~(我是萌新。。)~~ 我觉得有两个方法可以实现,第一个是采用stm32定时器的输入捕获功能,第二个就是用外部中断来实现这个功能。正如标题,我这次采用外部中断的方法来实现这个功能。
    具体原理如下:
    将外部中断的引脚设置为上升沿检测并且配置为下拉模式。每当检测到上升沿,就将计数值加一,这样一秒钟之内计数器的值就是频率

    代码的实现

    我是采用cubemx的方式来编程的。(教学资源还是挺多的)

    主函数部分

     while (1)
      {
        pwm_value = 0;
    		HAL_Delay(1000);
    		
    		printf("频率是 %d Hz",pwm_value);
    		
        /* USER CODE END WHILE */
    
        /* USER CODE BEGIN 3 */
      }
    

    外部中断部分

    void HAL_GPIO_EXTI_Callback (uint16_t GPIO_Pin)
    {
    		if(GPIO_Pin == GPIO_PIN_1)
    			pwm_value++;
    			
    }
    

    一开始我是采用hal库自带的延时函数来进行定时1s的。正如上文所述,在上升沿到达的时候计数器pwm_value 的值执行加一操作。1s之后就是该方波的频率了

    遇到的问题

    在测量的时候我发现当频率大于200000hz的时候~~(差不多这个范围)~~ 串口就无法进行发送数据了,而且在1000hz的时候就出现了百分之零点五左右的误差(这个误差不能忽视!!)。

    后来的完善

    一开始我觉得是因为外部中断只能达到这个程度,但是后来我发现在150000hz的时候其实串口是有数据的,只不过串口不再是一行一行的发送数据,而是一个字一个字的发送,这引起了我的注意,后来得知这是因为串口的收发速度小于了当时进入外部中断的频率所导致的。
    所以我决定配置一个1s钟的定时器,在定时器中断到来的时候进行串口发送数据。(定时器中断优先级大于外部中断的优先级)

    定时器部分

    void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
    {
    	if (htim->Instance == htim1.Instance)
    	{
    		printf("频率为 %d hz\r\n",pwm_value);
    		pwm_value=0;
    	}
    

    我把主函数的部分移动到了这个1s的定时器中断里。

    采用定时器中断,这个频率计的精度提高了,并且可以检测1MHz的频率。

    后续想法

    这个量程范围还是不够的,我打算再用外部中断的方法来试试,然后我还会去学习一下输入捕获的知识,用输入捕获的方式来实现这个项目。

    ps:当我将方波换成正弦信号的时候惊奇的发现上升沿检测的方式仍然可以使用,后来去查了一下上升沿检测的概念,发现只要到达一定阈值就可以被检测,而不是我想的那样需要一个上升沿的到来。(这个真是很大的收获!)

    展开全文

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 3,076
精华内容 1,230
关键字:

stm32频率计