OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 8181|回复: 9

STM32测两路频率相等的方波的相位差

[复制链接]

2

主题

10

帖子

0

精华

初级会员

Rank: 2

积分
93
金钱
93
注册时间
2015-10-29
在线时间
16 小时
发表于 2015-12-3 17:01:07 | 显示全部楼层 |阅读模式
5金钱

本人新手上路,最近在做测相位差的实验,考虑到响应时间与能力范围,暂不考虑用FFT做。

参考了原子的捕获高电平的实验与论坛里捕获周期的实验,感谢。

思路主要是:TIM2_CH1 测一路方波的频率 捕获连续两个上升沿的方法 存在ReadValue1、ReadValue2内 然后两者做差

                   TIM3_CH1 测另一路方波的频率 捕获连续两个上升沿的方法 存在ReadValue3、ReadValue4内 然后两者做差

以上步骤由两个中断完成,中断优先级设为一致,每完成一次捕捉,标志位over_ch1与over_ch2分别置位

当两组都捕捉完一次后清零两个计数器的值并对获取的ReadValue1、ReadValue3做处理

个人认为两者大小的差TIM2_CAPTURE_TC要减去一个周期,然后再折算成角度,该部分程序不贴了。

贴上关键的定时器的中断服务子程序与相位差求取数值程序

频率测量精度较高,相位差测量很不稳定

//定时器3中断服务程序 定时器2雷同
void TIM3_IRQHandler(void)
{
 if((TIM3CH1_CAPTURE_STA&0X80)==0)//还未成功捕获 
 {  
  if(TIM_GetITStatus(TIM3,TIM_IT_Update)!=RESET)
  {
   if(TIM3CH1_CAPTURE_STA&0X40)//已经捕获到高电平了
   {
    if((TIM3CH1_CAPTURE_STA&0X3F)==0X3f)//高电平太长溢出了
    {
     TIM3CH1_CAPTURE_STA=0X80;//标记成功捕获了一次
     TIM3CH1_CAPTURE_VAL=0;
    }
    else TIM3CH1_CAPTURE_STA++;
   }
  }
    if(TIM_GetITStatus(TIM3,TIM_IT_CC1)!=RESET)//捕获1发生捕获事件
  { 
   if(TIM3CH1_CAPTURE_STA&0X40)  //捕第二次获到上升沿
   {
    ReadValue4 = TIM_GetCapture1(TIM3);
    if ((ReadValue4 > ReadValue3)&&(TIM3CH1_CAPTURE_STA==0x40))  //无溢出低五位为零
    {
     TIM3CH1_CAPTURE_VAL=(ReadValue4-ReadValue3);
    }
    else  //有溢出
    {
     TIM3CH1_CAPTURE_VAL=((0xFFFF-ReadValue3)+ReadValue4);
    }
    TIM3CH1_CAPTURE_STA=0X80;  //标记成功捕获了一次
    //TIM_SetCounter(TIM2,0);
    over_T3CH1=1;
   }
   else          //第一次捕获上升沿
   {
    ReadValue3=TIM_GetCapture1(TIM3);
    TIM3CH1_CAPTURE_VAL=0;
    TIM3CH1_CAPTURE_STA = 0X40;  //标记捕获到了上升沿
   }
  }  
  }
 TIM_ClearITPendingBit(TIM3,TIM_IT_CC1|TIM_IT_Update); //清除中断标志位
}

void phase_del(void)
{
 if(over_T2CH1==1&&over_T3CH1==1)
 {
  over_T2CH1=0;
  over_T3CH1=0;
  TIM_SetCounter(TIM2,0);
  TIM_SetCounter(TIM3,0);
  if(ReadValue3-ReadValue1>=0) //CH2超前CH1
  {
   TIM2_CAPTURE_TC=ReadValue3-ReadValue1;
   flag=0;
  }
  if(ReadValue3-ReadValue1<0) //CH1超前CH2
  {
   TIM2_CAPTURE_TC=ReadValue1-ReadValue3;
   flag=1;
  }
 }
}

最佳答案

都快而立之年,还是要写代码...
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

2

主题

10

帖子

0

精华

初级会员

Rank: 2

积分
93
金钱
93
注册时间
2015-10-29
在线时间
16 小时
 楼主| 发表于 2015-12-3 17:01:08 | 显示全部楼层
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165537
金钱
165537
注册时间
2010-12-1
在线时间
2117 小时
发表于 2015-12-3 23:00:11 | 显示全部楼层
帮顶.....
回复

使用道具 举报

5

主题

50

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
447
金钱
447
注册时间
2015-12-11
在线时间
143 小时
发表于 2016-7-12 02:48:55 | 显示全部楼层
你好,能发下源程序看看嘛?最近也在做这个,搞了好久不出活
回复

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
8
金钱
8
注册时间
2016-8-4
在线时间
0 小时
发表于 2016-8-15 10:59:45 | 显示全部楼层
好啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊
回复

使用道具 举报

18

主题

103

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
354
金钱
354
注册时间
2016-8-2
在线时间
79 小时
发表于 2018-5-5 14:06:58 | 显示全部楼层
主要是因何原因呢
回复

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
6
金钱
6
注册时间
2019-6-20
在线时间
2 小时
发表于 2019-8-8 09:02:28 | 显示全部楼层
能不能发个工程
回复

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
6
金钱
6
注册时间
2019-8-9
在线时间
0 小时
发表于 2019-8-9 21:58:20 | 显示全部楼层
楼主可以发一下源程序吗,急用!!1
回复

使用道具 举报

7

主题

28

帖子

0

精华

初级会员

Rank: 2

积分
106
金钱
106
注册时间
2021-3-14
在线时间
20 小时
发表于 2021-12-4 08:45:07 | 显示全部楼层
楼主能发个工程吗? 292944695@qq.com
回复

使用道具 举报

7

主题

28

帖子

0

精华

初级会员

Rank: 2

积分
106
金钱
106
注册时间
2021-3-14
在线时间
20 小时
发表于 2021-12-7 19:44:57 | 显示全部楼层
为什么我用你这种算相位差的方法 算出来的相位差角度 幅值很大 我本来相位差180度的pwm波 ,计算出的值 从35到4000多 一直飘 很不稳定!能看下您转换成角度的公式吗?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-15 05:00

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表