KL25Z mikrokontroladore batean eta Seeed-eko Bluetooth shield batean oinarritzen den neurGAI kontsumo elektrikoen neurgailu baten eraikitzea

(en castellano)

Jarraian azalduko dugu nola eraiki ahal dugun telefono mugikorraren audio-sarreraren kalibrazioa behar ez duen kontsumo elektrikoen neurgailu bat. Prototipo honetan, SCT013 zunda anperimetrikoa ematen duen seinale elektrikoa Kinetis KL25 (ARM® Cortex™-M0+MCU) mikrokontroladore batek neurtzen du. Mikrokontroladorea Freescale konpainiaren FRDM-KL25Z garapenerako plataformaren barruan integratuta dago; plataforma horrek Arduino-rekin bateragarriak diren moduluekiko integrazio erraza ahalbidetzen du, esate baterako Seed-eko Bluetooth Shield-arena. Shield horrek FRDM-KL25Z plataforma neurGAI aplikazioarekin komunikatzea ahalbidetuko du. neurGAI da gure telefono elektronikoan instalatuta dagoen Android aplikazioa, baina kasu honetan zunda anperimetrikoa ez dago telefonora zuzenean konektatuta, baizik eta FRDM-KL25Z plataformara, eta bluetooth-en bidez jasotzen dira neurketen datuak.

Hurrengo irudian FRDM-KL25Z plataformaren konexio-puntuen (pin-en) kokapena erakusten da.

KL25ZPlataformak USB motako bi konektore ditu, eta horietako edozeinen bidez elikatu daiteke plataforma. Goiko aldean, ezkerrean dagoen USB konektorea KL25 mikrokontroladorea programatzeko eta ordenagailu batetik monitorizatzeko erabiltzen da.

Gure FRDM-KL25Z modu erraz batean programatu daiteke, ARMmbed plataforma birtualaren bidez:

mbed

Plataforma honek guztiz birtuala den garapen-ingurune bat eskatzen digu, gure mikrokontroladorea programatzeko. mbed plataforman behin alta emanda, guztiz doan, gaitasun handiko garapen-ingurune bat izango dugu eskuragarri, mbed-eko komunitateak eutsita eta lagunduta, liburutegi, foro eta dokumentazio asko eskuragarri izanik.

Geroago itzuliko gara Kinetis KL25 mikrokontroladorearen programaziora. Lehenago, azalduko dugu nola konektatzen diren, euren artean, FRDM-KL25Z plataforma, Seeed-eko Bluetooth Shield-a eta SCTo13 zunda anperimetrikoa.

Hurrengo irudiek muntaketa prozesua erakusten dute.KL05Zb

Ezkerreko irudiak FRDM-KL25Z plataforma erakusten du, fabrikatzaileak hornitzen duen egoeran. Plataformaren alboetan metalizatutako zuloren bi lerro bikoitz aurkituko ditugu. Kontaktu horien bidez mikrokontroladorearen pin-ak eskuragarri ditugu. Kanporago dauden zulo-lerroetako kontaktuak, hain zuzen ere, Arduino sistemarekin bateragarriak dira. Kontaktu horiek dira Bluetooth shield-arekin konektatzeko erabiliko ditugunak. Horretarako, zuloen gainetik konektoreen lerroak soldatuko ditugu, erdiko irudian ikusten den gisan. Bluetooth shield-a konektore horien gainean muntatuko dugu.

Zunda  anperemetrikoaren kontaktu bat PTE30 izeneko pin-era konektatu behar dugu. Lehenengo irudian ikus daitekeenez, kontaktu horretan mikrokontroladorearen irteera analogikoa dago eskuragarri. Horregatik, PTE30 pina dagoen zulo-lerroetan ere 5 kontakturen ilara bat soldatuko dugu, ondoan daudenen altuera txikiagokoak, gainean Bluetooth shield-a muntatzen dugunean zunda anperemetrikotik datorren kablearen konektoreari lekua uzteko (eskuineko irudian, kable berdea).

Zundatik datorren beste kablea (irudian, kable gorria) plataformaren A2/PTB2 izeneko pin-era konektatu behar da. Konexioa Bluetooth shield-aren bidez egingo dugu, hura plataformaren gainean konektatuta baitago. Sistema osoa behin muntatuta, beheko irudian erakusten den bezala geratu behar da.

