2023年1月28日 星期六

C#XML檔案修改

修改xml檔案中的資料, 去符合自動化測試的需求

using System.Xml; 

if (Result == RESULT_PASS)

 {

        if (!System.IO.File.Exists(@"C:\\AtmosicMP\\test.xml"))

       {

               GridData.WriteMessage(this.GridData._TPars.richtextbox, "test.xml file  ", " Fail ", Color.Blue, Color.Red);

               Result = RESULT_FAIL;

        }

        else

        {

               try

              {

                     XmlDocument xmlDoc = new XmlDocument();

                      xmlDoc.Load(@"C:\\AtmosicMP\\test.xml");

                      XmlNodeList xmlNodeList = xmlDoc.GetElementsByTagName("*");

                      foreach (XmlNode xmlNode in xmlNodeList)

                      {

                              XmlElement xmlElement = (XmlElement)xmlNode;//將節點轉換一下型別

                                

                              if (xmlElement.Name == "FlashFwElf")//判斷該子節點是否是要查詢的節點

                              {

                                    xmlElement.InnerText = @FwElf;//設定新值

                                    //break;

                                }

                                else if (xmlElement.Name == "BinFile")//判斷該子節點是否是要查詢的節點

                                {

                                    xmlElement.InnerText = @BinFile;//設定新值

                                    //break;

                                }

                                else if (xmlElement.Name == "Bdaddr_01")//判斷該子節點是否是要查詢的節點

                                {

                                    xmlElement.InnerText = TDatas.AtmosicBDA;//設定新值

                                    break;

                                }//BinFile

                            }

                            xmlDoc.Save(@"C:\\AtmosicMP\\test.xml");//儲存修改的Xml檔案內容

                }

                catch (Exception e)

                {

                        throw new Exception(e.ToString());

                }

         }

 }



延伸閱讀

2023年1月24日 星期二

網卡的Enable與Disable

如何用C#撰寫程式來停用或啟用指定網路卡
在這篇c# Ixchariot throughput 測試文章中加入一選項:  啟用與停用指定網卡
找到最簡單尋找到網卡名稱的方式:Netsh位置是在 C:\Windows\System32
Netsh 是命令列指令碼處理公用程式,讓您顯示或修改目前執行中電腦的網路設定. Netsh 命令可經由在netsh 提示字元鍵入命令來執行,而且可以在批次檔或指令碼中使用.
例如我NB上無線網卡

所下的指令: netsh wlan show interface
呈現出如下
系統上有 1 個介面:

    名稱                   : Wi-Fi
    描述            : MediaTek Wi-Fi 6 MT7921 Wireless LAN Card
    GUID                   : e406f59a-28aa-42ac-96f7-32243641e670
    實體位址       : 48:e7:da:ac:92:5d
    介面類型         : 主介面
    狀態                  : 連線
    SSID                   : ras_2.4
    BSSID                  : 90:8d:78:66:db:0c
    網路類型               : 基礎結構
    無線電波類型           : 802.11n
    驗證                   : WPA2-Personal
    加密                 : CCMP
    連線模式        : 自動連線
    頻帶                   : 2.4 GHz
    通道                : 8
    接收速率 (Mbps)        : 144.4
    傳輸速率 (Mbps)        : 144.4
    訊號                   : 83%
    設定檔                 : ras_2.4

    主控網路狀態  : 無法使用

再利用網路搜尋到的文章所得到以下函式組合成所需功能
public void NetWorkList()
public ManagementObject NetWork(string networkname)
public bool DisableNetWork(ManagementObject network)
public bool EnableNetWork(ManagementObject network)








延伸閱讀

2023年1月17日 星期二

新唐nuvoton nuc131與C#量產燒錄測試站

利用新唐的軟體工具

Nu-Link Command Tool是一個通過Nu-Link存取NuMicro®家族微控制器的Win32 console 程式,讓用戶可以清除、燒錄和轉儲數據,並且客制化個人燒錄工具。


圖一: 新唐的ICE
從而規劃依據NuLink的ID number 去分別對DUT進行燒錄動作!

