一、 方案总体介绍
本方案未采用外部中断测频和定时器输入捕获测占空比,原因是在测高频时,中断频率过高,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的矩形波的频率和占空比。
一、 方案总体介绍
本方案未采用外部中断测频和定时器输入捕获测占空比,原因是在测高频时,中断频率过高,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的矩形波的频率和占空比。
举报