历史上的今天
返回首页

历史上的今天

今天是:2025年03月13日(星期四)

正在发生

2019年03月13日 | 关于STM32精准采频率的实现

2019-03-13 来源:eefocus

这次做训练题遇到了采频率的问题,做单项并网问题,需要实时了解频率的相关信息。 


尝试直接用他们提供的输入捕获,发现并不是很好用,琢磨了半天,实现了自己的部分采用。 


这里就不一步一步的分析了,估计看的情况也比较少。 


直接上手,不过,博主是从正点原子那里直接得到的库里面查找的信息。 


一般定时器的配置


pwm_in_mode.h文件

这里介绍了两个配置函数


#ifndef __TIMER_H

#define __TIMER_H

#include "stm32f4xx.h"


void TIM2_CH2_Cap_Init(void);

void TIM2_IRQHandler(void);


#endif


看自己的爱好,我这里把一般的(u16 arr,u16 psc)省略到里面去了,大家可以直接改掉也行,加在函数头里面传参。


pwm_in_mode.c文件

有几种模式,大家可以直接抄过去


时间设定初始化

TIM_ICInitTypeDef  TIM_ICInitStructure;

RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,ENABLE); 


TIM_TimeBaseStructure.TIM_Prescaler=84-1;                       

TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up; 

TIM_TimeBaseStructure.TIM_Period=0xffffffff;//对应下面                         

TIM_TimeBaseStructure.TIM_ClockDivision =TIM_CKD_DIV1;

TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);


引脚初始化

GPIO_InitTypeDef GPIO_InitStructure;

RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE); 


GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1; //GPIOA1      

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;

GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; 

GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL; 

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;

GPIO_Init(GPIOA,&GPIO_InitStructure);   

GPIO_PinAFConfig(GPIOA,GPIO_PinSource1,GPIO_AF_TIM2);


中断优先级

NVIC_InitTypeDef NVIC_InitStructure;


NVIC_InitStructure.NVIC_IRQChannel = TIM2_IRQn;

NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0x01;

NVIC_InitStructure.NVIC_IRQChannelSubPriority =0x03;

NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; 

NVIC_Init(&NVIC_InitStructure); 


使能和其他配置

TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;


TIM_ICInitStructure.TIM_Channel = TIM_Channel_2; 

TIM_ICInitStructure.TIM_ICPolarity = TIM_ICPolarity_Rising; 

TIM_ICInitStructure.TIM_ICSelection = TIM_ICSelection_DirectTI;

TIM_ICInitStructure.TIM_ICPrescaler = TIM_ICPSC_DIV1;    

TIM_ICInit(TIM2,&TIM_ICInitStructure);

TIM_ICInitStructure.TIM_ICFilter = 0x0;//   


TIM_PWMIConfig(TIM2,&TIM_ICInitStructure);


/* Select the TIM4 Input Trigger: TI2FP2 */

TIM_SelectInputTrigger(TIM2, TIM_TS_TI2FP2);


 /* Select the slave Mode: Reset Mode */

TIM_SelectSlaveMode(TIM2, TIM_SlaveMode_Reset);

TIM_SelectMasterSlaveMode(TIM2, TIM_MasterSlaveMode_Enable);


/* TIM enable counter */

TIM_Cmd(TIM2,ENABLE);

TIM_ITConfig(TIM2, TIM_IT_CC2, ENABLE);



中断函数处理

这里就可以计算出周期和时间了,也可以直接复制过去。


void TIM2_IRQHandler(void)

    TIM_ClearITPendingBit(TIM2, TIM_IT_CC2); //Çå±ê־λ 


    IC2Value=TIM_GetCapture2(TIM2);

    IC1Value=TIM_GetCapture1(TIM2);


    if(IC2Value!=0){

        DutyCycle=(float)IC1Value*100/IC2Value;

        Frequency =(float)1000000/IC2Value;//对应上面的1Mhz

    }

    else{

        DutyCycle=0;

        Frequency=0;

    }

}


显示和现象对比

OLED_Refresh_Gram();

if(print_mode==0)

{       

   OLED_ShowString(0,0,"MeasureResult:",16);

   OLED_ShowString(0,16,"IC2Value:",16);

   OLED_ShowNum(72,16,IC2Value,7,16);

   OLED_ShowString(0,32,"DutyCycle:",16);

   OLED_ShowFloatNum(80,32,DutyCycle,7,16); 

   OLED_ShowString(0,48,"Frequency:",16);

   OLED_ShowFloatNum(80,48,Frequency,7,16);

}

