Rigol DP821A tamiri

Omega

Kayıtlı Üye
Ben Rigolna.com da distribitörlere bakıyordum tüm liste

Bu arada söyle ilginç birşeyde var
DS1054Z skop, partner elektde . 320 Euro (KDV dahil) ,kendi sitesinde 339 Euro (Vergiler Hariç)
Stokları eritiyorlar sanırım
Bu arada NAND nedir @taydin hocam ? Not AND kapısı değil sanırım :)
 
Son düzenleme:

taydin

Timur Aydın
Staff member
Kontrol kartını bugün gönderiyor ithalatçı firma. Yarın veya öbür gün elime geçer.

Ama bu arada hasarlı bga yollarını tamir etmek için birşey aklıma geldi. Acaba deneyen var mı bunu?

Şimdi üzeri bakır kaplı bantlar var. Bildiğin koli bandı, ama üzerinde çok ince bir bakır kaplama var. Ben şimdi lazer yazıcı ile bu bakır bandın üzerine 0.2 mm yollar çizsem, yolların ucunda da bir BGA pad olsa :)

Sonra da bu bandı asite atıp eritsem, elimde belli sayıda bakır yol ve ucunda da bga pad olacak. Sonra da mikroskop altında bu bakır yolu PCB üzerine yapıştırsam epoksi yapıştırıcı ile? :)

Tabi bunu ancak başka bir BGA üzerinde deneyebilirim. Güç kaynağını artık toplamam lazım, çünkü iş için lazım olmaya başladı.
 

taydin

Timur Aydın
Staff member
Epoksi lehimleme ısılarına dayanabiliyor. Onu da şuna göre söylüyorum: Bazan üreticiler, sırf ürün tamir edilemesin diye lehimlenmiş çipin altına epoksi döküyorlar. Özellikle Apple bunu yapıyor. Bu şekilde epoksilenmiş bir çipi sökmek çok zor oluyor. Freze ile çipi tamamen kazıyarak yok etmek gerekiyor.
 

taydin

Timur Aydın
Staff member
Güç kaynağını topladım ve ilk testini elektronik yük ile yaptım. Çıkışların gerilim ve akım verme kapasitelerinde bir sorun yok, ama kalibrasyon gerekiyor :mad: Şu anda ayarlanan voltaj değeri ile çıkıştaki voltaj değeri birbirini tutmuyor. Ayrıca akım ölçümü de hatalı. Umarım bunun kalibrasyon dokümanı vardır bir yerlerde.

Aşağıda güç kaynağını 8V'a ayarladım, elektronik yük 3A çekiyor. Ama güç kaynağının göstergesi 8.262V gerilim ve 3.311A akım gösteriyor.

IMG_20191221_144451.jpg
 

taydin

Timur Aydın
Staff member
Aslında daha önceki control kartındaki NAND flash'ı söküp buna taksım uygun kalibrasyon değerleri de gelmiş olacak. Ama cihazı tekrar sökmek istemiyorum.

Rigol'ün internet sitesinde DP800 güç kaynakları için yazılmış bir kalibrasyon dokümanı var. Ama bu doküman, menü arayüzünden, kalibrasyon katsayıları tek tek girerek yapılan bir kalibrasyon yöntemi. Çok sayıda nokta için kalibrasyon yapılması gerekiyor, o yüzden bu metot hiç randımanlı değil.

Bir de cihazın kalibrasyon menüsünde çok sayıda bug var. sadece 8.4V verebilen ikinci çıkış için 32V'a kadar kalibrasyon katsayısı istiyor, 60V'a çıkan birinci çıkış için 8.4V'a kadar kalibrasyon katsayısı istiyor. Bu menüyle olacak gibi değil.
 

Attachments

taydin

Timur Aydın
Staff member
EEVBlog'da birisinin DP832 yi kalibre etmek için SCPI protokolü kullanımını anlattığı bir belge buldum. Ama tabi DP821'in çıkış voltaj ve akım limitleri DP832'den tamamen farklı, o yüzden oradaki kalibrasyon voltaj ve akım seviyeleri DP821 ile kullanılamaz.

