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處理計算即可。。。