A. 怎麼用單片機產生2路正弦波信號相位相差120度(用2片dac0832)
提供一點思路,用兩個定時器產生PWM信號,第一個定時器工作到交流電半周期的三分之二啟動第二個定時器。
B. 基於單片機實現兩個交流信號起始相位差的計算方法 怎麼測兩個信號的時間差啊~能把程序代碼發給我么
使用2個光耦+電阻+二極體,把2個交流信號變成2個5V的(具體電壓根據單片機的工作電壓決定)方脈沖波,接到單片機的引腳上,使用外部中斷方式,測量2個信號的上升沿或下降沿的時間差即可。
不同單片機及晶振頻率,代碼不同,自己寫吧。
C. 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處理計算即可。。。