STM32
直播中

淡淡的爱

11年用户 890经验值
私信 关注
[问答]

怎样去采用外部中断测频和定时器输入捕获去测占空比呢

为什么不采用外部中断测频和定时器输入捕获测占空比呢?
怎样去采用外部中断测频和定时器输入捕获去测占空比呢?有哪几种方案呢?



回帖(1)

任黎平

2021-11-19 10:51:38
  一、 方案总体介绍
  本方案未采用外部中断测频和定时器输入捕获测占空比,原因是在测高频时,中断频率过高,CPU频繁响应中断,导致测量精度严重下降。故采用以下方案:
  频率测量方案:用定时器TIM3定时1秒,定时器TIM2设置为外部时钟输入(将要测量的矩形波作为时钟输入)。1秒后,取出TIM2计数器的值,即是所要测量的矩形波的频率。由于存在系统误差,进行多次测量,用Matlab拟合曲线,进行线性补偿。
  占空比测量方案:为节省外设资源,对定时器TIM2进行分时复用,即在测频完成后,更改定时器设置,再进行测量占空比。用定时器TIM3定时1秒,定时器TIM2设置从模式、门控模式(高电平定时器时钟使能),触发源为外部触发。1秒后,取出TIM2计数器的值,进行时间计算,得出1秒内高电平的时间,进而计算出占空比。之后同样进行线性补偿。
  二、 方案具体实施
  主函数编写。
  
  在timer.h进行函数声明。
  
  TIM3初始化,开启中断。
  
  TIM3的中断子函数编写。
  
  TIM2初始化函数编写,将I/O设置为复用功能。
  
  TIM2模式选择函数编写,进行模式切换时注意将外设TIM2重设为省缺值,否则定时器会自动重装之前的ARR和PSC值,将无法进行模式切换。
  
  三、 Matlab线性拟合曲线
  1、 频率误差曲线拟合
  收集测量值。
  
  第一行为函数信号发生器显示频率,第二行为实际测量值,第三行为误差值。
  将数据导入Matlab进行数值分析,拟合曲线。
  
  以实际测量值为X,频率误差值为Y,采用多项式拟合,得到X-Y关系式。
  占空比误差曲线拟合
  收集测量值。
  
  第一行为函数信号发生器显示频率,第二行为定时器计数值,第三行为函数信号发生器显示占空比折算时间值,第四行为误差。
  将数据导入Matlab进行数值分析,拟合曲线。
  
  由于发现占空比测量误差主要与输入频率有关,所以只进行频率和误差二维关系曲线的拟合,不再进行频率、占空比和误差三维曲线的拟合。图中实际测量的频率值为X(已经过频率线性补偿的值),占空比测量误差为Y,采用多项式拟合,得到X-Y关系式。
  四、 运行结果展示
  实测频率误差为0.0006%,占空比误差0.064%。(若进行更好的曲线拟合,测量误差更小);低频时不再进行展示,频率和占空比测量误差更小。在误差允许范围内,可测量40M的矩形波的频率和占空比。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分