圖二: ICE接線正面
圖三:ICE背面
利用 Process 來執行其它外部程式, 如uniflash_windows_64的dslite.bat

hyper = new Process();
hyper.StartInfo.FileName = "cmd.exe";//D:\ti\uniflash_windows_64
bool processStarted = hyper.Start();

if (hyper != null)
{
     hyper.WaitForExit(2000);
     HyperWindow = FindWindow(null, "C:\\Windows\\System32\\cmd.exe");
     if (HyperWindow == IntPtr.Zero)
     {
           HyperWindow = FindWindow(null, "Administrator: C:\\Windows\\System32\\cmd.exe");
      }
                        
        Thread.Sleep(500);
        if (HyperWindow != IntPtr.Zero)
        {

            SetForegroundWindow(HyperWindow);
            Thread.Sleep(1500);
            SendKeys.SendWait("+");
            SendKeys.SendWait("chcp 437");
            SendKeys.SendWait("{ENTER}");
            SendKeys.SendWait("d:");
            SendKeys.SendWait("{ENTER}");
            SendKeys.SendWait("cd\\ti\\uniflash_windows_64");
            SendKeys.SendWait("{ENTER}");
            SendKeys.SendWait("one_time_setup.bat");
            SendKeys.SendWait("{ENTER}");
            Thread.Sleep(1000);
            SendKeys.SendWait("dslite.bat >test.txt");
            SendKeys.SendWait("{ENTER}");
           
            ShowWindow(HyperWindow, SW_HIDE);

            Result = RESULT_PASS;
           //SetForegroundWindow(HyperWindow);
      }
       else
      {
            Result = RESULT_FAIL;
       }
 }
圖四: DUT代測物







2023年1月15日 星期日

ESP32的深度睡眠與喚醒

📺 影片版(約 5 分鐘):想先看實際操作的話可以直接看這支影片,完整步驟、設定與程式碼在下方文字版。
YouTube:https://youtu.be/5I1fWycszZM(winson-DIY 頻道)
⚡ Shorts 精華版(42 秒):https://youtube.com/shorts/1hFbrQ_ywOo

在前篇ESP32改裝Lachino自動感應抗菌除臭機中, 在使用電池時在活動模式(Active mode)下運行並不理想, 因為電池的電量很快耗盡. 所以就決定試看看用深度睡眠模式(Deep Sleep mode)的方式來減少運行的功耗, 再利用GPIO外部喚醒方式來運作. 


ESP32有基本的sample範例

 esp_sleep_wakeup_cause_t wakeup_reason;

 wakeup_reason = esp_sleep_get_wakeup_cause();

 esp_sleep_enable_ext0_wakeup(GPIO_NUM_33,1); //1 = High, 0 = Low




注意只有橘色RTC_GPIO可以當作外部觸發的腳位, 因為Deep_sleep_mode 只有RTC memory跟RTC周邊還在工作

我的 PIRPin = 33; 當作外部觸發的腳位

if(motion_off==50000){

    vTaskSuspend(hled);

    Serial.println("esp_deep_sleep_start");

    esp_deep_sleep_start(); 

}

當偵測腳為低準位時計數至50000時就關閉其他功能並開始深度睡眠esp_deep_sleep_start(); 





補充一、ESP32 的五種電源模式,差多少電?
上面的表是各模式下哪些周邊還開著,換成 Espressif datasheet 列的典型電流(只算晶片本身,不含開發板上的其他元件):
模式還在動的部分晶片典型電流
ActiveCPU、WiFi/藍牙收發約 95~240 mA(看 WiFi 收發)
Modem sleepCPU 照跑,WiFi/藍牙關掉約 20~68 mA(看 CPU 頻率)
Light sleepCPU 暫停、RAM 保留約 0.8 mA
Deep sleep只剩 RTC 控制器、RTC 記憶體、ULP約 10 µA(RTC 計時器+RTC 記憶體);ULP 運作時約 150 µA
Hibernation只剩 RTC 計時器約 5 µA
Active 到 Deep sleep 差了一萬倍左右,這就是電池版一定要睡的原因。