Cihaz firmware'inin programınını hex dump yaparak mevcut kalibrasyon tablosunu okumaya yarayan bir SCPI komutu var mı diye araştırdım. Ama öyle bir komut bulamadım.

Kalibrasyon tablosu kabaca şöyle işliyor. Değişik voltaj değerleri için DAC'a yazılan değer ile güç kaynağından gerçekte çıkan değerlerin bulunduğu bir tablo hazırlanıyor. Sonra da güç kaynağı çıkışındaki değer ile ADC'nin geri okuduğu değerlerin bulunduğu başka bir tablo. Acaba mutlaka belli değerlerin mi bulunması gerekiyor tabloda diye araştırırken, hex dump'ta her bir tablo için 80 tane yer ayrıldığını gördüm. Ama DP832 kalibrason tablosunda bu kadar değer yoktu.

Ben de tamamen kendi keyfime göre hem voltajlar için hem de akımlar için birer tablo hazırladım:

Code:
VPOINTS=(
    0.0
    0.01
    0.03
    0.1
    0.2
    0.7
    1.0
    1.2
    1.7
    2.0
    2.3
    2.7
    3.0
    3.8
    4.2
    4.7
    5.1
    5.3
    5.6
    6.0
    6.5
    7.0
    8.0
    8.4
    9.0
    10.0
    11.0
    12.0
    13.0
    14.0
    15.0
    16.0
    17.0
    18.0
    19.0
    20.0
    21.0
    22.0
    23.0
    24.0
    25.0
    26.0
    27.0
    28.0
    29.0
    30.0
    31.0
    32.0
    33.0
    34.0
    35.0
    36.0
    37.0
    38.0
    39.0
    40.0
    41.0
    42.0
    43.0
    44.0
    45.0
    46.0
    47.0
    48.0
    49.0
    50.0
    51.0
    52.0
    53.0
    54.0
    55.0
    56.0
    57.0
    58.0
    59.0
    60.0
    61.0
    62.0
    63.0
    64.0
    65.0
    66.0
    67.0
    68.0
    69.0
)

CPOINTS=(
    0.0
    0.001
    0.002
    0.005
    0.01
    0.02
    0.03
    0.04
    0.05
    0.06
    0.07
    0.08
    0.09
    0.1
    0.2
    0.3
    0.4
    0.5
    0.6
    0.7
    0.8
    0.9
    1.0
    1.05
    1.2
    1.5
    1.7
    2.0
    2.2
    2.5
    3.0
    4.0
    5.0
    6.0
    7.0
    8.0
    9.0
    10.0
    10.49
)
Sonra da bu tablo üzerinden döngü olarak kalibrasyon işlemini yaptım. Burada bir voltaj tablosu var ve 0.01V tan 69V'a kadar 78 değer içeriyor (80 den az) Akım tablosu da 0.001A den 10.49A'e kadar değerler içeriyor (gene 80 den az).
 

Attachments

taydin

Timur Aydın
Staff member
Burada voltaj kalibrasyonunda iki işlem yapılması gerekiyor. Belli bir voltaj değeri ürettirilecek güç kaynağına, çıkışta ne ölçülüyor cihaza yazılacak. Bu işlemi belli sayıda voltaj değeri için yapılacak. Güç kaynağı çıkışı 63V'a kadar gidiyorsa ona göre değerler kullanılacak, 8.4V'a kadar gidiyorsa ona göre değer kullanılacak.

İkinci aşamada tablodaki belli voltaj değerleri ürettirilecek, sonra da güç kaynağı geriye ne okuyor o kaydedilecek cihaza.

Aynı işlem akım tablosu kullanılarak akım ölçümü ve sınırlaması için yapılacak. Bu işi yapan bir bash script hazırladım ve güç kaynağının iki çıkışında çalıştırdım. Birinci çıkış 63V/1.05A limitine kadar, diğer çıkış da 8.4V/10.49A limitine kadar kalibre edildi.

Code:
#!/bin/bash