completo

Zunda anperemetrikoak 3,5 mm-ko TRS motako konektore ar bat dauka. Plataformara konektatzeko, kalibre bereko TRS motako konektore eme baten bidez egiten dugu. Hurrengo irudiek bi konektoreen (ar eta eme) konexioak erakusten dituzte.

KL05Za

Bluetooth shield-ak bere barruan Bluetooth SPP modulu bat (Serial Port Protocol) integratzen du. Shield-aren eskema hurrengo irudian erakusten da.

BluetoothInterface

Bluetooth shield-a FRDM-KL25Z plataformarekin dituen kontaktuen bidez elikatzen da. Bluetooth shield-ak bi grove motako konektore ditu, digitala eta analogikoa, baina guk ez ditugu erabiliko. Shield-ak bi konexio digital ditu (BT_RX, BT_TX); horien bidez Bluetooth shield-a eta FRDM-KL25Z plataforma elkarrekin komunikatzen dira, serie motako komunikazio kanal  baten bidez. Shield-ak zubi motako bi konektore ditu, BT_RX eta BT_TX pinak FRDM-KL25Z plataformaren sarrera/irteerako 8 portuen artean bi aukeratzeko, komunikazio seriea egiteko. Gure kasuan, honako bi konexio hauek egingo ditugu:

BT_RX -> D5

BT_TX – > D4

Puntu honetan baditugu gure sistemaren osagai guztiak euren artean ondo konektatuta. Hurrengo pausua mikrokontroladorea programatzea izango da.

 

KL25 mikrokontroladorearen programazioa eta Bluetooth shield-aren konfigurazioa

Bluetooth shield-aren konfigurazioa KL25 mikrokontroladorearen programazioaren bidez egiten da. Beraz, hurrengo pausua KL25-ean gure programa kargatzea izango da. Programa honek barruan Bluetooth shield-aren konfigurazioa eta programazioa dakartza. Bluetooth shield-aren ezaugarriak, funtzionalitateak eta informazio osagarri gehiago  Seeed-eko wiki honetan kontsultatu daiteke.

Jarraian ematen dugun informazioa eskuragarri dago, ere bai, mbed prataformaren bidez: https://developer.mbed.org/platforms/KL25Z/

FRDM-KL25Z plataforma behin eskuratuta, lehenengo pausua openSDA (open standard embedded serial and debug adapter) firmware-aren gaurkotzea izango da. Sistema digital hau plataforman integratutako KL25Z-ren osagarria da, eta mikrokontroladore horrekin USB portuaren bidez komunikatzea ahalbidetuko digu; horrekin batera, mikrokontroladorean exekutatuko den programa memorian kargatzea ere ahalbidetuko digu, USB memoria bat bailitzan. OpenSDA-ren firmware-aren gaurkotzearen prozesua ezinbestekoa da gure plataforma programatu ahal izateko. Prozesua esteka honetan azaltzen da.

Hurrengo pausua FRDM-KL25Z plataforman kargatuko dugun programa aldez aurretik mbed plataforma birtualean dugun garapen-ingurunera inportatzea izango da. Programarekin batera, erabiliko beharrekoak diren zenbait liburutegi ere inportatu behar dira. Horretarako, errazena da biltegien tresnaren bidez egitea. Garapen-ingurunean “neurGAI” terminoa bilatuz gero, bilaketak programaren biltegiaren orrira eramango gaitu; bestela, esteka honetan sakatu behar dugu: https://developer.mbed.org/users/gbm/code/neurGAI_Seeed_BLUETOOTH/. Gero, “Import this program” sakatu behar dugu.

 

mbed-neurGAI

Horrela, programaren kodea garapen ingurunearen gure lan-gunean kargatuko dugu.