補充二、深度睡眠醒來=重新開機
深度睡眠時 CPU 和一般 RAM 都斷電,所以喚醒後不是從睡著的那一行繼續,而是從 setup() 重新跑一次:
  • 一般全域變數會回到初始值;要保留的計數器宣告成 RTC_DATA_ATTR int bootCount = 0;,放在 RTC 記憶體(8 KB)裡,睡眠不會清掉,但斷電或重新燒錄會清掉。
  • WiFi、藍牙、painlessMesh 每次醒來都要重新連線,要花幾秒,回報訊息要等連上再送。
  • 用 esp_sleep_get_wakeup_cause() 判斷這次是被誰叫醒的(ESP_SLEEP_WAKEUP_EXT0、_EXT1、_TIMER、_TOUCHPAD、_ULP;一般上電是 _UNDEFINED),再決定要做什麼。
  • esp_deep_sleep_start() 呼叫後就不會回來,之前的 vTaskSuspend() 等清理只是讓睡前不再動作,睡下去所有工作都會停。

補充三、五種喚醒方式
喚醒來源設定函式適合用途
計時器esp_sleep_enable_timer_wakeup(微秒)定時量測、回報(例如每 10 分鐘醒來一次)
ext0(單一腳位)esp_sleep_enable_ext0_wakeup(GPIO_NUM_33, 1)一個感測器,例如本文的 PIR;1=高電位喚醒、0=低電位
ext1(多支腳位)esp_sleep_enable_ext1_wakeup(遮罩, ESP_EXT1_WAKEUP_ANY_HIGH)多顆按鍵或感測器;ESP32 只有 ANY_HIGH(任一支高)和 ALL_LOW(全部低)兩種
觸控touchSleepWakeUpEnable(T3, 門檻)(Arduino core 2.x 以後)電容觸控按鍵,不用實體開關
ULP 協處理器esp_sleep_enable_ulp_wakeup()睡眠中讓 ULP 讀 ADC,超過門檻才叫醒主 CPU
可以同時開好幾種,例如 PIR 喚醒+每 6 小時計時器醒來回報一次電量。

補充四、哪些腳可以喚醒?
ext0/ext1 只能用 RTC_GPIO(上面腳位圖的橘色標籤),因為深度睡眠時只有 RTC 周邊還有電:
GPIO 0、2、4、12、13、14、15、25、26、27、32、33、34、35、36、39
  • GPIO 34、35、36、39 只能輸入、內部沒有上下拉電阻,接 PIR 或按鍵要自己加外部電阻。
  • GPIO 0、2、12、15 是 strapping pin,開機時會被讀電位,接感測器可能影響開機或燒錄,能避開就避開。
  • 本文用的 GPIO 33(RTC_GPIO8)是很好的選擇:可輸入輸出、有內部上下拉、不是 strapping pin。

補充五、完整範例:PIR 喚醒+閒置自動睡眠
把原文的片段整理成可以直接套用的架構(Arduino ESP32 core;這段範例未實機編譯):
#include "driver/rtc_io.h"

#define PIR_PIN GPIO_NUM_33            // RTC_GPIO8
const uint32_t IDLE_MS = 30 * 1000;    // 30 秒沒偵測到人就睡

RTC_DATA_ATTR int bootCount = 0;       // 放在 RTC 記憶體,睡眠不會清掉
uint32_t lastMotion = 0;

void goSleep() {
  while (digitalRead(PIR_PIN) == HIGH) delay(100);  // 等 PIR 回到低電位,不然一睡就馬上醒
  esp_sleep_enable_ext0_wakeup(PIR_PIN, 1);         // 高電位喚醒
  rtc_gpio_pullup_dis(PIR_PIN);
  rtc_gpio_pulldown_en(PIR_PIN);                    // 睡眠中由 RTC 下拉,避免浮接誤觸
  Serial.println("esp_deep_sleep_start");
  Serial.flush();                                   // 等序列埠送完再睡
  esp_deep_sleep_start();                           // 不會回來,醒來從 setup() 重跑
}