VPOINTS=(
    0.0
    0.01
    0.03
    0.1
    0.2
    0.7
    1.0
    1.2
    1.7
    2.0
    2.3
    2.7
    3.0
    3.8
    4.2
    4.7
    5.1
    5.3
    5.6
    6.0
    6.5
    7.0
    8.0
    8.4
    9.0
    10.0
    11.0
    12.0
    13.0
    14.0
    15.0
    16.0
    17.0
    18.0
    19.0
    20.0
    21.0
    22.0
    23.0
    24.0
    25.0
    26.0
    27.0
    28.0
    29.0
    30.0
    31.0
    32.0
    33.0
    34.0
    35.0
    36.0
    37.0
    38.0
    39.0
    40.0
    41.0
    42.0
    43.0
    44.0
    45.0
    46.0
    47.0
    48.0
    49.0
    50.0
    51.0
    52.0
    53.0
    54.0
    55.0
    56.0
    57.0
    58.0
    59.0
    60.0
    61.0
    62.0
    63.0
    64.0
    65.0
    66.0
    67.0
    68.0
    69.0
)

CPOINTS=(
    0.0
    0.001
    0.002
    0.005
    0.01
    0.02
    0.03
    0.04
    0.05
    0.06
    0.07
    0.08
    0.09
    0.1
    0.2
    0.3
    0.4
    0.5
    0.6
    0.7
    0.8
    0.9
    1.0
    1.05
    1.2
    1.5
    1.7
    2.0
    2.2
    2.5
    3.0
    4.0
    5.0
    6.0
    7.0
    8.0
    9.0
    10.0
    10.49
)

get_device_ip ()
{
    local DEVICE="$1"
    local IPADDR=`lxi discover | grep "$DEVICE" | grep -oe '[0-9\.]*$'`
    echo $IPADDR
}

get_dmm_ip ()
{
    get_device_ip DM3068
}

get_ps_ip ()
{
    get_device_ip DP821A
}

DMM_IP=10.2.1.150
PS_IP=10.2.1.152

write_ps_cmd ()
{
    local CMD="$1"
    lxi scpi -a $PS_IP "$CMD"
}

write_dmm_cmd ()
{
    local CMD="$1"
    lxi scpi -t 10 -a $DMM_IP "$CMD"
}

read_dmm_vdc ()
{
    V_SCPI=`write_dmm_cmd ":meas:volt:dc?"`
    printf "%f\n" $V_SCPI
}

read_dmm_cdc ()
{
    write_dmm_cmd ":meas:curr:dc max"
    V_SCPI=`write_dmm_cmd ":meas:curr:dc?"`
    printf "%f\n" $V_SCPI
}

read_ref ()
{
    local POINT="$1"

    if [ "$MODE" = "V" ]; then
        REF=${VPOINTS[$POINT]}
    elif [ "$MODE" = "C" ]; then
        REF=${CPOINTS[$POINT]}
    else
        REF="somejunk"
    fi

    echo $REF
}

read_value ()
{
    if [ "$MODE" = "V" ]; then
        VALUE=`read_dmm_vdc`
    elif [ "$MODE" = "C" ]; then
        VALUE=`read_dmm_cdc`
    else
        VALUE="somejunk"
    fi

    echo $VALUE
}

ps_set_sense ()
{
    if [ "$SENSE" = "on" ]; then
        write_ps_cmd ":output:sense $CH,on"
    elif [ "$SENSE" = "off" ]; then
        write_ps_cmd ":output:sense $CH,off"
    fi
}

calibration_loop ()
{
    echo "CH = $CH, MODE = $MODE, DEV = $DEV, SENSE = $SENSE"

    ps_set_sense

    write_ps_cmd ":output $CH,on"

    for (( POINT = 0; POINT < $NUMPOINTS; POINT++ )); do
        local REF=`read_ref $POINT`
        echo "POINT = $POINT, REF = $REF"
        write_ps_cmd ":calibration:set $CH,$MODE,$POINT,$REF,$DEV"
        sleep 2
        local VALUE=`read_value`
        echo "VALUE = $VALUE"
        write_ps_cmd ":calibration:meas $CH,$MODE,$POINT,$VALUE,$DEV"
    done

    write_ps_cmd ":output $CH,off"
}

