单片机怎么检测两个同频率、同幅度的正弦波的相位差?

2020-01-19 19:41发布

用单片机怎么检测两个频率,幅值相同的正弦波?
查过一些资料,说用过零检测电路来将正弦波转变成方波。
但具体不知道怎么计算,程序怎么写?思路有点乱。
还请知道的网友提醒,建议下。。。谢谢!
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
50条回答
kuanglf
1楼-- · 2020-01-24 04:47
alias 发表于 2014-3-11 22:53
当相位差向0接近,输入捕获得到的数值是渐渐变小,由於中断处理及改变捕获的讯号源都要些时间,处理完毕后 ...

我是这样处理的,不知道为什么相位差接近0时会出错
void TIM4_IRQHandler(void)
{                     
        u32 temp = 0;
        temp = TIM4->SR;
        if (temp & 0x02)                        //捕获1发生捕获事件
        {
                TIM4->SR&=~(1<<1);            //清除1通道中断标志位
                ReadValue1[0] = TIM4->CCR1;
                TIM4->DIER&=~(1<<1);           //禁止1通道捕获中断
                LED1 =!LED1;               
        }
        else if(temp & 0x04)                  //捕获2发生捕获事件
        {                                                                  
                TIM4->SR&=~(1<<2);                  //清除2通道中断标志位
                ReadValue1[1] = TIM4->CCR2;
                Getnum[0]= (ReadValue1[1] - ReadValue1[0]);
                TIM4->DIER&=~(1<<2);          //禁止2通道捕获中断
                LED2 =!LED2;
        }   
}
wukongli
2楼-- · 2020-01-24 10:35
精度要到多少?
直接AD采样,并做FFT,即可算出2个的相位差,精度一般都可以做到0.2度
alias
3楼-- · 2020-01-24 13:10
本帖最后由 alias 于 2014-4-5 17:52 编辑

我上面提到的是AVR上单一个的捕获寄存器,其它有多个捕获寄存器的 MCU 可能更好做。

先确定要测量方波的周期,假设周期 = Timer4 的 2345 个计数,我的做法如下:

1. 禁止通道2捕获中断
2. 使能通道1捕获中断
.
.
3. 通道1捕获中断出现及进入Handler
4. ReadValue[0]
5. 禁止通道1捕获中断
6. 使能通道2捕获中断
7. 中断返回
.
.
8. 通道2捕获中断出现及进入Handler
9.  ReadValue[1]
10. 禁止通道2捕获中断
11. Result=ReadValue[1]-ReadValue[0]. If Result >= 2345 then Result = Result - 2345
12. 中断返回
kuanglf
4楼-- · 2020-01-24 14:00
alias 发表于 2014-4-5 17:44
我上面提到的是AVR上单一个的捕获寄存器,其它有多个捕获寄存器的 MCU 可能更好做。

先确定要测量方波的周 ...

我知道我的为什么会出错了:我在测出30次角度差后取了个平均值,结果当相位差接近0度时,
参与计算中的数象这样(359,0,1,359,358,0,1,359,359.........),虽然一眼看出来平均值是接近0度的,但单片机计算下来,就是乱的了。
这个怎么解决呢??
笑笑我笑了
5楼-- · 2020-01-24 14:35
 精彩回答 2  元偷偷看……
tianyiran02
6楼-- · 2020-01-24 19:52
学习了!!!!

一周热门 更多>