void setup() {
  Serial.begin(115200);
  rtc_gpio_deinit(PIR_PIN);            // 喚醒腳睡眠時被設成 RTC IO,先還原成一般 GPIO
  pinMode(PIR_PIN, INPUT);
  bootCount++;
  Serial.printf("boot #%d, wakeup cause = %d\n", bootCount, esp_sleep_get_wakeup_cause());
  lastMotion = millis();
  // 這裡做醒來要做的事:開風扇馬達、連 mesh 回報偵測結果……
}

void loop() {
  if (digitalRead(PIR_PIN) == HIGH) lastMotion = millis();
  if (millis() - lastMotion > IDLE_MS) goSleep();
  delay(50);
}
原文用「低準位計數到 50000」決定什麼時候睡,等多久會跟著 loop 的速度變;改用 millis() 算經過的時間,比較好掌握。

補充六、電池能撐多久?粗估方法
前篇香氛機換上的是 1500 mAh 鋰電池。用「電池容量 ÷ 平均電流」可以粗估(以下是計算示意,不是實測):
  • 一直 Active、WiFi 開著,以 100 mA 估:1500 ÷ 100 ≈ 15 小時,不到一天就沒電。
  • 深度睡眠如果真的只有晶片的 10 µA,理論上可以撐好幾年;但一般開發板上的穩壓 IC、USB 轉序列晶片、電源 LED 加起來常常有好幾 mA,以 5 mA 估:1500 ÷ 5 ≈ 300 小時,大約 12 天。
  • 所以要真正省電:用靜態電流低的 LDO、拿掉電源 LED,或直接用模組(ESP32-WROOM)自己配電路。PIR 模組和馬達的耗電也要算進去。
  • 想知道實際值,用三用電表 mA/µA 檔串在電池正極量,睡眠和醒著各量一次,再依每天被觸發的次數加權平均。

補充七、常見問題
現象原因與解法
一睡下去馬上又醒,一直重開ext0 是準位觸發,睡的時候 PIR 還是高電位就會立刻喚醒;睡前先等腳位回到低電位,腳位要有下拉不能浮接
怎麼觸發都醒不來用到不是 RTC_GPIO 的腳(例如 GPIO 5、18、19);或 34~39 沒加外部電阻
醒來後計數器又歸零一般變數睡眠時會斷電,要宣告成 RTC_DATA_ATTR
睡眠中燒錄失敗、COM port 消失晶片睡著時 USB 轉序列沒有回應;按住 BOOT 再按一下 EN 進下載模式,或在 setup() 開頭先 delay 幾秒再睡,留時間燒錄
最後一行 Serial 訊息沒印出來睡太快,序列埠還沒送完;esp_deep_sleep_start() 前加 Serial.flush()
睡眠時馬達或 LED 抖一下睡眠中一般 GPIO 輸出不保持;要固定的輸出腳用 gpio_hold_en() 搭配 gpio_deep_sleep_hold_en(),或在驅動電路加下拉
開發板睡眠電流還有好幾 mA板上穩壓 IC、USB 晶片、電源 LED 在耗電,不是程式的問題;量電流要扣掉或改用模組


延伸閱讀

2023年1月13日 星期五

ESP32與香氛機的邂逅

ESP32 C#圖形化資料收集-改裝Lachino自動感應抗菌除臭機

家中小巧的香氛機因為經常要換電池, 就改裝成用充電的鋰電池再加上ESP32傳輸開關的次數到中控GUI程式上, 用圖形化介面顯示

圖一:人體偵測香氛機整體圖
圖二:人體偵測香氛機架構圖
圖三:人體偵測香氛機實體圖
圖四:人體偵測香氛機改裝圖
myObject["node"] = 7
myObject["function"] = PIR
startHere: Received from 2085230841 msg={"node":7,"function":"PIR","Detect":"false"}
為沒偵測到的訊息
圖五:香氛機+ESP32及更換大容量鋰電池
因為要驅動馬達所以小容量的鋰電池驅動不了, 所以更換一顆大容量的.
myObject["node"] = 7
myObject["function"] = PIR
startHere: Received from 2085230841 msg={"node":7,"function":"PIR","Detect":"true"}
為偵測到的訊息
演示影片