calibrate_ch1 ()
{
    local CH="CH1"

    write_ps_cmd ":calibration:start 11111,$CH"

    if [ -n "$VOLTAGE" ]; then
        local MODE="V"
        write_ps_cmd ":calibration:clear $CH,$MODE"

        local SENSE="none"
        local NUMPOINTS=79

        local DEV="1"
        calibration_loop

        local DEV="0"
        calibration_loop
    fi

    echo "SWITCH DMM to Current Measurement, press enter to continue ..."
    read

    if [ -n "$CURRENT" ]; then

        MODE="C"
        write_ps_cmd ":calibration:clear $CH,$MODE"

        local SENSE="none"
        local NUMPOINTS=24

        local DEV="1"
        calibration_loop

        local DEV="0"
        calibration_loop
    fi

    write_ps_cmd ":calibration:end `date +%d/%m/%Y`,$CH"
}

calibrate_ch2 ()
{
    local CH="CH2"

    write_ps_cmd ":calibration:start 11111,$CH"

    if [ -n "$VOLTAGE" ]; then
        local MODE="V"
        write_ps_cmd ":calibration:clear $CH,$MODE"

        local SENSE="off"
        local NUMPOINTS=24

        local DEV="1"
        calibration_loop

        local DEV="0"
        calibration_loop
    fi

    echo "SWITCH DMM to Current Measurement, press enter to continue ..."
    read

    if [ -n "$CURRENT" ]; then

        MODE="C"
        write_ps_cmd ":calibration:clear $CH,$MODE"

        local SENSE="on"
        local NUMPOINTS=39

        local DEV="1"
        calibration_loop

        local DEV="0"
        calibration_loop
    fi

    write_ps_cmd ":calibration:end `date +%d/%m/%Y`,$CH"
}

# put device into a known state
write_ps_cmd ":*RST"

VOLTAGE=1
CURRENT=1

calibrate_ch1

echo "SWITCH power supply output, press enter to continue ..."
read

calibrate_ch2
 

taydin

Timur Aydın
Staff member
Kalibrasyon sonrasında 60V/1A çıkışını hem ürettiği voltaj, hem de cihazın geri okuyup görüntülediği voltaj neredeyse tam doğru. Burada 8.000V ürettiriyorum ve cihazın kendi göstergesi de 8.000V geri okuyor.

IMG_20191222_223140.jpg


DM3068 de 8V'a çok yakın bir değer ölçüyor
IMG_20191222_223149.jpg
 

taydin

Timur Aydın
Staff member
Aynı çıkışı elektronik yüke bağlıyorum ve 8V'ta 620 mA çekiyorum. Güç kaynağı çıkış voltajını muhafaza ediyor. DP821A nın gösterdiği akım değeri yükün ayarlandığı akım değerinden biraz fazla. Ama bu elektronik yükün toleransı. DM3068 ile ölçtüğüm zaman DP821A nın ölçtüğü akım ile neredeyse tam olarak uyuşuyor.

IMG_20191222_223331.jpg
 

taydin

Timur Aydın
Staff member
İkinci çıkışın da voltaj ve akım kalibrasyonu çok iyi görünüyor. Ama bir sorun devam ediyor. İkinci çıkışta, çok yüksek akımlarda güç kaynağının kabloda düşen gerilimi kompanze etmesini sağlayan SENSE girişleri var. Bu sense özelliğinin kalibrasyonunu yapamadım. Dolayısıyla örneğin 10A akım çektirdiğim zaman 8V'a ayarlanmış çıkıştan, elektronik yükteki voltaj 7.6V'lara düşüyor. Aradaki fark kablo üzerinde düşen voltaj.

Bu sense işi ile ilgili araştırmalara devam edeceğim. Ama bu haliyle artık kullanılmaya hazır.
 

serkan_48

Moderatör
Staff member
Bu sense olayını elektorun geçmişte paylaştığı bir güç kaynağında görmüş öğrenmiştim. O yıllar için yapılmış bu şema çok hoşuma gitmişti.

Sonra o güç kaynağını bir kaç değişiklikle 0 - 30 volt 0 - 3 amper olan şemayı 10 amper alabilecek şekilde yapmıştım.
 
Top