当前位置: 首页 > ai >正文

stm32测频率占空比最好的方案

频率检测, 方案方法很多种, 其中最快最节省资源的方法. 分享给大家. 其它的方案都试过, 问题多多.
适合单片机在工业应用中, 1MHZ以下的频率检测. 1MHZ估计也行. 但是偏差估计是变大了.

我试过很多种方案, 可以看我前面的文章. 最后发现目前这种方案最为优秀. 主要特点为不占用过多的CPU资源, 纯硬件计算. 不需要中断函数. 简单配置即可. 而且可以测量频率和占空比都可以测量到.

废话不多说, 上过程. 主要也是为了方便以后再次遇到这种应用. 脑子总是会忘记的

使用定时器的混合通道模式, 这个模式下是通道1 CCR1中捕获的是上升沿来临时的定时器计数器CNT数值, 通道2的CCR2捕获的是下降沿来临时的定时器计数器CNT数值… Slave Model Controller 为Reset Mode时, 一个周期结束, CNT值会清零. 重新开始计数.
公式啥的就很简单了. 我这里不写了. 直接看后面的代码吧…
在这里插入图片描述

在这里插入图片描述
这个方案其实是占用了2个通道的输入捕获. 这里面Slave Model Controller 一定要为Reset Mode
Reset Mode的意思是,当一个周期结束后, 计数器清零. 重新开始计数.
如上配置完成后, 生成代码, 然后在main.c函数中添加如下代码:

/*** 函    数:获取输入捕获的频率* 参    数:无* 返 回 值:捕获得到的频率*/uint32_t Haller_GetFreq(void){//`频率 = 1 / (时间差 * 时钟源频率 / 预分频因子)`return 1000000 / TIM5->CCR1 ;		//测周法得到频率fx = fc / N ,  1000000 是时钟的频率1Mhz}/*** 函    数:获取输入捕获的占空比* 参    数:无* 返 回 值:捕获得到的占空比*/uint32_t Haller_GetDuty(void){return (TIM5->CCR2 ) * 100 / (TIM5->CCR1 ) ;	//占空比Duty = CCR2 / CCR1 * 100 }
volatile uint32_t freq =0;	
volatile uint32_t duty =0;	
int main(void)
{ HAL_Init();//启动定时器5和输入捕获(不使用中断)HAL_TIM_Base_Start(&htim5);HAL_TIM_IC_Start(&htim5, TIM_CHANNEL_1);  // 启动通道1输入捕获(上升沿)HAL_TIM_IC_Start(&htim5, TIM_CHANNEL_2);  // 启动通道2输入捕获(下降沿)while (1){freq =   Haller_GetFreq();  //获取占频率 这个函数可以在需要的时候调用, 一般不需要循环中去计算. duty  =  Haller_GetDuty();  //获取占空比.//....其它代码.}
}

最后贴一下硬件电路,方便参考, 这个电路实际上就是一个简单的比较器. 运放当作比较器用. 把正弦波转成方波, 这个电路要求传感器与运放之间的布线长度要尽可能的短. 不要太长.
在这里插入图片描述

在这里插入图片描述
注意VCC的电压不要超过mcu的允许电压哦. . 输出的电压大小等于VCC的电压值.

这种方案下, 测量3000hz, 的偏差在3hz左右. 估计提高定时器的时钟频率可以提高一点精度. 具体没测试, 欢迎测试过的给个反馈.

http://www.xdnf.cn/news/5434.html

相关文章:

  • 多智体具身人工智能:进展与未来方向(下)
  • 【计算机视觉】基于Python的相机标定项目Camera-Calibration深度解析
  • 【TI MSPM0】CCS工程管理
  • 雷达工程师面试题目
  • 机械物理:水力发电站工作原理是什么?
  • 最大化效率和性能:AKS 中节点池的强大功能
  • 设计模式简述(十八)享元模式
  • 找银子 题解(c++)
  • EdgeOne Pages MCP 入门教程
  • 午前下单晚饭前到?亚马逊在珀斯实现!
  • 信息系统项目管理师-软考高级(软考高项)​​​​​​​​​​​2025最新(十六)
  • 【并发编程】Redisson 的分布式锁
  • 基于大核感知与非膨胀卷积的SPPF改进—融合UniRepLK的YOLOv8目标检测创新架构
  • [Java实战]Spring Boot 整合 Thymeleaf (十)
  • c++的模板和泛型编程
  • C++:流插入、流提取操作符
  • Java volatile关键字深度解析与源码实现
  • 极新携手火山引擎,共探AI时代生态共建的破局点与增长引擎
  • 解锁c++模板:从入门到精通
  • vue 中的数据代理
  • go-gin
  • 多模态大语言模型arxiv论文略读(六十九)
  • 【C语言指针超详解(四)】--字符指针变量,数组指针变量,二维数组传参的本质,函数指针变量,函数指针数组,转移表
  • .NET MAUI 基础知识
  • 6.空气质量检测和语音播报
  • Nginx 源码安装成服务
  • Python与矢量网络分析仪3671E:自动化测试(Vscode)
  • 基于PySyft与TensorFlow的医疗数据协同分析系统实现教程
  • 红黑树的线程安全的做法
  • 黑名单中的随机数-leetcode710