延伸閱讀

2023年1月12日 星期四

ESP32與DS18B20溫度感測器的C#圖形化資料收集

ESP32+DS18B20溫度感測器的C#圖形化資料收集

利用手上DS18B20的模組經由ESP32wifi Mesh網絡將溫度讀值經由中控台的GUI接收, 再由顯示介面即時顯示出來.

圖一: ESP32+DS18B20模組
#include <Wire.h>
#include <DallasTemperature.h>

const int oneWireBus = 4;
OneWire oneWire(oneWireBus);
DallasTemperature sensors(&oneWire);
// Variables to store temperature values
String temperatureF = "";
String temperatureC = "";
float tempC,oldtemp;

自己的ESP32 Mesh網絡DS18B20為Node5
手握住DS18B20溫度上升
myObject["function"] = DS18B20
startHere: Received from 2085224085 msg={"node":5,"function":"DS18B20","Temperature":23.19}
演示影片






延伸閱讀

2023年1月11日 星期三

工廠製造生產專有名詞的中英文對照

SMT(Surface Mounted Technology):表面安裝技術

PTH (Pin Through the Hole):通孔安裝

THT (Through Hole Component) :通孔插裝元件

SMB (Surface Mount Printed Circuit Board):表面安裝PCB板

SMC (Surface Mount Component):表面安裝元件

SMD (Surface Mount Device):表面安裝器件

SMA (Surface Mount Assembly):表面安裝組件

Component:元件

Device:器件

Assembly:組件

CTE(coefficient of thermal expansion):熱膨脹係數

In-circuit test:在線測試

Lead configuration:引腳外形

Placement equipment:貼裝設備

Reflow soldering:回流焊接

Repair:修理

Rework:返工

Solderability:可焊性

Soldermask:阻焊

Yield:產出率

Packaging density:裝配密度

Chip:片狀元件

melf:圓柱形元件

PCB(Printed circuit board):印刷電路板

DIP:雙列直插

SIP:單列直插

SOT(Small Outline Transistor):小外形晶體管

SOIC(Small outline IC):小外形集成電路,

SOP(Small outline Package):小外型封裝

PLCC(Plastic Leaded Chip Carrier):塑型有引腳芯片載體

LCCC(Leadless Ceramic Chip Carrier):無引腳陶瓷芯片載體

QFP (Quad Flat Package):多引腳方形扁平封裝

BGA( Ball grid array)球柵列陣

CSP(Chip Scale Package):芯片規模的封裝

Bare Chip:裸芯片Accuracy:精度

ATE(Automated test equipment):自動測試設備

AOI(Automatic optical inspection):自動光學檢查

Circuit tester:電路測試機

CTE(Coefficient of the thermal expansion):溫度膨脹係數

Cold solder joint:冷焊錫點

Component density:元件密度

Copper foil:銅箔

Copper mirror test:銅鏡測試

Cure:烘焙固化

Cycle rate:循環速率

Aerosol:氣溶劑
Angle of attack:迎角
Anisotropic adhesive:各異向性膠
Annular ring:環狀圈
Application specific integrated circuit :ASIC特殊應用集成電路
Array:列陣Artwork:佈線圖
Automated test equipment:ATE自動測試設備
Bond lift-off:焊接升離
Bonding agent:粘合劑
CAD/CAM system:計算機輔助設計與製造系統
Capillary action:毛細管作用
Chip on board :COB板面芯片
Circuit tester:電路測試機Cladding:覆蓋層
Cold cleaning:冷清洗
Cold solder joint:冷焊錫點
Conductive epoxy:導電性環氧樹脂
QFD:品質機能展開
PMT:產品成熟度測試
ORT:持續性壽命測試
FMEA:失效模式與效應分析






延伸閱讀

2023年1月10日 星期二

產品自動化測試工程人員工作技能-案子開始

新人進公司 最幸福的是有師父可以帶著做案子

所謂師父領進門修行看個人,初入這行有人罩著總是有個依靠

