STM32不同频率两组倍频信号测量初相位

这篇具有很好参考价值的文章主要介绍了STM32不同频率两组倍频信号测量初相位。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

先放我们需要的辅助电路的电路图stm32 倍频,stm32,单片机,嵌入式硬件

假设我们要测量的是X信号和Y信号的初相位差,我们可以将两组信号分别表示为和stm32 倍频,stm32,单片机,嵌入式硬件

stm32 倍频,stm32,单片机,嵌入式硬件

很明显两组信号过零点的时间差乘以一个2就是相位差了。

为了方便测量我们先用一个过零比较器把信号变为方波

stm32 倍频,stm32,单片机,嵌入式硬件

 也就是我们只要测出红圈圈出的脉冲宽度即可得到时间差从而得到相位差。

我们可以先将红色的X信号取反再和蓝色的Y信号相与,得到如下信号:

stm32 倍频,stm32,单片机,嵌入式硬件

 现在我们只需要用单片机测量出红圈圈出的蓝色信号脉冲宽度即可得到时间差从而得到相位差。如下图所示,我们只需要找到这个超长低电平之前的高电平长度并输出即可。黑色箭头宽度为两个信号中低频信号的周期的一半,也就是说蓝色信号的两个上升沿之间的距离是大于低频信号的一个半周期的。

stm32 倍频,stm32,单片机,嵌入式硬件

 

先按照下图配置好一个定时器。

 stm32 倍频,stm32,单片机,嵌入式硬件

 

stm32 倍频,stm32,单片机,嵌入式硬件

stm32 倍频,stm32,单片机,嵌入式硬件

这个定时器的作用是检测到上升沿的时候开始计数,计到第一个下降沿的时候将采样次数记作TIM4->CCR2,到下一个上升沿的时候将采样次数记作TIM4->CCR1。如果TIM4->CCR1的数值除以你的采样率后大于低频信号的半周期,就说明你找到需要的那个脉冲了,此时的TIM4->CCR2对应的就是这个脉冲的宽度。在代码中的表现如下图所示:

void HAL_TIM_IC_CaptureCallback(TIM_HandleTypeDef *htim)
{
  if (htim->Instance == TIM4)
    {
      if (htim->Channel == HAL_TIM_ACTIVE_CHANNEL_1)
        {
	      if(TIM4->CCR1>36000)//此处的数字取决于定时器采样频率和信号周期,36000为我这个信号半个周期对应的采样点数,用于判定我所需要的脉冲
	        {
		      capduty2 = (float)(TIM4->CCR2);//高电平时的采样点数,用点数除以采样率得到时间
		      k++;
		   	  if(k==1000)
				 {
		            printf("相位差=%d", (int)(capduty1*360*f/72000000)); //f为信号频率,72000000为我的采样率
					k=0;//防止刷新过快导致卡死,测满1000组输出一次
			     }
	        }
	    }
    }
}

 当然别忘了先开启定时器

  /* USER CODE BEGIN 2 */
HAL_TIM_IC_Start_IT(&htim4, TIM_CHANNEL_1);
HAL_TIM_IC_Start_IT(&htim4, TIM_CHANNEL_2);

 如果相位差是都是正的,那这篇文章写到这里差不多就可以结束了,但我们还要处理负的相位差。这次我们将蓝色的Y信号取反再和红色的X信号相与(可以参考文章最开始的那张图)。被圈出的蓝色脉冲的宽度就为负的相位差对应的时间(两者乘除频率可以互相转换)。好消息是黑色箭头的长低电平依然存在,我们只需要找到间隔相差超过一个低频信号半周期的两个下降沿就能找到我们需要测量的脉冲。

stm32 倍频,stm32,单片机,嵌入式硬件

 先配置另一个定时器,只有Channel1和Channel2对应的上升沿下降沿互换位置其他同上:

stm32 倍频,stm32,单片机,嵌入式硬件然后还是在begin2里开启输入捕获中断,但是在begin4里的代码需要略微改动