aaa

精度与误差

这里定时器读到的IC1Value和IC2Value精度的限制,博主试过,最小可识别刻度在0.002hz,暂时还是够用的。 

 z'z'z 

如果做的过程中没能实现,可以直接下载参考我的.c文件,这里是文件链接。 

注意,博主的单片机型号是STM32F4系列的,时钟配置的TIM2是168M,如果不懂时钟的计算可以参考我前面的文章有讲解。

推荐阅读

史海拾趣

Amphenol Piher公司的发展小趣事

Amphenol Piher 是 Amphenol 公司的一部分,专注于设计、制造和销售电子行业中的传感器和电位器等产品。以下是关于 Amphenol Piher 公司发展的五个相关故事:

  1. 创立与初期发展:Amphenol Piher 公司的历史可以追溯到20世纪60年代,在西班牙的Valencia成立。最初,公司主要致力于生产电位器和传感器等电子元器件,为不同行业的客户提供定制化的解决方案。随着市场需求的增长和公司技术实力的提升,Amphenol Piher 逐渐赢得了客户的信任和市场认可。

  2. 技术创新与产品多样化:Amphenol Piher 公司在技术研发方面持续投入,并不断推出新型的传感器和电位器产品。公司专注于提升产品性能、精度和可靠性,满足客户对高品质电子元器件的需求。除了传统的电位器和传感器,Amphenol Piher 还推出了一系列新型产品,如角位移传感器、线性位移传感器等,为不同应用领域提供多样化的解决方案。

  3. 客户合作与定制化解决方案:Amphenol Piher 公司与客户建立了紧密的合作关系,致力于开发定制化的传感器和电位器解决方案。公司的工程团队与客户密切合作,根据客户的需求和应用场景,设计和制造符合特定要求的产品。这种定制化解决方案能够满足客户个性化的需求,为客户提供更加专业和完善的服务。

  4. 质量控制与认证标准:Amphenol Piher 公司高度重视产品质量控制,并严格遵循国际质量管理体系标准。公司的生产工艺和质量管理体系符合ISO 9001质量管理体系认证标准,以确保产品质量的稳定性和可靠性。此外,Amphenol Piher 公司的产品还通过了各种行业和应用领域的认证标准,如汽车行业的TS16949认证等,确保产品符合行业标准和规定。

  5. 全球市场拓展与合作伙伴关系:除了在西班牙的生产基地外,Amphenol Piher 公司还在全球范围内设有多个销售办事处和代理商网络,拓展了国际市场份额。公司与全球各种行业领先企业建立了长期稳定的合作关系,共同推动产品的创新和市场拓展。通过全球市场拓展和合作伙伴关系,Amphenol Piher 公司不断扩大业务规模,增强了在电子行业中的市场竞争力。

这些故事展示了 Amphenol Piher 公司从成立初期到如今在技术创新、产品多样化、客户合作与定制化解决方案、质量控制与认证标准以及全球市场拓展与合作伙伴关系等方面取得的重要进展。

Gem Asia Enterprise Co Ltd公司的发展小趣事

随着全球对环保问题的日益关注,Gem Asia积极响应号召,将环保理念融入企业发展中。公司投入大量资源研发绿色电子产品和生产工艺,减少了对环境的影响。同时,Gem Asia还建立了完善的废旧电子产品回收体系,实现了资源的循环利用。这些举措不仅提升了企业的社会形象,还为企业带来了长期的经济效益和社会效益。

康奈特(CNNT)公司的发展小趣事

面对数字化浪潮的冲击,康奈特积极响应并开始了数字化转型之路。公司引进了先进的智能制造设备和技术手段,实现了生产线的自动化和智能化升级。同时,公司还建立了数字化管理平台,实现了对生产、销售、库存等各个环节的实时监控和管理。这种数字化转型不仅提高了生产效率和质量稳定性,也为公司未来的发展奠定了坚实的基础。

Amphenol Aerospace公司的发展小趣事

随着电子行业的快速发展,康奈特意识到单一的镜片业务已经无法满足市场需求。于是,公司开始积极布局多元化战略,通过收购和合作的方式,拓展了眼镜框、眼镜配件等相关业务。同时,公司还加大了对智能眼镜、VR/AR眼镜等新兴领域的研发投入,为未来的市场竞争打下了坚实基础。