下面文章來介紹一下從接到案子後開如何去進行產品的測試工作

在系統廠中產品大部分由硬體組成在IC MCU上有軟體部門撰寫韌體FW

所以project 到手上要先了解產品的功能方塊圖逐一地去構思該如何去把測試涵蓋率變大

最好是每個功能部份的零件都有驗到!!

一般 從產品的PCBA就是我們所謂的電路板

板端測試要跟RD討論依據線路圖所需測量的測項盡可能將功能coverage提升包含電壓, 電流及chip線路功能的項目. 

再經由組裝後, 到成品測試.

成品測試一般的測法都是偏向使用者端使用的測試方式去架構測試環境再去編寫測試程式



延伸閱讀

2023年1月9日 星期一

Test Fixture Design - Shielding BOX控制板

 為了模仿TESCOM的箱子動作進而開發一片控制板.(給做箱子廠商costdown solution)

控制板以8051為主架構!包含6個按鍵輸入和6個磁簧sensor接頭, 6個電磁閥輸出!
Shielding BOX箱子應用
控制板去偵測按鍵動作進而控制治具滑台及電磁閥做箱體動作
有提供BCB的RS232 API給測試程式可做治具自動進出及箱體自動開關
控制板還可應用於氣動治具的控制及聲音測試系統的箱體控制


延伸閱讀

2023年1月8日 星期日

物體角度影像判別

在這個程式中, 使用了兩個Webcam影像裝置, 可同時判斷兩個旋轉的物體到定點的角度!

可加入輸入及輸出的訊號來做自動化的應用!




物體旋轉至水平後, 隨即判斷角度以便做後續處理.




延伸閱讀

2023年1月7日 星期六

Dlink PowerLine的重啟

因為家裡無線AP經常不正常, 所以將塵封已久的 PowerLine產品拿出來將客房(AP)與主臥室跟客廳經由電源線路連通!

PowerLine AV+ 3-Port (DHP-308AV DHP-309AV 電源線橋接器)


Dlink PowerLine的產品都可以互通

只要把接線對接好網路就通了, 方便!!

圖一: 架構圖





延伸閱讀

2023年1月6日 星期五

ESP32結合MPU6050用Processing做動態演示

網路上很多關於ESP32+Processing的相關文章, 譬如如何架構與撰寫!可以搜尋參考!
所以就利用手上的ESP32結合MPU6050模組用Processing做動態演示
圖一: fritzing線路圖

圖二: ESP32+MPU6050

圖三:Processing執行畫面

演示影片

 





Test Fixture Design - 治具篇

 為什麼需要治具? 產品在PCBA生產過程中若需要傳輸訊號去控制和輸出結果就需要一種附有探針的載具方便去做生產測試-治具. 

治具製作的好壞會影響到測試的穩定度所以需要事先構思你所要的功能再跟治具加工廠溝通討論才能做出適合生產及穩定的治具! 

一般治具可以分為手動, 氣動及電動 

手動治具 以手動方式將待測物放入治具載板上配合待測物訊號控制板使用測試.  

氣動治具 以氣壓缸帶動軸承下壓針盤. 

電動治具 以電動馬達驅動方式下壓



延伸閱讀

2023年1月5日 星期四

Android裝置測試系統-螢幕感應度測試

在開發Android裝置系統中, 還沒上 XYZ table 平台 的測試架構
先用測試程式在android 裝置安裝所需工具的APP,



上圖所示是 幾指接觸 而將其軌跡資料log 出來



測試程式會將其資料 接收並且秀出 哪條軌跡資料






延伸閱讀

ESP32與WS2812的繽紛世界

 利用ESP32連接3LED的WS2812模組顯示RGB三原色和閃爍演示

#include <Adafruit_NeoPixel.h>

#define LED_PIN     15

#define LED_COUNT  3

// NeoPixel brightness, 0 (min) to 255 (max)

#define BRIGHTNESS 70 // Set BRIGHTNESS to about 1/5 (max = 255)

// Declare our NeoPixel strip object:

Adafruit_NeoPixel strip(LED_COUNT, LED_PIN, NEO_GRBW + NEO_KHZ800);

