STM32实现扫频功能
简介
我们都知道,在信号发生器中,有一个扫频模式:指信号发生器在指定的扫描时间内从起始频率到终止频率变化输出,扫频模式支持线性扫频、对数扫频、和步进扫频三种方式。
起始频率和终止频率
起始频率和终止频率是频率扫描的频率上限和下限。信号发生器总是从起始频率扫频到终止频率,然后又回到起始频率。
当起始频率< 终止频率,信号发生器从低频向高频扫描。
当起始频率> 终止频率,信号发生器从高频向低频扫描。
当起始频率= 终止频率,信号发生器以固定频率输出。
修改“起始频率”或“终止频率”后,信号发生器将重新从指定的“起始频率”开始扫频输出。
扫频类型
扫频类型分为线性、对数、步进三种扫频类型。默认为线性扫频。
线性扫频
在线性扫频模式下,输出信号的频率以线性的方式变化,即每秒若干赫兹的方式改变输出频率,该变化由起始频率、终止频率和扫描时间控制。
对数扫频
在对数扫频方式下,仪器输出信号的频率以对数方式变化,即每秒倍频程或每秒十倍的方式改变输出频率,该变化由起始频率、终止频率、和扫描时间控制。
启用对数扫频时,用户可以设置以下几个参数:起始频率Fstart,终止频率Fstop和扫描时间 Tsweep。对数扫频的函数原型为:
Fcuurent 为当前输出的瞬时频率,参数P和T可用以上参数表示如下,
其中,t 为扫频开始所经历的时间,范围在 0 到 Tsweep之间。
步进扫频
在步进扫频方式下,仪器输出信号的频率从“起始频率”到“终止频率”之间以阶梯式“步进”,输出信号在每个频点上停留的时间长短由“扫描时间”和“步进数”控制。
在下图中,我们可以看到一条阶梯波,表明输出频率以阶梯式“步进”变化。
扫描时间
扫描时间默认为1S。范围可以设置1ms 到 500S。修改扫描时间后,信号发生器将重新从指定的“起始频率”开始扫频输出。
这个扫瞄时间与信号本身的频率并不冲突,如起始频率设置为10HZ(100ms),终止频率设置为1KHZ。扫描时间设置100ms。这个时候扫频时间影响的是各个频率点驻留的时间,如果扫瞄时间设置较大,频率变化就较小,如果扫描时间设置较小,频率变化就较大。
算法:
线性扫频
// 假设 扫频率 为: sampleRate 即为总时间内,频率需要变化多少次。//扫频时间
this->totaltime = this->timeValue; // 时间以秒为单位,直接使用
//需要输出频率变化总数
this->totalsamples = (int) (this->totaltime * this->sampleRate); // 样品总数//获得差值
double diff = endFreq - startFreq;
//输出频率
double omega;
//每个频率点的频率值
for(double i=0;i <= totalsamples;i++)
{t = (i / (double) this->totalsamples) * this->totaltime; // 现在的时间omega = startFreq + (diff * t / this->totaltime);
}
简化后,即为:
omega = startFreq + (diff * i / this->totalsamples);
定时1ms中断服务函数中实现:
//TIMER3中断 1ms一次
void OS_TASK_IRQHandler(void)
{static uint8_t s_state = 0;static uint32_t s_outFrequency = 0;static uint32_t s_timeCnt = 0;//差值频率double diff = tMasterBoardData.Flash_StopFreq - tMasterBoardData.Flash_StartFreq;// u8 i = 0;if (RESET != TIM_GetITStatus(OS_TASK_TIM,TIM_IT_Update))//检查TIM3更新中断发生与否{TIM_ClearITPendingBit(OS_TASK_TIM,TIM_IT_Update);/* 全局运行时间每1ms增1 */g_iRunTime++;if (g_iRunTime == 0x7FFFFFFF) /* 这个变量是 int32_t 类型,最大数为 0x7FFFFFFF */{g_iRunTime = 0;}switch (s_state){/* 递增环节 */case 0://频率改变,占空比不变if(tMasterBoardData.Flash_SweepMode & (1<<0)){if(tMasterBoardData.Flash_RiseTime > g_iRunTime){s_outFrequency = tMasterBoardData.Flash_StartFreq + diff * g_iRunTime / tMasterBoardData.Flash_RiseTime;tMasterBoardData.ActualFrequenct = s_outFrequency; Set_TIM_PWM_Update(TIM1,4,tMasterBoardData.ActualFrequenct,tMasterBoardData.Flash_StartDuty*100);} else{g_iRunTime = 0;s_state = 1;} } break;/* 保持环节 */case 1:if(tMasterBoardData.Flash_SweepMode & (1<<0)){if(tMasterBoardData.Flash_HodeTime > g_iRunTime){s_outFrequency = tMasterBoardData.Flash_StopFreq;tMasterBoardData.ActualFrequenct = s_outFrequency; Set_TIM_PWM_Update(TIM1,4,tMasterBoardData.ActualFrequenct,tMasterBoardData.Flash_StartDuty*100);} else{g_iRunTime = 0;s_state = 2;} } break;/* 递减环节 */case 2:if(tMasterBoardData.Flash_SweepMode & (1<<0)){if(tMasterBoardData.Flash_FallTime > g_iRunTime){s_outFrequency = tMasterBoardData.Flash_StopFreq - diff * g_iRunTime / tMasterBoardData.Flash_FallTime;tMasterBoardData.ActualFrequenct = s_outFrequency; Set_TIM_PWM_Update(TIM1,4,tMasterBoardData.ActualFrequenct,tMasterBoardData.Flash_StartDuty*100);} else{g_iRunTime = 0;s_state = 0;} } break;default:break;}}
}
STM32实现扫频功能相关推荐
- 基于STM32的多功能门禁系统(AS608指纹识别、密码解锁、刷卡解锁)
目录 一.项目功能 二.视频 三.原理图 4.材料选择 5.部分程序 资料下载地址:基于STM32的多功能门禁系统 一.项目功能 1.AS608指纹解锁:可以录入.删除.验证指纹: 2.密码解锁:可以 ...
- 基于STM32的多功能MP3设计 毕业设计(论文)开题报告
中国计量学院 毕业设计(论文)开题报告 学生姓名:卢杰学 号:XXXXXXXXX 专 业:电子科学与技术 班 级:10电子1 设计(论文)题目: 基于STM32的多功能MP3设计 指导教师 ...
- MDK上使用 ULINK2设备上的SW调试 实现STM32 的 trace功能 (一)
MDK上使用 ULINK2设备上的SW调试 实现STM32 的 trace功能 (一) 目标调试过程的配置加粗样式 在目标调试过程中,必须选择正确的调试驱动器,同时要包含正确的初始化文件. 配置调试驱 ...
- QA | 关于信号发生器的扫频功能,您了解多少?
在上期文章中,我们介绍了可编程信号发生器使用中的相关问题,那么关于便携式信号发生器的扫频功能您是否有很多问题呢,今天我们将围绕信号源扫频功能详细解答大家感兴趣的几个问题,快来看看吧! Q1:信号源是否 ...
- 硬件课程设计:基于STM32的多功能播放器之小说阅读
1 小说阅读功能 1.1 功能介绍 1.1.1 设计思路 在TFTLCD屏上显示中英文文本文件是本次硬件课程设计的基本要求,也是我设计的多功能播放器最重要的功能,要求能够读取事先存储在SD卡中的文本文 ...
- 硬件课程设计:基于STM32的多功能播放器之MP3音乐播放
3 MP3音乐播放 3.1 功能介绍 3.1.1 设计思路 音乐播放是手机等电子产品最常见的功能,也是最具娱乐性的功能,在该模块中,我先从SD卡中读取已存放的MP3音乐文件,然后将读取的字节流依次送人 ...
- STM32定时器同步功能2
STM32定时器同步功能2:用一个定时使能另外一个定时器 测试芯片:STM32L151C8T6 代码库:LL库 本例中,TIM3为主定时器,TIM2为从定时器,通过TIM3 的更新事件使能TIM2,T ...
- STM32定时器同步功能1
STM32定时器同步功能1:将一个定时器用作另一个定时器的预分频器 测试程序说明: 测试芯片为STM32L151C8T6, 程序库使用的是LL库 用TIM3为主定时器,产生更新事件,并产生触发输出(T ...
- 基于STM32的多功能秒表
基于STM32的多功能秒表 当上电运行后,按下KEY1,秒表开始正计时,再次按下KEY1秒表停止计时,按下KEY2秒表清零,按下KEY3,手动调节秒表时间递增,按下KEY4手动调节秒表时间递减,按下K ...
最新文章
- linux dd命令制作u盘启动_制做linux启动U盘
- LeetCode 1236. 网络爬虫(BFS/DFS)
- oracle dba_waiters中的lockid是什么,查杀oracle lock session and table
- css左侧投影_css单边投影与双侧投影
- 严蔚敏版数据结构视频讲解
- android模拟器可以复制文件,从PC中向Android模拟器中复制文件
- c语言中人脸磨皮算法,人脸磨皮算法
- 2012 IMF 全球人均gdp排名
- MNN源码阅读之模型转换
- 狮虎论:软件测试和软件开发到底哪个实际工资更高
- python-igraph创建网络(图)
- 人间富贵花间露,纸上功名水上沤
- 315来了,跨境卖家们赶紧自检容易被维权举报的问题
- 关于Oracle数据库如何查询非当前用户名命名空间下的表不需要写ower直接from 表名
- 软件评测和测试国家现行标准
- js 导出excel,设置下载的标题
- 【笔记】Create React APP 文档略读
- Maven环境搭建及配置
- 程序猿要chatpgpt干掉了?
- MCS-51单片机总结——No4.存储之AT24C04A
热门文章
- PHP+Mysql服装商城 网上服装购物商城 基于PHP服装商城的系统设计与实现(2)分类
- 专访DSP协议周炎:分布式存储的发展需与5G、IoT并行演进 |链捕手
- 国产工业CPU平台,米尔基于全志T507-H开发板的实时性分析与测试
- DMA IP PS侧c / python代码笔记
- H3CNE中DHCP自动获取
- SSVEP介绍|第一章 SSVEP的基础应用系统|第二节 SSVEP的信号处理过程(1)
- 【渝粤题库】陕西师范大学163205 旅游市场分析与预测
- webform计算某几列结果_1+x 证书 Web 前端开发初级实操考试(试卷5 )
- css布局方式,实现四宫格,九宫格,16宫格等切换
- halcon 区域 inner_circle smallest_circle