if (htim->Instance == TIM4)
    {
        if (htim->Channel == HAL_TIM_ACTIVE_CHANNEL_1)
        {

	        if(TIM1->CCR1>36000)
	        {
            	capduty1 = (float)(TIM1->CCR1-TIM1->CCR2);
				j++;
			    if(j==1000)
				{
		            printf("相位差=-%d", (int)(capduty2*360*f/72000000)); 
			        j=0;
				}
			} 


	
	}

最后补充一点,如果我们不能提前知道相位差是正的还是负的怎么办呢?我们可以加一个功能,

if(capduty1*360*f/72000000>179)

printf("相位差=-%d", (int)(capduty2*360*f/72000000));

else

printf("相位差=%d", (int)(capduty1*360*f/72000000));文章来源地址https://www.toymoban.com/news/detail-625326.html

到了这里,关于STM32不同频率两组倍频信号测量初相位的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • STM32笔记——定时器输入捕获功能(测量PWM的频率和占空比)

    目录 一、概述 二、输入捕获功能 2.1 输入捕获简介 2.2 输入捕获通道  三、输入捕获功能测量PWM波的频率和占空比 3.1 测量频率的方法 3.2 测量过程         主要介绍通用定时器的输入捕获功能,输入信号由GPIO口进入输入捕获通道,之后输入部分对相应的TIx输入信号采样,并

    2024年02月06日
    浏览(79)
  • 基于HAL库的STM32的单定时器的多路输入捕获测量脉冲频率(外部时钟实现)

    目录 写在前面 一般的做法(定时器单通道输入捕获) 以外部时钟的方式(高低频都适用) 测试效果 STM32的定时器本身有输入捕获的功能。可选择双端捕获,上升沿捕获或者是下降沿捕获。对应捕获频率来说,连续捕获上升沿或下降沿的时间间隔就是其脉冲的周期. 定时器设置频率

    2024年02月08日
    浏览(45)
  • 【STM32学习】——定时器输入捕获(IC)&PWMI模式&频率测量方法&主从触发模式&IC模式测频&/PWMI模式测频率及占空比

    声明:学习笔记根据b站江科大自化协stm32入门教程编辑,仅供学习交流使用! 注意:读完大约需要15分钟,但会收获满满!! 输入捕获部分一共两个实操案例程序: 输入捕获模式测频率、PWMI模式测频率和占空比。 测频法利用之前的外设就可实现,如对射式红外传

    2024年02月16日
    浏览(42)
  • STM32学习笔记(六)丨TIM定时器及其应用(输入捕获丨测量PWM波形的频率和占空比)

    ​  本次课程采用单片机型号为STM32F103C8T6。 ​  课程链接:江科大自化协 STM32入门教程   往期笔记链接:   STM32学习笔记(一)丨建立工程丨GPIO 通用输入输出   STM32学习笔记(二)丨STM32程序调试丨OLED的使用   STM32学习笔记(三)丨中断系统丨EXTI外部中断

    2023年04月19日
    浏览(54)
  • labview图形显示正弦曲线信号发生器频率幅值相位数字示波器滤波器频谱分析

    wx供重浩:创享日记 对话框发送:labview图形 获取完整无水印报告+源程序文件 前面板. (1)添加1个波形图表控件:控件选板→新式→图形→波形图表。 (2)添加1个停止按钮:控件选板→新式-→布尔→停止按钮。 设计的程序前面板如图9-1所示。 框图程序 (1)添加1个除法函数:函数选

    2024年02月05日
    浏览(44)
  • 关于STM32F103输入捕获高精度采集频率信号的方法

    前段时间需要做一款频率采集设备,由于成本考虑,使用了APM32F103作为主控,APM32F103和STM32F103基本完全通用,有极个别BUG。不影响本次试验。客户要求的频率信号为11KHz到23KHz,精度要求在任何频率范围误差不能大于当前频率的万分之一以上(排除温度影响),采集速度要10

    2024年02月15日
    浏览(40)
  • 基于HAL库的STM32单定时器多路输入捕获测量PWM的频率和占空比实现(状态机方式实现)

    目录  写在前面 先回顾下定时器的单路捕获PWM 多路捕获PWM的频率和占空比(状态机实现) 我的思路: 状态图 配置 给出示例代码 测试效果         先有了这篇文章实现了单定时器的多通道测量频率,以外部时钟的方式可测量任意频率的方波),奈何不能多路测试PWM波的频率,

    2024年02月12日
    浏览(47)
  • 【FPGA】FFT测量信号频率(Quartus IP核)

    ​​​​​​​ 一、前言 二、FFT是什么(原理)? 三、FFT IP核参数介绍 四、仿真 0、文件完整结构 1、设置IP核 2、例化FFT,并完善顶层文件 3、利用matlab生成正弦波信号 4、导出变量x生成的正弦波数据 5、编写testbench 6、RTL Simulation 五、上板 1、matlab生成正弦波信号并导出m

    2024年04月28日
    浏览(35)
  • STM32F407单一定时器输出4路不同频率及占空比的PWM波

    程序效果演示 STM32单一定时器输出四路不同频率及占空比的PWM波 一、程序思路 因为定时器只有一个CNT计数器所以只能有一个输出频率,若要实现多路不同频率波形,只能通过在当前CNT计数器的基础上不断累加自身CCR寄存器的值来触发中断在中断中翻转波形的方式,此时中断

    2024年02月05日
    浏览(55)
  • 利用MSP430F5529定时器捕获功能,实现信号周期或频率的测量

    // 这个程序利用TIMER A0生成1KHz的方波,从引脚P1.3输出,送到引脚P7.4,  // 再利用TIMER B0测量周期。为测试方便,引脚P1.0输出32KHz的ACLK, // 引脚P2.2输出12MHz的SMCLK. //  ACLK = LFXT1 = 32kHz; SMCLK = MCLK = 12MHz // //                 MSP430F5529 //             ------------------------- //      

    2024年02月16日
    浏览(40)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包