myObject["node"] = 8
myObject["function"] = WS2812
startHere: Received from 2085146597 msg={"node":8,"function":"WS2812","mode":"single","led0":"red","led1":"green","led2":"blue"}

圖一:接線圖
利用ESP32中控系統GUI傳送node8 的 mode1 與mode2的指令
mode1:
RGB燈色
mode2:
RGB燈閃爍
演示影片










延伸閱讀

2023年1月4日 星期三

Touch panel 單指測試運動

Touch panel 單指測試運動
實際將電容式touch 面板 應用在測試機上

1.可針對電容式面板模組做點擊、劃線之測試
2.系統不受限於IC型號,皆可上線測試(I2C介面) (HID介面)
3.可搭配輸送帶做全自動化生產。 
4.可擴充-雙指多點構造

 



延伸閱讀

圖形化線路圖的好工具-fritzing

在fritzing裡面本身就有很多零件可以用
若沒有的parts也可以在網路上搜尋
圖一: 執行畫面


圖二:ESP32+MPU6050線路


2023年1月3日 星期二

RF 測試系統 - 藍牙篇

 RF測試系統中包含藍牙跟WiFi的測試. BT與WiFi還可以個別選擇測試儀器,這點是跟一般的產測程式最大的不同點! 藍芽測試部分 程式一開始會有login的畫面這個功能可以區分測試參數設定人員及Operator操作員的權限

 

待測物Chipset選擇 在測試程式的參數設定畫面可以依照BT chipset or Model name去選擇.測試程式會依照不同的Chipset去做控制待測物進入Test Mode讓儀器去做測試! 

 測試儀器選擇 在測試儀器的選擇項裡現在包含藍芽綜合測試儀Anritsu MT8852B跟Lite Point IQ可以選擇

  

測試項目選擇 測試項目包含standard跟EDR 項目可以單選或複選! 藍牙Standard測項為 Output Power Power Control Initial Carrier Carrier Drift Single-Slot Sensitivity Multi-Slots Sensitivity Modulation Index Max Input Power EDR function測項為 EDR Relative Tx Power EDR Carrier and Modulation EDR Diff Phase EDR Sensitivity EDR BER Floor Sensitivity EDR Max Input Power

  

在正式測試之前要先對測試環境做RF cable loss的校正, 這樣整個RF路徑Power才會正確. 



延伸閱讀

2023年1月2日 星期一

聲音 Test System - 測試程式介紹

 為了以最便宜的設備達到量測聲音裝置的構想!所以就用PC上的音效卡為發聲源與收音源(最好是用外接的音效卡, 規格較好) 程式開發是用Borland C++ Builder作介面控制與音源輸出和接收進而發展出一套低成本的聲音測試系統! 

聲音測試系統 程式一開始會有login的畫面這個功能可以區分測試參數設定人員及Operator操作員的權限

  

測試音效卡選擇 在測試程式的parameters的畫面上會list出PC上的所有的音效裝置, 由使用者去選擇所要用的音效裝置! 

 

Golden Sample校正 測試程式可以依golden sample校正選項讓設定人員去做校正

 

測試項目

 
在測試聲音的路徑上分為sending direction and receiving direction兩路. 在測試程式中的測項規劃可以自由選擇測試與否
 
Sending SLR reflects the signal loudness in sending direction, i.e. from the artificial mouth through the phone to the transmission line. 此項測試在驗證DUT(Device Under Test) MIC收音路徑的聲音是否合乎規格. 在MIC測試中包含Frequency Response(Left), THD(Left), Frequency Response(Right) and THD(R).(測試頻點如下圖200~4KHz)
  
Receiving RLR reflects the signal loudness in receiving direction, i.e. from the transmission line through the phone to the artificial ear. 此項測試在驗證DUT(Device Under Test) Speaker放音路徑的聲音是否合乎規格. 在Speaker測試中包含Frequency Response(Left), THD(Left), Frequency Response(Right) and THD(R).(測試頻點如下圖200~8KHz)
 
測試畫面


延伸閱讀