A. 单片机怎么测量两个同频率的正弦波的相位差外部中断怎么用
这个好办,正弦波可以整形成方波,既然频率一致,整形之后的方波频率也是一样的。接下来就是测量2个方波的时间差了,方波平率已知(或者可以测量得到),他们的时间差也可以测量得到,相位差呼之欲出了吧?……
B. 如何用stm32测量正弦信号的相位差
一:可以档销用比较器将正玄波转为方波,使用STM32的定时器的捕获功能可以测到相位差。
二:使用ADC每50us/100us抓一次电压,计算过0点(上一次<0,这一次>=0)可以世凯测到相位差,不过没那么精确,而且可能被干扰误判。但是搜蠢唤可以同时计算出交流电压值。
C. 正弦波经过移相电路后产生相位差,用单片机或者是STM32怎样测这个相位差呢
提供一个思路供参考:
把两路正弦波变为方波,用两个中断输入引脚和定时器测量两个跳变沿的时间差即可。
D. 怎样测量两个同频率正弦信号的相位差,包括数值和符号
最直接的方法是将电压电流整形为方波后通过单片机等处理器的定时器测量两个方波上升沿或下降沿的时差及单个信号的周期,时差除以周期乘以360°就是相位差。需要正负号的话,上述结果再减去180°。
上述方法特点是简单。但是,对于波形有较大毛刺时,测量误差较大。另外一种方法是采用模拟乘法器或数字乘法(高速采样,数值相乘乘法)的方法获取有功功率,有功功率注意视在功率得到功率因数,再根据功率因数换算相位角。
(4)单片机测量相位差扩展阅读:
正弦信号作为一种基本信号,它具有非常有用的性质:
1、 两个同频率的正弦信号相加,虽然它们的振幅与相位各不相同,但相加的结果仍然是原频率的正弦信号。
2、如果有一个正弦信号的频率f1等于另一个正弦信号频率f的整数倍,即f1 =nf,则其合成信号是非正弦周期信号,其周期等于基波(上面那个频率为f的正弦信号就称作基波)的周期T= 1/f,也就是说合成信号是频率与基波相同的非正弦信号。
3、正弦信号对时间的微分与积分仍然是同频率的正弦信号。
E. 51单片机如何模拟旋转编码器输出的相位差90度的方波
那就让单片机输出脉冲信号呗 占空比和相位差按编码器的输出样式整
F. 请问怎么用51单片机实现 检测输入一个正弦波 检查其相位和其频率 给程序追加50分
首先,单片机测量正弦波的相位和频率,必须先将其变成方波,在过零点上升沿时边缘触发单片机。利用比较器电路时很容易做到。
相位是相对的,单片机检测不到正弦波的过零点离Y轴的时间,所以不能判断其相位是多少,但你可以自己设置一个基准作为单片机人为基准,当单片机测量到的正弦波过零点与这基准的时间就是你要的相位,但这并不代表这是标准的,当然通过调整基准的位置,可以得到接近标准的数据。
单片机测量频率,也就是测量两个方波之间的上升沿的时间,这时间的倒数就是频率。
如果是测量两个信号的相位差,则利用一个异或门处理一下则可。
G. msp430单片机用定时器A测量方波相位差的程序如何编写真的很急!拜托了!
这个简单,把两个方波进行异或,用430单片机的定时器A测量异或后的方波的脉冲宽度,在对测量数据进行简单的计算就可得到相位差。。。具体程序如下:
P1SEL |= BIT2; //设置P1.2端口为功能模块使用
TACTL |=TACLR;
TACTL = TASSEL_2+TAIE+MC1; //定时器A时钟信号选择SMCLK 8M,清计数寄存器,使能中断,同时设置定时器A计数模式为连续增计模式
CCTL1 =CM0+SCS+CAP+CCIE; //输入上升沿捕获,同步,capture模式 CCI0A为捕获信号源,中断使能
//TACCTL1 &=~CCIFG; //清CCR2 的标志位
//中断允许
_EINT();
LPM0;
}
#pragma vector=TIMERA1_VECTOR //定时器A中断处理
__interrupt void timer_a(void)
{
switch(TAIV) //向量查询
{ case 2: //捕获中断
if(CCTL1&CM0) //上升沿
{
CCTL1=(CCTL1&(~CM0))|CM1; //更变设置为下降沿触发
start=TACCR1; //记录初始时间
overflow=0; //溢出计数变量复位
}
else if(CCTL1&CM1) //下降沿
{
CCTL1=(CCTL1&(~CM1))|CM0; //更变设置为上升沿触发
end=TACCR1; //用start,end,overflow计算脉冲宽度
TACTL &=~TAIE; //不使能中断
CCTL1 &=~CCIE;
P1SEL &=~BIT2;
_DINT();
LPM0_EXIT;
}
break;
case 10: //定时器溢出中断
overflow++;
break; //溢出计数加1
default:break;
}
}
然后再对得到的start,end,overflow处理计算即可。。。
H. msp430单片机用定时器A测量方波相位差的程序如何编写真的很急!拜托了!
这个简单,把两个方波进行异或,用430单片机的定时器A测量异或后的方波的脉冲宽度,在对测量数据进行简单的计算就可得到相位差。。。具体程序如下:
P1SEL
|=
BIT2;
//设置P1.2端口为功能模块使用
TACTL
|=TACLR;
TACTL
=
TASSEL_2+TAIE+MC1;
//定时器A时钟信号选择SMCLK
8M,清计数寄存器,使能中断,同时设置定时器A计数模式为连续增计模式
CCTL1
=CM0+SCS+CAP+CCIE;
//输入上升沿捕获,同步,capture模式
CCI0A为捕获信号源,中断使能
//TACCTL1
&=~CCIFG;
//清CCR2
的标志位
//中断允许
_EINT();
LPM0;
}
#pragma
vector=TIMERA1_VECTOR
//定时器A中断处理
__interrupt
void
timer_a(void)
{
switch(TAIV)
//向量查询
{
case
2:
//捕获中断
if(CCTL1&CM0)
//上升沿
{
CCTL1=(CCTL1&(~CM0))|CM1;
//更变设置为下降沿触发
start=TACCR1;
//记录初始时间
overflow=0;
//溢出计数变量复位
}
else
if(CCTL1&CM1)
//下降沿
{
CCTL1=(CCTL1&(~CM1))|CM0;
//更变设置为上升沿触发
end=TACCR1;
//用start,end,overflow计算脉冲宽度
TACTL
&=~TAIE;
//不使能中断
CCTL1
&=~CCIE;
P1SEL
&=~BIT2;
_DINT();
LPM0_EXIT;
}
break;
case
10:
//定时器溢出中断
overflow++;
break;
//溢出计数加1
default:break;
}
}
然后再对得到的start,end,overflow处理计算即可。。。