Puntu honetan, jada, posible da programaren kodea ikustea. ARMmbed plataformak C++-ean programatzen dira (programatzeko lengoaia honi buruzko informazio gehiago eskuratzeko, http://www.cplusplus.com/).

mbed-developer

Mikrokontroladorean kodigoa kargatzeko, lehenago kodea konpilatu behar dugu. Prozesu horrek artxibo bat sortuko du: “neurGAI_BLUETOOTH_KL25Z.bin”; artxibo hori FRDM-KL25Z plataformari dagokion USB memorian gordeko dugu. Behin gordeta, plataformaren RESET botoia sakatu behar dugu, programa abiarazteko.

Programa martxan jartzen denean, egiten duen lehenengo gauza da Bluetooth shield-a konfiguratzea, honako parametro hauekin: “neurGAI” da gailuaren izena, eta”0000″ (lau zero) PIN kodea.

FRDM-KL25Z plataformak serie komunikazioa D5 eta D4 pin digitalen bitartez burutzen du, Bluetooth shield-arekin komunikatzeko. KL25 mikrokontroladorean D5 pina TX da (datuen transmisioa) eta D4 RX da (datuak jasotzea). Bluetooth shield-ean konfigurazioa kontrakoa da: D5 (RX) eta D4 (TX). Azken konfigurazio hau zubi-konektoreen bidez egin behar da, gorago azaldu dugun bezala.

Gure sisteman ez dugu KL25-aren UART bat erabili (UART0, adibidez), SerialPC-ren bidez ezar daitekeen plataformaren eta ordenagailuaren arteko balizko komunikazio batean interferentziak ez sortzeko (SerialPC-aren komunikaziorako sententziak komentatura daude kodean, eta ezgaituta biltegiaren azken bertsioan; sententzia horiek gaitu daitezke kodean, exekuzioan programaren funtzionamendua monitorizatzeko). BluetoothSerial liburutegia (https://developer.mbed.org/teams/Seeed/code/BluetoothSerial/), Seeed-ek hornituta, pixka bat aldatu dugu. Liburutegi hau erabili behar dugu KL25 Seeed-en shield-arekin komunikatzeko. Ezer aldatu ezean komunikazio hori seriea da, esan den bezala, eta KL25-aren UART baten bidez egiten da. Gure kasuan komunikazio hori bi portu digital arrunten bidez egingo dugu, UART-ekin interferentziarik ez sortzeko. Horretarako, SoftSerial liburutegia erabili behar dugu (https://developer.mbed.org/users/Sissors/code/SoftSerial/); liburutegi horrek bi I/O pin digital arrunten bidez komunikazio serieko kanal bat software bidez konfiguratzea eta erabiltzea ahalbidetzen du.

Programaren abiarazteak beste terminalean (ordenagailua, edo Android telefonoa) erabiltzaileak komunikazioa ezartzea eskatzen du. Terminal horren barruan neurGAI aplikazioa instalatuta eta abiarazita baldin badago, orduan erabiltzaileak datuak Bluetooth-en bidez jasotzea aktibatu beharko du, neurGAI aplikazioaren tresna-menuaren bidez. Datuak ordenagailuaren terminal batean ikusi nahi izanez gero, adibidez linux-en, orduan honako hau sartuko dugu terminalean:

 

$sudo rfcomm bind /dev/rfcomm0 [MAC address] 1
$sudo putty

 

Lehenengo lerroak konexio bat ezartzen du kernel-aren RFCOMM bluetooth gailuaren eta gure shield-aren bidez, bigarren hori MAC helbidearen bidez identifikatuta; gero, bigarren lerro batean, putty aplikazioa abiarazi behar dugu serie kanal bat ezartzeko /dev/rfcomm0 portuaren bidez.

Serie motako kanalaren konfigurazio lehenetsia honako hau da: 9600 baud, 8 bit, 1 bit stop, paritaterik gabe.

Jarraian, neurtutako korrontearen balio efikazaren kalkulua egiten duen kodea erakusten da:

 

void medir()
{
    numero_muestra++;
    valor_muestra = sonda.read();
    v_offset = v_offset + valor_muestra;
    potencia = potencia + pow((valor_muestra - v_offset_medido), 2);
    if (numero_muestra == frecuencia_muestreo)  // hemos llegado a un segundo
    {
        potencia_medida = potencia / frecuencia_muestreo;
        corriente_medida = sqrt(potencia_medida);
        v_offset_medido = v_offset / frecuencia_muestreo;
        v_offset = 0;
        potencia = 0;
        numero_muestra = 0;
        led3 = !led3;   // conmuta LED azul
        medido = true;
    }
}

//..//

int main() {
    
    //configura el offset de voltaje a sumar a la sonda
    salida_offset = 0.5;
    float pendiente = 201.206437;
    float offset = 0;
   
    //configura el Bluetooth Shield
    //...//
    // asigna la función medir al temporizador con intervalo 200 us
    medidor.attach(&medir, 1.0/frecuencia_muestreo);
 
    // spin in a main loop. medidor will interrupt it to call medir
    float t = 0;
    int tiempo = 0;
    while(1)
    {
        if (medido)
        {
            medidor.detach();
            potencia_230V = (corriente_medida * pendiente + offset) * 230;
            serialBluetoothShield.printf("#%i€%f*\r\n", tiempo, potencia_230V);
            medido = false;
            t = t + 1;
            tiempo++;
            medidor.attach(&medir, 1.0/frecuencia_muestreo);
        }
    }
}

Zunda anperemetrikoak (SCT013-060) emandako seinalea alternoa da, eta ez dauka osagai jarraiturik. Mikrokontroladoreak bakarrik positiboak diren seinaleak neurtu ahal ditu (bere ADC moduluaren bidez); beraz, beharrezkoa da zundaren seinaleari offset bat gehitzea, seinale hori beti positibo bihurtzeko. Offset-eko osagai hori PTE30 (salida_offset) irteera analogikoaren pinean dagoen seinalea da. Horrela, neurtutako seinalea (valor_muestra) zundak ematen duen seinalea gehi offset-ekoa izango da. Seinale horren osagai jarraitua kendu behar da benetako neurketa lortzeko, baina hori erraz lortzen da programan seinalearen batez besteko balioa kalkulatuta, eta ADC moduluak ematen duen balioari kenduta.

medir() metodoa periodikoki abiarazten da 200 μs-an behin. Balio hori da 5 kHz-eko lagintze maiztasunari dagokiona. Lagintze maiztasun horrek 100 lagin ematen ditu seinale elektrikoaren periodo bakoitzerako (50 Hz-ekoa, 20 ms-ko periodoa), nahikoak haren balio efikaza egoki kalkulatzeko. Lagintze periodo hori (200 μs), berriz, nahikoa da medir() metodoak neurketaren prozesamendu guztia arazo barik egiteko eta bukatzeko, hurrengo lagintzearen abiaraztea hasi baino lehen. Metodoak zundan dagoen tentsioaren aldiuneko neurketa egiten du, eta batukari batean gehitzen du balioa. Segundo bat pasata batukarian gordetako baliotik erraz kalkulatzen da zunda anperemetrikotik zirkulatzen den korrontearen balio efikazarekiko proportzionala den balio bat.

Kanpoko begiztak segundo bateko lagin nahikoak hartu direla detektatzen duenean, programak neurtutako baliotik korronte efikazaren balio erreala kalkulatzen du (horretarako proportzionaltasun koefiziente bat neurtu behar da); eta korrontearen balioa bider 230 V biderkatzen da, kontsumoaren potentziaren balioa erdiesteko.

Azkenean, programak bi datu bidaltzen ditu Bluetooth shield-era: neurketaren denbora segundotan, eta itxurazko potentziaren balioa, suposatuz neurketa 230 V-eko sare elektriko batean egin dela.

Proportzionaltasun koefizientea (pendiente = 201.206437) neurtutako balio efikazaren eta zunda anperemetrikoaren bidez zirkulatzen den korronte elektrikoaren arteko erlazioa da. Koefiziente hori gure sistemaren araberakoa da, KL25+SCT013 sistema. Koefiziente hori zehaztea ezinbestekoa da benetako balioa eskuratzeko. Horretarako, honela jokatu dugu:

Lehenengo, gure programan unitatea den proportzionaltasun koefiziente bat erabili dugu (pendiente = 1), eta bider 230 (V) biderketa ezgaitu. Horrela, mikrokontroladoreak Bluetooth-aren kanalaren bidez ematen dituen datuak (ordenagailuan ikusten ditugunak) zuzenean mikrokontroladoreak zunda anperemetrikotik neurtzen dituenak izango dira, zuzenketarik gabe. Beste bide batez benetako korrontea zuzenean neurtzen badugu, adibidez anperemetro bat erabiliz, posible izango da koefizientea erdiestea, bi neurketen arteko erlazioa kalkulatuta.

Zunda anperemetrikoak neurtu behar dituen korronteak ampere batzuetako ordenakoak izango dira (4,6 kW-eko kontsumoko potentziari 20 A-ko korrontea dagokio). Korronte altuko maila hauek erraz erreproduzitu daitezke elektronikako laborategi batean funtzio-sorgailu batek ematen duen korronte txikitxoa (100 mA-koa) haril baten bidez pasarazten, harilak bira nahikoak baldin baditu. Gure kasuan, 500 birako haril bat eraiki dugu, kobrezko haria erabiliz. Ondorengo irudian zunda anperemetrikoa ikus daiteke, 500 birako harila inguratuz; haritik 81,4 mA-ko korrontea pasatzen denez, zunda anperemetrikoak neurtzen duen korrontea 40,7 A da, funtzio sorgailuak ematen duena halako 500.

 

IMG_20151211_103935

 

Hariletik pasatzen den korrontea pixkanaka aldatzen badugu (zundaren barrutik pasatzen dena miliampere batzuetatik anpere askotara pasatuz), posible da KL25 mikrokontroladoreak ematen dituen neurketak erregistratzea. Beheko taulan, ezkerrean, lehenengo zutabean hariletik zirkulatzen korrontea erakusten da, anperemetro batekin neurtuta. Taularen hirugarren zutabea da zunda anperemetrikoaren barrutik pasatzen den korrontea (x500). Erdiko zutabean KL25-ek ematen duen balioa erakusten da.

Eskuinean erakusten den irudiak neurtutako korrontearen (ardatz bertikalean) eta mikrokontroladoreak emandako datuen (ardatz horizontalean) artean dagoen erlazio lineala erakusten du. Egiaztatu daiteke erlazio horren linealtasun oso handia; horretatik erraz ateratzen da gure neurketa-sistemaren proportzionaltasuneko koefizientea.

kalibrazioaBukatzeko, korronte efikazaren neurgailuaren tarte dinamikoa zehaztea geratzen zaigu (edo neurtu daitekeen kontsumo elektrikoaren tarte dinamikoa, korronte efikaza bider sare elektrikoaren 230 V-en bidez biderkatuz gero).

Beheko bi irudietan mikrokontroladorearen sarreran agertzen den seinale analogikoa erakusten da, osziloskopio baten bidez neurtuta. Kasu honetan, zundaren bidez zirkulatzen den korrontea 40,7 A zen. Seinalearen itxura sinusoidala eta 50 Hz-eko maiztasuna egiaztatu daitezke. Ezkerreko seinaleari osagai jarraitua kendu diogu, baina eskuinekoan agertzen da. Osagai jarraitua (eskuineko seinalearen batez besteko balioa) 1,63 V da, eta programak mikrokontroladorearen PTE30 pinean ezartzen duen balioari (salida_offset=0.5) dagokio.

osziloErabilitako zunda anperemetrikoak (SCT-013-060) 1 V-60 A erlazioa du. Beraz, 40,7 volt efikaz zundaren bidez 40,7/60=0,678 mV bihurtzen da, zunda anperemetrikoaren konektorean, ezkerreko irudian agertzen den RMS motako ia balio bera (0,677 mV).

FRDM-KL25Z plataformaren manualean agertzen denez (14. orr.), KL25-aren ADC-ak VREFH=3,3 V eta VREFL=0 V erreferentziekin funtzionatzen du. Hori guztiz koherentea da eskuineko irudian agertzen den batez besteko balioarekin, 1,63 V; balio hori 3,3V/2 baita, gutxi gorabehera (salida_offset=0.5). ADC-aren sarreran seinale sinusoidal batek distortsiorik gabe izan daitekeen anplitude maximoa, beraz, 1,63 V izango da; horri 1,15 V-eko balio efikaza dagokio. SCT-030-060 zunda batean tentsio horri 69,16 A-ko korrontea dagokio, suposatuz zundaren linealtasuna 60 A-tik gora mantentzen dela. Korronte horri dagokion potentzia (kontsumoa) 15,9 kW.

Beraz, neurgailu honen bidez posible da 15,9 kW arteko (itxurazko) potentzia elektrikoak neurtzea, 230 V-eko sare elektriko batean.

Deje una respuesta

 

 

 

Puedes utilizar estos tags HTML

<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

Junio 2020
L M X J V S D
« May    
1234567
891011121314
15161718192021
22232425262728
2930