KL25Z mikrokontroladorean eta Seeed-eko WIFI 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 WIFI 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.

KL25-wifi

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 WIFI shield-arekin konektatzeko erabiliko ditugunak. Horretarako, zuloen gainetik konektoreen lerroak soldatuko ditugu, erdiko irudian ikusten den gisan. WIFI 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.

Kontuan hartu WIFI Shield-aren D15 pina (UART1-aren RX) D2 pinari lotuta dagoela, laranja koloreko kable baten bidez, eta D14 pina (UART1-aren TX) D3 pinari, berde kable berde baten bidez. Beste alde batetik (OSO GARRANTZITSUA), WIFI Shield-aren D2 eta D3 pinak FRDM-KL25Z plataformarekin konektatzeko hankak aterata daude, konexioa ekiditeko. Horrela, Shield-aren D2 eta D3 pinak (WIFI_TX eta WIFI_RX moduluan, komunikazio seriea egiteko erabiltzen direnak) KL25aren UART1-ari konektatuta geratzen dira. Konexio honen bidez ez da beharrezkoa WIFI moduluarekiko komunikazio seriea software bidez emulatu behar izatea.

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

WIFI shield-ak bere barruan RN171 WIFI modulu bat integratzen du. Shield-aren eskema hurrengo irudian erakusten da.

wifi shield

WIFI shield-a FRDM-KL25Z plataformarekin dituen kontaktuen bidez elikatzen da. Shield-ak bi konexio digital ditu (WIFI_RX, WIFI_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, WIFI_RX eta WIFI_TX pinak FRDM-KL25Z plataformaren sarrera/irteerako 8 portuen artean bi aukeratzeko, komunikazio seriea egiteko. Gure kasuan, honako bi konexio hauek egingo ditugu:

WIFI_RX -> D3 (D14 pinari konektatuta, UART1-aren TX kable berdearen bidez)

WIFI_TX – > D2 (D15 pinari konektatuta, UART1-aren RX kable laranjaren bidez)

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

 

KL25 mikrokontroladorearen programazioa eta WIFI shield-aren konfigurazioa

WIFI shield-aren konfigurazioa KL25 mikrokontroladorearen programazioaren bidez egiten da. Beraz, hurrengo pausua KL25-ean gure programa kargatzea izango da. Programa honek barruan WIFI shield-aren konfigurazioa eta programazioa dakartza. WIFI 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. Errepositorioa eskuratzeko esteka honetan sakatu behar dugu: https://developer.mbed.org/users/gbm/code/neurGAI_WIFI/. Gero, “Import this program” sakatu behar dugu.

 

mbed-neurGAI_WIFI

 

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-neurGAI_WIFI_kodea

 

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

Programa martxan jartzean, WIFI access point batekin (WAP) konektatzen da; identifikadorea (SSID) NeurGai” izango da, eta gakoa (preSharedKey) neurGai2016.

Komunikazio seriea WIFI Shield-arekin KL25Z-ren UART1 moduluaren bidez egiten da. Gure sisteman ez dugu KL25-aren UART0 erabili, 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).

KL25Z-ren barruen dagoen programaren abiaratzeak erabiltzaileak beste terminal batetik komunikazio abiaraztea eskatzen du (gure kasuan, beste terminala nurGAI aplikazioa martxan duen telefono mugikor bat izango da). Erabiltzaileak WIFI bidez neurketa-datuak jasotzeko aukera sakatu beharko du neurGAI aplikazioaren konfigurazio-menuaren bidez. neurGAI aplikazioaren kodea eskuragarri dago, esteka honetan: https://github.com/gorkabueno/NeurGai. Beste Android aplikazio sinpleago bat eskuragarri dago hurrengo estekan, WIFI bidez komunikazioa ezartzen duen eta komunikazioaren informazioa kontsola batean erakusten duen kodearekin: https://github.com/gorkabueno/wifiAP.

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
    {
        medidor.detach();
        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;
        medido = true;
        potencia_230V = (corriente_medida * pendiente + offset) * 230;
        sprintf(buffer, "#%i&%f*\n", num_medida, potencia_230V);
        DBG("%s %i", buffer, strlen(buffer));
        int numDatosEnviados = client.send_all(buffer, strlen(buffer));
        medido = false;
        num_medida++;
        medido_y_enviado = true;
        DBG("datos enviados : %i", numDatosEnviados);
    }
}

int main (void)
{
    DBG("Empezando...");
    wifly.init(); // use DHCP
    while (!wifly.connect()); // join the network
    DBG("\nLa direccion IP es %s", wifly.getIPAddress());
 
    server.bind(ECHO_SERVER_PORT);
    server.listen();
 
    DBG("\nEsperando conexion...");
    server.accept(client);
    DBG("\nServidor aceptado...");
    wait(1);    //si no se le mete un pequeño retardo, se queda colgado. También vale con el DBG anterior
    
    //configura el offset de voltaje a sumar a la sonda
    salida_offset = 0.5;
    
    while (true) {
        DBG("Esperando dato...");
        int n = client.receive(buffer, sizeof(buffer));
        if (n <= 0continue;
        DBG("Recibido dato: %s Longitud %i", buffer, n);
        buffer[n] = 0;
        if (strcmp(buffer, "Pot?\n") == 0) {
            // activa el muestreo
            medido_y_enviado = false;
            medidor.attach(&medir, 1.0/frecuencia_muestreo);
        }
            
        // spin in a main loop. medidor will interrupt it to call medir
        while (!medido_y_enviado) 
            wait(.1);
    }
}

 

WIFI bidezko kanala konfiguratu ondoren, KL25z-a geldirik geratzen da, “Pot?\n” karaktere-katea Android aplikaziotik jaso arte. Horrek korronte elektrikoaren seinalearen laginak zunda anperimetrikoaren bidez hartzea abiarazten du.

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.

No se admiten más comentarios.

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