Caliber公司的发展小趣事

在环保意识日益增强的今天,Caliber公司积极响应国家号召,推动绿色环保生产。公司投入大量资金引进环保设备和技术,减少生产过程中的污染排放。同时,Caliber还研发了一系列节能型电子产品,为用户提供更加环保的选择。这些举措不仅提升了公司的社会形象,也为公司的可持续发展注入了新的动力。

Apacer公司的发展小趣事

除了产品创新,Apacer宇瞻科技还注重为客户提供量身定制的解决方案。在某次客户系统升级中,宇瞻科技的技术团队发现原有SD卡无法满足大量随机小数据的存取应用,甚至可能缩短SSD使用寿命。于是,宇瞻科技建议客户导入Page Mapping技术,并搭配Smart Read Refresh技术的SD卡,成功解决了客户的存储问题。这一技术突破不仅帮助客户实现了系统升级,也为宇瞻科技赢得了更多的信任和赞誉。

问答坊 | AI 解惑

电量隔离传感器的工作原理和数字化技术

电量隔离传感器变送器是针对工程中的电量检测(监测),提高系统的整体抗干扰能力,而研制开发的一种小体积、高性能的电量测试部件(产品)。 电量隔离传感器变送器可以对现场的大电流、高电压、功率、频率、相角、电度等电参量进行隔离测量和变换,也 ...…

查看全部问答>

课程快结束了想找个地方实习提高能力

课程就快结束了,想参加些社会实践,在哪里可以实习呢?平时时间比较多。。。 工作类型: 实习    地区: 北京   行业: 计算机软件   职能: 软件工程师   期望薪水: 面议 /月 到岗时间: 一个 ...…

查看全部问答>

【正版】Windows Embedded SP2

Windows Embedded Standard SP2 正版全套9CD 版本 软件功能及介绍就不多说了,可以去微软官方网站查看, (http://www.microsoft.com/windowsembedded/zh-tw/about/what.mspx) 产品包括9张CD光盘和安装ID以及PID,是市场上 最全的正版产品。 以下是9 ...…

查看全部问答>

标题: 学3G,拿高薪,来渥瑞达!

渥瑞达专注于培养薪酬高、市场紧缺的高端3G嵌入式软件工程师。 欢迎大家与我们的703期学员交流!这期学员已于07年7月29日毕业。 学员就业薪水都在6000元/月以上 您还可以加入渥瑞达学员的QQ群与学员面对面交流 渥瑞达学员咨询交流的QQ群号 ...…

查看全部问答>

RS422/RS485 全双工需要接哪几根 ? 急急!!

RS422/RS485 全双工需要接哪几根 ? 急急!!…

查看全部问答>

请指点编程识别U盘特征的思路,有源码更好

    如何编程识别U盘的唯一特征身份呢,不限方法,得要对每种U盘都适用,针对特定芯片的方法作为参考,如果提供的类型比较全,也可以得全分(但想全不太容易吧),或者没有完美方法的话,可以在散分的时候多得点。     但反对 ...…

查看全部问答>

内部FAE培训资料【3】GPIO模块介绍及应用_讲稿

内部FAE培训资料【3】GPIO模块介绍及应用_讲稿…

查看全部问答>

上海招聘:FPGA设计师

上海博达数据通信有限公司招聘FPGA设计工程师和电源开发工程师,有兴趣的朋友请发简历到:yangrong@bdcom.com.cn,或者在QQ:277358331上留下联系方式,我会及时回电!谢谢各位的关注!   高级FPGA设计师  工作职责: 负责数据通信 ...…

查看全部问答>

求应用设计

各位大虾:   我有如下两个需求,望有能力的大虾赐教:   1、在一较大的容器内装有水,再放置一比较小的玻璃容器,玻璃容器内装有有机溶剂,有机溶剂液面会逐渐下降,能否有那种技术能监测到有机溶剂的液面下降? 2、需要检测空气中的 ...…

查看全部问答>

求助:verilog的ODDR2使用问题

如题,使用ODDR2的时候遇到报错Pack:2530 - The dual data rate register \"fifo_up/ODDR2_inst\" failed to    join an OLOGIC component as required.求强人解惑…

查看全部问答>