安捷伦or是德信号源+频谱仪操作: 从程控到自动测试 (四)平坦度检测的程控实现
安捷倫or是德信號源+頻譜儀操作:從程控到自動測試(四)平坦度檢測的程控實現
一、概述
目前,對于射頻模塊的調試與測試,國內大多數的廠商(特別是中小型企業)均是通過最原始的手工調測方式,需要調試人員手動設置和操作儀器(信號源和頻譜儀),并通過肉眼觀察儀器上的顯示數值并讀寫分析模塊性能,來確定所調試的通信模塊是否符合指標要求。
在射頻模塊的批量生產測試過程中,調試和測試人員需要通過重復的手動操作儀器,進行射頻模塊的指標測試。上篇文章已經介紹了如何實現互調檢測的程控及自動測試[1],本文將對待測模塊平坦度檢測的程控及自動測試的實現進行介紹。
二、平坦度檢測
圖1給出了射頻待測模塊及計算機與信號源和頻譜儀的連接方式。從圖中可以看出,在信號源和頻譜儀都已經進行功率校準之后,當從信號源輸出功率為Pin 1(dBm)、頻率為f1的單音信號通過射頻線進入待測模塊,再由射頻線和衰減器進入頻譜儀時,我們可以在頻譜儀中得到信號的峰值頻率為f1、峰值功率Pout 1(dBm),Pout 1 = Pin 1 + G。當輸入信號頻率不同時,在頻譜儀中觀察到的峰值頻率也將隨著輸入信號頻率的改變而變化,且峰值功率也會有偏差,而輸入連續頻率單音信號得到的輸出峰值功率之間的峰峰值(最大最小值)則稱為平坦度。
那么,接下來介紹使用信號源和頻譜儀進行平坦度檢測的步驟:
1、 儀器校準[1]完成后,按圖1所示連接待測模塊與信號源和頻譜儀,將信號源的中心頻率和功率設置到待測頻點和功率值(如:-50dBm);
2、 待測模塊上電,打開射頻開關,輸出射頻信號,判斷增益是否滿足指標;
3、 觀察頻譜儀中的峰值功率,并讀出峰值功率,調節信號源輸出功率,使得待測模塊輸出功率到達指定的功率值;
4、 將待測模塊輸出功率調節至指定的功率值后,設置信號源,使其輸出不同頻率的單音信號;
5、 設置頻譜儀,將Trace設置為Max Hold,使得頻譜儀中可以固定顯示不同頻點的最大值;
6、 讀取頻譜儀中不同頻點的峰峰值,此差值即為待測模塊的平坦度。
三、平坦度檢測的程控實現
如何使用程控進行平坦度檢測工作,從而提高測試人員操作效率?
分析以上互調檢測步驟,可以將信號源中心頻點和功率設置、頻譜儀峰值讀取、頻譜儀頻譜最大保持、頻譜峰峰值確定及差值計算等這些手動操作儀器的步驟使用程控實現。(信號源和頻譜儀程控的實現,請參考【VISA+SCPI實現安捷倫/是德信號源和頻譜儀的程控】)
本文中程控使用VISA+SCPI指令集實現,操作界面使用C#實現,實現方式還有其他的,可依據自身的熟悉程度進行選擇。表1給出了信號源校準程控指令及界面實例,頻譜儀的程控指令可參考https://download.csdn.net/download/qq_27424533/80233490,界面實例可與信號源一致。信號源的其他程控指令可參考https://download.csdn.net/download/qq_27424533/80233370。
四、平坦度的自動化實現
當理解并實現以上平坦度檢測的程控方式后,我們就具備了平坦度檢測自動化實現的基礎。平坦度檢測的步驟在第二節中已經介紹清楚了,平坦度檢測步驟中包括了指定功率輸出的自動測試實現,而指定功率輸出的自動測試實現中則包含了增益計算的自動實現,那么怎么實現平坦度檢測的自動化呢?本文中的平坦度檢測自動化實現思路如下:使用程控指令將信號源頻點和功率值設置按步驟分別進行,然后進行增益計算和指定輸出功率的自動實現,保持信號源頻率不變,從開始頻點到終止頻點循環設置信號源的頻點,之后設置頻譜儀顯示最大保持,等待頻譜儀從開始頻點到終止頻點顯示結束,確定峰峰值,最終程序將輸出待測模塊的增益和平坦度值。
以上平坦度測試方式存在一個問題,即儀器校準時只是將中心頻點的功率補償校準了,其他頻點的補償都是按照中心頻點的補償值進行的補償,此時,則存在一個誤差值,這就導致檢測的平坦度具備一定的誤差。需要得到精確的平坦度值可以采用對各頻點進行補償的方式,但是該方法將使得測試時間過長,不利于批量測試。另外一種方法則是采用網絡分析儀進行平坦度的測試。
五、平坦度的快速掃描測試實現
使用信號源+頻譜儀的方式得到精確的平坦度將耗費很長的時間,非常不利于批量測試。那么是否具備快速測試平坦度的方法呢,我們可以利用信號源自帶的頻點列表掃描模式,設置好開始頻點和終止頻點、選定掃描點數、指定輸出功率,開始掃描,即可使得信號源掃描輸出對應頻點、指定功率的單音信號。頻譜儀的設置則按第二節中的步驟進行,掃描完成后讀出峰峰值,即可得到平坦度。該方法避免了程序循環設置每個頻點的步驟,改由信號源列表掃描輸出,可節省大量時間,快速實現平坦度掃描測試。
給出部分代碼如下:
private void Button_PTDsweep_Click(object sender, RoutedEventArgs e) {if (parentWindow.Button_SGLAN.IsChecked == false || parentWindow.Button_PPLAN.IsChecked == false){parentWindow.LogDebug(LogMsgType.Outgoing, "與設備的網絡連接未建立,請先建立網絡連接!");return;}else{try{double step, fre, gain, PTD, p;if (TextBox_Pow.Text == ""){parentWindow.LogDebug(LogMsgType.Error, "功率值不能為空!");return;}if (CheckBox_PTD_5.IsChecked == true){p = Convert.ToDouble(TextBox_Pow.Text) - 5;}else{p = Convert.ToDouble(TextBox_Pow.Text);}fre = (Convert.ToDouble(TextBox_FreSta.Text) + Convert.ToDouble(TextBox_FreSto.Text)) / 2;parentWindow.PPCMDsend(string.Concat(":DISP:WIND:TRAC:Y:RLEV ", Convert.ToString(p + 10), "dBm"), "調整頻譜儀參考電平。");gain = GainCal(fre, ComboBox_FreDW.Text);if (PPPowJH(p, gain, out double PPp, out double sgp) == 0) return;parentWindow.LogDebug(LogMsgType.Normal, "平坦度自動化測試開始!");if (TextBox_SwePoin.Text == ""){step = 1000;}else{step = Convert.ToDouble(TextBox_SwePoin.Text);}PTD = SweepPTDJH(Convert.ToDouble(TextBox_FreSta.Text), Convert.ToDouble(TextBox_FreSto.Text), step);//TextBox_PTDERR.Text = Convert.ToString(PTD);TextBox_PTDERR.Text = PTD.ToString("N3");TextBox_gain.Text = gain.ToString("N2");parentWindow.LogDebug(LogMsgType.Normal, "平坦度檢測結束!");Button_PTDsweep.Visibility = Visibility.Collapsed;Button_ReadPTD.Visibility = Visibility.Visible;Button_OffSweep.Visibility = Visibility.Visible;Button_PTDMD.Visibility = Visibility.Visible;}catch{parentWindow.LogDebug(LogMsgType.Error, "平坦度檢測異常結束!");}} } public double SweepPTDJH(double Fsta, double Fsto, double step) {int delay;double mk1, mk2;parentWindow.ioArbSG.WriteString(string.Concat(":FREQ:STAR ", Fsta.ToString(), ComboBox_FreDW.Text));parentWindow.ioArbSG.WriteString(string.Concat(":FREQ:STOP ", Fsto.ToString(), ComboBox_FreDW.Text));parentWindow.ioArbSG.WriteString(string.Concat(":SWE:POIN ", step.ToString()));parentWindow.ioArbPP.WriteString(string.Concat(":FREQ:STAR ", Fsta.ToString(), ComboBox_FreDW.Text));parentWindow.ioArbPP.WriteString(string.Concat(":FREQ:STOP ", Fsto.ToString(), ComboBox_FreDW.Text));parentWindow.Button_SGRFONorOFF.IsChecked = true; //關閉信號發生器射頻if (CheckBox_PTDPlusTime.IsChecked == false){delay = 8 * (int)step;}else{delay = 12 * (int)step;}//開啟掃描模式parentWindow.ioArbSG.WriteString(":FREQ:MODE LIST");Thread.Sleep(500);parentWindow.ioArbPP.WriteString(":TRAC1:TYPE MAXH");Thread.Sleep(delay);parentWindow.ioArbPP.WriteString(":CALC:MARK1:MAX");parentWindow.ioArbPP.WriteString(":CALC:MARK2:MIN");Thread.Sleep(300);mk1 = Convert.ToDouble(parentWindow.PPCMDread(string.Concat(":CALC:MARK1:Y?"), "頻譜儀Marker1功率為:"));mk2 = Convert.ToDouble(parentWindow.PPCMDread(string.Concat(":CALC:MARK2:Y?"), "頻譜儀Marker1功率為:"));Thread.Sleep(300);parentWindow.PPCMDsend(string.Concat(":DISP:WIND:TRAC:Y:RLEV ", Convert.ToString(mk1 + 2), "dBm"), "調整頻譜儀參考電平。");parentWindow.PPCMDsend(string.Concat(":DISP:WIND:TRAC:Y:PDIV ", Convert.ToString((Math.Round(mk1 - mk2) + 4) / 10), "dB"), "調整頻譜儀參考電平。");TextBox_PTDMax.Text = mk1.ToString();TextBox_PTDMin.Text = mk2.ToString();return mk1 - mk2; }總結
以上是生活随笔為你收集整理的安捷伦or是德信号源+频谱仪操作: 从程控到自动测试 (四)平坦度检测的程控实现的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: js计算距离特定日期多少周多少天
- 下一篇: 这 5 个 APP 开源了!