sistema de control d’una font d’alimentaciÓ de...

174
SISTEMA DE CONTROL D’UNA FONT D’ALIMENTACIÓ DE LABORATORI MEMÒRIA DESCRIPTIVA AUTOR: Albert Marsal Vinadé. DIRECTOR: Xavier Vilanova Salas. DATA: Desembre/2004.

Upload: others

Post on 09-Aug-2020

6 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: SISTEMA DE CONTROL D’UNA FONT D’ALIMENTACIÓ DE …deeea.urv.cat/public/PROPOSTES/pub/pdf/361pub.pdfhaurà de ser bastant òptim en quant a connexions dels components per poder

SISTEMA DE CONTROL D’UNA FONT D’ALIMENTACIÓ DE LABORATORI

MEMÒRIA DESCRIPTIVA

AUTOR: Albert Marsal Vinadé.

DIRECTOR: Xavier Vilanova Salas.

DATA: Desembre/2004.

Page 2: SISTEMA DE CONTROL D’UNA FONT D’ALIMENTACIÓ DE …deeea.urv.cat/public/PROPOSTES/pub/pdf/361pub.pdfhaurà de ser bastant òptim en quant a connexions dels components per poder

MEMÒRIA DESCRIPTIVA

2

ÍNDEX 1 Introducció ........................................................................................................... 4 1.1-Objecte del projecte .......................................................................................... 4 1.2-Perfil de requeriments ...................................................................................... 4 2 Objectius del disseny ......................................................................................... 5 2.1-Descripció de necessitats................................................................................... 5 2.2-Eines utilitzades ................................................................................................ 6 3 Descripció de l'equip.......................................................................................... 6 3.1- Descripció funcional......................................................................................... 6 3.2-Modes de funcionament.................................................................................... 8 3.2.1-Commutadors i indicadors ......................................................................... 8 3.3-Diagrama de blocs............................................................................................. 9 3.3.1-Configuració ............................................................................................ 10 3.3.2-Adquisició i control .................................................................................. 11 3.3.3-Transmissió .............................................................................................. 12 4 Descripció del hardware ................................................................................. 13 4.1-Mòdul de control de la font Amrel ................................................................. 13 4.1.1-Microcontrolador ..................................................................................... 14 4.1.2-Alimentació .............................................................................................. 15 4.1.3-Commutadors i indicadors ....................................................................... 16 4.1.4-Memòria EEPROM externa ..................................................................... 17 4.1.5-Comunicació UART ................................................................................. 18 4.1.6-Filtre passabaix ........................................................................................ 19 4.1.7-Convertidor analògic/digital..................................................................... 19

Page 3: SISTEMA DE CONTROL D’UNA FONT D’ALIMENTACIÓ DE …deeea.urv.cat/public/PROPOSTES/pub/pdf/361pub.pdfhaurà de ser bastant òptim en quant a connexions dels components per poder

MEMÒRIA DESCRIPTIVA

3

5 Descripció del software ................................................................................... 21 5.1-Introducció ...................................................................................................... 21 5.2-Software PC .................................................................................................... 21 5.2.1-Configuració port sèrie RS-232................................................................ 22 5.2.2-Configuració del PIC ............................................................................... 23 5.2.3-Configuració del senyal consigna ............................................................ 25 5.2.3.1-Enviar consigna ................................................................................ 27 5.2.3.2-Full de calibratge .............................................................................. 29 5.2.4-Recepció de dades..................................................................................... 31 5.2.5-Tractament i visualització de les dades..................................................... 32 5.2.6-Ajuda de funcionament ............................................................................ 34 5.3-Software del PIC16F876 ................................................................................. 34 5.3.1-Inicialitzacions ......................................................................................... 35 5.3.2-Configuració: recepció de les dades del PC.............................................. 36 5.3.3-Control de la font i adquisició de mostres de corrent ............................... 38 5.3.4-Transmissió de dades ............................................................................... 41 5.3.5-Interrupcions............................................................................................ 42 6 Bibliografia ......................................................................................................... 44

Page 4: SISTEMA DE CONTROL D’UNA FONT D’ALIMENTACIÓ DE …deeea.urv.cat/public/PROPOSTES/pub/pdf/361pub.pdfhaurà de ser bastant òptim en quant a connexions dels components per poder

MEMÒRIA DESCRIPTIVA

4

1 Introducció 1.1-Objecte del projecte

En el laboratori 334 del campus Sescelades de la Universitat Rovira i Virgili, es pretén automatitzar el funcionament d’una font de tensió/corrent controlada per tensió. El voltatge/intensitat de sortida es pot obtenir actuant manualment sobre els comandaments de la font o bé utilitzant una font de tensió auxiliar controladora. Actualment, amb l’ajut d’un PC equipat amb una tarja d’adquisició amb sortida analògica i un programa en Matlab, es pot establir la consigna de la tensió a generar per la font mentre podem monitoritzar l’evolució del corrent subministrat pel sistema. La utilització de tot un PC només per realitzar aquestes tasques no queda del tot justificada.

En aquest projecte s’ha buscat una solució per a poder alliberar l’ordinador

personal de les esmentades funcions, poder oferir un control automàtic de la tensió a la sortida i permetre a l’usuari una visualització còmoda i ràpida de la progressió que ha sofert la potència subministrada per la font en l’últim període de funcionament. 1.2-Perfil de requeriments La font de tensió contínua que s’utilitza en el projecte és un dispositiu que permet una programació remota o manual del corrent, o bé del voltatge, a la sortida. L’estat d’ambdós paràmetres pot ser consultat mitjançant els connectors de programació i monitorització posteriors. La potència màxima que pot subministrar és de 1.2 kW, amb uns límits de 300 volts (Vdc) i 4 ampers (Adc). Amb dos displays en el panell frontal l’usuari pot veure, en qualsevol moment, l’estat d’aquestes variables a la sortida.

L’objecte de control que pretén el present projecte és la tensió que subministrarem a la sortida de la font. Aquesta disposa d’un rang de 0 fins a 300 volts. La regulació es fa mitjançant una entrada de 0 a 5 volts que proporcionaran, de forma lineal, l’interval que hem comentat.

El caràcter dels senyals de sortida ha de poder ser molt flexible, és a dir, les

consignes podran ser constants o variants en el temps. Poden ser interessants senyals periòdics de curta o llarga durada que permetran diferents tipus d’anàlisi. L’estabilitat serà també un factor important a tenir en compte.

Per tal de poder realitzar estudis concrets, és necessari conèixer els perfils de

conductivitat que certs dispositius o sistemes presenten en diferents situacions. La tensió serà una variable coneguda, ja que representa el que l’usuari subministra directament. El que ens cal, doncs, és poder prendre mostres d’intensitat i emmagatzemar-les per tenir la possibilitat de consultar-les posteriorment. El corrent de sortida és linealment proporcional a una tensió de 0 a 5 volts que la font subministra en un connector posterior perquè pugui ser llegida fàcilment.

L’obtenció de dades ha de ser un procés de durada variable, podent arribar a períodes de fins a 48 hores ininterrompudes. L’objecte de l’anàlisi discrimina les possibles variacions instantànies que es puguin produir, i és per això que el temps entre mostres serà preferiblement d’entre 2 i 0.5 segons.

Page 5: SISTEMA DE CONTROL D’UNA FONT D’ALIMENTACIÓ DE …deeea.urv.cat/public/PROPOSTES/pub/pdf/361pub.pdfhaurà de ser bastant òptim en quant a connexions dels components per poder

MEMÒRIA DESCRIPTIVA

5

Interessa que totes les dades obtingudes siguin fàcilment transferibles a un ordinador personal perquè aquest les pugui processar d’una manera adequada. Un software especialment creat que permeti una comunicació serà el component final del disseny. Per tot això, serà necessari utilitzar un port de comunicacions que no estigui obsolet i que alhora sigui compatible amb qualsevol PC.

Les necessitats d’espai en un laboratori requereixen un mòdul totalment portable i de tamany reduït, que pugui funcionar normalment sense cap ordinador. 2 Objectius del disseny 2.1-Descripció de necessitats Pel present disseny d’un sistema de control per una font de tensió comercial AMREL (SPS 300-4), s’ha hagut d’utilitzar un hardware capaç de controlar i prendre mostres a intervals periòdics, i ha estat necessari el desenvolupament d’un software, per un PC, que pugui configurar i rebre dades d’aquest hardware de manera senzilla. La font anirà controlada per un sistema digital que li subministri una tensió de 0 a 5 volts de forma contínua. Per fer-ho, filtrarem el senyal provinent d’un modulador d’amplada de pols (PWM). Aquest senyal subministrat hauria de ser idealment continu, molt estable i amb un arrissament gairebé inexistent perquè s’ha de tenir en compte que l’amplificació de la font és força gran. Les mostres de corrent que pretenem emmagatzemar s’obtenen de forma analògica en forma de tensió, directament d’un dels connectors de la font. És necessari un convertidor analògic-digital perquè aquestes dades puguin ser llegides, tractades i enviades a qualsevol sistema digital. De forma paral·lela, tot element de mostreig ha de constar d’una base de temps precisa que doni rigor al procés. Serà necessari, doncs, un temporitzador amb capacitat per interrompre el sistema digital supervisor. Totes les dades obtingudes en el procés s’hauran de guardar en un tipus de memòria no volàtil, que pugui ser escrita i esborrada al llarg de molts cicles, i que tingui un tamany adequat a les necessitats que es requereixen. Alhora, es disposarà de la possibilitat de poder realitzar ampliacions per satisfer futurs requeriments. Gairebé totes aquestes funcions que s’han anomenat anteriorment les englobarà un microcontrolador que serà, per tant, l’eix sobre el que es mourà tot el disseny. Més concretament ens referim a un PIC. La informació que hem emmagatzemat la transferirem a un PC perquè aquest la pugui tractar d’una manera més personalitzada. Serà doncs una comunicació sèrie tipus RS-232, ja que actualment es pot adaptar a la gran majoria dels ordinadors.

Amb un software dissenyat expressament, podrem rebre de forma senzilla totes les dades. Aquest programa també ens facilitarà els processos de programació del micro, ja que pretenem poder controlar el temps d’adquisició i la forma del senyal de consigna, així com el seu període. Les consignes les definirà l’usuari amb l’ajuda del programa Excel de Microsoft.

Page 6: SISTEMA DE CONTROL D’UNA FONT D’ALIMENTACIÓ DE …deeea.urv.cat/public/PROPOSTES/pub/pdf/361pub.pdfhaurà de ser bastant òptim en quant a connexions dels components per poder

MEMÒRIA DESCRIPTIVA

6

Per poder disposar d’un funcionament autònom, s’incorporaran diferents interruptors que permetran controlar els diversos modes de funcionament de l’equip. Amb l’ajuda d’uns leds, podrem conèixer quin és l’estat del microcontrolador i quina operació està realitzant en aquell moment.

Tot el mòdul s’haurà d’alimentar amb una tensió que pugui ser fàcilment subministrable per qualsevol de les fonts que trobem als laboratoris de la URV.

Tota la part electrònica del disseny anirà protegida per una coberta de PVC, o de

qualsevol altre material aïllant, per poder resguardar l’equip de possibles cops. 2.2-Eines utilitzades Tot el material utilitzat durant el procés de disseny i posada en funcionament d’aquest projecte ha estat facilitat per la Universitat Rovira i Virgili. Amb això és vol remarcar la voluntat d’aprofitar els recursos disponibles, sense deixar de banda la possibilitat d’obtenir bons resultats. Tota la part del disseny electrònic anirà muntada sobre una placa de circuit imprès que haurem projectat amb l’ajuda del programa Orcad. La tecnologia de que disposa el centre no permet elaborar plaques amb més de dos capes, per tant, el disseny haurà de ser bastant òptim en quant a connexions dels components per poder evitar problemes. Pel que fa al programa que ha de córrer en el PC, es pretén que sigui fàcil d’utilitzar i permeti a l’ordinador realitzar altres tasques. El Visual Basic és un compilador que funciona sota entorn Windows i permet crear programes amb estructures i modes de funcionament amb els que la major part d’usuaris es pot trobar familiaritzat. El control de les interrupcions dins un sistema operatiu multitasca es resol eficientment amb el Visual Basic, sempre que es tracti d’operacions senzilles (com en el nostre cas). Tot el software que s’ha d’inserir al microcontrolador el podem simular i ensamblar amb l’ajuda del programa MPLAB. Havent-hi la possibilitat d’utilitzar llenguatges de més alt nivell, s’ha premiat l’opció d’utilitzar directament el llenguatge màquina com a eina per poder gestionar de manera més òptima els recursos del PIC. 3 Descripció de l’equip 3.1- Descripció funcional Com s’ha dit anteriorment, tot el disseny d’aquest projecte es mou al voltant de les possibilitats que pot oferir un microcontrolador com a element de control i de comunicació amb d’altres sistemes digitals. Tenint en compte les necessitats, s’ha escollit el PIC16F876 de la casa Microchip per la realització d’aquest projecte. Recordem, una vegada més, que els objectius principals que es requereixen són el mostreig del corrent a la sortida de la font (en forma de tensió) i el control del voltatge. Per ambdós efectes, és necessari poder disposar d’una configuració que permeti escollir intervals entre mostres, senyals de sortida, durada total del procés...

Page 7: SISTEMA DE CONTROL D’UNA FONT D’ALIMENTACIÓ DE …deeea.urv.cat/public/PROPOSTES/pub/pdf/361pub.pdfhaurà de ser bastant òptim en quant a connexions dels components per poder

MEMÒRIA DESCRIPTIVA

7

Tots aquests paràmetres podran ser manipulats per l’usuari amb l’ajuda d’un ordinador i del software dissenyat. Les consignes de sortida de la font s’establiran mitjançant un full de càlcul i, d’aquesta manera, es permetrà escollir senyals amb un perfil totalment arbitrari. Tota aquesta informació s’enviarà al PIC utilitzant una comunicació sèrie asíncrona RS-232. Per adaptar les tensions pròpies d’aquest protocol als senyals TTL que requereix el microcontrolador, s’utilitzarà un integrat MAX232 que farà les funcions d’interfície entre les dos parts. El PIC disposa d’una memòria EEPROM interna que, tot i tenir una capacitat baixa, emmagatzemarà els diferents paràmetres de la configuració. Aquest tipus de memòria no és volàtil i, per tant, és ideal per poder mantenir aquestes dades després d’una desconnexió i permetre no haver de reconfigurar l’equip un cop ja s’ha fet. Perquè un sistema digital pugui representar un senyal periòdic concret, és necessari que aquest hagi estat prèviament discretitzat. En el nostre cas, tenint aquest senyal emmagatzemat a la EEPROM i només ens cal treure’l a través del PWM del PIC. Aquest ens proporcionarà un pols rectangular per cada mostra, amb un valor mig molt semblant al valor discret de tensió que desitgem. Amb un filtrat auxiliar adient el transformarem en un senyal estable i continu. Un timer ens ajudarà a controlar el ritme de llançament i, per tant, el període total. El mateix temporitzador que hem utilitzat pel procés anterior l’emprarem alhora per prendre mostres de corrent a intervals constants. El PIC consta d’un convertidor analògic-digital de 10 bits que realitzarà les esmentades funcions d’adquisició. Degut a que la capacitat de memòria del PIC és del tot insuficient, tan bon punt capturem una mostra l’enviarem a una EEPROM externa auxiliar. La comunicació es realitzarà a través del port sèrie síncron (SSP) amb el protocol I2C que permet la gestió de fins 8 dispositius esclaus (memòries) per part d’un master (en aquest cas el PIC). De moment no es requereix aquesta capacitat però es deixaran les connexions preparades per poder-se aplicar en qualsevol moment. Utilitzant una vegada més la comunicació RS-232, bolcarem tota la informació que s’ha recollit en el procés i l’enviarem a l’ordinador. Amb el programa dissenyat pel present projecte, serà interpretada de manera adequada, la podrem visualitzar i finalment serà emmagatzemada en un fitxer. La idea és que l’usuari pugui disposar de tota la informació generada durant l’execució i configuració en un full de càlcul perquè, d’aquesta forma, sigui còmodament processable. La font de tensió AMREL obté la tensió a la sortida linealment a partir d’una entrada de 0 a 5 volts i fa el mateix amb el corrent. A la pràctica això no és del tot cert i es nota una certa desviació quant més propers ens trobem dels límits. Per compensar aquest efecte per software, utilitzarem novament un full de càlcul amb parelles de valors entrada/sortida, obtinguts en un procés previ de calibratge, que ens ajudaran a atenuar-lo (consultar apartat 5 de la memòria descriptiva).

El PIC16F876 disposa de 3 ports d’entrada/sortida amb 8 bits cadascun. Un d’aquests ports ens servirà per disposar alhora d’interruptors, per poder operar en els diferents modes de funcionament, i d’indicadors lluminosos (en el nostre cas leds), que mostraran el final i l’inici d’aquests processos.

Page 8: SISTEMA DE CONTROL D’UNA FONT D’ALIMENTACIÓ DE …deeea.urv.cat/public/PROPOSTES/pub/pdf/361pub.pdfhaurà de ser bastant òptim en quant a connexions dels components per poder

MEMÒRIA DESCRIPTIVA

8

3.2-Modes de funcionament El mòdul de control ha de ser capaç de funcionar independentment, sense la necessitat d’estar permanentment connectat a cap ordinador. Amb aquesta consideració prèvia, es justifiquen els següents modes de funcionament:

-Configuració: el PIC espera que li arribin pel port sèrie tots els paràmetres que requerirà durant el funcionament normal. Aquests són els intervals de temps de mostreig de corrent i de llançament de mostres al PWM pel control de tensió a la sortida, el conjunt de valors discrets que formen un període d’aquest senyal i la durada total del procés d’adquisició. Totes aquestes dades seran retingudes en posicions concretes de la EEPROM interna. -Adquisició i control: es llegeixen els paràmetres de configuració més recents, s’estableixen i s’inicia el mode de funcionament normal, és a dir, es prenen mostres d’intensitat (equivalents a 0-5 volts) alhora que es controla la tensió de sortida de la font. Els temporitzadors són els encarregats d’administrar tot aquest procés que finalitzarà quan s’hagi exhaurit el temps de durada total que haguem programat. -Transmissió: amb el software del PC obert, enviarem pel port sèrie totes les dades recollides a la EEPROM externa. Els commutadors que composen el mòdul serveixen per poder accedir directament a cadascun dels anteriors modes de funcionament. Quan s’inicia una execució, el microcontrolador espera a que algun dels commutadors canviï d’estat per començar a realitzar les funcions pròpies d’aquell mode. Quan aquest finalitza, podrem accedir al següent canviant novament l’estat del commutador corresponent, sense poder tirar enrere ni saltar l’ordre d’execució normal. 3.2.1-Commutadors i indicadors Els cinc commutadors que integren l’equip són de dos posicions fixes i activen les següents funcions: -Configuració del PIC16F876. -Adquisició i control de les variables de la font. -Transmissió de les últimes dades obtingudes. -Reinici del programa intern del microcontrolador. -Reinici del programa i de tots els registres del microcontrolador. Cadascun dels tres primers commutadors anteriors està associat a un indicador lluminós que, amb el seu estat, senyalarà si el procés al que està associat s’està executant o ja ha finalitzat, això és, si es troba encès estarà en execució d’aquell mode i si està apagat ja haurà acabat i restarà en espera. A part, disposem de dos indicadors més que en estat lluminós assenyalen respectivament l’existència de subministrament elèctric i l’activitat interna del microcontrolador. En una execució normal, doncs,

Page 9: SISTEMA DE CONTROL D’UNA FONT D’ALIMENTACIÓ DE …deeea.urv.cat/public/PROPOSTES/pub/pdf/361pub.pdfhaurà de ser bastant òptim en quant a connexions dels components per poder

MEMÒRIA DESCRIPTIVA

9

haurem de veure sempre dos leds encesos, sent tres en cas que haguem canviat l’estat d’algun dels tres commutadors de programa i, per tant, ens trobem en plena execució d’un dels modes. 3.3-Diagrama de blocs

fig.1 Diagrama de blocs del mòdul de control Els elements de la figura anterior són els més rellevants i els que més hem destacat en apartats anteriors. Llevat del PC i de la font, totes les altres parts les trobarem juntes en un circuit imprès que serà, en definitiva, el mòdul de control.

Sense entrar a detallar la importància d’altres parts del microcontrolador que intervenen plenament en el procés i que seran objecte d’estudi més detallat, podem desglossar tot el mòdul en les següents parts: -Temporitzadors: -Timer 0: administra el ritme amb el que adquireix el convertidor A/D.

-Timer1: assegura que, cada cop que es desitja fer una nova conversió, el bloc A/D estigui a punt. -Timer 2: controla la durada del pols de sortida del PWM i la seva freqüència.

-Memòries:

-EEPROM interna: guarda tota la informació necessària per poder controlar la font tal i com l’usuari hagi triat. -EEPROM I2C externa: conté l’últim conjunt de mostres de corrent provinents del convertidor.

-Convertidors: -A/D: transforma les tensions analògiques de 0 a 5 volts, a digitals.

-MAX232: adapta el rang de tensió procedent del port sèrie, a valors adequats per ser llegits per un microcontrolador.

TIMER 2

TIMER 1

TIMER 0

PWM

+

0-5 V

FILTRE PASSABAIX

FONT AMREL

A/D

MSSP I2C

EEPROM 24LC256

EEPROM

UART

CONTROL

ADQUISICIÓ

TRANSMISSIÓ

CONFIGURACIÓ

PC

MAX232

PIC16F876

Page 10: SISTEMA DE CONTROL D’UNA FONT D’ALIMENTACIÓ DE …deeea.urv.cat/public/PROPOSTES/pub/pdf/361pub.pdfhaurà de ser bastant òptim en quant a connexions dels components per poder

MEMÒRIA DESCRIPTIVA

10

-MSSP I2C: és el mòdul encarregat de gestionar la comunicació sèrie síncrona entre el PIC i la memòria externa. -PWM: genera un pols rectangular de 5 volts d’amplitud, amb un cicle de treball i freqüència controlats pel Timer 2. Modificant aquest cicle, obtindrem més o menys tensió mitja. -Filtre passabaix: es queda amb el valor mig del senyal que surt del PWM i el manté constant. En definitiva, transforma un pols rectangular d’entrada en una sortida en valor continu. -UART: s’encarrega de realitzar la comunicació sèrie asíncrona entre l’ordinador i el PIC16F876. -Commutadors: manegen l’ordre d’execució dels diferents modes de funcionament. Amb tot això, en els següents apartats ens centrarem en conèixer quines són les parts que intervenen en cada procés i com s’interrelacionen. 3.3.1-Configuració Perquè aquest procés tingui lloc, és necessari que l’usuari tingui el PC engegat i estigui executant el software del projecte. S’han d’omplir tots els paràmetres que requereix la configuració i, a més, els valors discrets de la consigna de sortida han d’estar a punt en un full de càlcul. Si es creu necessari, podem demanar que el programa utilitzi el full de calibratge per obtenir millors resultats. Amb el port sèrie lliure, totes les dades seran enviades per l’ordinador, transformades mitjançant l’integrat MAX232 i llegides a través del mòdul UART del microcontrolador, sempre i quan haguem permès aquestes operacions a través del commutador corresponent. La informació passarà directament a la EEPROM interna i hi restarà fins que una configuració posterior l’esborri. Basant-nos en el diagrama de blocs general, l’esquema més concret per aquesta part es pot veure a la Figura 2.

Page 11: SISTEMA DE CONTROL D’UNA FONT D’ALIMENTACIÓ DE …deeea.urv.cat/public/PROPOSTES/pub/pdf/361pub.pdfhaurà de ser bastant òptim en quant a connexions dels components per poder

MEMÒRIA DESCRIPTIVA

11

fig.2 Diagrama de blocs del sistema de configuració

3.3.2-Adquisició i control Per aquest procés el mòdul pot operar independentment, ja que no ha de realitzar cap comunicació amb sistemes externs. D’aquesta manera, i amb una configuració ja emmagatzemada, canviant l’estat del commutador de control i adquisició la EEPROM interna enviarà les dades de temps als controls dels temporitzadors. En l’adquisició, el Timer0 governarà el ritme en el que es prendran les mostres (en tensió) corresponents al corrent de sortida de la font. Aquestes, un cop subministrades pel convertidor A/D que alhora està auxiliat pel Timer1, són enviades a través del mòdul SSP a la EEPROM externa d’on no s’esborraran fins que un nou cicle hi escrigui a sobre. Durant el control de la tensió de sortida, serà el Timer0 qui novament dictarà el temps en que les mostres programades han de ser llançades. D’acord amb el valor de la mostra, el Timer2 modificarà el percentatge de període (temps) en que el PWM restarà a nivell alt i nivell baix respectivament. Així generarem una ona rectangular periòdica que serà filtrada en una fase final per poder subministrar un voltatge constant. Si ho recordem, un dels paràmetres de la configuració era el temps total que preteníem que durés tot el procés descrit anteriorment. Doncs bé, amb la base de temps amb que està programat el Timer0 simularem per software un rellotge que serà qui, en definitiva, conclourà tots els esdeveniments.

EEPROM

UART

CONFIGURACIÓ

MAX232

PIC16F876

PC

SOFTWARE PROJECTE

FULL CALIBRATGE

EDICIÓ CONFIG. I CONSIGNA

PORT SÈRIE

Page 12: SISTEMA DE CONTROL D’UNA FONT D’ALIMENTACIÓ DE …deeea.urv.cat/public/PROPOSTES/pub/pdf/361pub.pdfhaurà de ser bastant òptim en quant a connexions dels components per poder

MEMÒRIA DESCRIPTIVA

12

fig.3 Diagrama de blocs del sistema d’adquisició i control

3.3.3-Transmissió Quan ha capturat el nombre de mostres necessari, el microcontrolador espera permís del commutador per poder enviar tota la informació al PC. Així doncs, executant novament el software del projecte, traduirem les dades rebudes i les col·locarem en un full de càlcul. Com ja s’ha comentat, mitjançant un full de calibratge es presenta l’opció de poder compensar l’error de no linealitat que presenta la font AMREL. En quan al PIC, un cop rebi l’ordre d’enviament, llegirà una per una les dades procedents de la EEPROM externa alhora que les anirà transmetent pel port sèrie. Les tensions seran adaptades a través del MAX232. El diagrama d’aquesta darrera part es pot veure en la Figura 4.

fig.4 Diagrama de blocs del sistema de transmissió

MSSP I2C

EEPROM 24LC256

UART

TRANSMISSIÓ

MAX232

PIC16F876

PORT SÈRIE

SOFTWARE PROJECTE

FITXER SORTIDA

FULL CALIBRATGE

PC

TIMER 2

TIMER 1

TIMER 0

PWM

+

0-5 V

FILTRE PASSABAIX

FONT AMREL

A/D

MSSP I2C

EEPROM 24LC256

EEPROM

CONTROL

ADQUISICIÓ

PIC16F876

Page 13: SISTEMA DE CONTROL D’UNA FONT D’ALIMENTACIÓ DE …deeea.urv.cat/public/PROPOSTES/pub/pdf/361pub.pdfhaurà de ser bastant òptim en quant a connexions dels components per poder

MEMÒRIA DESCRIPTIVA

13

4 Descripció del hardware 4.1-Mòdul de control de la font Amrel Tots els components hardware que s’utilitzen en el disseny d’aquest projecte es trobaran inserits en una sola placa de circuit imprès de dos capes, segons l’esquema de la figura 5. Seguint les explicacions d’apartats anteriors, és lògic que desglossem tot el mòdul en diferents parts tenint en compte la funcionalitat. Així tenim: -Microcontrolador: format pel PIC16F876, el cristall de quars Y1 i els condensadors C6 i C7. El PIC es troba sobre un sòcol per poder-lo treure en cas que s’hagués de fer alguna modificació de software. -Alimentació: mitjançant el regulador de tensió LM7805, els condensadors C16 i C15, el led D6 i el connector J2. -Commutadors i indicadors: constituït pel conjunt D1, D2, D3 i D4 de leds, i pels interruptors JP1, JP2, JP3, JP4 i JP5, amb les resistències R2 i R12 associades. -Memòria externa: format per dos resistències R4 i R9, i un condensador C13. De les vuit memòries EEPROM 24LC256 que constitueixen els elements U5, U8, U9, U10, U12, U14, U15 i U16, només trobem físicament el U5 ja que els altres són sòcols que preveuen futures ampliacions. -Comunicació UART: constituïda pel MAX232 (element U3), els condensadors electrolítics C1, C2, C3, C4 i C5, i el connector DB9. -Filtre passabaix: constituït pel conjunt de resistències R3, R5, R6, R7 i R8, els condensadors electrolítics C8, C9, C10, C11 i C12, i els amplificadors operacionals U6, U11A i U11B. La sortida d’aquest circuit la trobem al connector J1.

fig.5 Esquema de connexions del mòdul de control

Page 14: SISTEMA DE CONTROL D’UNA FONT D’ALIMENTACIÓ DE …deeea.urv.cat/public/PROPOSTES/pub/pdf/361pub.pdfhaurà de ser bastant òptim en quant a connexions dels components per poder

MEMÒRIA DESCRIPTIVA

14

Cadascun d’aquests blocs està connectat al microcontrolador. En els següents apartats veurem amb més detall quines són les característiques més rellevants de cada component i com en traiem profit. 4.1.1-Microcontrolador Per la realització d’aquest projecte era necessària la utilització d’un microcontrolador programable, que fos capaç de realitzar operacions de manera síncrona mitjançant interrupcions, que tingués capacitat de comunicació amb altres dispositius digitals exteriors i que sabés interpretar senyals analògiques també externes. Per tot això i d’altres motius que seran justificats en altres capítols, s’ha triat un PIC16F876 que presenta les següents característiques com a més rellevants: -CPU tipus RISC: només 35 instruccions senzilles de 14 bits que s’executaran durant un o dos cicles d’instrucció (equivalent a 4 o 8 cicles de rellotge). -Capacitat per operar a 20 MHz: el model escollit pel present projecte només funciona correctament amb rellotges de fins a 4 MHz. Això proporciona cicles d’instrucció inferiors a 1 µs. -Memòria de programa tipus FLASH: amb capacitat per emmagatzemar 8192 instruccions pertanyents al codi de programa. -Memòria RAM: 368 bytes disponibles per guardar diferents tipus de variables generades en temps d’execució. -Memòria EEPROM: amb 256 bytes per retenir informació indefinidament. -Capacitat per gestionar 13 fonts d’interrupció internes i externes. -8 nivells de pila hardware: capacitat per manejar fins a 8 subrutines nidificades. -Ports entrada/sortida: 3 ports de 8 bits (pins) cadascun. -Programació ICSP: permet ser programat de forma sèrie mitjançant dos pins. -Temporitzadors: consta de 3 timers dos de 8 i un de 16 bits, amb prescaler i amb capacitat per generar interrupcions a la CPU. -ADC: convertidor analògic/digital de 5 canals amb una resolució de 10 bits. -2 mòduls de Captura-Comparació-PWM: moduladors d’amplada de pols amb 10 bits de resolució. La captura de temps i la comparació es realitzen amb resolucions de 16 bits. -SPI o I2C: 2 tipus de comunicació sèrie síncrona que, en el darrer mode, permet actuar com a mestre o esclau. -UART: comunicació sèrie asíncrona.

Page 15: SISTEMA DE CONTROL D’UNA FONT D’ALIMENTACIÓ DE …deeea.urv.cat/public/PROPOSTES/pub/pdf/361pub.pdfhaurà de ser bastant òptim en quant a connexions dels components per poder

MEMÒRIA DESCRIPTIVA

15

El PIC16F876 consta de 28 pins; 2 han d’estar connectats a la tensió de referència (massa), mentre que un tercer s’ha de trobar dins un rang de 4 a 5,5 volts respecte els dos anteriors perquè puguem establir una correcta alimentació. Els pins associats a un buffer TTL (gairebé la majoria de pins d’entrada/sortida) consideraran un 0 lògic qualsevol entrada dins els marges de la tensió de referència i 0.15 vegades la tensió d’alimentació (VDD), mentre que tensions que es moguin entre 0,25 vegades VDD i VDD seran enteses com un 1 lògic. Si estan configurats com a sortides, obtindrem tensions de, com a mínim, VDD – 0,7 V i de 0,6 V, com a màxim, per representar un 1 i un 0 respectivament.

Una part important del disseny recau en les característiques del rellotge on es recolza tot el funcionament intern del microcontrolador. Com es pot apreciar a la figura 6, s’utilitza en aquesta ocasió un cristall de quars de 4 MHz acompanyat per dos condensadors de 15 pF que fan les funcions de compensació de fase per contrarestar l’efecte del inversor intern. Encara que es repeteixi en l’apartat 4.1.3, és important subministrar una tensió semblant a VDD a la pota de reset del PIC ja que, d’altra manera, no podria començar l‘execució de les instruccions programades.

fig.6 Esquema de connexions bàsiques del microcontrolador

4.1.2-Alimentació La major part dels integrats que s’utilitzen en aquest disseny requereixen tensions de 5 volts respecte a una massa, tret dels amplificador operacionals als que s’ha de subministrar una tensió simètrica (mirar apartat 4.1.6). Amb aquestes consideracions, s’ha decidit utilitzar un connector de 3 vies per poder canalitzar l’alimentació provinent de qualsevol font simètrica de laboratori capaç de subministrar més de ±7 volts. El regulador de tensió LM7805 reduirà aquesta tensió i subministrarà un valor de +5 volts

Page 16: SISTEMA DE CONTROL D’UNA FONT D’ALIMENTACIÓ DE …deeea.urv.cat/public/PROPOSTES/pub/pdf/361pub.pdfhaurà de ser bastant òptim en quant a connexions dels components per poder

MEMÒRIA DESCRIPTIVA

16

molt estables a la gran majoria d’elements. Amb als condensadors C16 i C15 millorarem la resposta transitòria del regulador i amb el led sabrem si existeix el subministrament. És necessari disposar d’una tensió estable i el més pròxima als 5 volts possible, ja que el convertidor del PIC16F876 opera amb aquest valor com a referència. En aquest sentit cal destacar que el regulador presenta una variació mitja de 4 mV a la sortida per cada volt que variem a l’entrada, i que en condicions normals modifica la tensió de sortida en 9 mV quan el corrent subministrada a la càrrega varia 1 amper. El regulador LM7805 és capaç de portar tensions de 7 a 35 volts a uns valors propers als 5 i pot subministrar intensitats superiors a 1 amper, amb pics que poden arribar als 2,2. Amb tot això assegurem, doncs, unes condicions molt acceptables pel funcionament adequat de tot el mòdul.

fig.7Alimentació mòdul

4.1.3-Commutadors i indicadors

fig.8 Commutadors i indicadors

Aquest conjunt està format per cinc commutadors lliscants de dos posicions que activen les funcions descrites en l’apartat 3.2.1. L’interruptor de reset està relacionat

Page 17: SISTEMA DE CONTROL D’UNA FONT D’ALIMENTACIÓ DE …deeea.urv.cat/public/PROPOSTES/pub/pdf/361pub.pdfhaurà de ser bastant òptim en quant a connexions dels components per poder

MEMÒRIA DESCRIPTIVA

17

amb la resistència de pull-up R2, mentre que R12 fa les mateixes funcions per la resta d’interruptors. Els leds es troben connectats directament amb les potes del microcontrolador, ja que tenen un consum de 10 mA quan la tensió subministrada és de 5 volts. 4.1.4-Memòria EEPROM externa La comunicació sèrie síncrona I2C que el microcontrolador estableix amb les memòries externes es realitza únicament mitjançant dos línies: una transmet les dades (SDA) i l’altra emet una senyal de sincronització o clock (SCL) controlada pel PIC. Ambdós requereixen resistències de pull-up i, per tal efecte, trobem les resistències R4 i R9. Amb el condensador C13 connectat a la línia SDA, ajustem la capacitat del bus.

fig.9 Esquema de connexions de la EEPROM externa

Per aquest projecte s’ha escollit una memòria model 24LC256 de la casa Microchip que presenta una configuració de potes igual al de molts altres models de memòries I2C. La que s’ha utilitzat disposa de les següents característiques: -Capacitat per emmagatzemar fins a 32768 bytes, és a dir, 256 kbits tal i com indica el model. -La comunicació accepta rellotges de fins a 400 kHz, tot i que s’acostuma a treballar amb velocitats de 100 o 400 kHz. -Permet la connexió de fins a 8 dispositius en cascada, és a dir, podem arribar a multiplicar la capacitat 8 vegades. -Retenció de dades superior als 200 anys, amb la possibilitat de realitzar més d’un milió de cicles d’escriptura.

Page 18: SISTEMA DE CONTROL D’UNA FONT D’ALIMENTACIÓ DE …deeea.urv.cat/public/PROPOSTES/pub/pdf/361pub.pdfhaurà de ser bastant òptim en quant a connexions dels components per poder

MEMÒRIA DESCRIPTIVA

18

-Consum molt reduït: inferior als 3 mA en cicles d’escriptura, i proper als 100 nA quan es troba en repòs. Una de les característiques interessants d’aquest tipus de comunicació és que permet la gestió de fins a 8 dispositius esclaus per part d’un mestre. Mitjançant 3 potes connectades cadascuna a un nivell lògic, el mestre (PIC16F876) és capaç d’adreçar-se individualment a cada esclau. D’aquesta manera, qualsevol model de EEPROM que tingui la mateixa configuració de potes podrà ser connectat als sòcols lliures de la placa, mentre tingui la mateixa capacitat de memòria. 4.1.5-Comunicació UART La comunicació sèrie asíncrona és el mitjà que s’ha escollit per moure dades entre ambdós dispositius, PC i microcontrolador. Com és ben conegut, les tensions pròpies pel protocol RS-232 són de +3 a +12 volts per indicar estat lògic 1, i de -3 a -12 volts per designar estat lògic 0. Aquestes seran, doncs, les característiques del senyal que sortirà de l’ordinador. El PIC, per la seva, emet senyals TTL que es mouen al voltant dels +5 volts i dels 0 volts per comunicar estat alt i baix respectivament. Tot i que la major part dels equips informàtics moderns accepten 0 V com a un 0 lògic, és necessari que l’integrat MAX232 adapti aquestes tensions perquè, d’altra manera, la recepció de dades per part del microcontrolador no seria possible. Dels 5 condensadors connectats a l’integrat, 3 de 1 µF s’utilitzen per duplicar la tensió d’alimentació i adquirir 10 V. Amb els dos restants, de la mateixa capacitat, podem invertir aquesta tensió i així obtenir +10 i -10 volts.

fig.10 Esquema de la comunicació asíncrona UART

En el projecte s’empra un integrat de la casa MAXIM que consta de 2 entrades/sortides i pot arribar a operar a velocitats de 120 kbps. La comunicació es realitza mitjançant dos cables (recepció i transmissió) que tenen com a interfície el MAX232. Un connector DB9 femella inserit a la placa permetrà que, mitjançant un

Page 19: SISTEMA DE CONTROL D’UNA FONT D’ALIMENTACIÓ DE …deeea.urv.cat/public/PROPOSTES/pub/pdf/361pub.pdfhaurà de ser bastant òptim en quant a connexions dels components per poder

MEMÒRIA DESCRIPTIVA

19

cable NULL-MODEM, puguem connectar els dos sistemes. La característica d’aquest cable és que en un extrem hi ha un connector mascle i en l’altre un de femella; d’aquesta manera el conductor que surt de la pota 3 (TX) del mascle s’ha de connectar amb la pota 2 (RX) del femella i viceversa. 4.1.6-Filtre passabaix En absència d’un convertidor digital/analògic en el microcontrolador, s’utilitza per l’obtenció d’una tensió contínua programada de valor desitjat (entre +5 i 0 volts) el senyal filtrat provinent d’un PWM. Aquest senyal és un pols rectangular periòdic que, en funció del valor desitjat, és capaç de variar la seva amplada des d’un 0 fins un 100% de l’amplada total del període. La freqüència d’aquest senyal pot anar d’unes centenes de Hz, fins a centenes de kHz. El filtre encarregat de treure la component contínua és un filtre passabaix de 5è ordre i, per tant, presenta una atenuació més gran quant més elevada sigui la freqüència. Està format per tres amplificadors operacionals (dels que 2 es troben en un sol integrat), 5 resistències i 5 condensadors del mateix valor. Amb tots ells podem constituir una xarxa RC, una etapa separadora i dos filtres Butterworth que, en conjunt, produeix una atenuació teòrica de 100 dB/dècada. La sortida d’aquest sistema l’obtindrem del connector J1. Dos dels operacionals que s’han emprat es troben en un integrat UA747 de la casa Philips, i en el UA741 s’hi troba el restant. La tensió amb la que es poden alimentar ha de ser simètrica i ha d’estar dins de ±18 V i ±5 V (el límit inferior real el fixa el fet que la sortida al connector J1 ha d’estar entre 0 i 5 volts. No és gens aconsellables alimentar amb menys de ±7 V ja que, com es diu en l’apartat 4.1.2, el LM4705 pot no funcionar correctament).

fig.11 Filtre passabaix

Cal considerar que en les figures apareix una alimentació de ±15 V que és

purament simbòlica i que sempre restarà d’acord amb el conjunt d’explicacions. 4.1.7-Convertidor analògic/digital El PIC16F876 posseeix un convertidor analògic/digital de 10 bits de resolució i 5 canals d’entrada. Les conversions es fan via aproximacions successives amb una

Page 20: SISTEMA DE CONTROL D’UNA FONT D’ALIMENTACIÓ DE …deeea.urv.cat/public/PROPOSTES/pub/pdf/361pub.pdfhaurà de ser bastant òptim en quant a connexions dels components per poder

MEMÒRIA DESCRIPTIVA

20

tensió de referència programable que pot ser la mateixa alimentació o, d’altra banda, una tensió subministrada en una de les potes del microcontrolador. El temps total en fer una adquisició es mou prop dels 100 µs (sempre depenent del rellotge amb el que excitem el sistema), i la resolució màxima que es pot aconseguir és de 2,5 mV. La tensió exterior s’adquireix mitjançant el connector J3 de dos terminals, tal i com l’administra la font AMREL. La conversió es fa a través el canal 0 del convertidor.

fig.12 Adquisició de tensió exterior

Cal dir que, com veurem més a fons en altres apartats de la memòria, tan pel

PWM com pel convertidor A/D només utilitzarem 8 bits de resolució, ja que ens suposem un estalvi de memòria i s’ha premiat més aquesta opció (mirar memòria de càlcul apartat 1.2).

Page 21: SISTEMA DE CONTROL D’UNA FONT D’ALIMENTACIÓ DE …deeea.urv.cat/public/PROPOSTES/pub/pdf/361pub.pdfhaurà de ser bastant òptim en quant a connexions dels components per poder

MEMÒRIA DESCRIPTIVA

21

5 Descripció del software 5.1-Introducció Quan referim la paraula software en aquest apartat, es pretén fer referència al conjunt d’activitats programades que, internament, realitzen tan el PIC16F876 com l’ordinador. Això és, en resum, el seguit d’algoritmes dissenyats pel present projecte i la manera com s’influeixen mútuament. El software del PC ha estat compilat amb el Visual Basic 6.0. El Basic és un llenguatge molt senzill d’utilitzar que permet, en aquest mode, crear aplicacions molt visuals (a l’estil de Windows) i que funcionen sota aquest sistema operatiu. L’objectiu serà crear una eina amb la que poder, bàsicament, enviar i rebre dades del PIC amb facilitat. La informació enviada constituirà la configuració del microcontrolador i estarà formada per les dades de configuració juntament amb els valors discrets del senyal que la font AMREL representarà a la sortida. Les mostres dels valors d’intensitat establiran el conjunt d’informació rebuda. Amb aquestes dades serà necessari realitzar certs càlculs i aproximacions que podrien ser feixugues per un microcontrolador de 8 bits i que els PCs actuals resolen molt més eficientment. Tot el codi del PIC ha estat escrit en llenguatge màquina, és a dir, instruccions reals i directes. D’aquesta manera es pot aconseguir un codi més estable i depurat, front a d’altres llenguatges de més alt nivell. Amb aquest software podem gestionar tots els recursos interns del microcontrolador alhora que s’executen instruccions i es poden atendre interrupcions. La inferioritat de recursos del PIC el limita a obeir les ordres que rep del PC quan l’usuari li indica a través dels commutadors. En termes jeràrquics, podem dir que el PC és el dispositiu mestre i el PIC és l’esclau. Per aquest motiu començarem per veure com l’ordinador gestiona totes aquestes ordres, mentre que després coneixerem com les interpreta i tracta el microcontrolador. 5.2-Software PC Per utilitzar aquesta aplicació és necessari que l’ordinador en qüestió disposi del sistema operatiu Microsoft Windows 95 (o superior) instal·lat, tingui un port sèrie lliure i, tot i no ser imprescindible, pot ser molt útil tenir el programa Microsoft Excel. Tot el software està orientat a facilitar la configuració del mòdul de control: -Els paràmetres referents als temps d’adquisició, llançament de mostres, etc, es poden modificar de manera senzilla a través del menú, sense la possibilitat de poder cometre cap error ja que el software contempla totes les possibilitats. -La consigna de sortida de la font es pot crear a través del programa o es pot dissenyar arbitràriament (seguint uns paràmetres) i indicar al software el fitxer on es troba. -Tot i que la comunicació sèrie asíncrona es realitzarà a 9600 bps, amb 8 bits per dada, sense bit de paritat i amb un bit de parada, es pot modificar tenint en compte possibles futurs canvis.

Page 22: SISTEMA DE CONTROL D’UNA FONT D’ALIMENTACIÓ DE …deeea.urv.cat/public/PROPOSTES/pub/pdf/361pub.pdfhaurà de ser bastant òptim en quant a connexions dels components per poder

MEMÒRIA DESCRIPTIVA

22

-Les dades rebudes es col·locaran en un fitxer conegut per l’usuari amb un format característic que serà comentat en els següents apartats. Com en la major part de programes d’entorn Windows, el codi s’executa per esdeveniments, és a dir, només quan cliquem en algun dels icones dels diferents menús o quan es produeix algun tipus d’interrupció externa.

fig. 13 Pantalla principal del programa

El programa disposa d’un fitxer d’ajuda per aquells usuaris que no hagin llegit aquest document. Pels altres, en els següents apartats veurem com funcionen els processos anteriors i quins passos s’han de seguir per executar-los correctament. 5.2.1-Configuració port sèrie RS-232 És la primera acció que s’ha de realitzar perquè és bàsica alhora de conèixer si disposem del port sèrie lliure i perquè, si no es realitza, no tindrem el port obert i no es podrà accedir a la configuració del mòdul. Amb la pestanya Configuració del port del menú Configuració del sistema de la pantalla principal, podrem accedir a un menú com el que es mostra en la figura 14.

fig.14 Menú de configuració del port Com es pot veure, apareixen les típiques opcions que presenta la configuració estàndard del port sèrie, és a dir, el número de port pel que es vol realitzar la comunicació, la velocitat, si s’adjunta bit de paritat a la trama, el nombre de bits que composen una dada, quants bits de parada utilitzem, si establim un protocol per l’entrada de bytes i, finalment, la manera com interpretarem les dades que ens arribin.

Page 23: SISTEMA DE CONTROL D’UNA FONT D’ALIMENTACIÓ DE …deeea.urv.cat/public/PROPOSTES/pub/pdf/361pub.pdfhaurà de ser bastant òptim en quant a connexions dels components per poder

MEMÒRIA DESCRIPTIVA

23

Tant si cliquem el botó Predeterminats com si deixem la configuració que apareix per defecte, estarem emprant el tipus de configuració adequada per poder comunicar amb el mòdul del present projecte. Es dóna la possibilitat de canviar aquests paràmetres per poder afrontar modificacions futures o possibles adaptacions a d’altres aplicacions.

fig.15 Esquema de la configuració port sèrie Clicant el botó Acceptar, es passa a obrir el port amb les característiques

establertes en la configuració. Sempre es comprova que el port seleccionat no estigui sent utilitzat per algun altre programa. Essent així, s’obligarà a l’usuari a canviar de port o a tancar l’aplicació on s’estigui utilitzant. Si d’altra banda el software pot obrir-lo, s’habilitarà la possibilitat de realitzar la configuració del mòdul que fins al moment es trobava inactiva.

Tancant el menú de configuració o clicant Cancelar no s’esdevé cap tipus de

configuració i tot resta com es trobava abans d’accedir a l’esmentat menú. 5.2.2-Configuració del PIC Un cop realitzada la configuració del port, podrem accedir als paràmetres del mòdul si cliquem sobre Configuració del sistema i posteriorment a Configuració del PIC. A partir d’aquest moment es comença a establir un intercanvi de dades entre PC i microcontrolador que justifica, precisament, les accions de configuració del port. Les característiques d’aquest menú es poden veure en la figura 16.

CONFIGURACIÓ PORT SÈRIE

MENÚ PRINCIPAL

ACCEPTAR PREDETERMINATS

CANCELAR

Configuració de pantalla

9600bps, sense paritat, 1bit stop, 8bits per

dada, sense protocol i recepció en mode text

Està port obert per altres?

S’obre el port

Missatge d’error

S’habilita configuració

mòdul

Si

No

Page 24: SISTEMA DE CONTROL D’UNA FONT D’ALIMENTACIÓ DE …deeea.urv.cat/public/PROPOSTES/pub/pdf/361pub.pdfhaurà de ser bastant òptim en quant a connexions dels components per poder

MEMÒRIA DESCRIPTIVA

24

fig.16 Menú de configuració del PIC

Un dels paràmetres importants de la configuració és el temps total de mostreig. Aquest és directament proporcional al nombre de memòries EEPROM externes inserides en el mòdul, és a dir, hem de saber si el temps que desitgem es troba dins el rang de possibilitats de la capacitat actual. Un dels objectius principals d’aquest software és que no es puguin cometre errors, i per això pretenem que el PIC comuniqui al PC el nombre total de memòries connectades. Com que totes han de ser de la mateixa capacitat, el temps màxim permès serà el resultat de multiplicar l’interval de mostreig pel nombre de memòries i per la capacitat unitària.

Els intervals de mostreig i d’actualització de la consigna s’han de donar en base

al temps amb el que està programat el temporitzador del microcontrolador. En el nostre cas tenim una base de temps molt propera als 50 ms i d’aquí els intervals que apareixen en la figura anterior. El nombre màxim de mostres és de 250 i ve limitat per la capacitat de la EEPROM interna del PIC.

fig.17 Esquema configuració PIC

CONFIGURACIÓ DEL PIC

MENÚ PRINCIPAL

Es pot establir comunicació amb

PIC?

S’activen botons i quadres de text

Si

No

ACCEPTAR CANCELAR

Configuració correcta?

No Es Realitzen càlculs

i es col·loquen els bytes en una matriu

per ser enviats

Si

Page 25: SISTEMA DE CONTROL D’UNA FONT D’ALIMENTACIÓ DE …deeea.urv.cat/public/PROPOSTES/pub/pdf/361pub.pdfhaurà de ser bastant òptim en quant a connexions dels components per poder

MEMÒRIA DESCRIPTIVA

25

A menys que haguem pogut establir una comunicació amb el mòdul i el software estigui al corrent del nombre de memòries que tenim connectades, el botó Acceptar restarà inactiu i tampoc es podrà escriure res dins els quadres de text. En el moment que es troben actius, quan cliquem el botó Acceptar es realitzen automàticament les comprovacions que tot es trobi dins els marges correctes i es realitzen els arrodoniments propis de tot sistema discret.

Perquè el microcontrolador sàpiga quan ha de finalitzar tot el procés (temps total

de mostreig) el que fa el programa és indicar-li fins a quina adreça de memòria ha d’escriure; amb l’interval de mostreig que tria l’usuari, el software pot fer un càlcul i donar el nombre total d’adquisicions que s’han de fer per omplir el temps total de mostreig. La capacitat (256 kbits sempre) i el nombre de memòries són coneguts i, per tant, només cal li digui que aturi tot el procés a la posició x de la memòria y. Per exemple:

Tenim 2 memòries connectades i volem prendre una mostra cada segon durant 10 hores. Solució: 1 hora=3600 segons ? 10 hores=36000 segons 1 memòria=256 kbits=32768 bytes

0986,13276836000

= memòries que equivalen a:

1 memòria sencera i 32323276836000 =− bytes de la segona

Tota aquesta informació s’envia en 3 bytes: un per indicar a quina memòria s’ha d’arribar i dos per indicar l’adreça amb 15 bits. Totes les altres dades en aquesta configuració omplen un byte cadascuna. Ambdós, l’interval de mostreig i el període d’actualització, les calcula dividint el temps base de 50 ms pel temps desitjat. Pel que fa al nombre de mostres de la consigna, té un rang de 250 valors i, per tant, pot enviar el nombre directament. Amb tot això resolt, el software col·loca els 6 bytes anteriors en una matriu de configuració. Aquesta serà enviada un cop haguem clicat en l’opció Enviar configuració del menú Configuració del sistema.

Perquè el procés configuratiu estigui complet, manca enviar tot el senyal consigna. Sempre que es vol realitzar una configuració s’han d’efectuar els passos previs descrits en aquests apartat perquè d’altra manera el programa no ens deixaria enviar l’esmentada consigna. 5.2.3-Configuració del senyal consigna Com ja s’ha explicat, la consigna és un senyal discretitzat que s’ha d’enviar al microcontrolador. Com tot senyal amb aquesta naturalesa, ha de constar d’un nombre finit de mostres que, en el nostre cas, ve limitat per la capacitat de memòria no volàtil del PIC16F876. La consigna tindrà, doncs, un nombre màxim de 250 mostres que s’aniran repetint periòdicament durant tot el procés.

En la figura 18 podem veure com vindria a ser una consigna. Els punts representen les mostres a temps constant, mentre que la línia discontínua reprodueix el senyal continu al que ens referim.

Page 26: SISTEMA DE CONTROL D’UNA FONT D’ALIMENTACIÓ DE …deeea.urv.cat/public/PROPOSTES/pub/pdf/361pub.pdfhaurà de ser bastant òptim en quant a connexions dels components per poder

MEMÒRIA DESCRIPTIVA

26

0

50

100

150

200

250

300

350

0 2 4 6 8 10 12 14 16 18 20 22 24 26

Mostres en temps constant

Tens

ió d

e so

rtid

a

fig.18 Senyal discret exemple de 25 mostres aplicable al projecte

El programa disposa de dos maneres senzilles per poder crear un senyal consigna. En la primera, tots els càlculs els realitza el programa i disposem de tres tipus de senyals definits: sinusoïdal, quadrat i en dent de serra. Per fixar-los només cal saber els límits superior i inferior d’amplitud, i el nombre total de mostres per període que volem calcular. Tot això es podrà triar en un menú, com en el de la figura 19, que apareixerà clicant sobre Consignes i, posteriorment, sobre Generar consigna en la pantalla principal.

fig.19 Menú de generació de senyals Quan cliquem sobre el botó Calcula, el software crea un fitxer Excel amb el nom que l’usuari desitja i amb el format que apareix en la figura 19, havent comprovat anteriorment que totes les dades hagin estat introduïdes i que es trobin en el rang correcte, és a dir, que el número de valors estigui entre 1 i 250, el límit inferior sigui major que 0 i menor que 300, i que el límit superior sigui major que 0, més gran que el límit inferior i menor que 300.

En la següent figura podem veure un exemple de full de càlcul, corresponent a la gràfica de la figura 18, amb el format correcte perquè el software el pugui llegir.

Page 27: SISTEMA DE CONTROL D’UNA FONT D’ALIMENTACIÓ DE …deeea.urv.cat/public/PROPOSTES/pub/pdf/361pub.pdfhaurà de ser bastant òptim en quant a connexions dels components per poder

MEMÒRIA DESCRIPTIVA

27

fig.20 Full de càlcul Excel amb el format adequat

Si desitgem un altre tipus de senyal fora dels que té definits el software, l’usuari té una segona forma per crear un senyal consigna. La major part d’usuaris d’un ordinador personal estan familiaritzats amb les eines de treball de Microsoft i de programes com l’Excel. Aquest és un programa de càlcul que permet, entre moltes altres coses, dibuixar gràfiques de manera senzilla utilitzant una metodologia molt semblant a la que farà servir el PIC per reproduir-les. És per això que es proposa usar aquest programa perquè l’usuari pugui crear fàcilment qualsevol tipus de forma gràfica i sigui capaç de visualitzar-la. Perquè una funció pugui ser llegida pel nostre programa, només cal omplir la primera columna d’un full de càlcul Excel amb els valors de tensió que es desitgen. Aquests han d’anar de 0 a 300 volts i, per tant, si fem referència a valors negatius el software els canviarà per zeros i si passen de 300 es quedarà amb aquest valor llindar. Com ja hem dit, com a màxim es poden emprar 250 mostres i, un cop el PIC arribi a l’última, sempre tornarà al principi fins que no s’hagi exhaurit el temps total de mostreig.

Finalment, si cliquem sobre Consignes i després a Obrir consigna, s’obrirà un diàleg per poder escollir el fitxer on es troba el senyal consigna. Si tots els passos de configuració del PIC i del port han estat realitzats correctament, el software ens permetrà enviar la consigna activant dita opció en el menú Consignes de la pantalla principal. 5.2.3.1-Enviar consigna Quan ens referim a aquesta acció, es pretén fer referència a tot el conjunt d’operacions que el software realitza per adaptar el senyal que nosaltres hem creat als valors discrets que entén el microcontrolador en el moment que cliquem sobre l’opció Enviar consigna del menú Consignes de la pantalla principal. Cadascuna de les mostres de la consigna té el tamany d’un byte i això vol dir que s’ha de passar un nombre de 0 a 5, a un nombre que pot prendre 256 valors. Amb el mateix full de càlcul que l’usuari ha utilitzat per entrar una consigna, el software omplirà les columnes adjacents amb la informació següent (mirar figura 21):

Page 28: SISTEMA DE CONTROL D’UNA FONT D’ALIMENTACIÓ DE …deeea.urv.cat/public/PROPOSTES/pub/pdf/361pub.pdfhaurà de ser bastant òptim en quant a connexions dels components per poder

MEMÒRIA DESCRIPTIVA

28

-Columna B: conté la tensió d’entrada teòrica que s’hauria de subministrar a la font perquè aquesta doni la tensió de sortida que ha estat programada. És una simple conversió: 300

5*)()( icolumnaAicolumnaB = , on columnaA i columnaB representen

matrius unidimensionals i i fa referència a l’índex de la fila. -Columna C: on hi trobem el valor enter que sortirà de la següent operació amb la columna anterior: 5

255*)()( icolumnaBicolumnaC = . Això no és res més que el valor

decimal del byte que serà enviat i que, en definitiva, serà utilitzat pel PWM del PIC per generar la tensió d’entrada a la font. Aquest nombre ens servirà per quantificar l’error que cometem alhora de fer l’arrodoniment. -Columna D: és només presencial. Conté el caràcter del codi ANSI corresponent al byte de la columna anterior. Un caràcter ocupa un byte i, per tant, la relació és directa. El software està programat per tractar com a caràcters les dades rebudes i enviades pel port sèrie. És per això que en els quadres de text del menú principal només apareixen caràcters ANSI pertanyents al que s’està enviant o rebent. -Columna G: constituïda pels valors reals teòrics que s’haurien de veure a la sortida de la font, tenint en compte l’arrodoniment realitzat en la discretització i, sobre tot, suposant que la relació entrada/sortida és completament lineal. D’altra banda també es comprova, com en cada procés, que les mostres de consigna que l’usuari hagi entrat en la primera columna siguin correctes, és a dir, si es troben valors superiors a 300 i inferiors a 0, seran tallats a cadascun d’aquests límits respectivament. El conjunt de caràcters que constitueixen la columna D surten pel port sèrie i queden reflectits en el quadre de text superior del menú principal. És en aquest punt on podem dir que el mòdul ja està totalment programat i ja no es requerirà l’ordinador fins que es produeixi la transmissió de dades.

Page 29: SISTEMA DE CONTROL D’UNA FONT D’ALIMENTACIÓ DE …deeea.urv.cat/public/PROPOSTES/pub/pdf/361pub.pdfhaurà de ser bastant òptim en quant a connexions dels components per poder

MEMÒRIA DESCRIPTIVA

29

fig.21 Full de càlcul Excel després d’haver enviat consigna

Finalment, notar que en la columna I apareixen els valors de configuració que han estat triats en el menú corresponent i que posteriorment seran utilitzats en la visualització de les dades. 5.2.3.2-Full de calibratge Els valors que es col·loquen en les columnes B i G s’obtenen suposant una relació totalment lineal entre l’entrada i la sortida de la font que, malauradament, en la realitat no es compleix. Es podria aplicar una correcció prenent mesures reals i, llavors, introduir un offset i un canvi de pendent alhora de fer els càlculs per obtenir valors més correctes en les esmentades columnes. Malgrat tot, aquestes anomalies es poden agreujar o, fins i tot, millorar amb el temps i per aquest motiu es proposa una altra solució. Aprofitant que estem familiaritzats als fulls de càlcul, la idea és que l’usuari en creï un amb parelles de punts x-y corresponents a valors reals d’entrada/sortida que haurà adquirit amb instruments de mesura de tensió. Evidentment, quants més punts obtinguem millor, sempre tenint en compte que la resolució màxima del PWM amb 8 bits és d’uns 20 mV i no tindria massa sentit adquirir valors, per exemple, cada 5 mV.

El mateix succeeix amb la relació tensió/corrent de sortida, on la no linealitat ens farà calcular mostres errònies d’intensitat. Per això crearem un full de càlcul amb les següents característiques (mirar figura 22): -Columnes A: valors escalats de tensió d’entrada de 0 a 5 volts. -Columna B: tensió de sortida corresponent als valors d’entrada de la A. -Columnes D: valors escalats de tensió de 0 a 5 volts que obtenim quan a la sortida hi circula un corrent.

Page 30: SISTEMA DE CONTROL D’UNA FONT D’ALIMENTACIÓ DE …deeea.urv.cat/public/PROPOSTES/pub/pdf/361pub.pdfhaurà de ser bastant òptim en quant a connexions dels components per poder

MEMÒRIA DESCRIPTIVA

30

-Columna E: corrent a la sortida quan mostrejem una tensió igual a la de la columna D.

fig.22 Exemple de full de calibratge

Aquest és un exemple amb mesures reals no massa adequat, perquè els intervals són massa grans, però perfectament vàlid per realitzar millors aproximacions. El límit de punts x-y ha estat fixat en 300; a partir d’aquest nombre no seran considerats. Com es pot veure en l’exemple, no fa falta que hi hagi el mateix nombre de punts en ambdues relacions A-B i D-E, però si dins d’elles. Els valors de tensió de les columnes A, B i D han d’estar en volts, mentre que els de la columna E s’han d’introduir en ampers. Perquè un calibratge tingui lloc, hem d’haver creat un full amb les característiques que s’han explicat o tenir a mà el full que apareix adjunta amb els arxius d’instal·lació d’aquest software. Un cop s’ha realitzat la configuració del PIC (apartat 5.2.2), si desitgem aplicar el calibratge haurem de clicar sobre Consignes i posteriorment en Obrir calibratge (AMREL sps 300-4). En el quadre de diàleg que apareixerà, escollim la ruta de l’arxiu de calibratge en Excel. Totes les coordenades x-y d’aquest fitxer es col·locaran dins dos matrius per agilitzar el temps de les operacions. Triem l’arxiu que conté el senyal consigna, si no ho havíem fet, i cliquem sobre Enviar consigna en el menú Consignes de la pantalla principal. A partir d’aquest punt el programa realitza les mateixes operacions que han estat explicades en l’apartat 5.2.3.1 però amb certes diferències: -Columna B: conté el valor de tensió aproximat que s’ha d’introduir a la font perquè aquesta tregui el voltatge corresponent a la columna A. Si anteriorment aquest nombre

Page 31: SISTEMA DE CONTROL D’UNA FONT D’ALIMENTACIÓ DE …deeea.urv.cat/public/PROPOSTES/pub/pdf/361pub.pdfhaurà de ser bastant òptim en quant a connexions dels components per poder

MEMÒRIA DESCRIPTIVA

31

s’obtenia a través d’una senzilla conversió, en aquesta ocasió el software buscarà els dos valors de sortida, pertanyents al calibratge, on es troba la tensió que desitgem. Mitjançant també els seus corresponents valors d’entrada, es realitza una interpolació lineal amb la que s’extreu el valor aproximat de tensió que s’ha d’introduir (mirar memòria de càlcul, apartat 2.1.4). -Columna G: tenint en compte l’arrodoniment realitzat en la columna C, en aquesta hi trobarem el valor real i teòric de tensió que obtindrem a la sortida calculat també per interpolació, mitjançant el full de calibratge, tal i com s’ha fet en la columna B. Els valors de les altres columnes els adquireix de la mateixa forma que s’ha comentat en l’apartat anterior però, en aquesta ocasió, els resultats són més aproximats.

fig.23 Esquema enviament de la consigna

5.2.4-Recepció de dades La recepció de dades és l’única funció del programa que pot ser aprofitada per altres aplicacions que queden fora de l’àmbit del present projecte. Com ja hem dit, la configuració del port sèrie pot variar i, per tant, es pot adaptar a les exigències de qualsevol altre dispositiu. Així podem, doncs, rebre dades i veure-les en el quadre de text inferior de la pantalla principal. De qualsevol manera, però, centrem-nos ara en com ho utilitzarem, en el nostre cas, per rebre les mostres de corrent del PIC. El primer que cal és haver efectuat una configuració del port prèvia ja que, d’altra manera, no es permet cap tipus d’intercanvi de dades. Amb les opcions de port predeterminades per aquest projecte ja estarem a punt per comunicar-nos amb el PIC. Si cliquem ara sobre Tractament de dades i després a Bolcar dades, donem a entendre al programa que la informació que rebrem fa referència a mostres de corrent i és en aquest punt quan aquestes dades reben un tractament propi. Bàsicament, l’únic que fa el software és demanar a l’usuari el nom de l’arxiu on vol que sigui emmagatzemada tota

GENERAR CONSIGNA

OBRIR CONSIGNA

CONSIGNA PRÒPIA DE L’USUARI

OBRIR CALIBRATGE (AMREL SPS 300-4)

ENVIAR CONSIGNA

Desitgem calibrar la consigna??

No

Si

MENÚ PRINCIPAL

Escollir fitxer Excel

Es Realitzen càlculs i s’omplen les columnes del

full de càlcul

Es col·loquen les dades en una matriu i s’envien. Apareixen en quadre de text de pantalla principal

Page 32: SISTEMA DE CONTROL D’UNA FONT D’ALIMENTACIÓ DE …deeea.urv.cat/public/PROPOSTES/pub/pdf/361pub.pdfhaurà de ser bastant òptim en quant a connexions dels components per poder

MEMÒRIA DESCRIPTIVA

32

aquesta informació perquè, com veurem en el següent apartat 5.2.5, la poguem analitzar i representar posteriorment. Cal dir que només amb una configuració del port realitzada ja som capaços de rebre bytes i veure’ls dins el quadre de text de la pantalla principal en format de caràcters. Ha de quedar clar que les accions que s’han explicat en el paràgraf anterior són pel tractament de les dades específiques d’aquest projecte. 5.2.5-Tractament i visualització de les dades Un dels aspectes importants alhora de poder analitzar certs senyals és el fet de poder-los veure representats gràficament. Per aquest motiu s’ha dissenyat una eina gràfica que ens ho permet però, tot i així, sempre hem de considerar que les dades es guardaran en un fitxer Excel i que, per tant, l’usuari sempre les podrà visualitzar mitjançant aquest potent programa. Quan tota la informació enviada pel microcontrolador ha estat rebuda, podem clicar sobre la pestanya Tractament de dades i després sobre Guardar i visualitzar dades, ambdós pertanyents al menú de la pantalla principal. En aquest punt el programa col·loca tota la informació en l’arxiu Excel que li hem indicat amb les accions de l’apartat anterior. Com que és possible que vulguem aquestes dades en el mateix arxiu on havíem creat la consigna, les posarem omplint dos columnes buides que, si fem una ullada a la figura 21, poden ser les E i F. Tindran les següents característiques: -Columna E: és només presencial igual que la D. Conté els caràcters ANSI rebuts directament del port sèrie que representen el conjunt de bytes que el mòdul ha mostrejat. -Columna F: hi trobem l’equivalència lineal de 0 a 4 ampers del valor del byte de l’anterior columna. Això és, ( ) 255

4*)(int)( icolumnaEicolumnaF = .

Si anteriorment havíem obert el calibratge de la font per enviar la consigna, tal i com s’explica en l’apartat 5.2.3.2, o si no ho havíem fet però el volem aplicar en aquesta ocasió a les dades rebudes, en aquesta columna el valor corresponent d’intensitat serà calculat pel software a partir dels punts x-y del calibratge corresponents al corrent de sortida. El càlcul de la intensitat es farà a partir d’interpolacions lineals utilitzant els valors del calibratge dins els que es troba la tensió que el microcontrolador ha mostrejat (mirar memòria de càlcul, apartat 2.1.5). Si havíem clicat en algun moment sobre Obrir calibratge (AMREL SPS 300-4) del menú Consignes i no s’ha tancat el programa, el calibratge serà aplicat automàticament a les dades rebudes. Si no ho havíem fet o hem tancat el programa abans de la recepció, es sobreentén que s’hauran de tornar a clicar les opcions anteriors perquè, d’altra manera, el calibratge no es donaria. Posteriorment sorgirà una pantalla d’on, si cliquem sobre el botó Dibuixa, apareixerà una gràfica amb l’evolució temporal del corrent a la sortida de la font. Mirant la figura 24 veurem les característiques i les diferents opcions que permet la pantalla gràfica

Page 33: SISTEMA DE CONTROL D’UNA FONT D’ALIMENTACIÓ DE …deeea.urv.cat/public/PROPOSTES/pub/pdf/361pub.pdfhaurà de ser bastant òptim en quant a connexions dels components per poder

MEMÒRIA DESCRIPTIVA

33

fig.24 Pantalla de visualització de les mostres obtingudes La pantalla de visualització està composta pel gràfic i per quatre quadres de text. Si ens hi fixem, dins la zona de la corba s’hi veu una línia vertical que serveix per marcar el punt que s’està llegint en aquell instant. Clicant dins la zona del gràfic, la línia es mourà fins la posició on el ratolí es trobava en aquell moment i actualitzarà el valor que apareix en els quadres de text. Deixant premut el botó esquerra del ratolí, podem moure’l al llarg de la corba i els quadres s’aniran actualitzant. Els quadres de text contenen la informació que en aquell instant de temps s’ha donat a la sortida de la font, això és, la intensitat que s’ha pogut mostrejar i la tensió que ha enviat el PIC. El software obté aquests valors del full de càlcul i per aquest motiu és important utilitzar el mateix tan per crear la consigna, com per rebre les dades del PIC. A més, hi ha un quadre que informa de l’instant de temps en que s’ha donat la mostra immediatament anterior a la línia vertical i un darrer quadre que indica el valor de l’eix Y de la gràfica en que es troba el ratolí quan tenim el botó esquerra pitjat.

Tenint en compte la capacitat d’emmagatzemar mostres del mòdul, podem preveure un màxim d’uns 256 mil punts a representar i, perquè aquests es puguin veure correctament, cal una àrea de gràfica molt gran. El software sempre prova de col·locar-los dins l’àrea que es veu a pantalla, però quan els punts es troben massa junts el programa allarga el gràfic i fa sorgir una barra de desplaçament horitzontal. Pel que fa als punts, els troben units per línies rectes i cada mostra concreta està representada per una petita creu. Tan el corrent com la tensió el programa els obté directament de les columnes F i G, respectivament, del full de càlcul. Amb la relació entre temps de mostreig i de llançament de mostres al PWM (apareix a la columna I), el

Page 34: SISTEMA DE CONTROL D’UNA FONT D’ALIMENTACIÓ DE …deeea.urv.cat/public/PROPOSTES/pub/pdf/361pub.pdfhaurà de ser bastant òptim en quant a connexions dels components per poder

MEMÒRIA DESCRIPTIVA

34

software estableix la concordança temporal entre tensió i corrent i per això les podem conèixer en cada instant discret. 5.2.6-Ajuda de funcionament El software incorpora una opció d’ajuda en el menú de la pantalla principal que pretén ser una ràpida introducció al funcionament global de tot el mòdul. Quan s’executa, s’obre un fitxer de text que bàsicament conté instruccions molt directes perquè l’usuari sigui capaç de fer-ho funcionar sense haver de recórrer a altres documents descriptius més complexos. L’ajuda inclou tan el funcionament bàsic del mòdul com el del programa. Cal dir que aquest programa s’ha procurat dissenyar d’una manera en la que l’usuari difícilment pot cometre errors i les seves accions sempre estan controlades pel software, és a dir, en certa manera el programa guia a l’usuari no deixant-li fer certes accions si unes altres no han estat realitzades prèviament. Constantment apareixen quadres de diàleg que informen a l’usuari de les accions que ha de realitzar, en respecte al mòdul, perquè els diferents processos s’executin correctament i, d’altra banda, sobre tot element del programa hi apareix una ajuda bàsica si hi deixem el punter del ratolí. Tot plegat per aconseguir una execució més fàcil. 5.3-Software del PIC16F876 Es troba dins la memòria FLASH del microcontrolador i s’encarrega de realitzar les funcions pròpies del mòdul. Tota la configuració del funcionament dels diferents perifèrics i de qualsevol element intern al PIC, es realitza a partir dels bits de certs registres que es troben dins la memòria RAM. Aquesta és volàtil i per aquest motiu ha de ser programada pel software cada vegada que es dóna una nova execució. Parlarem molt doncs, durant els següents apartats, de registres i també de les rutines d’atenció a les interrupcions. Podem dir que la majoria dels processos que s’esdevenen durant l’execució provenen d’elements amb capacitat per interrompre la CPU del micro, quan la requereixen, i després alliberar-la perquè continuï fent el que estava fent. Aquest sistema permetrà un estalvi de temps d’execució. Ens les següents apartats ens centrarem en explicar quines són les funcions d’aquest software i les dividirem en cinc apartats: -Inicialització: què fa el PIC quan s’inicia i com es prepara pels processos posterirors. -Configuració a través del PC: on emmagatzema tota la informació i com la llegeix. -Control de la font de tensió i adquisició de mostres de corrent: com es controlen els perifèrics, com emmagatzema les dades adquirides i com gestiona les operacions síncrones. -Enviament de la informació adquirida al PC: lectura de la EEPROM externa i maneig del pot sèrie. -Interrupcions: com es tracten.

Page 35: SISTEMA DE CONTROL D’UNA FONT D’ALIMENTACIÓ DE …deeea.urv.cat/public/PROPOSTES/pub/pdf/361pub.pdfhaurà de ser bastant òptim en quant a connexions dels components per poder

MEMÒRIA DESCRIPTIVA

35

No oblidem que les explicacions que es donaran en els següents apartats són purament descriptives i que per una informació més detallada haurem de consultar la memòria de càlcul. 5.3.1-Inicialitzacions Durant l’execució del software del microcontrolador, podem utilitzar els registres lliures (de propòsit general) de la RAM per emmagatzemar totes aquelles variables que farà servir el programa. Aquestes variables contenen adreces de memòria de les EEPROMs externa i interna, acumuladors pels temporitzadors, resultats d’una conversió A/D,... La majoria d’elles s’inicialitzen amb el valor decimal 0, tret d’un parell que ho fan amb altres valors per qüestions que veurem més endavant. El PIC16F876 consta de 3 ports de 8 bits per entrada i sortida de dades. Del port A n’utilitzem una pota per poder realitzar les adquisicions i, per tant, ha d’estar configurada com a entrada. Les potes del port B estan totes connectades a commutadors o indicadors; les quatre que activen els leds han d’estar configurades com a sortides i les quatre restants han d’estar-ho com entrades perquè reben el senyal dels interruptors. Dos pins del port C són per la comunicació sèrie, dos més per la comunicació I2C i un cinquè és la sortida del PWM.

En aquest punt també es realitza la configuració del convertidor A/D, es prepara al microcontrolador per la recepció i transferència de dades pel port sèrie i es defineixen les característiques de la comunicació I2C. Totes aquestes configuracions fan referència a les velocitats, modes de funcionament, etc, que defineixen als anteriors perifèrics i que veurem amb més detall en altres capítols.

fig.25 Esquema selecció activitat i inicialització

INICIALITZACIÓ

Definició de variables i

valor inicial

Configuració de perifèrics i

ports

SELECCIÓ D’ACTIVITATS

Ha canviat l’estat pin 7?

Ha canviat l’estat pin 6?

Ha canviat l’estat pin 5?

Ha canviat l’estat pin 4?

No No No

No

RETORN A L’INICI

CONFIG. MÒDUL AMB PC

ADQUISICIÓ I CONTROL

TRANSMICIÓ PIC-PC

Si Si Si Si

Page 36: SISTEMA DE CONTROL D’UNA FONT D’ALIMENTACIÓ DE …deeea.urv.cat/public/PROPOSTES/pub/pdf/361pub.pdfhaurà de ser bastant òptim en quant a connexions dels components per poder

MEMÒRIA DESCRIPTIVA

36

Si en fixem en la figura 25, un cop han estat finalitzades aquestes accions el

software activa les interrupcions i executa una enquesta als interruptors del port B per saber quin dels tres possibles modes de funcionament desitja activar l’usuari. El programa llegeix repetidament l’estat dels bits del port i el compara amb el valor d’aquests a l’inici de l’execució. Si algun d’ells canvia d’estat, el software passarà a executar les funcions pròpies d’aquell mode. Si no hi ha cap canvi, s’esperarà indefinidament fins que n’hi hagi un. 5.3.2-Configuració: recepció de les dades del PC Suposem que, un cop s’ha arribat a la selecció d’activitat del PIC, l’usuari decideix realitzar una configuració. En aquest punt, el mòdul s’assegura que la comunicació sèrie funciona correctament esperant un caràcter concret que l’ordinador li enviarà quan aquest també estigui a punt. Quan ha rebut aquest byte, el PIC sap que l’usuari està utilitzant el software del PC adequat i que, com s’ha explicat en l’apartat 5.2.2, l’ordinador està esperant que el mòdul li comuniqui la capacitat de memòria que té instal·lada. En el reconeixement de capacitat, el microcontrolador prova d’escriure un byte aleatori a l’adreça de la primera memòria. Si no ha tingut cap problema, passa a la segona i així fins que en troba una que no hi és físicament. En no ser-hi, es produeix un error que el software del PIC entén com a final de la recerca, envia al PC el nombre de memòries que té el mòdul connectades consecutivament fins aquell punt i es preparà per rebre la pròpia configuració.

fig.26 Ordre de revisió, amb la placa col·locada en la posició indicada, que segueix el

software per determinar el nombre de memòries connectades Les dades referents a qualsevol dels paràmetres de la configuració es col·loquen en la EEPROM interna del PIC i sempre estan constituïts per 6 bytes, més tots els valors de la consigna que poden arribar als 250. Com ja sabem, el PC envia primer els 6 bytes i després la consigna i, per això, es col·loquen en les posicions de la taula 1 tenint en compte l’ordre amb el que arriben.

Mitjançant el primer byte, el PIC sap exactament quantes dades ha d’esperar de l’ordinador i fins que no rep l’última no realitzarà cap altra operació. Quan una dada entra pel port sèrie, es genera una interrupció que bàsicament la col·loca dins la memòria EEPROM en la direcció que li indica una variable incremental. Si ens fixem en la taula 1, es comença a escriure sempre a una mateixa adreça i es va incrementant cada cop que es produeix una interrupció (tenint en compte que després del 255 ve el 0) fins que ja no es reben més valors de la consigna.

Page 37: SISTEMA DE CONTROL D’UNA FONT D’ALIMENTACIÓ DE …deeea.urv.cat/public/PROPOSTES/pub/pdf/361pub.pdfhaurà de ser bastant òptim en quant a connexions dels components per poder

MEMÒRIA DESCRIPTIVA

37

Ordre de recepció dels

bytes

Posició de memòria

EEPROM Funció

1 250 Nombre de valors de la consigna de la font

2 251 Temps de llançament de les mostres de la consigna al PWM

3 252 Temps d’adquisició de mostres de corrent

4 253 Byte alt de la posició de memòria fins la que s’ha d’escriure per completar temps total de mostreig

5 254 Byte baix de la posició de memòria fins la que s’ha d’escriure per completar temps total de mostreig

6 255 Número de la memòria fins la que s’ha d’escirure

7 0 Primera mostra del senyal consigna

8 1 Segona mostra del senyal consigna

... .... ...ena mostra del senyal consigna

256 249 Última mostra possible del senyal consigna

Taula 1 Col·locació dels paràmetres de configuració en la EEPROM Un cop finalitza aquest procés, el software tanca el port perquè no es produeixi cap altra recepció, apaga el led que ha estat encès durant tota aquesta fase i espera novament una instrucció de l’usuari. En aquesta ocasió només fem una enquesta a l’estat de l’interruptor 5 que, si canvia, començarà a executar la fase de control i adquisició.

fig.27 Esquema de l’algoritme de configuració

CONFIGURACIÓ

S’ha rebut byte del PC?

S’engega led i enquesta de memoria disponible. S’envia la

capacitat de memoria al PC.

S’han rebut tots els bytes necessaris?

INTERRUPCIÓ: RECEPCIÓ D’UN

BYTE

Ha canviat l’estat pin 5?

ADQUISICIÓ I CONTROL

Es col·loca la dada rebuda a la EEPROM.

S’incrementa l’adreça actual de la

EEPROM.

Si

Si

No

No

No

Si

Page 38: SISTEMA DE CONTROL D’UNA FONT D’ALIMENTACIÓ DE …deeea.urv.cat/public/PROPOSTES/pub/pdf/361pub.pdfhaurà de ser bastant òptim en quant a connexions dels components per poder

MEMÒRIA DESCRIPTIVA

38

5.3.3-Control de la font i adquisició de mostres de corrent A aquest mode s’hi pot accedir des de la selecció d’activitats de la funció d’inici o com a continuació del procés de configuració anterior. Per començar a operar, és necessari que el software estigui al corrent de quins són els diferents paràmetres de configuració i, per aquest motiu, els llegeix de les posicions assignades que té de la EEPROM interna i comença a realitzar la pròpia configuració. S’estableix la freqüència del PWM que està associada al Timer2 i es programa el Timer0 perquè produeixi una interrupció cada 50 ms que és el temps base de les aplicacions d’aquest projecte. El programa llegeix el primer valor de la pròpia consigna de sortida i el col·loca al PWM que ja comença a funcionar. A partir d’aquest moment s’aniran esdevenint constantment les interrupcions del Timer0 i, amb aquestes, s’anirà donant lloc a tots els processos. De les dades rebudes de l’ordinador, dos fan referència als temps de mostreig i d’actualització de la consigna respectivament. Aquestes representen, en si mateixes, acumuladors d’interrupcions. Cada cop que el Timer0 provoca una interrupció, el software decrementa cadascun dels dos acumuladors fins que arriben a 0. Quan un d’ells hi arriba, s’executen les accions pròpies del procés que representa perquè voldrà dir que haurem complert el temps que l’usuari ha marcat perquè s’esdevingui. Posteriorment es recarregua novament amb el valor inicial. Tot això justifica el per què tan l’acció de prendre mostres com la d’actualitzar el valor del PWM s’han de donar sempre amb múltiples de 50 ms de temps. Quan dins la interrupció s’executa la funció d’actualització del PWM, es llegeix un nou valor de la EEPROM interna i s’envia directament al registre que controla el cicle de treball. Aquest registre és de 10 bits però, en el nostre cas, només s’actualitzen els 8 bits alts perquè és el tamany amb el que guardem els valors de la consigna de sortida. Cada cop que es porta a terme aquesta funció, es llegeix un nou valor fins que s’arriba a l’últim i llavors es torna a l’adreça 0 de la EEPROM (el PIC sap que és l’últim perquè coneix el nombre total de mostres de consigna i el compara amb l’adreça que ha llegit en darrer lloc). Evidentment, la resolució que s’aconseguiria amb els 10 bits seria superior però, com veurem millor en la memòria de càlcul, d’aquesta manera els resultats són prou satisfactoris. Si s’han donat suficients interrupcions perquè s’executi la funció d’adquisició, el software engega el convertidor A/D, que ja havia estat configurat prèviament, i realitza una nova conversió de la tensió que li entra per la pota 0 del port A. El resultat és una paraula de 10 bits, on els 8 bits de més pes s’emplacen en un registre i els 2 de menys pes en un altre. Novament només ens quedarem amb els 8 bits alts que, un cop finalitzada la conversió, seran enviats a la memòria EEPROM I2C. En el procediment d’escriptura de la EEPROM externa s’envien 4 bytes consecutius que constitueixen: la paraula de control, l’adreça on es pretén situar la dada que es vol guardar (composta per 2 bytes) i la dada en qüestió. Les mostres es col·loquen successivament a partir de la primer adreça i és la mateixa funció d’adquisició qui en porta el control i també qui s’encarrega de canviar de memòria quan l’anterior és plena. Un control d’errors supervisa tot el procediment ja que, en cas que hi

Page 39: SISTEMA DE CONTROL D’UNA FONT D’ALIMENTACIÓ DE …deeea.urv.cat/public/PROPOSTES/pub/pdf/361pub.pdfhaurà de ser bastant òptim en quant a connexions dels components per poder

MEMÒRIA DESCRIPTIVA

39

hagués un problema de comunicació entre PIC i memòria, s’aturaria immediatament tot el procés actual. Sortint de la rutina de servei a la interrupció, el programa principal compara la propera adreça a escriure de la EEPROM externa amb l’adreça que l’ordinador ha enviat durant la configuració (mirar taula 1, byte 4, 5 i 6) i que indica la posició de memòria fins la que s’ha d’escriure perquè es compleixi la durada total del procés. Mentre no siguin iguals, continuaran periòdicament les accions descrites en els paràgrafs anteriors. Un cop finalitzi, s’apagarà el led corresponent que s’haurà mantingut encès durant tota aquesta fase, s’aturaran les interrupcions del Timer0 i es realitzarà una nova enquesta a l’estat dels interruptors però, en aquest cas, només atenent als canvis que es puguin produir en el 4 que està associat amb la transmissió de les dades PIC-PC.

fig.28 Esquema de l’algoritme principal del mode d’adquisició i control

ADQUISICIÓ I CONTROL

Encesa del led i lectura de paràmetres de configuració

EEPROM interna

Configuració Timer0, Timer1, PWM i habitació

d’interrupcions

És l’adreça actual d’escriptura de memòria igual a l’adreça de final de procés o s’ha produït

error de comunicació ?

S’aturen les interrupcions i s’apaga el led

Ha canviat l’estat pin 4?

TRANSMISSIÓ DE DADES

Si No

No

Si

INTERRUPCIÓ ASSOCIADA AL TIMER0 CADA 50 ms

Page 40: SISTEMA DE CONTROL D’UNA FONT D’ALIMENTACIÓ DE …deeea.urv.cat/public/PROPOSTES/pub/pdf/361pub.pdfhaurà de ser bastant òptim en quant a connexions dels components per poder

MEMÒRIA DESCRIPTIVA

40

En la figura 29 es poden veure amb detall les funcions que emprèn la rutina de servei a la interrupció del Timer0.

fig.29 Esquema de la rutina de servei a la interrupció del Timer0

RUTINA D’ATENCIÓ A LA INTERRUPCIÓ

DEL TIMER0

Recàrrega ràpida del timer per noves

interrupcions

Decrement acumulador temps A/D i decrement

acumulador temps PWM

Acumulador temps actualit. PWM=0?

FUNCIÓ CONTROL SORTIDA FONT

Es llegeix nou valor EEPROM interna i

s’actualitza el PWM

Incrementa l’adreça de lectura EEPROM interna i es recarrega acumulador temps

PWM

Si

Acumulador temps adquisició=0?

No

FUNCIÓ ADQUISICIÓ Si

RETORN FUNCIÓ PRINCIPAL

No

Conversió A/D i guardem 8 bits alts

S’escriu el valor convertit a la

EEPROM externa

S’incrementa l’adreça d’escriptura de la

EEPROM externa i es recarrega acumulador

temps A/D

Page 41: SISTEMA DE CONTROL D’UNA FONT D’ALIMENTACIÓ DE …deeea.urv.cat/public/PROPOSTES/pub/pdf/361pub.pdfhaurà de ser bastant òptim en quant a connexions dels components per poder

MEMÒRIA DESCRIPTIVA

41

La interrupció del Timer0 es dóna cada 50 ms i és en aquest interval de temps on s’han de poder realitzar les funcions que s’han descrit. Algunes de les accions anteriors requereixen d’un procés d’espera o d’enquesta que, formant part del codi d’una interrupció, podrien desestabilitzar el funcionament global del software en cas que es produís algun problema. Vegem breument, doncs, quines són aquestes accions i com es manegen perquè tot vagi correctament. El convertidor A/D ha de complir uns requeriments perquè l’error en l’adquisició sigui mínim. És necessari un temps, en el moment que s’activa el convertidor, perquè amb tota seguretat la capacitat associada al mòdul sigui carregada amb el mateix nivell de tensió que hi ha a l’entrada del canal i, a més, cal esperar a que la pròpia conversió finalitzi i doni el resultat en els registres corresponents. Utilitzant el Timer1 amb un temps fix, es controla el que es pot anomenar el període de preparació, mentre que s’aplicarà una enquesta a un bit per conèixer el moment en el que tenim la conversió a punt. Tots aquests events omplen una molt petita part dels 50 ms i només en cas que el hardware del convertidor no funcionés correctament tindríem problemes en el temps d’execució d’aquesta rutina. En una comunicació sèrie via I2C, el dispositiu que fa les funcions de master sempre espera una confirmació per part de l’esclau per saber si aquest reconeix tot el que li envia. Si tot va correctament, es produirà un cicle d’espera per confirmació i 3 cicles per conèixer si el buffer està buit durant una operació d’escriptura d’un byte. Problemes de discontinuïtat, de capacitat del bus o de mal funcionament de les memòries esdevindrien en un temps massa elevat. El control d’errors acota el nombre d’esperes per confirmació i finalitza el mode de funcionament quan és massa elevat. 5.3.4-Transmissió de dades L’usuari pot accedir a aquest mode a partir de la selecció d’activitats de la funció d’inici o com a continuació del mode d’adquisició i control anterior. Novament, el software ha d’estar al corrent d’alguns dels bytes de configuració que hi ha a la EEPROM interna, més concretament, de l’adreça de memòria I2C fins la que hem escrit mostres de corrent i del nombre de memòries que hem omplert. S’encén també el led referent a aquest mode. El port sèrie ja es troba configurat des del moment que s’inicia el PIC16F876 i només manca habilitar-lo per enviar i perquè pugui generar interrupcions per aquest fi. De la mateixa forma que en el mode anterior, durant la transmissió s’entra en un procés iteratiu que finalitza tan bon punt s’igualen l’adreça actual de lectura amb la que hem llegit anteriorment i que marca la fi del procés. Un error en la comunicació del PIC amb la memòria externa també provocarà un avortament. Un cop es finalitza per algun dels anteriors motius, el programa apaga el led del present mode i torna a reiniciar-se amb la funció d’inici i amb el menú de selecció d’activitat. Les interrupcions en aquest mode les genera la transmissió de dades pel port sèrie. Configurada inicialment perquè es doni a una velocitat de 9600 bps, cada vegada que el microcontrolador envia el bit STOP, que succeeix cadascun dels bytes que surten, es buida el buffer de transmissió i s’executa la rutina de servei a la interrupció. Aquesta s’atendrà, tenint en compte la velocitat, amb períodes propers a 1 ms. En aquest temps, el PIC es comunica amb la EEPROM externa, llegeix el byte que li toca, incrementa la

Page 42: SISTEMA DE CONTROL D’UNA FONT D’ALIMENTACIÓ DE …deeea.urv.cat/public/PROPOSTES/pub/pdf/361pub.pdfhaurà de ser bastant òptim en quant a connexions dels components per poder

MEMÒRIA DESCRIPTIVA

42

variable que conté la propera adreça i escriu la dada llegida en el registre corresponent perquè pugui ser transmesa sense perdre temps. La comunicació sèrie via I2C està configurada per treballar a una velocitat 10 vegades superior a la comunicació sèrie normal i és per això que ens podem prendre el luxe de llegir i enviar byte a byte sense que es produeixi cap tipus de conflicte. La funció de lectura de la EEPROM externa realitza dos esperes del bit de reconeixement provinent de la memòria, dos cicles d’espera per enviar els dos bytes que conformen l’adreça i un cicle per rebre la dada. Si hi ha algun problema físic que impedeixi la comunicació, el control d’errors finalitzarà sobtadament tot el procés de transmissió.

fig.30 Esquema funció de transmissió

5.3.5-Interrupcions De les 13 possibles fonts d’interrupció que permet el PIC16F876, durant l’execució d’aquest software només s’atenen les que provenen del Timer0, de la recepció de dades pel port sèrie i de la transmissió per aquest. Interrupcions que provoca el convertidor A/D o el procés de lectura i escriptura a les memòries I2C, es tracten per enquesta per la senzilla raó que el temps que empren és insignificant en comparació amb d’altres processos.

TRANSMISSIÓ DE DADES

Encesa del led i captura de dades de configuració: lectura de

l’adreça final a la que s’ha escrit

S’habiliten interrupcions per transmissió. Adreça de lectura de

EEPROM externa =0

És l’adreça actual de lectura de memòria igual a l’adreça

de final de procés o s’ha produït error de comunicació?

INTERRUPCIÓ PER TRANSMISSIÓ

S’apaga led i s’inhibeixen les

interrupcions

RETORN A LA FUNCIÓ D’INICI

Si

No

Lectura EEPROM externa del byte corresponent a l’adreça actual

Increment de la variable adreça

Es col·loca el byte al port sèrie perquè sigui

enviat

Page 43: SISTEMA DE CONTROL D’UNA FONT D’ALIMENTACIÓ DE …deeea.urv.cat/public/PROPOSTES/pub/pdf/361pub.pdfhaurà de ser bastant òptim en quant a connexions dels components per poder

MEMÒRIA DESCRIPTIVA

43

Un PIC16F876 no distingeix l’origen de la interrupció, via hardware, ja que no té cap dispositiu específic que es dediqui a tal efecte. Per tant, quan s’esdevé una interrupció el microcontrolador sempre executa un codi programat que distingeix, via software, quin ha estat el dispositiu que ha realitzat aquella petició. Del software depèn el fet que es doni prioritat a certes interrupcions i que, a més, se’n puguin donar de noves mentre se n’executa una, ja que els 8 nivells de pila així ho permeten. En la rutina d’atenció a les interrupcions, el primer que s’ha de fer és guardar l’estat d’alguns registres que permetin, un cop es torna a l’execució normal, continuar de la mateixa manera com ho havíem deixat. Són especialment importants els registres d’STATUS i W que contenen informació de l’estat de les últimes operacions executades abans de la pròpia interrupció i que, amb gairebé tota seguretat, seran modificats dins d’aquesta. Quan un dispositiu desitja interrompre, canvia l’estat d’un bit concret pertanyent a un dels registres de les interrupcions. Llegint l’estat dels bits que ens interessen, el software esbrinarà quina ha estat la font d’aquella interrupció i n’executarà el codi associat. Per lògica, l’ordre amb el que es llegeix l’estat d’aquest bits determina la prioritat que el programador dóna a les diferents interrupcions. En el nostre cas, no hi ha cap moment en el que s’habiliti més d’una font i, per tant, no té massa sentit parlar de jerarquia. A més, si una mateixa interrupció es torna a donar mentre s’està executant el codi associat a aquesta senzillament no passa res, ja que totes queden inhibides fins que no se surt de la rutina d’atenció (a menys que el programador ho eviti).

En sortir de la interrupció, es recupera el contingut dels dos registres tal i com es trobaven abans d’entrar-hi. L’estat dels bits que indiquen la font d’interrupció es canvia, perquè d’altra manera tornarien a provocar-ne una de nova tan bon punt en sortíssim (s’ha de dir que alguns d’aquest bits els desactiva el mateix hardware). El pas final és habilitar de nou les interrupcions en general activant un bit del registre de control d’interrupcions que automàticament es posa a 0 quan se n’executa una.

Page 44: SISTEMA DE CONTROL D’UNA FONT D’ALIMENTACIÓ DE …deeea.urv.cat/public/PROPOSTES/pub/pdf/361pub.pdfhaurà de ser bastant òptim en quant a connexions dels components per poder

MEMÒRIA DESCRIPTIVA

44

fig.31 Algoritme d’atenció a una interrupció

6 Bibliografia [1] James W. Nilson and Susan A. Riedal, Electric circuits. Perason Education. http://www.prenhall.com [2] Joseph A. Edminister and Mahmood Nahvi, Circuitos eléctricos. Mc Graw Hill. [3] Fco. Javier Ceballos, Enciclopedia de Microsoft Visual Basic 6. Ra-ma. [4] José Maria Angulo Usategui, Susana Romero Yasa i Ignacio Angulo Martínez, Microcontroladores PIC. Mc Graw Hill. [5] http://ww1.microchip.com/downloads/en/DeviceDoc/30292c.pdf PIC16F876 datasheet [6] http://ww1.microchip.com/downloads/en/DeviceDoc/21203M.pdf 24LC256 I2C EEPROM memory datasheet

INTERRUPCIÓ GENERAL

Es guarda STATUS i W sense variar-ne

l’estat

Està el bit d’interrupció per recepció activat?

Està el bit d’interrupció per

transmissió activat?

Ha desbordat Timer0?

RUTINA DE RECEPCIÓ

RUTINA DE TRANSMISSIÓ

RUTINA TIMER0

Es recuperen STATUS i W

Es desactiven tots els bits d’interrupció i s’habiliten

les interrupcions en general

PROGRAMA PRINCIPAL

Si

Si

Si

No

No

No

Page 45: SISTEMA DE CONTROL D’UNA FONT D’ALIMENTACIÓ DE …deeea.urv.cat/public/PROPOSTES/pub/pdf/361pub.pdfhaurà de ser bastant òptim en quant a connexions dels components per poder

MEMÒRIA DESCRIPTIVA

45

[7] http://grupos.unican.es/dyvci/ruizrg/html.files/LibroWeb.html Gustavo A. Rodríguez Robredo, Electrónica básica para ingenieros [8] A. Papoulis i M. Bertran, Sistemas i circuitos digitales i analógicos. Marcombo

Page 46: SISTEMA DE CONTROL D’UNA FONT D’ALIMENTACIÓ DE …deeea.urv.cat/public/PROPOSTES/pub/pdf/361pub.pdfhaurà de ser bastant òptim en quant a connexions dels components per poder

SISTEMA DE CONTROL D’UNA FONT D’ALIMENTACIÓ DE LABORATORI

MEMÒRIA DE CÀLCUL

AUTOR: Albert Marsal Vinadé.

DIRECTOR: Xavier Vilanova Salas.

DATA: Desembre/2004.

Page 47: SISTEMA DE CONTROL D’UNA FONT D’ALIMENTACIÓ DE …deeea.urv.cat/public/PROPOSTES/pub/pdf/361pub.pdfhaurà de ser bastant òptim en quant a connexions dels components per poder

MEMÒRIA DE CÀLCUL

2

ÍNDEX

1 Hardware ............................................................................................................. 4 1.1-Filtre passabaix .................................................................................................. 4 1.2-Convertidor A/D ................................................................................................ 7 1.3-PWM .................................................................................................................. 7 1.4-Capacitat de la memòria EEPROM externa .................................................... 8 1.5-Càlcul dels condensadors................................................................................... 9 1.6-Càlcul de resistències ....................................................................................... 10 2 Software .............................................................................................................. 11 2.1 Software PC ..................................................................................................... 11 2.1.1-Configuració port sèrie ............................................................................. 11 2.1.2-Obtenció de variables per la configuració del PIC.................................... 13 2.1.3-Creació de fulles de càlcul per l’obtenció del senyal consigna.................. 16 2.1.4-Càlcul dels valors de consigna adaptats al mòdul i transmissió ................ 17 2.1.5-Recepció de dades i representació gràfica ................................................. 20 2.2-Software del PIC16F876 .................................................................................. 24 2.2.1-Definició de variables i inicialització ........................................................ 24 2.2.1.1-Inicialització dels ports ...................................................................... 25 2.2.1.2-Inicialització USART .......................................................................... 26 2.2.1.3-Inicialització I2C ................................................................................ 26 2.2.1.4-Convertidor A/D................................................................................. 27 2.2.1.5-Selecció d’activitat: determinació del commutador canviat ................ 27 2.2.2-Procés de configuració; recepció de dades del PC .................................... 28 2.2.3-Adquisició de valors i control de la font .................................................... 32 2.2.3.1-Programació PWM ............................................................................ 33

Page 48: SISTEMA DE CONTROL D’UNA FONT D’ALIMENTACIÓ DE …deeea.urv.cat/public/PROPOSTES/pub/pdf/361pub.pdfhaurà de ser bastant òptim en quant a connexions dels components per poder

MEMÒRIA DE CÀLCUL

3

2.2.3.2-Configuració TIMER0 ........................................................................ 35 2.2.3.3-Bucle d’adquisició i control................................................................ 35 2.2.3.4-Interrupció TIMER0 ........................................................................... 37 2.2.3.5-Funció conversió A/D......................................................................... 40 2.2.3.6-Escriptura EEPROM externa I2C ....................................................... 41 2.2.4-Transmissió de dades ................................................................................ 44 2.2.4.1-Interrupció transmissió ...................................................................... 45 2.2.4.2-Lectura EEPROM externa I2C............................................................ 46 2.2.5-Interrupcions ............................................................................................ 47

Page 49: SISTEMA DE CONTROL D’UNA FONT D’ALIMENTACIÓ DE …deeea.urv.cat/public/PROPOSTES/pub/pdf/361pub.pdfhaurà de ser bastant òptim en quant a connexions dels components per poder

MEMÒRIA DE CÀLCUL

4

1 Hardware En els següents apartats es pretén justificar la utilització dels diferents components discrets que apareixen en la placa del mòdul de control i, a la vegada, dimensionar l’error que es comet en certs hàbits que intervenen en l’execució del present projecte. 1.1-Filtre passabaix

El filtre passabaix és l’encarregat de convertir el senyal que surt del PWM del microcontrolador en un senyal estable i de naturalesa contínua. Per això, és necessari que elimini rotundament tots els harmònics de freqüència superior a 0 Hz. Vegem primer quina forma presenta el senyal de sortida del PWM i com es pot descomposar segons Fourier (en cas d’ignorar aquest darrer terme, es recomana consultar el llibre de la bibliografia [8]).

fig.1 Sortida del PWM

F(t) és un senyal rectangular periòdic amb un cicle de treball que s’expressa com el percentatge de temps en un període en que el senyal es troba a nivell alt. La freqüència és d’uns 3906 Hz segons el que el programador ha decidit durant el disseny. El període de canvi del cicle de treball és molt baix en comparació amb el del senyal i, per tant, considerarem un cicle de treball constant perquè a efectes pràctics no tindrà cap tipus d’influència sobre el filtre. Podem expressar la sèrie de Fourier de f(t) com:

)sincos()( 01

0 tnwbtnwaatfn

non∑∞

=

++= (1.1)

amb T

wπ2

0 = i ∫=T

n dttnwtfT

a0

0cos)(2

(1.2) i ∫=T

dttfT

a0

0 )(1

(1.3)

∫=T

n dttnwtfT

b0

0sin)(2

(1.4)

Anomenant K al temps de cicle de treball i A a l’amplitud del senyal, obtenim ràpidament de 1.2 i 1.3 que:

]T

AKt

TA

AdtT

dttfT

a KKT

==== ∫∫ 000

01

)(1

(1.5)

KnwnA

nwtnw

TA

dttnwAT

dttnwtfT

aKKT

n 0

00

0

00

00 sin

sin2cos

2cos)(

=

=== ∫∫ (1.6)

Page 50: SISTEMA DE CONTROL D’UNA FONT D’ALIMENTACIÓ DE …deeea.urv.cat/public/PROPOSTES/pub/pdf/361pub.pdfhaurà de ser bastant òptim en quant a connexions dels components per poder

MEMÒRIA DE CÀLCUL

5

[ ]1coscos2

sin2

sin)(2

0

00

0

00

00 −

−=

−=== ∫∫ Knw

nA

nwtnw

TA

dttnwAT

dttnwtfT

bKKT

n π

(1.7) Per tant, expressarem finalment f(t) de la següent forma:

[ ]∑∞

=

−++=

100 cos1cossin)(

no Knw

nA

tnwKnwnA

TAK

tfππ

(1.8)

De l’expressió 1.8 en traiem que la funció de sortida del PWM està formada per

un valor constant o valor mig, T

AK, i infinits harmònics de freqüències múltiples de la

freqüència fonamental que és de 3906 Hz. Com es pot observar, el valor mig és directament proporcional a K, per tant, si el cicle de treball és un x% de T, el valor mig valdrà també un x% de A. És molt senzill, doncs, calcular el cicle de treball necessari si es coneix la tensió mitja que es desitja. El que es pretén amb el procés de filtrat és eliminar tots els harmònics i deixar només el valor mig, que és el que ens interessa i és el que el PC calcula alhora de controlar la sortida de la font. Per fer-ho, evidentment, es necessita un filtre passabaix que atenuï totalment les freqüències superiors a la utilitzada pel PWM. En la següent figura es pot observar un filtre passabaix actiu, com l’utilitzat en el projecte. Esbrinem ara quina és la seva funció de xarxa:

fig.2 Filtre actiu de segon ordre

Suposant que l’amplificador operacional és ideal i que, per tant, el corrent

d’entrada és nul i aplicant el circuit transformat de Laplace, s’obtenen les següents equacions aplicant la llei de Kirchhoff:

( )

=−

+

=−

+−+−

0

0

2

020

2

010

1

RVV

sCV

RVV

sCVVR

VV

a

aa

ia

(1.9)

Agrupant termes de 1.9:

( ) ( )( )

=−+=+−++

01220

21121011212

a

ia

VsCRV

RVRsCRRVRsCRRRV (1.10)

Page 51: SISTEMA DE CONTROL D’UNA FONT D’ALIMENTACIÓ DE …deeea.urv.cat/public/PROPOSTES/pub/pdf/361pub.pdfhaurà de ser bastant òptim en quant a connexions dels components per poder

MEMÒRIA DE CÀLCUL

6

Usant la regla de Cramer en 1.10:

22

121111212

211212

0

11

01

sCR

sCRRRRsCRRR

RVRsCRRR

V

i

+−−−++

−++

=

1211221212

1222

2211212

20 sCRRRsCRRCCsRRsCRRsCRRR

RVV i

−−+++++= (1.11)

( )2112112

212

2112

21212

1222

0

1

1

11

)(

CCRRCRRRRs

s

CCRRsCRCCsRRsCRV

VsH

i ++

+=

+++== (1.12)

Si apliquem a 1.12 que, com en el nostre cas real, R1=R2=R i C1=C2=C, obtenim una funció de xarxa molt més manejable:

222

22

12

1

)(

CRRCs

s

CRsH++

= (1.13)

Amb un pol real doble al semiplà esquerra definit per 1.14:

RCCRCRRCs

12

4422222

2,1−

=−±

= (1.14)

La freqüència de tall del filtre (definida per 1.14) ha de ser major que 0 Hz i molt més petita que el primer harmònic de 3906 Hz, perquè d’aquest ens interessa una influència insignificant. En el nostre cas s’han escollit uns valors molt comuns, 1 µF pels condensadors i 10 kO per les resistències, que donen una freqüència de tall d’uns 15,9 Hz. Si tenim en compte que en el disseny final s’han utilitzat dos filtres com l’anterior més un filtre RC, resulta que, globalment, tenim un sistema passabaix de 5è ordre amb 5 pols en el mateix punt, ja que tots els condensadors i les resistències són iguals. La funció de xarxa global de tot el filtre és la següent:

+

++

++

=

RCs

RC

CRRCs

s

CR

CRRCs

s

CRsH1

1

12

1

12

1

)(

222

22

222

22 (1.15)

Un dels aspectes interessants del disseny d’aquest filtre és que si en modifiquem el valor del conjunt de resistències o de condensadors per d’altres amb un ordre de magnitud de fins a 10 vegades major o menor, funciona perfectament per l’aplicació que se li dóna en aquest projecte. S’han escollit aquests valors per poder afrontar possibles canvis en el software del microcontrolador que poguessin disminuir la freqüència del PWM i perquè són molt corrents i senzills de trobar.

Calculem finalment la influència de l’harmònic fonamental que és de (mirant 1.6 i 1.7 i tenint en compte un guany de -230db):

[ ] VoltsKnwn

AKnw

nA 12-

00 ·3,2x10 1cossin

−+

ππ

Page 52: SISTEMA DE CONTROL D’UNA FONT D’ALIMENTACIÓ DE …deeea.urv.cat/public/PROPOSTES/pub/pdf/361pub.pdfhaurà de ser bastant òptim en quant a connexions dels components per poder

MEMÒRIA DE CÀLCUL

7

1.2-Convertidor A/D En un convertidor analògic/digital de 10 bits, la precisió representada pel bit menys significatiu es calcula com:

1210

)()(

−= −+ refref

LSb

VVV (1.16)

On Vref(+) és, en el nostre cas, la tensió d’alimentació i val teòricament 5 volts

respecte de Vref(-). Substituint a 1.16:

bitmVvolts

VLSb 89,41023

5== (1.17)

Recordem, però, que en aquest projecte només es llegeixen els 8 bits alts de la

conversió i que, per tant, el bit menys significatiu representa un increment de:

bitmVVV

V refrefbitLSb 61,19

2555

128

)()(8 ==

−= −+ (1.18)

El resultat de 1.18 també representa l’error màxim que es té amb 8 bits.

Com que el valor dels dos bits baixos de la conversió amb 10 bits no el coneixem, podem aplicar, mitjançant el software del PC, un increment mitjà de +0,5·VLSb8bit a cada dada obtinguda del convertidor. D’aquesta manera disminuïm el rang de l’error màxim a la meitat que es pot quantificar, tenint en compte 1.18, en:

mVVV bitLSberror 8,921

8 ±=±= (1.19)

1.3-PWM Com hem pogut veure en l’expressió 1.5, el valor del cicle de treball influeix directament sobre el nivell de la tensió de freqüència 0 o contínua. El PWM del PIC16F876 consta de 10 bits que defineixen el percentatge de període en que la sortida es troba en alt. Amb aquest nombre de bits es poden aplicar increments mínims del:

%098,010012

110

=−

del temps total per període. (1.20)

En el nostre cas, l’ordinador envia al PIC el conjunt de cicles de treball que

conformaran la consigna de sortida de la font. Per estalviar espai de memòria interna del microcontrolador, aquestes dades són enviades amb el tamany d’un byte i, aleshores, es perd definició. En el nostre cas particular, seguint l’exemple de 1.20, tenim increments mínims del:

%39,010012

18

=−

del temps total per període.

Si apliquem aquest increment a 1.5 o, el que és el mateix, calculem la mínima

variació de valor mig que es pot experimentar a la sortida del PWM, tenim:

0039,0·0039,0·

AT

TAT

AKVmig ===∆ (1.21)

Page 53: SISTEMA DE CONTROL D’UNA FONT D’ALIMENTACIÓ DE …deeea.urv.cat/public/PROPOSTES/pub/pdf/361pub.pdfhaurà de ser bastant òptim en quant a connexions dels components per poder

MEMÒRIA DE CÀLCUL

8

On el cicle de treball K val el 0,39% de T. Si, a més, considerem l’amplitud A constant i de 5 volts, obtenim el següent increment de tensió:

voltsVmig 0197,00039,0·5 ==∆ Tenint en compte que la font Amrel l’amplificarà 60 vegades, l’increment mínim final a la sortida és:

voltsV 17,160·0197,0min0 ==∆ (1.22) Sempre que l’usuari tria una tensió de sortida mitjançant el programa desenvolupat per al present projecte (memòria descriptiva, apartat 5.2.3), ha d’acceptar un error màxim de min0V∆± /2, és a dir, de .588,0 volts± 1.4-Capacitat de la memòria EEPROM externa En aquest projecte es poden emprar fins a 8 memòries EEPROM I2C de 256 kbits de capacitat (mirar plec de condicions, apartat 3.1.8). Això genera un espai de memòria màxim de:

kbyteskbitskbits 25620488·256 == (1.23)

Com hem vist en l’apartat 1.2 d’aquest capítol, cadascuna de les dades que s’ha d’emmagatzemar té el tamany d’un byte. Cada adquisició es fa periòdicament i això ens permet conèixer el temps que podrem estar adquirint dades fins que s’esgoti la capacitat que en aquell moment hi hagi instal·lada. La taula 1 relaciona el temps màxim del procés de mostreig amb l’interval de mostreig i la capacitat de memòria instal·lada:

NUM. MEMO.

INT. MOSTREIG

1 2 3 4 5 6 7 8

0,1 seg. 54 min. 1 h. 49 min.

2 h. 43 min.

3 h. 38 min.

4 h. 33 min.

5 h. 28 min.

6 h. 22 min.

7 h. 17 min.

0,2 seg. 1 h. 49 min.

3 h. 38 min.

5 h. 28 min.

7 h. 18 min.

9 h. 6 min.

10 h. 54 min.

12 h. 44 min.

14 h. 34 min.

0,5 seg. 4 h. 33 min.

9 h. 6 min.

13 h. 39 min.

18 h. 12 min.

22 h. 45 min.

27 h. 18 min.

31 h. 51 min.

36 h. 25 min.

1 seg. 9 h. 6 min.

18 h. 12 min.

27 h. 18 min.

36 h. 24 min.

45 h. 31 min

54 h. 37 min.

63 h. 43 min.

72 h. 49 min.

1,5 seg. 13 h. 39 min.

27 h. 18 min.

40 h. 58 min.

54 h. 37 min.

68 h. 16 min.

81 h. 55 min.

95 h. 34 min.

109 h. 14 min.

2 seg. 18 h. 12 min.

36 h. 24 min.

54 h. 37 min.

72 h. 49 min. 91 h. 109 h.

14 min. 127 h.

25 min. 145 h.

38 min.

3 seg. 27 h. 18 min.

54 h. 37 min.

81 h. 55 min.

109 h. 14 min.

136 h. 32 min.

163 h. 50 min.

191 h. 9 min.

218 h. 27 min.

5 seg. 45 h. 31 min. 91 h. 136 h.

32 min. 182 h. 227 h. 33 min.

273 h. 4 min.

318 h. 35 min.

364 h. 5 min.

10 seg. 91 h. 182 h. 273 h. 364 h. 5 min.

455 h. 6 min.

546 h. 8 min.

637 h. 9 min.

728 h. 11 min.

Taula 1 Relació temps total de mostreig amb interval de mostreig i capacitat de

memòria Nota 1: Les dades obtingudes al quadre són aproximades i obtingudes de 1.24. Nota 2: Els càlculs s’han fet tenint en compte que 1 kbyte=1024 bytes

Page 54: SISTEMA DE CONTROL D’UNA FONT D’ALIMENTACIÓ DE …deeea.urv.cat/public/PROPOSTES/pub/pdf/361pub.pdfhaurà de ser bastant òptim en quant a connexions dels components per poder

MEMÒRIA DE CÀLCUL

9

=

byteseg

mostreigmembytes

memnumsegtotalTemps ·int_32768·_)(_ (1.24)

Cal considerar que amb 10 bits es perd un 20% de capacitat. S’ha premiat,

doncs, el fet de perdre resolució enfront la possibilitat de disminuir el temps total de memòria. 1.5-Càlcul dels condensadors Exceptuant el conjunt de condensadors utilitzats pel filtre, la resta s’obtenen a partir dels fulls de característiques que proporciona el fabricant. D’aquesta manera tenim que: -Els condensadors que hi ha a l’entrada i sortida del regulador de tensió LM7805 que serveixen per millorar-ne la resposta transitòria, tenen un valor de 0,33 µF i 0,1 µF respectivament segons s’aconsella en el datasheet per una regulació de tensió fixa. -L’estructura esquemàtica de l’oscil·lador que excita al microcontrolador es pot veure en el següent esquema:

fig.3 Configuració de l’oscil·lador en cristall

A la sortida de l’inversor apareix un senyal d’entrada amb desfasament de 180º. Es pot assumir que la impedància C1 serà molt més important que R1 per una certa freqüència i que, llavors, la xarxa RC introduirà un desfasament de 90º. A la freqüència de ressonància, el cristall es pot modelar com una resistència que formarà una nova xarxa RC amb el condensador C2, introduint novament un desfasament de 90º. La fase total és llavors de 360º i això genera una de les condicions fonamentals perquè hi hagi oscil·lació. Si el guany de l’amplificador és prou gran per superar les pèrdues en ambdues xarxes RC i el guany total és major que 1, ja tenim la segona condició d’oscil·lació i, efectivament, oscil·la. El valor de les capacitats C1 i C2 es pot trobar en el datasheet del PIC16F876 en l’apartat 12.2. -El condensador associat al bus I2C no és, en principi, necessari pel seu bon funcionament. Si la capacitat associada al bus no és l’adequada, llavors s’hi haurà

Page 55: SISTEMA DE CONTROL D’UNA FONT D’ALIMENTACIÓ DE …deeea.urv.cat/public/PROPOSTES/pub/pdf/361pub.pdfhaurà de ser bastant òptim en quant a connexions dels components per poder

MEMÒRIA DE CÀLCUL

10

d’acoblar un condensador de 10 a 400 pF segons marca el datasheet del PIC16F876 en l’apartat 9.3. En el nostre cas s’ha triat de 22 pF. -Segons el datasheet del MAX232, s’han de connectar 5 condensadors de 1 µF per tal de polaritzar l’integrat. 1.6-Càlcul de resistències En el conjunt dels commutadors s’han col·locat dos resistències limitadores de corrent per poder evitar possibles problemes de curtcircuits. En efecte, si hi hagués algun tipus de derivació de corrent a massa a través d’un dels commutadors o es produís alguna anomalia en el funcionament intern del microcontrolador en la pota concreta on hi ha aquella resistència, el corrent es veuria fortament limitat i possiblement s’evitaria el deteriorament d’algun altre component electrònic del mòdul. Aquestes resistències han de ser grans, però no prou com per poder-se equiparar amb la impedància d’entrada de la pota en qüestió. En aquest projecte s’han escollit resistències de 10 k? que limitaran el corrent a:

mAamperskV

I 5,00005,010

5max ==

Ω= (1.25)

Pel que fa al bus I2C, ambdues línies han d’anar connectades a resistències de pull-up. Segons es marca en l’apartat 9.3 del datasheet del PIC16F876, el valor mínim d’aquestes ha de ser de 1,7 k? . S’han utilitzat, però, de 2,2 k? per tal d’evitar el mínim i perquè és un valor de resistència molt comú.

Page 56: SISTEMA DE CONTROL D’UNA FONT D’ALIMENTACIÓ DE …deeea.urv.cat/public/PROPOSTES/pub/pdf/361pub.pdfhaurà de ser bastant òptim en quant a connexions dels components per poder

MEMÒRIA DE CÀLCUL

11

2 Software Com s’ha pogut veure en la memòria descriptiva, ha estat necessari el desenvolupament de dos programes per poder satisfer les exigències fixades en un principi. En aquest apartat es pretén veure, de manera intuïtiva, com han estat programades el conjunt de rutines que s’han descrit en la memòria descriptiva, és a dir, evitant el codi font del programa, que es pot trobar en els annexes, i utilitzant nombrosos diagrames de flux. 2.1 Software PC

Es descriuran les instruccions que segueix l’ordinador per executar les rutines i esdeveniments que es succeeixen durant una execució. El programa està escrit en Visual Basic 6.0, però no fa falta conèixer aquest llenguatge perquè no es veuran les instruccions directament. El que si que cal és saber que aquest llenguatge només executa codi quan l’usuari realitza certes accions, com prémer un botó o escriure en una quadre de text, o quan es produeix algun tipus d’interrupció que hagi estat programada per poder ser atesa. Per tant, la major part del temps el programa senzillament espera que l’usuari realitzi alguna acció.

Les interrupcions en Visual Basic no es poden atendre amb la mateixa efectivitat amb la que corresponen llenguatges com el C (sota entorn Windows es fa molt més complicat que sota entorn MS-DOS), encara que per aplicacions que no requereixen un control molt estricte, se’ls hi pot oferir servei amb suficient rapidesa. En el Visual Basic, en tant que és un llenguatge molt gràfic a l’estil del Microsoft Windows, parlarem constantment dels formularis que són les diferents pantalles amb opcions que apareixeran durant l’execució del programa. En aquests hi anirem “enganxant” els diferents botons, quadres de text, menús, etc, que definiran les opcions que el programador estableix per aquell formulari en concret (mirar memòria descriptiva figures 13, 14, 16,... , com a exemples de formularis). És important tenir aquest concepte clar perquè tot el codi del programa estarà lligat amb els diferents esdeveniments que es succeiran a través dels elements d’un formulari.

Amb el mateix ordre com s’ha explicat en la memòria descriptiva, començant per la configuració del port sèrie i acabant pel tractament i la visualització de les dades rebudes, a continuació s’exposen els següents apartats. 2.1.1-Configuració port sèrie A diferència d’altres llenguatges on s’hauria d’accedir a la configuració de l’integrat 8259 per controlar les interrupcions i del 8250 per la comunicació sèrie, amb el Visual Basic només cal obrir un control de comunicacions que proporcionarà al programador una interfície per poder-ne controlar les propietats. D’aquestes se’n poden destacar les següents: -Les propietats inbuffersize i outbuffersize especifiquen la quantitat de memòria assignada als buffers de recepció i transmissió respectivament. Quant majors siguin, menys memòria disposarem per l’aplicació (això té especial rellevància en ordinadors antics i de poca memòria) però si, en canvi, el buffer és massa petit, podem córrer el risc

Page 57: SISTEMA DE CONTROL D’UNA FONT D’ALIMENTACIÓ DE …deeea.urv.cat/public/PROPOSTES/pub/pdf/361pub.pdfhaurà de ser bastant òptim en quant a connexions dels components per poder

MEMÒRIA DE CÀLCUL

12

que es desbordi. Per ambdós s’ha escollit un tamany de 512 bytes que és tal i com es troben per defecte i és del tot suficient per les velocitats de transmissió a les que es treballa. -Les propietats RThreshold i SThreshold estableixen el nombre de caràcters que ha d’entrar en els buffers de recepció o transmissió per tal que es produeixi una interrupció en l’execució normal del programa. Aquesta interrupció s’anomena Oncomm i es dóna cada vegada que ocorre alguna de les següents situacions:

-Hi ha un nombre, igual a SThreshold, de caràcters en el buffer de transmissió. -Hi ha un nombre, igual a RThreshold, de caràcters en el buffer de recepció. La interrupció es generarà contínuament fins que es llegeixin. -En comunicació a través de mòdem, es produeix un canvi en alguna de les línies CTS, DSR (de “1” a “0”) o CD. -En comunicació a través de mòdem, quan es detecta una trucada. -Si es rep el caràcter de final de fitxer. -Si es produeix algun tipus d’error en la comunicació (error de trama, desbordament d’algun dels buffers,...)

En el nostre cas, es desitja una interrupció per cada caràcter que entri o surti. Per això, establirem les propietats RThreshold i SThreshold a 1. -La propietat InputLen especifica el nombre de bytes que es llegeixen alhora del buffer de recepció. Per motius pràctics es creu convenient llegir-los d’un en un perquè així s’estalvien futures operacions. D’altra banda, tenim les típiques opcions del port sèrie que són les que l’usuari pot escollir en l’entorn del programa. Així es pot modificar la velocitat de transmissió, el nombre de bits de paritat, el nombre de bits per trama i els bits de parada. Naturalment, aquesta configuració ha de ser la mateixa amb la que treballi el microcontrolador.

També existeix la possibilitat d’establir un protocol de comunicació, en cas que s’hagués d’utilitzar un mòdem, cosa que asseguraria que les dades no es perdessin per un desbordament del buffer. I, finalment, l’últim que es pot configurar és la manera com el software llegirà les dades que li arriben pel port sèrie: en mode text, on correspondrà cada byte amb un caràcter del codi ANSI, o en mode binari, on les dades entrants seran matrius de bits. En el present projecte les dades es llegiran en mode text, perquè seran més fàcils de manejar, i no s’establirà cap protocol de comunicació perquè la velocitat amb la que es treballa no és prou elevada com per donar problemes.

Amb tota la configuració enllestida, s’obre el port triat (COM1, COM2,...) i a

partir d’aquest instant les interrupcions del port sèrie ja queden activades. Del conjunt de fonts que poden desencadenar aquest tipus d’interrupció (mirar pàgina anterior),

Page 58: SISTEMA DE CONTROL D’UNA FONT D’ALIMENTACIÓ DE …deeea.urv.cat/public/PROPOSTES/pub/pdf/361pub.pdfhaurà de ser bastant òptim en quant a connexions dels components per poder

MEMÒRIA DE CÀLCUL

13

només es farà atenció a les que indiquen l’existència de dades rebudes en el buffer. Així doncs, quan es succeeix una interrupció amb aquesta naturalesa: -El Visual Basic genera un valor o codi que especifica la font concreta que l’ha desencadenat. -En la rutina de servei, es compara aquest valor amb tots els possibles codis i seguidament s’executaran les instruccions específiques per aquell esdeveniment en concret.

-Si la interrupció s’ha produït per un error en la comunicació, el software l’anuncia.

-Si s’ha donat per algun canvi en les línies de comunicació a través de mòdem, s’anuncia perquè, si no hi ha mòdem, és molt probable que tinguem un error de connexió amb els cables. -Si s’ha rebut un byte es llegeix i, depenent del moment en el que es rep i de certs condicionants, es fa correspondre a una de les mostres de corrent o a la capacitat de memòria EEPROM externa de que disposa el PIC (més endavant quedarà clar com els distingeix el software). -Si hi ha una dada al buffer de transmissió senzillament no es realitza cap acció dins la rutina de servei, ja que el fet d’enviar informació és una acció perfectament controlable des de l’execució normal del programa.

Amb tot això ja tenim el port sèrie configurat i ja es pot tirar endavant amb l’execució del programa. 2.1.2-Obtenció de variables per la configuració del PIC En la configuració del mòdul de control, l’usuari estableix certs paràmetres omplint els quadres de text que apareixen en un formulari. Perquè el PIC els pugui interpretar, aquests paràmetres han d’estar en un format adequat i han de complir certes condicions derivades de les següents dades: -El temps base de les operacions del mòdul, que és de 49,92 mil·lisegons. -La capacitat de memòria del mòdul. El temps base és constant i depèn del software gravat dins el microcontrolador, però la capacitat de memòria és variable i la comunica el mòdul al PC cada vegada que s’inicia un procés de configuració com aquest. El procés de configuració comença quan l’ordinador envia el caràcter “A” pel port sèrie i espera 5 segons a que el mòdul respongui. Aquesta espera acabarà amb una interrupció que executarà una rutina en la que es comprovarà si durant aquest temps s’ha rebut un byte pel port sèrie. Si el codi ANSI d’aquest byte és major que 1 i menor que 9, el PIC haurà atès correctament la petició del PC i coneixerem la memòria total disponible mitjançant la següent operació (degut a que la capacitat de cada xip és constant, la memòria disponible només depèn del nombre de xips connectats i és precisament això el que el PIC envia al PC) :

( ) kbitsrebutbyteANSIMemòria 256·1)_( −= (1.26)

Page 59: SISTEMA DE CONTROL D’UNA FONT D’ALIMENTACIÓ DE …deeea.urv.cat/public/PROPOSTES/pub/pdf/361pub.pdfhaurà de ser bastant òptim en quant a connexions dels components per poder

MEMÒRIA DE CÀLCUL

14

On 256 és la capacitat d’un integrat de memòria en kbits i ANSI(byte_rebut)correspon al valor decimal del codi ANSI al que pertany aquell byte en concret. Després d’això s’activen els quadres de text per omplir les dades de configuració, que fins al moment havien estat desactivats. En cas que la comunicació amb el PIC no hagués estat possible, els quadres de text restarien inactius. Com ja sabem de la memòria descriptiva, tan el temps de mostreig com el temps de llançament de mostres al PWM representen acumuladors de períodes base per poder oferir a l’usuari uns rangs més indicats en les aplicacions prescrites. Aquests acumuladors tenen el tamany d’un byte i, per tant, en l’expressió 1.27 podem veure quin és el període màxim que es pot aconseguir:

msms 1275050·255 = (1.27) En aquest producte s’ha tingut en compte que el temps base del mòdul és de 50 ms, quan en realitat és de 49,92 ms, sense comptabilitzar el temps que es dedica a l’execució de cada instrucció, ni el que es triga en realitzar una adquisició o en actualitzar el PWM. Pel càlcul dels acumuladors, es dividirà el temps escollit per l’usuari pel temps base del mòdul, donant lloc a la següent operació:

=

msmsPWMoDATemps

PWMoDAAcumulador92,49

)/(int)/( (1.28)

On int() significa en l’expressió 1.28 que el resultat és l’enter més proper al quocient de la divisió. L’arrodoniment anterior provoca un error per període de:

msms

períodeError

msmsDATempsmsDATemps

períodeError

96,242

92,49max__

2

92,4992,49

))(/(int

92,49))(/(

_

±=±

= (1.29)

Com que l’error és relativament gran, s’aconsella triar períodes múltiples del temps base que, arrodonint, haurien de ser múltiples de 50 ms. Pel temps total del procés de mostreig, l’ordinador realitza les següents operacions: -Converteix a unitats de mil·lisegons els valors d’hores i minuts que l’usuari ha triat:

Temps_total(ms)=Hores·3600000+minuts·60000 (1.30) -Es divideix el temps total de 1.30 pel temps(A/D) en ms, obtenint el nombre total de mostres que han de ser adquirides:

))(/()(_

_msDATempsmstotalTemps

mostresNombre = (1.31)

-Una mostra equival a un byte que és precisament el tamany d’una posició de memòria de la EEPROM externa, per tant, nombre de mostres equival a nombre de posicions de

Page 60: SISTEMA DE CONTROL D’UNA FONT D’ALIMENTACIÓ DE …deeea.urv.cat/public/PROPOSTES/pub/pdf/361pub.pdfhaurà de ser bastant òptim en quant a connexions dels components per poder

MEMÒRIA DE CÀLCUL

15

memòria. Com que es coneix la capacitat de que disposem (expressió 1.26), el PC sabrà també si tenim suficient memòria com per albergar la quantitat de mostres que pretenem:

mostresNombrebytebitskbitsMemòria

_1/8

)(≥ (1.32)

Com s’ha pogut veure a l’expressió 1.29, es pot cometre un error màxim significatiu que s’anirà acumulant a cada període segons indica la següent relació:

períodeErrormsDATempsmstotalTemps

acumulatError _·))(/()(_

_ ±= (1.33)

Aquest error pot arribar a superar l’interval de mostreig en temps totals de funcionament relativament llargs. Per evitar aquest error, realitzem la següent operació:

=

))(/()(_

int_msDATemps

msacumulatErrorerroróCompensaci (1.34)

Si al nombre de mostres de 1.31 li sumem el resultat de l’operació 1.34 (que al cap i a la fi són més mostres), reduirem l’error notòriament a l’expressió que es reflexa en 1.39. -Si la condició en l‘expressió 1.32 és favorable, l’ordinador realitza un càlcul per poder-li indicar al microcontrolador la quantitat de memòries que ha d’omplir i l’adreça fins la que ha d’escriure per acomplir el temps total triat per l’usuari. Això és:

−= 5,0

)(__)(_

int__bytesmemòriaperCapacitat

bytesmostresNombreplenesmemòriesNombre (1.35)

( ))(__·____ bytesmemòriaperCapacitatplenesmemòriesNombremostresNombrefinalAdreça −=

(1.36)

On en l’expressió 1.35 es busca la part entera del quocient de la divisió. L’operació int() arrodoneix un valor decimal a l’enter més proper, per aquest motiu es resta 0,5 perquè volem que en 1.35 s’arrodoneixi a la baixa. -Una adreça en una memòria EEPROM de 256 kbits ve definida per una paraula de 15 bits. S’haurà de convertir, doncs, l’adreça final en dos bytes:

−= 5,0

256_

int_finalAdreça

altbyte (1.37)

−= 256·_

256_

int_ altbytefinalAdreça

baixbyte (1.38)

El byte alt es calcula sabent que el pes del bit menys significatiu d’aquest és de 256. La part entera del quocient en 1.37 és doncs el seu valor. El byte baix, per la seva banda, representa el residu enter de la divisió en l’expressió 1.37. Com que aquest està expressat en fracció del divisor, s’haurà de multiplicar per 256 per obtenir-lo en fracció de 1. Tot i haver aplicat una correcció per tal que el període total de mostreig sigui força aproximat al que desitja l’usuari, sempre es cometrà un error. Com que el

Page 61: SISTEMA DE CONTROL D’UNA FONT D’ALIMENTACIÓ DE …deeea.urv.cat/public/PROPOSTES/pub/pdf/361pub.pdfhaurà de ser bastant òptim en quant a connexions dels components per poder

MEMÒRIA DE CÀLCUL

16

microcontrolador comptabilitza el període total de mostreig amb la suma d’intervals d’adquisició, la resolució màxima la marca aquest últim interval. D’aquesta manera podem dir que l’error màxim que es cometrà en el temps total que durarà un procés d’execució en mode d’adquisició és:

2))(/(

max__msDATemps

totalError ±= (1.39)

Un cop finalitzat el conjunt de les operacions anteriors, les dades es col·loquen en una matriu i s’envien al mòdul. L’operació de transmissió consisteix en anar escrivint un byte darrera l’altre en el buffer i llavors, tenint en compte la velocitat, el mateix PC els anirà emetent. 2.1.3-Creació de fulles de càlcul per l’obtenció del senyal consigna En el disseny d’aquesta aplicació, s’ha pensat en la utilització de fulls de càlcul de Microsoft Excel per emmagatzemar tan les dades rebudes del mòdul, com el senyal consigna que serà enviat. De fet, el programa sempre demana l’arxiu en el que es troben les dades a ser enviades o, en cas que s’hagin de rebre, el fitxer on es guardaran. Mitjançant un control anomenat Microsoft Common Dialog, el programador pot fer aparèixer les caixes de diàleg amb les que estan plenament familiaritzats el usuaris habituals del Windows, és a dir, el quadre que apareix quan es desitja guardar un arxiu per primer cop, quan es pretén obrir un fitxer ja existent,... Cada vegada, doncs, que l’usuari desitja enviar una consigna com a pas final a una configuració, s’haurà d’introduir el nom i la ruta del fitxer en qüestió. Per tant, en aquest punt l’arxiu ja ha d’estar a punt amb la informació necessària i amb el format adequat perquè el software el pugui llegir sense cap problema (mirar memòria descriptiva, apartat 5.2.3). Existeixen dos formes per a crear un senyal consigna: obrint directament un full de càlcul i omplint-ne la primera columna amb els valors desitjats o originant un fitxer mitjançant el software i un dels senyals que aquest té predefinits. Com que el primer mètode no presenta cap tipus de problema, ens centrarem en el segon que és probablement més complex. Coneixent la funció que representa un senyal periòdic qualsevol, per acabar-lo de definir completament cal conèixer l’amplitud, el període i el nivell d’offset o desplaçament. La freqüència del senyal ja ha estat triada implícitament en el moment en que l’usuari escull el període en que s’aniran actualitzant a la sortida les n mostres que composen el senyal consigna, és a dir:

))((·1

)(segPWMTn

Hzf = (1.40)

On n és el nombre de mostres per període i T(PWM) és el temps d’actualització del PWM del PIC. Les altres dos variables les podrà definir l’usuari en un formulari o menú complementari, així com la pròpia forma de la funció que pot ser: sinusoïdal, quadrada o en dent de serra. L’amplitud i el nivell d’offset es donarà sempre en funció del senyal que ha de sortir de la font, és a dir, amb valors de 0 a 300 volts. Per entrar aquests dos

Page 62: SISTEMA DE CONTROL D’UNA FONT D’ALIMENTACIÓ DE …deeea.urv.cat/public/PROPOSTES/pub/pdf/361pub.pdfhaurà de ser bastant òptim en quant a connexions dels components per poder

MEMÒRIA DE CÀLCUL

17

valors el programa demana a l’usuari els punts de màxima i mínima amplitud que es donaran al llarg d’un període i així obtenim:

22minmaxminmax VV

OffsetVV

Amplitud+

=−

= (1.41)

L’últim que ha d’introduir l’usuari és el nombre de mostres que vol calcular per període. Amb tot això, s’obre el full de càlcul en el que s’ha de col·locar el senyal i s’aplica una de les següents operacions per al càlcul dels valors:

-Sinusoïdal: Offsetmn

Amf +

=

π2·sin)( (1.42)

-Quadrada:

+≤<

++

+≤≤+

=nkmnkOffset

nkmknOffsetAmf

)1(21

0

21

)( ,...)3,2,1,0(=k

(1.43)

-Dent de serra: nlmnlOffsetAlmnA

mf )1(2·2)( +≤≤+−= ,...)3,2,1,0(=l

(1.44) On m és un nombre enter positiu, n representa el nombre total de mostres que té un període, A és l’amplitud del senyal i l’offset és el seu desplaçament respecte l’ordenada 0. Les funcions 1.43 i 1.44, tot i discontínues, estan definides per tot m, de la mateixa manera que 1.42 que és contínua. Els càlculs de 1.41 no tindrien massa sentit en aquest projecte si els valors de Vmax i Vmin fossin negatius, si Vmin fos més gran que Vmax o si Vmax o Vmin fossin majors que la tensió màxima que és capaç de subministrar la font. Per tots aquests motius, abans de realitzar tots els càlculs anteriors, sempre es comprovaran totes aquestes premisses. Finalment, en el fitxer Excel que havíem creat, es col·locaran les n mostres a partir de la primera fila de la columna A. 2.1.4-Càlcul dels valors de consigna adaptats al mòdul i transmissió Cadascuna de les accions que hem comentat en els tres apartats anteriors activen una variable booleana. Perquè tot el que s’explicarà en aquest apartat es pugui donar, és necessari que haguem executat els tres passos anteriors, i precisament serà amb aquestes variables com el software sabrà si s’han finalitzat correctament totes les accions. Com s’ha explicat en la memòria descriptiva, la tensió de sortida de la font (que és el que l’usuari tria en els fitxers de consigna) és teòricament lineal i 60 vegades més gran que la tensió d’entrada a la font. El fet, però, és que aquesta relació no és totalment lineal i, segons s’ha pogut mesurar en assaig real, presenta una certa desviació (figura 4).

Page 63: SISTEMA DE CONTROL D’UNA FONT D’ALIMENTACIÓ DE …deeea.urv.cat/public/PROPOSTES/pub/pdf/361pub.pdfhaurà de ser bastant òptim en quant a connexions dels components per poder

MEMÒRIA DE CÀLCUL

18

0

30

60

90

120

150

180

210

240

270

300

0 0,5 1 1,5 2 2,5 3 3,5 4 4,5 5

Tensió entrada (0-5 volts)

Tens

ió s

ortid

a (v

olts

)

fig.4 Tensió sortida vs. tensió d’entrada, font Amrel

Tot i que no es pot apreciar prou bé en l’anterior figura 4, la recta presenta una desviació propera al +4,9% i, a més, no és del tot recta ja que presenta oscil·lacions. El mateix ocorre pràcticament quan relacionem el corrent de sortida amb la tensió que es llegeix de la font per cada mostra, que es comet un error relatiu pròxim al 1,5%. Existeix una forma, que es planteja degudament en la memòria descriptiva, de minimitzar aquest error a través d’un full de calibratge. Si l’usuari decideix adoptar aquesta opció, es realitzaran una sèrie de càlculs diferents als que es duran a terme en cas que no es vulgui adoptar. En el cas que s’hagi d’aplicar el calibratge, el primer que fa el software és llegir les coordenades x-y corresponents a les columnes A i B del mateix full i les col·loca en una matriu de dos columnes i 300 files, de la mateixa manera que fa exactes operacions per les columnes D i E que corresponen al corrent de sortida (mirar memòria descriptiva, apartat 5.2.3.2). En aquest moment tenim: -Matriu de tensió: els valors de la primera columna corresponen a la tensió d’entrada que cal subministrar a la font perquè a la sortida hi trobem el valor de la segona columna. -Matriu d’intensitat: la primera columna pertany als valors de tensió que es llegeixen quan a la sortida hi circula el corrent que marca la segona columna.

Amb tot això, vegem a continuació quins són els càlculs que es portaran a terme sense i amb calibratge. Els resultats s’escriuran en diverses columnes del full de càlcul que conté el senyal consigna: -En la columna B del full de càlcul hi trobem la tensió que el PWM del PIC16F876 subministrarà a la font. Aquest valor es calcularà tenint en compte una teòrica linealitat entrada/sortida:

5·300

)()(

icolumnaAicolumnaB = (1.45)

On i és l’índex de la fila del full de càlcul, 300 és la tensió màxima teòrica a la sortida i 5 són els volts que s’han de subministrar a l’entrada perquè obtinguem el valor anterior.

Page 64: SISTEMA DE CONTROL D’UNA FONT D’ALIMENTACIÓ DE …deeea.urv.cat/public/PROPOSTES/pub/pdf/361pub.pdfhaurà de ser bastant òptim en quant a connexions dels components per poder

MEMÒRIA DE CÀLCUL

19

En cas que l’usuari desitgi un calibratge, el que farà l’ordinador és buscar l’interval de valors, en la segona fila de la matriu de tensió, on es pugui emplaçar el nombre que apareix en la columnaA(i). Suposant que la relació entrada/sortida és lineal al trams, es pot interpolar amb els valors de la matriu de la següent manera:

( ))1,2()(·)1,2(),2()1,1(),1(

)1,1()( −−−−−−

+−= jmticolumnaAjmtjmtjmtjmt

jmticolumnaB

(1.46) On mt() representa la matriu de tensió i j correspon a l’índex fila de la matriu. -La columna C conté el valor del cicle de treball del PWM del microcontrolador expressat en un byte. Com ja sabem de 1.5, el valor mig del senyal quadrat és directament proporcional al seu cicle de treball i, per tant, es conclou que:

255)(

5icolumnaCVmig = (1.47)

On Vmig és el valor mig per període, 5 és la tensió màxima que pot assolir el valor mig, columnaC(i) és el cicle de treball i 255 el valor màxim que pot assolir el cicle de treball quan aquest està definit per un byte. La relació de l’expressió 1.47 sempre s’haurà d’arrodonir a l’enter més proper, assumint ja en aquest punt un marge d’error respecte de la tensió que l’usuari havia triat per la sortida (segons 1.22) de:

VoltsV

Error 588,02

min0 ±=∆

±= (1.48)

Tenint en compte que aquest és un error teòric i que la relació que s’estableix en l’expressió 1.46 pot també no ser exacta, en el pitjor dels casos, aquest error pot ser, doncs, fins i tot superior. -En la columna D només es converteix el valor enter de la columna C al seu caràcter del codi ANSI corresponent. Cal tenir present que el Visual Basic utilitza el UNICODE per representar caràcters, i això vol dir que s’usen 2 bytes per cadascun d’ells. De tota manera, el ANSI i el UNICODE són iguals pels primers 256 caràcters i, per tant, el podem anomenar sempre ANSI. -La columna G conté el valor de tensió de sortida que realment ha estat enviat a la font, tenint en compte l’arrodoniment que es produeix en convertir a enter el resultat de l’expressió 1.47 i sense compensar l’error, sempre desconegut, en el càlcul dels valors de la columna B. Si no s’ha aplicat el calibratge es calcularà directament la tensió com:

300255

)()(

icolumnaCicolumnaG = (1.49)

On es sobreentén que existeix una relació lineal entre entrada i sortida. Si, en canvi, l’usuari aplica un calibratge, el software buscarà en primer lloc quina és la tensió d’entrada que produeix el cicle de treball de la columna C (recordem que segurament serà diferent al valor de la columna B, perquè en la C ha estat arrodonit).

Page 65: SISTEMA DE CONTROL D’UNA FONT D’ALIMENTACIÓ DE …deeea.urv.cat/public/PROPOSTES/pub/pdf/361pub.pdfhaurà de ser bastant òptim en quant a connexions dels components per poder

MEMÒRIA DE CÀLCUL

20

Utilitzant novament la matriu de tensió, es busca en la primera columna l’interval de valors on es pot emplaçar el resultat del càlcul anterior. Suposant que la relació entrada/sortida és lineal a trams, obtenim el següent valor de la interpolació:

−−

−−−−

+−= )1,1(2555

)(·)1,1(),1()1,2(),2(

)1,2()( jmticolumnaCjmtjmtjmtjmt

jmticolumnaG

(1.50)

Amb aquesta darrera columna es pretén permetre a l’usuari conèixer, amb cert rigor, la tensió que suposadament es produirà a la sortida, per bé que sempre s’intentarà donar la màxima informació possible.

El fet que s’utilitzi un mateix full de càlcul per anotar els resultats de les

operacions d’aquest apartat, demostra que es pretén facilitar l’anàlisi que posteriorment pugui emprendre l’usuari. Per encara marcar més aquesta intenció, s’anotaran, en el mateix full de càlcul totes, les dades referents a la configuració del mòdul perquè es pugui conèixer sota quines condicions s’ha donat tot aquell conjunt de valors. Finalment es col·loquen tots els caràcters de la columna D en una nova matriu unidimensional per a poder ser enviats de manera més còmoda. Es van introduint els valors en el buffer de transmissió i aquests van sortint al ritme que ho marca la velocitat del port. 2.1.5-Recepció de dades i representació gràfica Tot el conjunt de dades que es rebran del mòdul serà introduït en un full de càlcul nou o, en tot cas, en el mateix full que ha estat utilitzat per definir la consigna i on hi ha tots els càlculs anteriors. Si ho recordem, el mòdul envia dades al PC en dos ocasions: quan li ha de comunicar la quantitat de memòria disponible i quan ha de transmetre totes les mostres de corrent que ha capturat (el cas que es tracta en aquest punt). Si fem una ullada a l’apartat 2.1.2, possiblement ens vingui a la memòria que mentre l’ordinador espera el byte de configuració, s’executa un temporitzador que delimita el temps de resposta que té el mòdul. En la rutina associada a la interrupció per recepció del port sèrie, es comprova l’estat d’aquest temporitzador i amb això el software sap si aquell byte que ha rebut pertany a un o altre procés. Aquesta “confusió” només afectaria al primer byte de la trama i, per tant, no portaria massa conseqüències, però d’aquesta manera s’evita completament. Quan el mòdul envia les mostres, l’ordinador les col·loca en una matriu d’una columna i unes 262000 files (el nombre màxim de mostres que pot enviar). Quan ha finalitzat, les dades es poden guardar en el full de càlcul per poder ser consultades en qualsevol ocasió. Per emmagatzemar-les es col·locaran, tal i com es troben en la matriu, en la columna E del full de càlcul i amb això sempre es respecta el fet que si s’ha escollit el mateix full on hi el senyal consigna, s’escriurà en una de les columnes buides. Una altra de les columnes buides és la F, i en aquesta el programa hi escriurà sempre el valor equivalent de corrent de sortida de la font. Com està definit en l’expressió 1.19, per reduir l’error del convertidor del PIC s’aplica un increment de 0,5

Page 66: SISTEMA DE CONTROL D’UNA FONT D’ALIMENTACIÓ DE …deeea.urv.cat/public/PROPOSTES/pub/pdf/361pub.pdfhaurà de ser bastant òptim en quant a connexions dels components per poder

MEMÒRIA DE CÀLCUL

21

vegades el pes del bit menys significatiu (això només ho pot aplicar perquè tenim la certesa que un convertidor d’aproximacions successives sempre dóna un valor de conversió igual o menor al valor real). Novament, si l’usuari ha decidit aplicar el calibratge es realitzaran diferents operacions: -Sense calibratge, la relació tensió mostrejada amb corrent de sortida serà considerada lineal i el valor que s’escriurà a la columna F serà:

( )4·

2555,0)(

)(

+

=icolumnaEANSI

icolumnaF (1.51)

On ANSI() equival al valor enter del caràcter que es troba dins els parèntesis, 0,5 és la meitat del bit de menys pes, 4 és el corrent màxim a la sortida i 255 el valor enter màxim que pot tenir un caràcter. -Amb calibratge, primer es calcula el valor corresponent a la tensió mostrejada:

( )5·

2555,0)(

)(

+

=icolumnaEANSI

icolumnaF (1.52)

Utilitzant en aquesta ocasió la matriu d’intensitat (apartat 2.1.4), es recorre la primera columna buscant l’interval de valors on es pot emplaçar el resultat de 1.52. Suposant que la relació corrent de sortida/tensió mostrejada és lineal a trams, s’obté que:

( ))1,1()(·)1,1(),1()1,2(),2(

)1,2()( −−−−−−

+−= jmiicolumnaFjmijmijmijmi

jmiicolumnaF

(1.53) On mi() representa la matriu d’intensitats i j és l’índex de la fila. Normalment, aquesta operació de recepció de dades es realitzarà després que el programa resti apagat mentre el mòdul està executant el control de la font en mode normal. En el moment que es torna a executar el programa de nou, les dades referents a la configuració del microcontrolador s’hauran perdut de la memòria utilitzada pel software, però recordem que anteriorment el programa les havia escrit en el full de càlcul i, per tant, seran recuperades sempre i quan es triï el mateix full. És per aquest motiu que és important utilitzar el mateix full de càlcul per tot un procés, ja que d’altra manera en la representació gràfica perdríem informació. Per dibuixar la pròpia gràfica es necessita una àrea en la que es puguin dibuixar i representar els diferents punts i eixos. Degut a la gran quantitat de valors que es poden arribar a representar, aquesta àrea ha de ser molt gran perquè cadascun dels valors es pugui apreciar correctament. El software consta d’una àrea gràfica tan gran com ho permet l’amplada del formulari i que, a més, conté una barra de desplaçament lateral que encara l’augmenta molt més. Per dibuixar una línia només fa falta saber les coordenades dels punts inicial i final. Aquests punts són coordenades X i Y dins l’àrea en la que s’està duent a terme el dibuix. L’eix vertical o Y representarà el valor de corrent, mentre que l’eix horitzontal marcarà el temps. Dit això, vegem a continuació els passos que es segueixen perquè es pugui visualitzar una gràfica:

Page 67: SISTEMA DE CONTROL D’UNA FONT D’ALIMENTACIÓ DE …deeea.urv.cat/public/PROPOSTES/pub/pdf/361pub.pdfhaurà de ser bastant òptim en quant a connexions dels components per poder

MEMÒRIA DE CÀLCUL

22

-Es busca quins són els valors màxim i mínim, que han de ser representats, dins la columna F del full de càlcul. Aquesta operació servirà perquè l’usuari pugui veure amb més claredat l’evolució del senyal en els casos en que aquest és gairebé constant. Es podria dir que s’intenta optimar el rang de l’eix Y. -Es dibuixen els eixos en unes posicions prefixades pel programador. -Es realitzen subdivisions horitzontals equidistants de l’eix Y, es marquen sobre l’eix els valors de que s’han trobat abans de corrent màxima i mínima, i s’escriu també el valor d’intensitat que representen les subdivisions. Pel que fa a l’eix X, només es marca el període de mostreig com a referència per l’usuari. -Tots els valors de la columna F es col·locaran en una nova matriu d’una sola columna perquè d’aquesta manera resulta molt més manejable tal volum de dades. Anomenarem aquesta matriu val_real(i). -Depenent del nombre de punts que hagin de ser representats, el programa estableix la separació entre ells alhora de dibuixar la gràfica. D’aquesta manera, a menys valors per representar, més separació entre punts de la gràfica. Es busca, doncs, ocupar el màxim rang possible de l’eix X, sempre i quan càpiga en l’àrea de gràfic definida per la pantalla del formulari. Amb la separació mínima entre punts, només es poden arribar a representar 40000 valors dels 260000 possibles. Per aquest motiu, un cop es superen els 40000 punts el programa només en representarà una part, és a dir, anirà saltant valors de la matriu de punts segons hi càpiguen en l’àrea total. D’aquesta manera aconseguirem una fesomia global de la funció però haurem perdut mostres intermèdies. -Sabent els valors màxim i mínim que marca l’eix Y i coneixent el nombre de punts que hi ha en alçada, entre els anteriors límits, per representar, s’estableix que:

minmax

_YYalçadaPunts

Y−

=∆ (1.54)

On ?Y representa el nombre de punts que l’eix Y incrementarà quan la intensitat augmenti 1 amper. Com que cadascun dels valors a representar s’ha de convertir a les coordenades del dibuix, es col·loquen en una nova matriu els valors corresponents a la coordenada Y calculats de la següent forma:

( ) YYirealvaligrafval ∆−= ·)(_)(_ min (1.55) On val_graf() és la matriu de coordenades Y, val_real() és la matriu de valors reals de corrent i i és l’índex de la fila. -Cadascun dels punts de val_graf() es connecta amb el següent mitjançant una línia recta, i sobre cada valor de la mateixa matriu es dibuixa una petita creu perquè l’usuari pugui distingir on es troben les veritables mostres. Una de les utilitats que ha de tenir un entorn gràfic és que pugui donar una idea global de l’evolució d’un determinat senyal. A més, en aquest cas les característiques del programa permeten a l’usuari conèixer el detall de les condicions de cada punt, és a dir, segons el temps en que es dóna una mostra en concret es pot conèixer també la

Page 68: SISTEMA DE CONTROL D’UNA FONT D’ALIMENTACIÓ DE …deeea.urv.cat/public/PROPOSTES/pub/pdf/361pub.pdfhaurà de ser bastant òptim en quant a connexions dels components per poder

MEMÒRIA DE CÀLCUL

23

tensió que estava subministrant la font en aquell moment. Aquests valors es poden veure en uns quadres de text que s’actualitzen segons es mou el ratolí sobre la gràfica: -El Visual Basic reconeix el fet que l’usuari cliqui el botó esquerra del ratolí sobre la gràfica com un esdeveniment i, per tant, pot executar una funció associada a aquest. -Dins la funció s’utilitza la coordenada horitzontal del punter del ratolí per determinar el punt de l’eix X sobre el que es troba. Aquesta coordenada és la mateixa que s’empra per representar els punts del gràfic, per tant, coneixent la coordenada d’inici, la distància que hi ha entre dos punts consecutius de la gràfica i l’interval de temps que hi ha entre dos mostres, es pot deduir directament el temps transcorregut.

))(/(·)(

)( msDATempsX

CXCXmsTemps iniciratolí

∆−

= (1.56)

On CXratolí és la coordenada X on es troba el punter, CXinici la coordenada d’inici i ?X és la distància entre dos punts. -Amb el temps transcorregut i el període de mostreig, es determina la posició de la mostra dins la matriu que conté el conjunt de valors d’intensitat, tenint en compte que aquests nombres estan col·locats en l’ordre amb el que els ha enviat el mòdul i, aleshores, també en l’ordre amb el que s’han donat en el temps.

=

))(/()(

intmsDATemps

msTempsi (1.57)

On i és l’índex fila de la matriu. -Exactament el mateix succeeix amb la tensió que es correspon a la sortida en un instant de temps. En aquest cas, en comptes d’obtenir l’índex fila d’una matriu, s’obté l’índex fila de la columna F del full de càlcul on s’hi troba el voltatge corresponent. Degut a que en el full de càlcul apareixen els valors en l’ordre amb el que s’han donat, la relació temporal és directa.

=

))(()(

intmsPWMTemps

msTempsj (1.58)

On j és l’índex fila de la columna F del full de càlcul. En aquesta ocasió s’ha de tenir en compte que els valors del PWM es repeteixen cíclicament, és a dir, que s’ha de reiniciar l’índex j quan és major que el nombre de valors per període.

nnj

jj ·int

−= (1.59)

On n és el nombre de mostres de PWM per període i int() proporciona la part entera del quocient de la divisió. -Utilitzant la coordenada vertical que assenyala el punter, l’usuari estarà informat de la intensitat a que teòricament equival aquell punt.

Page 69: SISTEMA DE CONTROL D’UNA FONT D’ALIMENTACIÓ DE …deeea.urv.cat/public/PROPOSTES/pub/pdf/361pub.pdfhaurà de ser bastant òptim en quant a connexions dels components per poder

MEMÒRIA DE CÀLCUL

24

( )minY

YCYCY

Intensitat iniciratolí +∆

−= (1.60)

On CYratolí equival a la coordenada Y que marca el punter, CYinici marca la coordenada inicial de l’eix Y del gràfic, ?Y és l’increment vertical que es dóna quan la intensitat augmenta 1 amper, i Ymin és el corrent mínim que marca el gràfic. Amb això finalitza el que és el programa de l’ordinador. Per consultar el codi mireu en els annexes. 2.2-Software del PIC16F876 Mitjançant l’entorn MPLAB Integrated Development Environment (IDE), disponible a l’adreça d’internet www.microchip.com, podem escriure les instruccions que ha de seguir el microcontrolador i posteriorment ensamblar els fitxers amb extensió ASM. Aquests PIC amb memòria FLASH es programen en mode ICSP amb el fitxer HEX resultant del procés d’ensamblatge anterior. A continuació veurem com s’ha programat el PIC16F876 pel present projecte, sense plantejar el codi, amb alguns diagrames de flux i amb constants referències a l’estructura i mode de funcionament intern. En cas de no posseir coneixements bàsics sobre l’estructura interna de sistemes digitals, es recomana adquirir-ne abans de llegir els següents apartats. En els annexes podreu trobar el codi íntegre del programa del PIC, tal i com ha estat escrit en el fitxer ASM. 2.2.1-Definició de variables i inicialització Es consideraran com variables el conjunt dels registres de 8 bits que es troben en la memòria RAM del PIC. Cal considerar que el valor d’aquestes s’emmagatzemarà en memòria EEPROM interna o externa en les ocasions en que hagin de ser dades no volàtils. La RAM estàtica consta de 4 bancs amb 128 bytes cadascun, dels que una part són registres específics que governen el processador i els seus recursos, i 368 són de propòsit general pel programador. Per accedir a un registre cal seleccionar el banc en el que es troba, tot i que hi ha certs registres importants a que es pot arribar des de qualsevol banc; és el cas dels 16 últims registres de propòsit general del primer banc que seran els que s’utilitzaran per emmagatzemar les variables més recurrents. La distribució de la memòria RAM es pot veure en la següent figura 5:

Page 70: SISTEMA DE CONTROL D’UNA FONT D’ALIMENTACIÓ DE …deeea.urv.cat/public/PROPOSTES/pub/pdf/361pub.pdfhaurà de ser bastant òptim en quant a connexions dels components per poder

MEMÒRIA DE CÀLCUL

25

fig. 5 Distribució de la memòria RAM en quatre bancs

S‘utilitzen 20 variables definides pel programador durant l’execució del programa que s’ubiquen en les 16 últimes posicions del banc 0 i en les 4 següents al registre ADCON0 del mateix banc. La majoria d’elles s’inicien amb el valor “0”, tret d’algunes que ho fan amb altres valors com veurem millor en el moment que s’utilitzin. 2.2.1.1-Inicialització dels ports El PIC16F876 consta de 3 ports de 8 bits cadascun. La majoria d’aquestes línies són bidireccionals i el seu sentit el confirmen els bits dels registres TRISA/B/C. El PORTA conté les 5 entrades del convertidor A/D de les que només s’utilitza la primera. És necessari, per tant, posar a “1” el bit 0 del TRISA perquè la línia 0 (RA0) del PORTA sigui una entrada. Les altres 7 línies es posen com a sortides però en realitat no tenen cap influència i no importa el seu valor ni configuració. El PORTB s’usa en aquest projecte per albergar els indicadors i commutadors. Les línies de menor pes (RB0-RB3) controlen els leds, mentre que les altres quatre (RB4-RB7) observen l’estat dels commutadors. És lògic, doncs, que configurem les primeres com a sortides i les últimes com a entrades, és a dir, els quatre bits alts de TRISB a “1” i els quatre baixos a “0”. Els bits de menys pes del PORTB es posaran a “0” perquè els leds han de romandre apagats al començament de l’execució.

Page 71: SISTEMA DE CONTROL D’UNA FONT D’ALIMENTACIÓ DE …deeea.urv.cat/public/PROPOSTES/pub/pdf/361pub.pdfhaurà de ser bastant òptim en quant a connexions dels components per poder

MEMÒRIA DE CÀLCUL

26

Amb el PORTC es realitzen les comunicacions sèrie UART i I2C, com també hi trobem la sortida del PWM. En la comunicació sèrie asíncrona hi haurà una línia d’entrada i una de sortida, i en la I2C ambdós línies seran d’entrada, ja que el microcontrolador és el dispositiu mestre. En aquest cas posarem a “1” els bits 3, 4 i 7 del TRISC i a “0” els bits 2 i 6. 2.2.1.2-Inicialització USART Aquest mòdul accepta diferents configuracions per rebre i transmetre, sent necessària, doncs, una doble configuració. Amb el registre TXSTA s’estableix una transmissió asíncrona de 8 bits per dada, que tindrà les mateixes característiques que la recepció ordenada pel registre RCSTA. En el protocol asíncron RS-232-C, la freqüència en bauds amb la que es realitza una transferència s’ha de realitzar a un valor normalitzat (330, 600, 1200, 2400, 4800, 9600, 19200, 38400,...). Per generar aquesta velocitat, el mòdul USART disposa d’un generador de freqüència en bauds (BRG), que està controlat pel valor que es troba en el registre SPBRG. Per determinar el valor d’aquest registre cal resoldre la següent expressió:

)1(__

+=

SPBRGkF

baudsenFreqüència OSC (1.61)

On Fosc és la freqüència a la que treballa el PIC i k és el valor d’una constant que varia depenent de si s’ha triat un mode d’alta o baixa velocitat de transferència. En el nostre cas s’ha triat un mode de comunicació d’alta velocitat (bit 2 de TXSTA igual a “0”) donat que es redueix l’error del generador de freqüència. Resolent 1.61 amb k=16, una velocitat de 9600 bauds i una Fosc de 4 MHz obtenim:

2504,2516·9600

16·96004000000⇒=

−=SPBRG

Com que el valor d’un registre sempre ha de ser un nombre enter, la freqüència final segons 1.61 és:

bauds9615)125(16

4000000=

+

Amb un error de:

%16,0100·9600

)96009615((%) =

−=Error (1.62)

2.2.1.3-Inicialització I2C La configuració del mòdul I2C recau sobre dos registres principalment; SSPSTAT i SSPCON.

Amb el primer es decideix que es vol habilitar l’slew rate, necessari per velocitats estàndards de 100 kHz i 1 MHz, i que els nivells de tensió d’entrada seran els específics del bus I2C.

Page 72: SISTEMA DE CONTROL D’UNA FONT D’ALIMENTACIÓ DE …deeea.urv.cat/public/PROPOSTES/pub/pdf/361pub.pdfhaurà de ser bastant òptim en quant a connexions dels components per poder

MEMÒRIA DE CÀLCUL

27

Amb SSPCON s’habilita el port i es comunica al processador que ell serà el mestre i que haurà de generar el senyal de rellotge que, en aquest cas, obeeix a la següent fórmula:

)1(4 +=

SSPADDF

F OSCclock (1.63)

On SSPADD és el valor del registre que porta el mateix nom i que controla la velocitat del generador de freqüència. S’ha escollit una velocitat de 100 kHz per la transferència de dades en aquest bus i això produeix que el valor de SSPADD sigui, segons l’expressió 1.63:

9·4

·4=

−=

clock

clockOSC

FFF

SSPADD

2.2.1.4-Convertidor A/D Els microcontroladors PIC16F876 posseeixen un convertidor A/D de 10 bits de resolució i 5 canals. Mitjançant dos registres es controlen tots els paràmetres: -Registre ADCON0: determina principalment la freqüència que s’utilitzarà per realitzar conversions i el canal pel que s’obtindrà la tensió analògica (en el nostre cas el 0 o pota RA0). En els PIC16F87x s’aconsella que el temps que duri la conversió d’un bit (TAD) no sigui menor a 1,6 µs, per tant s’ha d’escollir una freqüència relativament baixa d’entre Fosc/2, Fosc/8, Fosc/32 i una freqüència derivada del oscil·lador RC intern. Determinant TAD per cadascuna de les opcions anteriors:

sF

sF

sF

sF

TRCOSCOSCOSC

AD µµµµ 861

832

28

5,02

−=====

Degut a que l’oscil·lador intern només és aconsellable quan el microcontrolador es troba en mode SLEEP, es configurarà el mòdul A/D amb una freqüència en la conversió de Fosc/32 degut a que té un període prou superior a 1,6 µs i és suficientment petita com per poder entrar en els intervals d’adquisició. -Registre ADCON1: el resultat de la conversió es col·loca en dos registres de 8 bits (ADRESH i ADRESL), triant en aquest cas si volem justificar els 10 bits resultants a l’esquerra o la dreta. Com que en el nostre cas només es volen llegit els 8 bits de major pes, justificant a l’esquerra es capturarà directament el contingut de ADREH descartant automàticament els dos bits de menys pes que es troben en ADREL. Si fem una ullada a 1.16, podem veure que el pes de l’ultim bit és proporcional a la tensió de referència. Amb aquest registre es configurarà el lloc d’on s’obtindrà Vref(+) i Vref(-) que vindran de VDD i VSS, respectivament, ja que mantenen els mateixos marges de la tensió a mostrejar i VDD serà una tensió molt estable. 2.2.1.5-Selecció d’activitat: determinació del commutador canviat Durant el present procés, el microcontrolador observa l’estat dels commutadors i determina quin d’ells ha canviat el seu estat. Per saber-ho, compara contínuament el valor antic dels bits del PORTB amb l’actual fins que es produeix un canvi. Serà útil en aquest punt la utilització de dos variables: una que s’anomena PORB i que sempre guarda el valor anterior del PORTB, i una segona on hi haurà el resultat de la

Page 73: SISTEMA DE CONTROL D’UNA FONT D’ALIMENTACIÓ DE …deeea.urv.cat/public/PROPOSTES/pub/pdf/361pub.pdfhaurà de ser bastant òptim en quant a connexions dels components per poder

MEMÒRIA DE CÀLCUL

28

comparació hi s’anomenarà AUX. Mirant el diagrama de la figura 6 ens podem fer una idea del procés:

fig.6 Diagrama de flux de la selecció d’activitats

Com es pot veure en el diagrama anterior, s’aplica la OR exclusiva al valor actual del PORTB (que es troba en el registre general W) amb el valor d’aquest mateix port (emplaçat a la variable AUX) abans d’iniciar tot un cicle de comprovació. El bit que es trobi en “1” correspondrà al que haurà canviat d’estat i així s’esbrinarà quina activitat desitja iniciar l’usuari. 2.2.2-Procés de configuració; recepció de dades del PC En aquest punt hi ha habilitades les interrupcions per recepció de dades al port sèrie ja que, si recordem de l’apartat 2.1.2, el PIC espera rebre el codi ANSI del caràcter “A” per iniciar el procés. Com veurem més endavant, però en aquest mateix apartat, quan un byte entra pel port sèrie produeix una interrupció que executa una rutina de servei. Dins aquesta es col·loca la dada en la memòria EEPROM i, a més, s’assigna el seu valor a una variable. Fora de la interrupció es compara el valor de la variable amb el nombre 65 (codi ANSI de “A”) i, si són iguals, es passarà a executar la següent fase que és el reconeixement de memòria externa. En aquest punt farem un petit incís per explicar una acció que es repetirà molt durant una execució completa: com sap el microcontrolador que dos registres són iguals?

PORB=PORTB

AUX=PORB W=PORB=PORTB

AUX(7)=1?

AUX(6)=1?

AUX(5)=1?

AUX(4)=1?

(W) xor (AUX)? AUX

REINICIAR

CONFIGURACIÓ

ADQUISICIÓ I CONTROL

TRANSMISSIÓ

Si

Si

Si

Si

No

No

No

No

Page 74: SISTEMA DE CONTROL D’UNA FONT D’ALIMENTACIÓ DE …deeea.urv.cat/public/PROPOSTES/pub/pdf/361pub.pdfhaurà de ser bastant òptim en quant a connexions dels components per poder

MEMÒRIA DE CÀLCUL

29

-Es copia el contingut d’un dels dos registres en el registre general W. -Es realitza la OR exclusiva de W amb l’altre registre; el resultat es col·loca al mateix W. -Si el resultat que es troba a W és “0” per tots els bits, un bit del registre STATUS (aquest registre conté l’estat de les operacions aritmètiques i lògiques de la ALU del processador) es col·loca automàticament a “1”. Llegint-ne l’estat, sabrem si són o no iguals els dos registres (“1”=iguals, “0”=diferents). Abans de fer el reconeixement del nombre de memòries EEPROM externes, es desactiven les interrupcions per recepció, s’inhabilita la mateixa recepció i s’activa el led de la pota 2 del PORTB que indica l’inici del procés de configuració. Per determinar el nombre de memòries que conté el mòdul, el PIC intenta escriure un byte aleatori en la primera posició de la memòria (degut a que aquest procés d’escriptura és força complex, es veurà amb molt més detall en l’apartat 2.2.3 d’aquest capítol). Cadascun dels dispositius esclaus (memòries) té una adreça física mitjançant la qual el mestre (PIC16F876) els pot establir una comunicació individual. Quan el microcontrolador s’adreça a un esclau per escriure o llegir, aquest ha de fer saber al mestre que ha reconegut les seves ordres posant a “0” la línia SDA durant el novè període de rellotge des que s’inicia una comunicació. Si l’esclau no realitza aquesta última acció, el mestre repetirà l’enviament d’ordres fins a 128 vegades i si en cap d’elles no hi ha hagut el canvi esperat a SDA, conclourà que la memòria a la que es dirigeix no hi és físicament o que té algun problema intern o de connexió. El reiteratiu enviament d’ordres es comptabilitza en la variable EROR que serveix d’indicador per saber quan cal aturar el procés de cerca. En el diagrama de flux de la figura 7 es resumeix amb més claredat tot aquest procediment.

La variable VALOR s’utilitzarà generalment per guardar les dades procedents del port sèrie i emmagatzemar-les en la EEPROM interna, però en aquest cas s’usa per calcular el nombre de memòries. Cal remarcar també que no existeix una variable amb el nom de ADREÇA_ESCLAU, però es fa servir aquest terme en el diagrama de la figura 7 perquè resulti més entenedor. Quan es comprova si EROR és igual a 128, només s’observa si l’estat del bit 7 d’aquest registre és “1”. El mateix succeeix amb VALOR, però en aquest cas el bit a examinar serà el tercer.

Page 75: SISTEMA DE CONTROL D’UNA FONT D’ALIMENTACIÓ DE …deeea.urv.cat/public/PROPOSTES/pub/pdf/361pub.pdfhaurà de ser bastant òptim en quant a connexions dels components per poder

MEMÒRIA DE CÀLCUL

30

fig.7 Diagrama de flux del reconeixement del nombre de memòries disponible

Per enviar el contingut de la variable VALOR, s’ha d’habilitar el port sèrie per la transmissió i fer una enquesta a l’estat de certs bits, ja que en aquest cas no s’utilitzaran les interrupcions perquè per a l’enviament d’un sol byte no fan falta. En aquest cas, doncs, es farà el següent: -Un cop habilitada la transmissió al bit 5 de TXSTA, el PIC s’ha d’assegurar que el registre on s’escriuen les dades que seran enviades (TXREG) estigui buit. Això ho sabrà perquè un bit del registre PIR1 (registre d’interrupcions perifèriques) es trobarà a nivell alt. -En el moment que aquest bit del registre PIR1 es trobi a “1”, s’escriurà ràpidament el contingut de VALOR a TXREG. -El byte de TXREG passa directament al buffer de transmissió, que és un registre anomenat TSR. Cal esperar que la dada hagi sortit pel port comprovant si el buffer està ple o buit. El bit 1 del registre TXSTA (controla el port sèrie) indica si TSR està ple i, per tant, fent-ne una enquesta ens assegurarem que la dada haurà estat transmesa.

En aquest punt el mòdul ja es troba en disposició per a rebre les dades de la pròpia configuració. Recordant el que s’ha explicat en l’apartat 5.3.2 de la memòria descriptiva, cal tenir present que el microcontrolador comença a col·locar les dades rebudes a partir de l’adreça 250, ja que sobreentén que els 6 primers bytes seran de configuració i la resta conformaran el senyal consigna. La direcció de la EEPROM interna a la que s’ha d’escriure es controla amb la variable ADRES, que haurà de ser inicialitzada amb l’adreça 250, mentre que la variable VALOR contindrà, en aquest cas, el valor de la dada rebuda pel port i que haurà de ser escrita a la memòria EEPROM.

ADREÇA_ESCLAU=0 VALOR=1

ESCRIURE EEPROM I2C

EROR=128?

ADREÇA_ESCLAU++ VALOR++

VALOR=8?

ENVIAMENT DE VALOR

Si

Si

No

No

Page 76: SISTEMA DE CONTROL D’UNA FONT D’ALIMENTACIÓ DE …deeea.urv.cat/public/PROPOSTES/pub/pdf/361pub.pdfhaurà de ser bastant òptim en quant a connexions dels components per poder

MEMÒRIA DE CÀLCUL

31

Com a últim cal recordar que el primer byte que el PC envia al PIC conté directament l’adreça a la que arribaran les mostres del senyal consigna i s’emmagatzemarà en la variable N_VALOR. Amb la recepció habilitada (bit 4 del registre RCSTA) i amb les interrupcions per recepció activades (bit 5 del registre PIE1), s’actua de la següent forma: -S’espera indefinidament, mitjançant un bucle, que les variables ADRES i N_VALOR siguin iguals, cosa que voldrà dir que s’ha arribat al final de la recepció. -Mentre es realitza l’espera anterior, es van succeint les interrupcions cada vegada que entra un byte pel port sèrie. En una interrupció, es llegeix el registre RCREG i s’assigna el seu contingut a VALOR (si el valor de ADRES és igual a 250, també s’assignarà a N_VALOR). S’escriu el contingut del registre VALOR a la EEPROM interna en l’adreça que indicarà ADRES. S’incrementa ADRES en una unitat i es torna al bucle anterior. Vegem més clarament aquest procediment en la figura 8.

fig.8 Diagrama de flux interrupció per recepció

L’escriptura a la memòria EEPROM interna s’executa com una subrutina o funció a la que es passen dos variables: ADRES i VALOR. Com que el procés d’escriptura a memòria no volàtil és un xic lent, abans d’escriure res cal saber si l’anterior ha estat finalitzada mitjançant l’estat del bit 1 del registre EECON1. Les següents passes són: -Les variables ADRES i VALOR s’assignen als registres propis de la memòria EEPROM: EEADR i EEDATA respectivament. -Es selecciona escriptura a memòria EEPROM i s’habilita, mitjançant els bits 7 i 2 del registre EECON1. També es pot triar escriure dins la memòria de programa. -Cal executar la seqüència especial en la que s’ha d’escriure al registre EECON2 el valor decimal 85 i, seguidament, el 170. Finalment s’inicia el propi cicle d’escriptura posant a estat alt el bit 1 del registre EECON1.

VALOR=RCREG

INTERRUPCIÓ RECEPCIÓ

ADRES=250?

ESCRIPTURA EEPROM(ADRES, VALOR)

ADRES++

N_VALOR=VALOR

RETORN PROGRAMA PRINCIPAL

Si

No

Page 77: SISTEMA DE CONTROL D’UNA FONT D’ALIMENTACIÓ DE …deeea.urv.cat/public/PROPOSTES/pub/pdf/361pub.pdfhaurà de ser bastant òptim en quant a connexions dels components per poder

MEMÒRIA DE CÀLCUL

32

-Per evitar escriptures indesitjables motivades per espuris, s’inhibeix l’escriptura a la EEPROM posant a “0” el bit 2 del EECON1. Amb el procés de recepció finalitzat, es tanca immediatament la recepció netejant el bit 4 del registre RCSTA. Per indicar a l’usuari que ha finalitzat correctament, es desactiva el led de la pota 2 del PORTB i s’assigna el seu contingut a la coneguda variable AUX. En aquest punt succeeix una selecció d’activitat semblant a la de l’apartat 2.2.1.5, però només s’observaran els canvis del commutador de la pota 5:

fig.9 Diagrama de flux de selecció del mode adquisició i control

En aquest instant de l’execució només es pot continuar cap al mode d’adquisició i control, ja que podríem dir que és el cicle normal dels processos. Com es pot veure en la figura 9 la mecànica és senzilla, encara que en aquesta ocasió no s’usa la variable PORB per actualitzar AUX sinó que es fa servir el mateix registre W. 2.2.3-Adquisició de valors i control de la font Com que el software no sap de quin punt del programa s‘arriba (selecció d’activitats en la inicialització o de la configuració), s’inhibeix la recepció UART i es desactiven les interrupcions del port sèrie, del TIMER0 i les generals. Activant el led de la pota 1 del PORTB l’usuari sabrà que ja s’ha iniciat aquest mode de funcionament. Les dades de configuració rebudes i que es troben en la EEPROM seran utilitzades en aquest mode i, per tant, han de ser assignades a variables. En la següent taula 2 es veu més gràficament aquesta assignació.

AUX=PORTB

W=PORTB

AUX(5)=1? ADQUISICIÓ I CONTROL

Si

No

AUX=W

W xor AUX? AUX

Page 78: SISTEMA DE CONTROL D’UNA FONT D’ALIMENTACIÓ DE …deeea.urv.cat/public/PROPOSTES/pub/pdf/361pub.pdfhaurà de ser bastant òptim en quant a connexions dels components per poder

MEMÒRIA DE CÀLCUL

33

ADREÇA EEPROM

NOM VARIABLE FUNCIÓ

250 N_VALOR Nombre de valors consigna 251 RETARD Acumulador temps PWM 252 RETAD Acumulador temps adquisició 253 H_MOSTR Byte alt adreça final de mostreig 254 L_MOSTR Byte baix adreça final de mostreig 255 NUM_MEM Nombre de memòries a omplir

Taula 2 Assignació de variables

Exceptuant dos variables, l’assignació és sempre del valor que conté la EEPROM. Les variables H_MOSTR i NUM_MEM només accepten un rang de valors determinat i és per això que en determinats casos no es fa cas del valor guardat i se n’assigna un altre: -El byte alt d’una adreça de la memòria EEPROM externa pot valer, com a màxim, 127. En cas que el valor d’aquest byte hagi de ser 0, el PC envia al microcontrolador el valor 255 perquè és potser més estable i més difícil que sigui interferit. Comparant, doncs, amb 255 sabrà si ha d’assignar 0 a H_MOSTR. -El nombre de memòries que es poden instal·lar en el mòdul és de 8 com a màxim. Quan no s’ha d’arribar a omplir cap memòria, l’ordinador envia al PIC el valor 255. Comprovant que sigui igual a 255, el microcontroldor ja és capaç de deduir que ha d’assignar a la variable NUM_MEM el valor 0. En la lectura de la EEPROM interna, es copia el valor de ADRES a EEADR, es selecciona l’accés a memòria EEPROM posant a “0” el bit 7 del registre EECON1 i s’inicia la lectura canviant a nivell alt el bit 0 del mateix registre. Al registre EEDATA s’hi col·locarà automàticament el valor a que apunta ADRES i, finalment, copiarem el byte llegit a VALOR. Fent un símil amb programació en llenguatges d’alt nivell, podríem dir que a la funció de lectura li passem ADRES i ens retorna VALOR (li passem l’adreça i ens retorna la dada). 2.2.3.1-Programació PWM Amb el PWM s’aconsegueixen impulsos lògics amb una amplada de nivell alt variable i un període concret, que ve definit per l’acció d’un temporitzador. Per aconseguir que la sortida basculi s’usa un comparador que posa a “0” un flip-flop quan el valor del registre CCPR1H coincideix amb el del TMR2. El mateix flip-flop es posarà a “1” quan un altre comparador detecti la coincidència entre PR2 i TMR2, moment en que aquest últim passarà a tenir el valor 0. Mirant el dibuix de la figura 10 ens farem una millor idea de com funciona aquest mòdul.

Page 79: SISTEMA DE CONTROL D’UNA FONT D’ALIMENTACIÓ DE …deeea.urv.cat/public/PROPOSTES/pub/pdf/361pub.pdfhaurà de ser bastant òptim en quant a connexions dels components per poder

MEMÒRIA DE CÀLCUL

34

fig.10 Diagrama de blocs del PWM El que determina el cicle de treball és el registre CCPR1H que, en realitat, rep el seu valor de CCPR1L, que és on s’ha d’accedir per configurar-lo. En cas que treballéssim amb una precisió de 10 bits, els 2 bits de CCP1CON<5:4> s’encadenarien amb els 8 de CCPR1L. Per configurar el TIMER2 cal accedir al registre T2CON i deixar el postscaler i el prescaler a 1 (el seu valor depèn de la freqüència que vulguem per al PWM però en el nostre cas ja veurem que ha de ser 1). Pel que fa al registre CCP1CON, cal netejar-ne els bits 4 i 5, i posar a nivell alt els bits 2 i 3 que configuren el mòdul com a PWM. (Recordem que els dos bits menys significatius del cicle de treball es troben a CCP1CON<5:4> i precisament han estat posats a “0”. Es podria pensar que amb aquest valor el cicle treball no arribarà mai a ser del 100% i que no aconseguirem mai els 300 volts a la sortida, però si recordem la característica entrada/sortida ens adonarem que els 300 volts s’aconsegueixen amb tensions de l’ordre de 4,75 volts a l’entrada que són perfectament assumibles amb els dos bits anteriors a “0”). Per obtenir el valor desitjat de període al PWM, cal introduir en PR2 el valor enter sortit de la següent fórmula:

( ) PRESCALEROSC TMRTPRPWMPeríode 2··4·12_ += (1.64) On TOSC és el període d’oscil·lació del cristall. Posant el màxim valor a PR2, obtenim un període de:

kHzsnsPWMPeríode 906,32561·250·4·256_ ⇒== µ

La pota 2 del PORTC es configurarà com a sortida posant a “0” el bit corresponent del registre TRISC. En aquest punt es llegeix de la EEPROM el primer valor de la consigna de sortida i ja es col·loca en el registre CCPR1L, però tenint en compte que el PWM no començarà a funcionar fins que no s’hagi activat el TIMER2.

Page 80: SISTEMA DE CONTROL D’UNA FONT D’ALIMENTACIÓ DE …deeea.urv.cat/public/PROPOSTES/pub/pdf/361pub.pdfhaurà de ser bastant òptim en quant a connexions dels components per poder

MEMÒRIA DE CÀLCUL

35

2.2.3.2-Configuració TIMER0 El TIMER0 és el temporitzador que s’utilitzarà com a base de temps en els processos d’adquisició i control de la font. Es tracta d’un comptador ascendent de 8 bits que quan desborda (passa de 255 a 0), genera una interrupció activant el bit 2 del registre INTCON. Per saber el valor que cal escriure en el registre TMR0, es resol la següent relació:

( )[ ] PRESCALEROSC TMRTTMRTMRPeríode 0··4·102550_ +−= (1.65) Si es desitja un període proper a 50 ms, TMR0 ha de valer:

6168,600256256·1

50⇒==+

− TMR

sms

µ

On el TMR0PRESCALER és igual a 256 per poder allargar més el període. Posant a “0” el bit 3 del registre OPTON_REG s’assigna el prescaler al TIMER0 i amb els tres bits de menys pes a “1” del mateix registre es configura perquè tingui un valor de 256. Com que es desitgen interrupcions pel TIMER0, es posa a nivell alt el bit 5 del registre INTCON que les habilitarà. 2.2.3.3-Bucle d’adquisició i control La seqüència d’instruccions que formen part del bucle s’executarà fins que el temps total del procés d’adquisició s’hagi exhaurit, és a dir, fins que s’hagin pres el nombre de mostres indicat per les variables H_MOSTR, L_MOSTR i NUM_MEM. Dins el bucle s’aniran succeint les interrupcions del TIMER0 que, al seu torn, anirà executant diferents subrutines associades a tot procés. Vegem primer com s’inicia i com està estructurat el bucle: -Abans d’entrar en un algoritme de repetició, cal activar el processos que s’han de succeir en el seu interior; en el nostre cas:

-S’activa el TIMER2 a fi efecte que el PWM comenci a funcionar (recordem que anteriorment ja s’havia llegit la primera mostra del cicle de treball de la EEPROM interna). Per l’activació cal posar a “1” el bit 2 del registre T2CON. -Es decrementa la variable N_VALOR en una unitat. Això es fa perquè en aquest cas s’incrementa la variable ADRES abans de llegir, ja que s’ha llegit una primera mostra a l’exterior del bucle. -S’inicialitza la paraula de control d’escriptura a la EEPROM externa apuntat a la primera memòria i s’assigna a una nova variable anomenada W_BYTE (tot el procés d’escriptura es veurà més detalladament al final d’aquest apartat). -S’habiliten les interrupcions en general posant a “1” el bit 7 del registre INTCON. A partir d’aquest instant ja hi haurà interrupcions periòdiques del temporitzador dins l’execució normal del bucle.

Page 81: SISTEMA DE CONTROL D’UNA FONT D’ALIMENTACIÓ DE …deeea.urv.cat/public/PROPOSTES/pub/pdf/361pub.pdfhaurà de ser bastant òptim en quant a connexions dels components per poder

MEMÒRIA DE CÀLCUL

36

-Dins el bucle, es tracta de comprovar si el nombre de mostres que s’han pres és igual al que ha marcat l’ordinador, és a dir, si l’adreça a la que actualment s’està escrivint dins les memòries EEPROM externes és igual a l’adreça que s’ha rebut del PC i que marca la finalització de tot el procés.

-S’usen dos noves variables auxiliars, I2C_ADRH i I2C_ADRL, que són les que utilitza la funció d’escriptura per indicar els bytes alt i baix de l’adreça -Ambdós variables anteriors es comparen amb les seves respectives homòlogues, H_MOSTR i L_MOSTR. En el moment que són iguals, també es comprova si s’han omplert el nombre de memòries necessàries. En aquest últim cas el procés és una mica més complex: -Es col·loca el valor binari “10100000” dins el registre general W. -Es suma a W el valor de NUM_MEM.

-Es compara W amb la paraula de control que es troba en W_BYTE. Els quatre bits de menys pes apunten a una memòria en concret i han de ser del mateix valor que els de NUM_MEM perquè el bucle finalitzi. -Com es pot observar, el fet que els 4 bits alts de W siguin “1010” és simplement perquè aquest valor és fix en W_BYTE i s’ha d’adaptar W a aquestes condicions perquè el mètode de comparació doni el resultat esperat.

-En cas que les adreces no coincideixin, el procés ha de continuar. Abans, però, s’haurà de comprovar que la variable EROR, que s’utilitza per enregistrar els intents de comunicació del mestre amb l’esclau en el bus I2C, no hagi superat el valor 127 i que, per tant, no hi hagi hagut cap error en la comunicació anterior. -L’últim que es comprova és si ADRES i N_VALOR són iguals. En cas de ser-ho, es torna a iniciar el cicle de valors del PWM tornant la variable ADRES a l’adreça inicial de la EEPROM, és a dir, 0. -Es torna a l’inici del bucle i es repeteixen les diferents accions fins que el resultat de totes les comparacions sigui positiu, o fins que es produeixi un error. Ambdós casos anteriors són els únics que poden finalitzar el bucle.

En la figura 11 es pot observar més esquemàticament tot el que s’ha explicat en aquests punts. Un cop fora del bucle, s’inhibeixen les interrupcions generals (“0” en el bit 7 del registre INTCON), es deshabiliten les interrupcions per TIMER0 (“0” al bit 5 del mateix registre INTCON) i es desactiva el PWM apagant el TIMER2 (“0” en el bit 2 del registre T2CON). Amb referència a l’usuari, s’apaga el led de la pota 1 del PORTB i es llegeix l’estat dels seus bits perquè s’inicia el mateix procediment que es descriu en la figura 9. En aquest cas s’observen els canvis d’estat del commutador de la pota 4 utilitzant el mateix algoritme anterior. Si l’usuari n’altera l’estat, començarà el procés de transmissió de les dades capturades.

Page 82: SISTEMA DE CONTROL D’UNA FONT D’ALIMENTACIÓ DE …deeea.urv.cat/public/PROPOSTES/pub/pdf/361pub.pdfhaurà de ser bastant òptim en quant a connexions dels components per poder

MEMÒRIA DE CÀLCUL

37

fig.11 Diagrama de flux del bucle d’adquisició i control 2.2.3.4-Interrupció TIMER0 Dins la rutina d’atenció al TIMER0 s’executen les funcions d’adquisició, escriptura a memòria EEPROM externa i d’actualització del PWM. Vegem primer quines operacions es realitzen dins la rutina i posteriorment ja veurem amb més detall les altres funcions: -En primer lloc es recarrega el registre TMR0 amb el valor que s’ha calculat a 1.65 per obtenir els 50 ms. Aquesta operació es fa en primer terme perquè d’altra manera es donaria un cert temps en que el temporitzador restaria aturat i es perdria precisió. -Es decrementen en una unitat les variables RETARD i RETAD que recordem que són acumuladors d’interrupcions. Es compara RETARD amb 0 i, si són iguals, s’haurà d’actualitzar la sortida del PWM:

-S’incrementa la variable ADRES en una unitat (perquè ja s’havia llegit un valor fora de la interrupció).

L_MOSTR=I2C_ADRL?

H_MOSTR=I2C_ADRH?

W=”10100000” W=W+NUM_MEM

W=W_BYTE?

EROR > 127 ?

ADRES=N_VALOR?

ADRES=0 TRANSMISSIÓ

Si

Si xor

Si xor

No xor

No xor

No xor

No xor

No xor

Page 83: SISTEMA DE CONTROL D’UNA FONT D’ALIMENTACIÓ DE …deeea.urv.cat/public/PROPOSTES/pub/pdf/361pub.pdfhaurà de ser bastant òptim en quant a connexions dels components per poder

MEMÒRIA DE CÀLCUL

38

-Es llegeix de la EEPROM interna l’adreça que conté ADRES i es retorna el proper valor del cicle de treball que es troba en VALOR. -Es copia la variable VALOR a CCPR1L que actualitzarà el valor del cicle de treball tan bon punt comenci un nou període del PWM. -Una variable que no s’havia comentat fins ara, RETARDAX, conté el valor inicial de RETARD. Degut a que aquesta última val 0 i és la que s’utilitza per comptabilitzar el temps, es recarrega novament amb el valor de RETARDAX i així comença un nou cicle.

-En el cas que RETARD no hagués estat igual que 0, s’arribaria a aquest punt directament sense haver de passar pels anteriors. En aquest es comprova si l’altra variable RETAD és, de la mateixa manera, igual que 0. En cas de ser-ho es realitzarà un conversió A/D i les següents accions derivades:

-De la funció de conversió es retorna la variable VALOR_H que conté el byte alt del resultat. -El contingut de VALOR_H es copia en I2C_DAT que és la variable que es passa a la funció d’escriptura de la EEPROM externa i que conté el byte a escriure. Amb les variables I2C_ADRL i I2C_ADRH es transfereix l’adreça on es col·locarà. -La funció d’escriptura a EEPROM I2C s’executa amb els paràmetres anteriors. -S’incrementa la propera adreça d’escriptura a la memòria I2C:

-Es compara I2C_ADRL amb 255 que és el valor màxim d’aquesta variable. Si no són iguals, s’incrementa en una unitat la variable. -En el cas que fossin iguals els dos nombre anteriors, es compara I2C_ADRH amb 127 que és el màxim valor a que pot arribar. Si no són iguals, s’incrementa en una unitat la variable. -Si el resultat de la comparació anterior és positiu, caldrà apuntar a la següent memòria mitjançant la variable W_BYTE. Els bits 1, 2 i 3 d’aquesta contenen l’adreça física de la memòria i el bit 0 sempre ha d’estar a nivell baix. Sabent això, sumant l’enter 2 a W_BYTE s’apuntarà a la següent memòria i les variables I2C_ADRL i I2C_ADRH s’hauran de posar a 0 ja que s’han de col·locar a l’adreça inicial.

-Com en el cas anterior, una nova variable RETADAX conté el valor inicial de RETAD que, en finalitzar totes aquestes accions, valdrà 0 i haurà de ser reinicialitzada per poder començar un nou cicle.

En el diagrama de la figura 12 es pot veure millor el funcionament de la rutina d’atenció al TIMER0 tal i com és realment.

Page 84: SISTEMA DE CONTROL D’UNA FONT D’ALIMENTACIÓ DE …deeea.urv.cat/public/PROPOSTES/pub/pdf/361pub.pdfhaurà de ser bastant òptim en quant a connexions dels components per poder

MEMÒRIA DE CÀLCUL

39

fig.12 Diagrama de flux interrupció TIMER0

INTERRUPCIÓ TIMER0

TMR0=61 RETARD=RETARD-1

RETAD=RETAD-1

RETARD=0?

ADRES++

LECTURA EEPROM INTERNA

CCPR1L=VALOR RETARD=RETARDAX

RETAD=0?

CONVERSIÓ A/D

I2C_DAT=VALOR_H

ESCRIPTURA EEPROM EXTERNA

I2C_ADRL=255?

I2C_ADRH=127?

I2C_ADRL++

I2C_ADRH++

I2C_ADRL++ I2C_ADRH=0

W_BYTE=W_BYTE + 2

RETAD=RETADAX

RETORN BUCLE

Si

Si

No

No

No

No

Si

Si

Page 85: SISTEMA DE CONTROL D’UNA FONT D’ALIMENTACIÓ DE …deeea.urv.cat/public/PROPOSTES/pub/pdf/361pub.pdfhaurà de ser bastant òptim en quant a connexions dels components per poder

MEMÒRIA DE CÀLCUL

40

2.2.3.5-Funció conversió A/D En aquesta funció es realitza l’adquisició digital d’un valor analògic i es guarda el resultat en la variable VALOR_H. Per iniciar l’operació només cal posar a “1” el bit 0 del registre ADCON0. Perquè el resultat de la conversió sigui el màxim acurat possible, la capacitat que manté el valor de tensió d’entrada ha de tenir temps de carregar-se completament. S’anomena temps d’adquisició a:

CTEMPCAMPADQ TTTT ++= (1.66)

On TAMP és el temps que tarda en estar a punt l’amplificador, TC és el temps de càrrega del condensador i TCTEMP és el retard degut al coeficient de temperatura. Assumint que el valor de la capacitat és de 120 pF, que l’equivalent Thevenin del circuit d’entrada té una resistència de 10 k? , que TAMP és igual a 2 µs i que degut a la temperatura tenim un retard màxim de 1,5 µs, obtenim un temps:

ssssTADQ µµµµ 205,15,162 =++=

Per tant, havent activat el convertidor al principi, el proper pas serà esperar aquest interval de temps abans de començar la pròpia conversió. Això es fa mitjançant el TIMER1 que fins al moment no havia estat utilitzat per res. Aquest és un temporitzador ascendent de 16 bits que s’atura un cop desborda (passa del valor 65535 a 0). El seu valor de temps es calcula:

( ) PRESCALEROSC TMRTLTMRHTMRTIMERPeríode 1··4·1)256·1(655351_ −−= (1.67)

Si el prescaler es troba a 1, llavors 4·TOSC val 1 µs i, per aconseguir 20 µs, el que es troba dins els parèntesis ha de valer 20. TMR1H ha de valdre 255, TMR1L doncs:

23511)256·255(6553520 =⇒−−= LTMRLTMR Amb aquests valors als registres, s’engega el TIMER1 posant a “1” el bit 0 del registre T1CON. Com que ens trobem dins una interrupció i el temps que cal esperar és força petit, no s’usaran interrupcions per anunciar el moment en que desborda el temporitzador. Fent una enquesta a l’estat del bit 7 del registre TMR1H, es coneixerà aquest moment perquè el valor del bit haurà canviat a “0”. Sortint de l’enquesta s’atura el TIMER1 posant a “0” el bit 0 del registre T1CON. Pel que fa al convertidor, en aquest moment ja tenim assegurat el valor adequat a la capacitat i la conversió pot començar. Per iniciar-la, es posa a “1” el bit 2 del registre ADCON0 i cal esperar a que aquest mateix bit es col·loqui automàticament a “0” quan la conversió s’hagi completat. Fent una enquesta a aquest bit es sap, quan es posa a “0”, que el registre ADRESH conté els 8 bits alts de la conversió. Com a pas final només cal copiar el contingut de ADRESH a VALOR_H per retornar el valor a la variable correcta i apagar el convertidor. En la figura 13 es pot veure més esquemàticament aquest procés. Cal tenir en compte que el fet de realitzar una enquesta dins una interrupció no és una acció massa correcta, però que en el nostre cas és admissible perquè els temps d’ambdues estan acotats.

Page 86: SISTEMA DE CONTROL D’UNA FONT D’ALIMENTACIÓ DE …deeea.urv.cat/public/PROPOSTES/pub/pdf/361pub.pdfhaurà de ser bastant òptim en quant a connexions dels components per poder

MEMÒRIA DE CÀLCUL

41

fig.13 Diagrama de flux conversió A/D 2.2.3.6-Escriptura EEPROM externa I2C El procés d’escriptura a una EEPROM I2C és una mica complex i requereix de l’acció d’alguns registres. Si observem la figura 14, es pot veure molt esquemàticament en què consisteix l’operació d’escriptura d’un byte:

fig.14 Esquema escriptura d’un byte

Com es pot veure en la figura, per escriure una dada cal enviar un byte de control, dos bytes que composen l’adreça i el byte que constitueix la dada en qüestió. Després d’enviar cadascun d’ells cal que l’esclau enviï una senyal de reconeixement o

CONVERSIÓ A/D

ADCON0<0>=1

TMR1H=255 TMR1L=235

T1CON<0>=1

TMR1H<7>=1?

ADCON0<2>=1

ADCON0<2>=1?

VALOR_H=ADRESH ADCON0<0>=0

No

No

Si

Si

Page 87: SISTEMA DE CONTROL D’UNA FONT D’ALIMENTACIÓ DE …deeea.urv.cat/public/PROPOSTES/pub/pdf/361pub.pdfhaurà de ser bastant òptim en quant a connexions dels components per poder

MEMÒRIA DE CÀLCUL

42

acknowledge perquè el microcontrolador sàpiga que les dades han estat rebudes correctament.

Mirant la figura 15, el byte de control està compost per:

fig.15 Byte de control

-Codi de control: són els 4 primers bits que encapçalen el byte i valen sempre “1010” per tots els dispositius 24xx256. -Bits de selecció: com que està permès connectar fins a 8 memòries al mateix bus, amb aquests 3 bits es pot seleccionar quina memòria serà accedida. El valor d’aquest bits ha de correspondre al valor lògic de les potes A2, A1 i A0 del dispositiu que ha de respondre. -Bit de lectura i escriptura: quan val “0” s’indica que es vol escriure i quan val “1” s’indica que es vol llegir. Amb aquests coneixements previs, vegem ara quines operacions es realitzen durant una escriptura: -De la variable W_BYTE, que és la que s’utilitza com a byte de control, es posa a “0” el bit 0 (per indicar escriptura). Cal tenir en compte que els 4 bits alts d’aquesta variable ja hauran estat iniciats fora d’aquesta funció i que els bits de selecció es controlen des de la rutina de servei a la interrupció. -Per l’enviament del byte de control calen les següents passes:

-Es neteja la variable EROR per poder comptabilitzar nous errors. -Com es pot veure en la figura 14, abans d’enviar el byte de control cal que el PIC transmeti un bit d’inici o start. Per fer-ho, es posa a “1” el bit 0 del registre SSPCON2 i s’espera (per enquesta) a que el mateix bit es col·loqui a “0” automàticament quan el temps d’inici hagi acabat. -Es posa a “0” el bit 3 del registre PIR1, ja que ha de ser reinicialitzat per software. Per enviar un byte qualsevol, s’escriu aquest en el registre SSPBUF i llavors automàticament és enviat. En aquest cas, el valor de W_BYTE es copia a SSPBUF i cal esperar a que el bit 3 del registre PIR1 es col·loqui a “1”. Aquest últim bit es posa a “1” quan finalitza el novè període del generador de freqüència

Page 88: SISTEMA DE CONTROL D’UNA FONT D’ALIMENTACIÓ DE …deeea.urv.cat/public/PROPOSTES/pub/pdf/361pub.pdfhaurà de ser bastant òptim en quant a connexions dels components per poder

MEMÒRIA DE CÀLCUL

43

(baud rate generator), que en aquest cas val 100 kHz, després d’haver enviat el byte en els 8 anteriors. Durant aquest novè període, el dispositiu esclau (memòria) haurà d’haver enviat el bit de reconeixement. L’estat del bit d’acknowledge es guarda automàticament en el bit 6 del registre SSPCON2. Llegint-lo, sabrem si la memòria ha contestat (val “0”) o si no ha reconegut les ordres (val “1”). Totes aquestes instruccions són molt importants perquè es repeteixen per cada byte que ha de sortir pel bus (exceptuant el valor que es copia a SSPBUF). Anomenarem a aquestes instruccions maniobra d’escriptura. -Si es llegeix l’estat del bit d’acknowledge i val “1”, cal repetir la maniobra d’escriptura anterior enviant novament el W_BYTE. També cal enviar el bit d’inici que, com que ja s’ha transferit un cop, caldrà col·locar en aquesta ocasió a “1” el bit 1 del registre SSPCON2 que indica, precisament, reenviament del bit d’inici. Cada cop que es repeteix aquesta operació vol dir que hi ha hagut un problema en la comunicació i, per tant, s’incrementa en una unitat la variable EROR. Si supera el valor 127, es sortirà directament de la funció i es donarà el procés d’adquisició com a finalitzat.

fig.16 Diagrama de flux seqüència d’inici

SEQÜÈNCIA START

SSPCON2<0>=1 EROR=0

SSPCON2<0>=0?

PIR1<3>=0 SSPBUF=W_BYTE

PIR1<3>=0?

SSPCON2<6>=0?

SSPCON2<1>=1

SSPCON2<1>=0?

EROR=EROR+1

EROR<7>=1?

Fi

Si

Si

Si

Si Si

No

No

No

No No

Page 89: SISTEMA DE CONTROL D’UNA FONT D’ALIMENTACIÓ DE …deeea.urv.cat/public/PROPOSTES/pub/pdf/361pub.pdfhaurà de ser bastant òptim en quant a connexions dels components per poder

MEMÒRIA DE CÀLCUL

44

-Un cop a finalitzat l’enviament del byte de control, cal realitzar la maniobra d’escriptura transferint en aquesta ocasió la variable I2C_ADRH. -Repetir la maniobra d’escriptura per enviar I2C_ADRL. -Repetir la maniobra d’escriptura per enviar I2C_DAT. (Quan es realitza una maniobra d’escriptura per enviar un byte que no és el de control, no fa falta conèixer l’estat del bit de reconeixement perquè es suposa que els dos dispositius ja estan sincronitzats) -El darrer pas és enviar el bit de parada o stop. Per fer-ho es segueixen aquestes instruccions:

-Es neteja l’estat del bit 3 del registre PIR1 perquè es requereix conèixer el canvi de “0” a “1” d’aquest bit. -Es col·loca el bit 2 del registre SSPCON2 a “1” per iniciar la condició de parada en ambdós línies del bus. -Es realitza un enquesta al bit 3 del registre PIR1 que serà col·locat per hardware automàticament a “1” una vegada hagi finalitzat el temps de la condició de parada. En aquest moment les línies del bus es troben lliures.

2.2.4-Transmissió de dades Per preveure l’arribada a aquest mode des de qualsevol dels punts possibles, el primer que fa el software es inhibir les interrupcions generals (“0” al bit 7 de INTCON) i també les interrupcions per recepció del port sèrie (bit 5 a “0” del registre PIE1). Per indicar a l’usuari que ha començat el procés de transmissió, s’encendrà el led de la pota 0 del PORTB. De la mateixa manera com es fa en el mode anterior, es llegeixen de la EEPROM interna les variables que seran necessàries durant aquest procediment. Com que l’objectiu d’aquest mode és enviar el conjunt de dades capturades, només cal conèixer el valor de les variables H_MOSTR, L_MOSTR i NUM_MEM (veure taula 2 per posicions dins la memòria EEPROM).

Abans de començar a enviar, cal fer certes inicialitzacions: -S’assigna el valor 0 a la variable EROR perquè es començarà un nou procés de comunicació amb la EEPROM externa. -S’inicia el valor de W_BYTE apuntant a la primera memòria, és a dir, amb el nombre binari “10100000”. -S’assigna el valor 0 a les variables I2C_ADRL i I2C_ADRH, ja que s’ha de començar a transmetre a partir de la primera adreça.

Page 90: SISTEMA DE CONTROL D’UNA FONT D’ALIMENTACIÓ DE …deeea.urv.cat/public/PROPOSTES/pub/pdf/361pub.pdfhaurà de ser bastant òptim en quant a connexions dels components per poder

MEMÒRIA DE CÀLCUL

45

-Es fa la lectura del primer byte de la EEPROM externa. El valor que es retorna d’aquesta funció es troba dins la variable I2C_DAT. -Es copia el contingut de I2C_DAT al registre TXREG i s’incrementa en una unitat la variable I2C_ADRL. -En aquest moment ja hi ha la primera dada a punt per ser enviada. Habilitant la transmissió (posant a “1” el bit 5 de TXSTA), desinhibint les interrupcions per transferència del mòdul USART (nivell alt en el bit 4 del registre PIE1) i habilitant les interrupcions en general (bit 7 del registre INTCON a “1”), la primera dada sortirà pel port sèrie. Per tal que totes les dades capturades siguin enviades, s’entra en un bucle dins el que s’aniran succeint les interrupcions. L’estructura d’aquest bucle és exactament igual a la que s’explica en l’apartat 2.2.3.3, tenint en compte que en aquest cas no cal cap control de les mostres del PWM ni, per tant, de les variables ADRES i N_VALOR. Un cop s’hagi sortit del bucle (perquè s’ha produït un error de comunicació o perquè s’ha arribat a l’adreça final), es deshabiliten totes les interrupcions posant a “0” els 8 bits dels registres PIE1 i INTCON. Cal esperar a que la última dada que serà enviada hagi sortit pel port abans de finalitzar l’execució; observant l‘estat del bit 1 del registre TXSTA es pot conèixer (quan es troba a nivell alt) el moment en que el buffer de transmissió està buit i, per tant, l’instant en que ha finalitzat la transferència. Posant la pota 0 del PORTB a “0”, s’informa a l’usuari que el procés de transmissió ha finalitzat. 2.2.4.1-Interrupció transmissió Les interrupcions per transmissió es donen dins el bucle principal del procés d’enviament de dades i es produeixen cada vegada que un byte escrit dins el registre TXREG passa automàticament al buffer de transmissió. En aquest moment TXREG esdevé buit i s’hi pot escriure la propera dada a enviar. Cal considerar que aquesta interrupció es dóna amb una periodicitat de prop d’un miler de vegades per segon, és a dir, la velocitat amb que es transmeten els bytes. Dins la rutina, es realitzen les següents accions: -Es llegeix de la EEPROM externa el byte de l’adreça a que apunten I2C_ADRL i I2C_ADRH. La funció de lectura retorna la dada copiada a I2C_DAT. -S’incrementa la propera adreça d’escriptura a la memòria I2C:

-Es compara I2C_ADRL amb 255 que és el valor màxim d’aquesta variable. Si no són iguals, s’incrementa en una unitat la variable.

-En el cas que fossin iguals els dos nombre anteriors, es compara I2C_ADRH amb 127 que és el màxim valor a que pot arribar. Si no són iguals, s’incrementa en una unitat la variable.

Page 91: SISTEMA DE CONTROL D’UNA FONT D’ALIMENTACIÓ DE …deeea.urv.cat/public/PROPOSTES/pub/pdf/361pub.pdfhaurà de ser bastant òptim en quant a connexions dels components per poder

MEMÒRIA DE CÀLCUL

46

-Si el resultat de la comparació anterior és positiu, caldrà apuntar a la següent memòria mitjançant la variable W_BYTE. Els bits 1, 2 i 3 d’aquesta contenen l’adreça física de la memòria. Sabent això, sumant l’enter 2 a W_BYTE s’apuntarà a la següent memòria i les variables I2C_ADRL i I2C_ADRH s’hauran de posar a 0 ja que s’han de col·locar a l’adreça inicial.

-Finalment es copia el contingut de la variable I2C_DAT a TXERG per tal que pugui ser enviat en el següent cicle. 2.2.4.2-Lectura EEPROM externa I2C Havent vist en l’apartat 2.2.3.6 el procés d’escriptura, el procediment per obtenir dades de la EEPROM I2C és molt semblant. Per tal de no repetir certes explicacions, s’aconsella fer una ullada a les pàgines 38, 39 i 40, en els paràgrafs on s’explica com es porten a terme les seqüències d’inici i de finalització. Si observem la figura 17 podrem veure un resum molt gràfic del què consisteix el procés de lectura a una adreça concreta:

fig.17 Lectura aleatòria de la EEPROM I2C

Igual que en l’escriptura, el primer pas és iniciar una seqüència d’start on, posteriorment, ha de ser enviat el byte de control amb els bits de selecció de dispositiu apuntant a la memòria adequada. Encara que vulguem fer una lectura, el bit 0 d’aquest byte s’ha de col·locar a “0” al principi.

Una vegada s’hagi rebut el reconeixement d’instrucció per part de la memòria, s’enviaran mitjançant la coneguda maniobra d’escriptura les variables I2C_ADRH i I2C_ADRL. Recordem que un cop rebut el primer acknowledge després d’haver enviat el byte de control, no és necessari esperar aquest bit de reconeixement cada vegada que s’envia un nou byte, ja que els dispositius estan sincronitzats i la comunicació és segura en aquest moment.

A partir d’aquest punt les accions canvien respecte de l’escriptura i cal fer el

següent: -Es realitza una nova seqüència d’inici, però en aquesta ocasió es col·locarà a “1” el bit 0 del byte de control que indicarà lectura. -Després d’haver rebut el bit de reconeixement de la memòria, el microcontrolador s’ha de posar a punt per rebre la dada en qüestió:

Page 92: SISTEMA DE CONTROL D’UNA FONT D’ALIMENTACIÓ DE …deeea.urv.cat/public/PROPOSTES/pub/pdf/361pub.pdfhaurà de ser bastant òptim en quant a connexions dels components per poder

MEMÒRIA DE CÀLCUL

47

-Es posa a “0” el bit 3 del registre PIR1 que, un cop hagi canviat a “1”, indicarà que hi ha una dada rebuda al buffer. -Cal assegurar-se que no hi hagi cap altra acció que el mòdul I2C del PIC estigui duent a terme en aquell moment. Es comprovarà, doncs, que:

-El bit 2 del registre SSPSTAT es trobi a “0”. Això assegura que en aquell instant no hi ha cap transmissió en procés. -Els cinc bits de menys pes del registre SSPCON2 també estiguin a “0”. Aquests bits són indicatius que s’ha iniciat una seqüència d’inici, de parada, d’enviament del bit de reconeixement,... en general d’algun dels processos automàtics de la comunicació I2C.

-Es posa a “1” el bit 3 del registre SSPCON2 que habilita la recepció.

-Per enquesta, cal esperar a que el bit 3 del registre PIR1 s’hagi col·locat a “1”. Quan ho hagi fet, el registre SSPBUF (buffer de recepció) contindrà el valor del byte llegit. -Es copia el contingut de SSPBUF a I2C_DAT, ja que aquesta funció ha de retornar el valor llegit dins aquesta darrera variable. -Es deshabilita la transmissió posant a “0” el bit 3 del registre SSPCON2. -Finalment s’inicia la seqüència de parada de la mateixa forma com s’havia dut a terme durant l’escriptura.

2.2.5-Interrupcions En aquest apartat es pretén donar una molt breu descripció de les accions generals que es realitzen quan una interrupció es succeeix. Considerant el fet que quan un dispositiu interromp la CPU aquesta sempre executa un mateix codi a partir d’una posició de memòria de programa concreta, tenim els següents passos: -Salvar el context en que el programa es trobava en aquell instant, és a dir, guardar el contingut dels registres STATUS i W en les variables TMP_STA i TMP_W. Per dur a terme aquestes senzilles accions, cal executar certes instruccions que no alterin cap dels bits del registre STATUS: -Es mou el contingut de W a la variable TMP_W (no afecta bits STATUS).

-Es mouen els 4 bits alts de STATUS als 4 baixos de W, i els 4 baixos de STATUS als 4 alts de W. Això s’executa amb una instrucció que no altera cap dels registres de STATUS. Es copia W a TMP_STA. -Es netegen tots els bits del registre STATUS perquè durant la interrupció es trobin tots com en l’inici d’execució d’un programa.

Page 93: SISTEMA DE CONTROL D’UNA FONT D’ALIMENTACIÓ DE …deeea.urv.cat/public/PROPOSTES/pub/pdf/361pub.pdfhaurà de ser bastant òptim en quant a connexions dels components per poder

MEMÒRIA DE CÀLCUL

48

-Tenim tres possibles fonts d’interrupció durant l’execució del software d’aquest projecte: TIMER0, recepció USART i transmissió USART. Per saber quina d’elles ha realitzat una petició, només cal fer una enquesta als bits que les relacionen:

-Bit 5 del registre PIR1 en estat alt indica que hi ha una dada al buffer de recepció del mòdul USART. -Bit 4 del registre PIR1 en estat alt indicarà que el buffer de transmissió està buit i a punt per enviar una nova dada. -Bit 2 del registre INTCON en estat alt indicarà que el registre TMR0 del TIMER0 ha passat del valor 255 a 0.

-Segons quina de les següents condicions sigui certa, s’executarà el codi associat anant directament a l’adreça de memòria de programa on es localitza. -Per sortir de la interrupció, cal que els registres STATUS i W tornin a l’estat en que es trobaven. Això implica:

-Es mouen en 4 bits alts de TMP_STA als 4 baixos de W, i els 4 bits baixos de TMP_STA als 4 alts de W. Amb aquesta operació els bits del registre STATUS tornen a estar en l’ordre adequat i ja es poden copiar a STATUS. -Es mouen en 4 bits alts de TMP_W als 4 baixos de TMP_W, i viceversa. -Es mouen en 4 bits alts de TMP_W als 4 baixos de W, i els 4 bits baixos de TMP_W als 4 alts de W. D’aquesta manera es copia el contingut de la variable TMP_W a W sense alterar els bits de STATUS.

-Els bits que han realitzat la petició d’interrupció han de ser col·locats al seu estat inicial, perquè d’altra manera en sortir de la rutina de servei es tornaria a executar. Així s’ha de posar:

-Bit 5 del registre PIR1 en estat baix per indicar que no hi ha cap dada al buffer de recepció del mòdul USART. -Bit 4 del registre PIR1 en estat baix que indicarà que el buffer de transmissió està ple. Aquest bit es col·locarà automàticament a 0 un cop s’escrigui en el registre TXREG durant la rutina de servei -Bit 2 del registre INTCON en estat baix que indicarà que el registre TMR0 encara està contant.

-Finalment, el bit 7 del registre INTCON es posarà a “1” perquè tornin a estar operatives les interrupcions. Cal tenir en compte que durant l’execució de la rutina de servei a la interrupció, aquest bit es trobava a nivell baix no permeten l’entrada a cap nova interrupció durant l’execució de la mateixa.

Page 94: SISTEMA DE CONTROL D’UNA FONT D’ALIMENTACIÓ DE …deeea.urv.cat/public/PROPOSTES/pub/pdf/361pub.pdfhaurà de ser bastant òptim en quant a connexions dels components per poder

SISTEMA DE CONTROL D’UNA FONT D’ALIMENTACIÓ DE LABORATORI

PLÀNOLS

AUTOR: Albert Marsal Vinadé.

DIRECTOR: Xavier Vilanova Salas.

DATA: Desembre/2004.

Page 95: SISTEMA DE CONTROL D’UNA FONT D’ALIMENTACIÓ DE …deeea.urv.cat/public/PROPOSTES/pub/pdf/361pub.pdfhaurà de ser bastant òptim en quant a connexions dels components per poder

ÍNDEX

1 Esquema circuit general ................................................................................... 3 2 Placa circuit imprès ........................................................................................... 4

Page 96: SISTEMA DE CONTROL D’UNA FONT D’ALIMENTACIÓ DE …deeea.urv.cat/public/PROPOSTES/pub/pdf/361pub.pdfhaurà de ser bastant òptim en quant a connexions dels components per poder

5

5

4

4

3

3

2

2

1

1

D D

C C

B B

A A

Nº1

ESQUEMA CIRCUIT GENERALB

1 1Thursday, December 09, 2004

Title

Size Document Number Rev

Date: Sheet of

GND

GND

GND

GND

+15V

+5V

-15V

GND

-15V

+5V

GND

GND

GND

GND

+5V

GND

+15V

GND

GND+5V

GND

+5V

GND

GND

+5V

GND

GND

-15V

GND

U2

PIC16f876

1

234567

8

9

10

1112131415161718

1920

2122232425262728

MCLR/VPP

RA0/AN0RA1/AN1

RA2/AN2/VREF-RA3/AN3/VREF+

RA4/TOCKIRA5/AN4/SS

GN

D

OSC1/CLKIN

OSC2/CLKOUT

RC0/T1OSO/T1CKIRC1/T1OSI/CCP2

RC2/CCP1RC3/SCK/SCLRC4/SDI/SDA

RC5/SDORC6/TX/CKRC7/RX/DTG

ND

VD

D

RB0/INTRB1RB2

RB3/PGMRB4RB5

RB6/PGCRB7/PGD

U3

MAX232

138

1110

134526

129147

1615

R1INR2INT1INT2IN

C+C1-C2+C2-V+V-

R1OUTR2OUTT1OUTT2OUT

VC

CG

ND

P1

CONNECTOR DB9

594837261

U4LM7805C/TO220

1 2

3

IN OUT

GN

D C15

330nFC16

100nF

C2 + 1uF

C1 + 1uF

C3

+ 1uF

C4 + 1uF

C5 + 1uF

J3

CON. ADQ.

12

JP4

COM. ADQ.

123

JP3

COM. CONFIG.

123

JP2

RESET PROG.

123

JP1

COM. RESET

123

JP5

COM. TRANS.

123

Y1

4Mhz

U8

24LC256 4

8

5

6

123

GN

D

VCC

SDA

SCLK

A0A1A2

U5

24LC256 4

8

5

6

123

GN

D

VCC

SDA

SCLK

A0A1A2

U9

24LC256 4

8

5

6

123

GN

D

VCC

SDA

SCLK

A0A1A2

U10

24LC256 4

8

5

6

123

GN

D

VCC

SDA

SCLK

A0A1A2

U14

24LC256 4

8

5

6

123

GN

D

VCC

SDA

SCLK

A0A1A2

U15

24LC256

4

8

5

6

123

GN

D

VCC

SDA

SCLK

A0A1A2

U12

24LC256 4

8

5

6

123

GN

D

VCC

SDA

SCLK

A0A1A2

R210k

C715pF

C615pF

+

-

U6

UA741

3

26

7 14 5

R42.2k

+

-

U11B

LM747

6

710

9 54 8

+

-

U11A

LM747

2

112

13 34 14

R92.2k

R3

10k

R6

10k

R5

10kC8

1u

C9 1u

C10

1u

R8

10k

R7

10k

C11

1u

C12

1u

J1

CON. TEN. SORTIDA

12

C13

22 pFR1210k

U16

24LC256 4

8

5

6

123

GN

D

VCC

SDA

SCLK

A0A1A2

D1

LEDD2

LEDD3

LEDD4

LED

D6

LED

J2

CON. TENSIÓ

123

Page 97: SISTEMA DE CONTROL D’UNA FONT D’ALIMENTACIÓ DE …deeea.urv.cat/public/PROPOSTES/pub/pdf/361pub.pdfhaurà de ser bastant òptim en quant a connexions dels components per poder
Page 98: SISTEMA DE CONTROL D’UNA FONT D’ALIMENTACIÓ DE …deeea.urv.cat/public/PROPOSTES/pub/pdf/361pub.pdfhaurà de ser bastant òptim en quant a connexions dels components per poder

SISTEMA DE CONTROL D’UNA FONT D’ALIMENTACIÓ DE LABORATORI

PRESSUPOST

AUTOR: Albert Marsal Vinadé.

DIRECTOR: Xavier Vilanova Salas.

DATA: Desembre/2004.

Page 99: SISTEMA DE CONTROL D’UNA FONT D’ALIMENTACIÓ DE …deeea.urv.cat/public/PROPOSTES/pub/pdf/361pub.pdfhaurà de ser bastant òptim en quant a connexions dels components per poder

PRESSUPOST

2

ÍNDEX 1 Quadre de preus.................................................................................................. 3 1.1-Material ............................................................................................................. 3 1.2-Mà d’obra.......................................................................................................... 5 2 Quantitats ............................................................................................................. 6 2.1-Material ............................................................................................................. 6 2.2-Mà d’obra.......................................................................................................... 7 3 Aplicació dels preus ........................................................................................... 8 3.1-Material ............................................................................................................. 8 3.2-Mà d’obra........................................................................................................ 10 4 Resum del pressupost ...................................................................................... 11

Page 100: SISTEMA DE CONTROL D’UNA FONT D’ALIMENTACIÓ DE …deeea.urv.cat/public/PROPOSTES/pub/pdf/361pub.pdfhaurà de ser bastant òptim en quant a connexions dels components per poder

PRESSUPOST

3

1 Quadre de preus 1.1-Material Codi Referència Descripció Preu Preu amb lletra

1-01 JP1, JP2, JP3, JP4, JP5

Commutador Commutador lliscant per circuit imprès, 1 circuit i 2 posicions, 11x5 mm.

0,53 € CINQUANTA-TRES CÈNTIMS D’EURO

1-02 D1, D2, D3, D4, D5

Díode LED Díode LED estàndard vermell de 5 mm.

0,09 € NOU CÈNTIMS D’EURO

1-03

R2, R3, R5, R6, R7, R8, R12

Resistència 10 k? Resistència de pel·lícula de carbó de 10 kO ±5% i 0,25 W.

0,04 € QUATRE CÈNTIMS D’EURO

1-04 R4, R9 Resistència 2,2 k? Resistència de pel·lícula de carbó de 2,2 kO ±5% i 0,25 W.

0,04 € QUATRE CÈNTIMS D’EURO

1-05

C1, C2, C3, C4, C5, C8, C9, C10, C11, C12

Condensador 1 µF Condensador electrolític polaritzat d’alumini i radial, de 1 µF ±10% i 63 V.

0,13 € TRETZE CÈNTIMS D’EURO

1-06 C16

Condensador 330 nF Condensador de poliéster metal·litzat, de 330 nF ±5% i 100 V.

0,16 € SETZE CÈNTIMS D’EURO

1-07 C15

Condensador 100 nF Condensador de poliéster metal·litzat, de 100 nF ±10% i 250 V.

0,16 € SETZE CÈNTIMS D’EURO

1-08 C6, C7 Condensador 15 pF Condensador ceràmic de 15 pF i 10 V.

0,14 € CATORZE CÈNTIMS D’EURO

1-09 C13 Condensador 22 pF Condensador ceràmic tipus llentia de 22 pF ±5% i 100V.

0,14 € CATORZE CÈNTIMS D’EURO

1-10 U4 MC7805C Regulador de tensió 5 V, encapsulat T0-220.

0,51 € CINQUANTA-UN CÈNTIMS D’EURO

1-11 U2

PIC16F876-04/SP Microcontrolador de 8 bits PIC16F876-04/SP amb encapsulat DIP 28.

8,73 € 8 EUROS I SETANTA-TRES CÈNTIMS D’EURO

1-12

U5, U8, U9, U10, U12, U14, U15, U16

EEPROM 24LC256 Memòria EEPROM I2C externa de 256 kbits amb encapsulat DIP 8.

3,94 € TRES EUROS I NORANTA-QUATRE CÈNTIMS D’EURO

Page 101: SISTEMA DE CONTROL D’UNA FONT D’ALIMENTACIÓ DE …deeea.urv.cat/public/PROPOSTES/pub/pdf/361pub.pdfhaurà de ser bastant òptim en quant a connexions dels components per poder

PRESSUPOST

4

Codi Referència Descripció Preu Preu amb lletra

1-13 Y1 Cristall 4 MHz Cristall de quars XT de 4 MHz. 0,51 € CINQUANTA-UN

CÈNTIMS D’EURO

1-14 U3 ST232CN Interfície de comunicació RS-232 amb encapsulat DIP 16.

1,50 € UN EURO I CINQUANTA CÈNTIMS D’EURO

1-15 U6 UA741CN Amplificador operacional, encapsulat DIP 8.

0,31 € TRENTA-UN CÈNTIMS D’EURO

1-16

U11A, U11B

UA747CN Amplificador operacional dual, encapsulat DIP 14.

0,80 € VUITANTA CÈNTIMS D’EURO

1-17 - Sòcol 8 potes Sòcol DIP tornejat de 8 potes. 0,24 € VINT-I-QUATRE

CÈNTIMS D’EURO

1-18 - Sòcol 14 potes Sòcol DIP tornejat de 14 potes. 0,26 € VINT-I-SIS CÈNTIMS

D’EURO

1-19 - Sòcol 16 potes Sòcol DIP tornejat de 16 potes. 0,29 € VINT-I-NOU

CÈNTIMS D’EURO

1-20 - Sòcol 28 potes Sòcol DIP tornejat de 28 potes. 0,51 € CINQUANTA-UN

CÈNTIMS D’EURO

1-21 P1 Connector DB9 Connector DB9 femella per placa circuit imprès.

0,66 € SEIXANTA-SIS CÈNTIMS D’EURO

1-22 J1, J3 Regleta 2 contactes Regleta de connexió de 2 contactes per PCB.

0,22 € VINT-I-DOS CÈNTIMS D’EURO

1-23 J2 Regleta 3 contactes Regleta de connexió de 3 contactes per PCB.

0,37 € TRENTA-SET CÈNTIMS D’EURO

1-24 -

Dissipador RD584 Dissipador RD584 per T0-220 de 19,5x19 mm, amb cargol i femella M3.

0,34 € TRENTA-QUATRE CÈNTIMS D’EURO

1-25 - Connector DB9 Connector DB9 mascle, soldable i recte per cable.

0,25 € VINT-I-CINC CÈNTIMS

1-26 - Connector DB9 Connector DB9 femella, soldable i recte per cable.

0,25 € VINT-I-CINC CÈNTIMS

1-27 - Cable port sèrie Cable Null-Modem per port DB9, 2 m.

2,73 € DOS EUROS I SETANTA-TRES CÈNTIMS D’EURO

1-28 - Cable connexió Cable de connexió de 0,07 mm i 10 m de llargada.

0,79 € SETANTA-NOU CÈNTIMS D’EURO

Page 102: SISTEMA DE CONTROL D’UNA FONT D’ALIMENTACIÓ DE …deeea.urv.cat/public/PROPOSTES/pub/pdf/361pub.pdfhaurà de ser bastant òptim en quant a connexions dels components per poder

PRESSUPOST

5

Codi Referència Descripció Preu Preu amb lletra

1-29 -

Placa PCB Placa de circuit imprès de doble cara, fotosensible, amb bany de coure i de 163x116 mm.

3,15 € TRES EUROS I QUINZE CÈNTIMS D’EURO

1.2-Mà d’obra Codi Referència Descripció Preu Preu amb lletra

2-01 -

Muntatge placa Hores per la realització de la placa, dels forats, soldatge de components i testeig de pistes.

30 € TRENTA EUROS

2-02 -

Disseny hardware Hores pel disseny de la placa de circuit imprès i la tria dels components.

30 € TRENTA EUROS

2-03 -

Disseny software microcontrolador Hores dedicades al disseny del software del microcontrolador.

30 € TRENTA EUROS

2-04 - Disseny software PC Hores dedicades al disseny del software del PC.

30 € TRENTA EUROS

Page 103: SISTEMA DE CONTROL D’UNA FONT D’ALIMENTACIÓ DE …deeea.urv.cat/public/PROPOSTES/pub/pdf/361pub.pdfhaurà de ser bastant òptim en quant a connexions dels components per poder

PRESSUPOST

6

2 Quantitats 2.1-Material Codi Unitat Descripció Quantitat

1-01 U Commutador Commutador lliscant per circuit imprès, 1 circuit i 2 posicions, 11x5 mm.

5

1-02 U Díode LED Díode LED estàndard vermell de 5 mm. 5

1-03 U Resistència 10 k? Resistència de pel·lícula de carbó de 10 kO ±5% i 0,25 W.

7

1-04 U Resistència 2,2 k? Resistència de pel·lícula de carbó de 2,2 kO ±5% i 0,25 W.

2

1-05 U Condensador 1 µF Condensador electrolític polaritzat d’alumini i radial, de 1 µF ±10% i 63 V.

10

1-06 U Condensador 330 nF Condensador de poliéster metal·litzat, de 330 nF ±5% i 100 V.

1

1-07 U Condensador 100 nF Condensador de poliéster metal·litzat, de 100 nF ±10% i 250 V.

1

1-08 U Condensador 15 pF Condensador ceràmic de 15 pF i 10 V. 2

1-09 U Condensador 22 pF Condensador ceràmic tipus llentia de 22 pF ±5% i 100V.

1

1-10 U MC7805C Regulador de tensió 5 V, encapsulat T0-220. 1

1-11 U PIC16F876-04/SP Microcontrolador de 8 bits PIC16F876-04/SP amb encapsulat DIP 28.

1

1-12 U EEPROM 24LC256 Memòria EEPROM I2C externa de 256 kbits amb encapsulat DIP 8.

1

1-13 U Cristall 4 MHz Cristall de quars XT de 4 MHz. 1

1-14 U ST232CN Interfície de comunicació RS-232 amb encapsulat DIP 16.

1

1-15 U UA741CN Amplificador operacional, encapsulat DIP 8. 1

1-16 U UA747CN

Amplificador operacional dual, encapsulat DIP 14. 1

1-17 U Sòcol 8 potes Sòcol DIP tornejat de 8 potes. 9

Page 104: SISTEMA DE CONTROL D’UNA FONT D’ALIMENTACIÓ DE …deeea.urv.cat/public/PROPOSTES/pub/pdf/361pub.pdfhaurà de ser bastant òptim en quant a connexions dels components per poder

PRESSUPOST

7

Codi Unitat Descripció Quantitat

1-18 U Sòcol 14 potes Sòcol DIP tornejat de 14 potes. 1

1-19 U Sòcol 16 potes Sòcol DIP tornejat de 16 potes. 1

1-20 U Sòcol 28 potes Sòcol DIP tornejat de 28 potes. 1

1-21 U Connector DB9 Connector DB9 femella per placa circuit imprès. 1

1-22 U Regleta 2 contactes Regleta de connexió de 2 contactes per PCB. 2

1-23 U Regleta 3 contactes Regleta de connexió de 3 contactes per PCB. 1

1-24 U Dissipador RD584 Dissipador RD584 per T0-220 de 19,5x19 mm, amb cargol i femella M3.

1

1-25 U Connector DB9 Connector DB9 mascle, soldable i recte per cable. 1

1-26 U Connector DB9 Connector DB9 femella, soldable i recte per cable. 1

1-27 U Cable port sèrie Cable Null-Modem per port DB9, 2 m. 1

1-28 U Cable connexió Cable de connexió de 0,07 mm i 10 m de llargada. 1

1-29 U Placa PCB Placa de circuit imprès de doble cara, fotosensible, amb bany de coure i de 163x116 mm.

1

2.2-Mà d’obra Codi Unitat Descripció Quantitat

2-01 H Muntatge placa Hores per la realització de la placa, dels forats, soldatge de components i testeig de pistes.

8

2-02 H Disseny hardware Hores pel disseny de la placa de circuit imprès i la tria dels components.

30

2-03 H Disseny software microcontrolador Hores dedicades al disseny del software del microcontrolador.

100

2-04 H Disseny software PC Hores dedicades al disseny del software del PC. 120

Page 105: SISTEMA DE CONTROL D’UNA FONT D’ALIMENTACIÓ DE …deeea.urv.cat/public/PROPOSTES/pub/pdf/361pub.pdfhaurà de ser bastant òptim en quant a connexions dels components per poder

PRESSUPOST

8

3 Aplicació dels preus 3.1-Material Codi Unitat Descripció Quantitat Preu Subtotal

1-01 U

Commutador Commutador lliscant per circuit imprès, 1 circuit i 2 posicions, 11x5 mm.

5 0,53 € 2.65 €

1-02 U Díode LED Díode LED estàndard vermell de 5 mm.

5 0,09 € 0,45 €

1-03 U Resistència 10 k? Resistència de pel·lícula de carbó de 10 kO ±5% i 0,25 W.

7 0,04 € 0,28 €

1-04 U Resistència 2,2 k? Resistència de pel·lícula de carbó de 2,2 kO ±5% i 0,25 W.

2 0,04 € 0,08 €

1-05 U

Condensador 1 µF Condensador electrolític polaritzat d’alumini i radial, de 1 µF ±10% i 63 V.

10 0,13 € 1,30 €

1-06 U

Condensador 330 nF Condensador de poliéster metal·litzat, de 330 nF ±5% i 100 V.

1 0,16 € 0,16 €

1-07 U

Condensador 100 nF Condensador de poliéster metal·litzat, de 100 nF ±10% i 250 V.

1 0,16 € 0,16 €

1-08 U Condensador 15 pF Condensador ceràmic de 15 pF i 10 V.

2 0,14 € 0,28 €

1-09 U Condensador 22 pF Condensador ceràmic tipus llentia de 22 pF ±5% i 100V.

1 0,14 € 0,14 €

1-10 U MC7805C Regulador de tensió 5 V, encapsulat T0-220.

1 0,51 € 0,51 €

1-11 U

PIC16F876-04/SP Microcontrolador de 8 bits PIC16F876-04/SP amb encapsulat DIP 28.

1 8,73 € 8,73 €

1-12 U

EEPROM 24LC256 Memòria EEPROM I2C externa de 256 kbits amb encapsulat DIP 8.

1 3,94 € 3,94 €

1-13 U Cristall 4 MHz Cristall de quars XT de 4 MHz. 1 0,51 € 0,51 €

Page 106: SISTEMA DE CONTROL D’UNA FONT D’ALIMENTACIÓ DE …deeea.urv.cat/public/PROPOSTES/pub/pdf/361pub.pdfhaurà de ser bastant òptim en quant a connexions dels components per poder

PRESSUPOST

9

Codi Unitat Descripció Quantitat Preu Subtotal

1-14 U ST232CN Interfície de comunicació RS-232 amb encapsulat DIP 16.

1 1,50 € 1,50 €

1-15 U UA741CN Amplificador operacional, encapsulat DIP 8.

1 0,31 € 0,31 €

1-16 U

UA747CN Amplificador operacional dual, encapsulat DIP 14.

1 0,80 € 0,80 €

1-17 U Sòcol 8 potes Sòcol DIP tornejat de 8 potes. 9 0,24 € 2,16 €

1-18 U Sòcol 14 potes Sòcol DIP tornejat de 14 potes. 1 0,26 € 0,26 €

1-19 U Sòcol 16 potes Sòcol DIP tornejat de 16 potes. 1 0,29 € 0,29 €

1-20 U Sòcol 28 potes Sòcol DIP tornejat de 28 potes. 1 0,51 € 0,51 €

1-21 U Connector DB9 Connector DB9 femella per placa circuit imprès.

1 0,66 € 0,66 €

1-22 U Regleta 2 contactes Regleta de connexió de 2 contactes per PCB.

2 0,22 € 0,44 €

1-23 U Regleta 3 contactes Regleta de connexió de 3 contactes per PCB.

1 0,37 € 0,37 €

1-24 U

Dissipador RD584 Dissipador RD584 per T0-220 de 19,5x19 mm, amb cargol i femella M3.

1 0,34 € 0,34 €

1-25 U Connector DB9 Connector DB9 mascle, soldable i recte per cable.

1 0,25 € 0,25 €

1-26 U Connector DB9 Connector DB9 femella, soldable i recte per cable.

1 0,25 € 0,25 €

1-27 U Cable port sèrie Cable Null-Modem per port DB9, 2 m.

1 2,73 € 2,73 €

1-28 U Cable connexió Cable de connexió de 0,07 mm i 10 m de llargada.

1 0,79 € 0,79 €

Page 107: SISTEMA DE CONTROL D’UNA FONT D’ALIMENTACIÓ DE …deeea.urv.cat/public/PROPOSTES/pub/pdf/361pub.pdfhaurà de ser bastant òptim en quant a connexions dels components per poder

PRESSUPOST

10

Codi Referència Descripció Quantitat Preu Subtotal

1-29 U

Placa PCB Placa de circuit imprès de doble cara, fotosensible, amb bany de coure i de 163x116 mm.

1 3,15 € 3,15 €

TOTAL DEL MATERIAL: 34 € 3.2-Mà d’obra Codi Referència Descripció Quantitat Preu Subtotal

2-01 -

Muntatge placa Hores per la realització de la placa, dels forats, soldatge de components i testeig de pistes.

8 30 € 240 €

2-02 -

Disseny hardware Hores pel disseny de la placa de circuit imprès i la tria dels components.

30 30 € 900 €

2-03 -

Disseny software microcontrolador Hores dedicades al disseny del software del microcontrolador.

100 30 € 3000 €

2-04 - Disseny software PC Hores dedicades al disseny del software del PC.

120 30 € 3600 €

TOTAL MÀ D’OBRA: 7740 €

Page 108: SISTEMA DE CONTROL D’UNA FONT D’ALIMENTACIÓ DE …deeea.urv.cat/public/PROPOSTES/pub/pdf/361pub.pdfhaurà de ser bastant òptim en quant a connexions dels components per poder

PRESSUPOST

11

4 Resum del pressupost Import %

• CAPÍTOL 1: MATERIAL 34 € 0,4 • CAPÍTOL 2: MÀ D’OBRA 7740 € 99,6

_________________ TOTAL EXECUCIÓ MATERIAL 7774 €

• DESPESES GENERALS (13%) 1010,62 € • BENEFICI INDUSTRIAL (6%) 466,44 €

SUMA DE D.G i DE B.I. 1477,06 €

• I.V.A. (16%) 1480,17 €

TOTAL PRESSUPOST CONTRATA 10731,23 € TOTAL PRESSUPOST GENERAL 10731,23 €

Total del pressupost puja a la quantitat de deu mil set cents trenta-un euros i vint-i-tres cèntims d’euro.

Valls, 2 de desembre del 2004

Signat: Albert Marsal Vinadé Enginyer Tècnic Industrial

Page 109: SISTEMA DE CONTROL D’UNA FONT D’ALIMENTACIÓ DE …deeea.urv.cat/public/PROPOSTES/pub/pdf/361pub.pdfhaurà de ser bastant òptim en quant a connexions dels components per poder

SISTEMA DE CONTROL D’UNA FONT D’ALIMENTACIÓ DE LABORATORI

PLEC DE CONDICIONS

AUTOR: Albert Marsal Vinadé.

DIRECTOR: Xavier Vilanova Salas.

DATA: Desembre/2004.

Page 110: SISTEMA DE CONTROL D’UNA FONT D’ALIMENTACIÓ DE …deeea.urv.cat/public/PROPOSTES/pub/pdf/361pub.pdfhaurà de ser bastant òptim en quant a connexions dels components per poder

PLEC DE CONDICIONS

2

ÍNDEX

1 Objectius del plec de condicions..................................................................... 3 2 Condicions generals ........................................................................................... 3 2.1-Condicions legals i administratives .................................................................. 3 2.2-Condicions facultatives ..................................................................................... 4 2.3-Condicions econòmiques................................................................................... 5 3 Condicions de materials i equips.................................................................... 5 3.1-Descripció general del montatge ...................................................................... 5 3.1.1-Conductors elèctrics ................................................................................... 5 3.1.2-Connectors ................................................................................................. 5 3.1.3-Resistències fixes ........................................................................................ 6 3.1.4-Condensadors fixes .................................................................................... 6 3.1.5-Díodes LED ................................................................................................ 6 3.1.6-Circuits integrats ........................................................................................ 6 3.1.7-Driver RS-232 ............................................................................................ 7 3.1.8-EEPROM I2C ............................................................................................. 7 3.1.9-Microcontrolador ....................................................................................... 7 3.1.10-Disseny de plaques del circuit imprès ....................................................... 8 4 Condicions d’execució i muntatge ................................................................. 9 4.1-Descripció general de muntatge ....................................................................... 9 4.2-Fabricació de la placa de circuit imprès .......................................................... 9 4.3-Muntatge dels components de la placa........................................................... 10 4.4-Muntatge de la caixa ....................................................................................... 10 4.5-Ajustament i comprovació dels paràmetres pel bon funcionamen ............... 11

Page 111: SISTEMA DE CONTROL D’UNA FONT D’ALIMENTACIÓ DE …deeea.urv.cat/public/PROPOSTES/pub/pdf/361pub.pdfhaurà de ser bastant òptim en quant a connexions dels components per poder

PLEC DE CONDICIONS

3

1 Objectius del plec de condicions El plec de condicions defineix els següents aspectes: -Els aspectes legals i administratius del projecte. -Les normes, reglaments i lleis per les que s’ha de regir el projecte -Les responsabilitats dels agents que intervenen en el projecte. -Les característiques exigibles als materials i equips. -Les tècniques a emprar en l’execució i posada en marxa. -Els controls de qualitat que s’han de realitzar. 2 Condicions generals Les condicions generals contemplen els aspectes legals, administratius i econòmics aplicables al present projecte i estan formats pels següents apartats. 2.1-Condicions legals i administratives Tots els objectius a desenvolupar en el projecte s’executaran complint la normativa UNE referent a totes les parts implicades i específiques en l’apartat “31 Electrònica” del catàleg de l’associació Espanyola de Normalització i Certificació (AENOR), tals com: 31.020.- Components electrònics en general 31.040.- Resistències elèctriques. 31.040.10.- Resistències fixes. 31.060.- Condensadors. 31.060.10.- Condensadors fixes en general. 31.080.- Dispositius semiconductors. 31.160.- Filtres elèctrics. 31.180.- Targetes i circuits impresos. 31.200.- Circuits integrats, microelectrònica, etc. Al mateix temps s’han de complir els aspectes tècnics d’instal·lació que afecten, directa o indirectament, a aquest treball inclosos en el Reglament Electrotècnic de Baixa Tensió. Citem a continuació les instruccions tècniques complementàries (ICTs) més importants del Reglament Electrotècnic de Baixa Tensió:

Page 112: SISTEMA DE CONTROL D’UNA FONT D’ALIMENTACIÓ DE …deeea.urv.cat/public/PROPOSTES/pub/pdf/361pub.pdfhaurà de ser bastant òptim en quant a connexions dels components per poder

PLEC DE CONDICIONS

4

0.19.- Instal·lacions interiors o receptores. Prescripcions generals. 0.22.- Instal·lacions interiors o receptores. Protecció contra sobreintensitats 0.23.- Instal·lacions interiors o receptores. Protecció contra sobretensions. 0.36.- Instal·lacions a molt Baixa Tensió. 0.37.- Instal·lacions a tensions especials. 0.43.- Instal·lacions de receptors. Prescripcions generals.

0.48.- Instal·lacions de receptors. Transformadors i autotransformadors. Reactàncies i rectificadors. Condensadors. Normes UNE d’obligat compliment.

2.2-Condicions facultatives Els permisos de caràcter obligatori s’hauran d’obtenir per part de l’empresa contractant, quedant l’empresa contractista al marge de totes les conseqüències derivades de les mateixes. Qualsevol retard en el procés de fabricació per causes degudament justificades, sent aquestes alienes a l’empresa contractista, seran degudament acceptades pel contractant, no tenint aquest últim dret a cap reclamació. Qualsevol demora no justificada suposarà el pagament d’una multa per valor del 6% de l’import total de fabricació per fracció de retard pactat en el contracte. L’empresa contractant es compromet a proporcionar les millors facilitats al contractista perquè la fabricació es realitzi ràpida i perfecta. L’aparell complirà els requisits mínims respecte al projecte encarregat, qualsevol variació o millora en el contingut del mateix s’haurà de consultar al tècnic dissenyador. Durant el temps estimat per la instal·lació, el tècnic projectista podrà renunciar a la suspensió momentània si així ho creu oportú. Les característiques dels elements i components seran les especificades en la memòria, tenint en compte la seva perfecta col·locació i posterior utilització. La contractació d’aquest projecte es considera vàlida quan les dos parts implicades es comprometen a concloure les clàusules del contracte, per la qual cosa hauran d’estar signats els documents adequats en una reunió conjunta després d’haver arribat a un acord. Els serveis donats per l‘empresa contractista es consideraran finalitzats des del moment en el que l’aparell es posi en funcionament després de la prèvia comprovació que tot funcioni correctament. La garantia s’estén durant un any i l’empresa contractista es farà càrrec de l’avaria mentre es justifiqui que aquesta no té res a veure amb un mal ús de l’equip. Una

Page 113: SISTEMA DE CONTROL D’UNA FONT D’ALIMENTACIÓ DE …deeea.urv.cat/public/PROPOSTES/pub/pdf/361pub.pdfhaurà de ser bastant òptim en quant a connexions dels components per poder

PLEC DE CONDICIONS

5

vegada exhaurida la garantia, l’empresa contractant no tindrà dret a reclamar ajustaments i reparacions gratuïtes en el global de l’equip. El pressupost no inclou despeses de tipus energètic produïdes pel procés d’instal·lació, ni les obres, en cas de ser necessàries, que aniran a càrrec de l’empresa contractant. El compliment de les elementals comprovacions per part de l’empresa instal·ladora no serà competència del projectista, el qual queda fora de tota responsabilitat derivada del mal funcionament de l’equip com a conseqüència d’aquests fets. 2.3-Condicions econòmiques La forma d’efectuar l’abonament de l’equip serà al comptat si aquest ja està construït. Si encara s’ha de fabricar, s’abonarà en dos pagaments: un a compte per iniciar el procés de fabricació i la resta en finalitzar-lo, sempre i quan es compleixin els requisits exposats en les condicions facultatives. 3 Condicions de materials i equips En aquest apartat s’inclouen les especificacions de tots els materials que formen part del projecte. Aquestes garanteixen les normatives i reglaments vigents que els poden afectar, ja expressats en les condicions generals. 3.1-Descripció general del muntatge Tot el hardware dissenyat per aquest projecte ha d’anar col·locat en l’interior d’una caixa. Abans d’aquest pas, però, s’han de conèixer una sèrie d’especificacions que ajudaran en l’elecció correcta dels diferents components electrònics que constitueixen el circuit. 3.1.1-Conductors elèctrics Tan les en les connexions d’alimentació com en els cables que van del mòdul a la font, s’utilitzaran conductors circulars ja que aquests ofereixen una millor flexibilitat. Aniran aïllats superficialment en tota la seva longitud amb recobriments d’esmalt, vernís o plàstic preferiblement. Els cables d’alimentació portaran tres connectors banana de 4mm de pas i tindran una secció no inferior a 0,75 mm2. Els dos parells de conductors que van de la font al mòdul aniran trenats a fi efecte d’evitar soroll extern La comunicació entre el PC i el mòdul de control es realitza mitjançant un cable NULL-MODEM amb les línies de transmissió i recepció creuades. Aquest haurà de tenir una llargada mínima de 2 metres. 3.1.2-Connectors

Les connexions d’alimentació es fan a través de regletes de 3 contactes, mentre que la sortida de control per la font i l’adquisició es fan mitjançant regletes de dos vies. Per la connexió amb el PC s’utilitzarà un DB-9 femella inserit a la placa.

Page 114: SISTEMA DE CONTROL D’UNA FONT D’ALIMENTACIÓ DE …deeea.urv.cat/public/PROPOSTES/pub/pdf/361pub.pdfhaurà de ser bastant òptim en quant a connexions dels components per poder

PLEC DE CONDICIONS

6

3.1.3-Resistències fixes És necessari conèixer els extrems màxim i mínim entre els que estarà comprès el valor d’una resistència. Segons la sèrie a la que pertanyi, la seva tolerància variarà normalment entre el 20% i l‘1%. Les aplicacions que requereixen resistències en aquest projecte no necessiten valors molt precisos, per tant, es poden utilitzar resistències de la sèrie E6 amb toleràncies que arribin al 20%. S’usaran preferiblement resistències de carboni de les sèries E12 o E24, degut al seu preu més reduït, amb capacitat per a dissipar fins a 250 mW. Les resistències de pel·lícula metàl·lica també són perfectament aplicables en aquest projecte, encara que el seu petit coeficient de temperatura les fa més aptes per altres tipus d’aplicacions on les condicions climàtiques siguin més desfavorables. 3.1.4-Condensadors fixes Les característiques que ens són més rellevants alhora de triar un tipus de condensador són la tolerància i el volum. A grans trets es poden agrupar en tres grans grups: ceràmics, de plàstic i electrolítics. Aquests últims són els que presenten un relació capacitat/volum millor tenint unes característiques tècniques força acceptables. En el present projecte s’utilitzen condensadors electrolítics d’alumini amb unes toleràncies que volten el 20%, sempre tenint en compte que l’expectativa de vida d’aquest tipus de condensadors és limitada. També es poden emprar, amb igual resultat, condensadors de policarbonat o de poliester amb valors de tolerància que podran arribar al 5% i que oferiran una vida més llarga. Per les aplicacions on es requereix una capacitat molt baixa i precisa (excel·lents per alta freqüència), serà convenient l’ús de condensadors ceràmics amb toleràncies properes al 2% i tamanys realment petits. 3.1.5-Díodes LED Els leds seran de color vermell i de 5 mm de diàmetre amb corrents no superiors als 50 mA quan se’ls excita amb una tensió llindar de 2,5 volts. 3.1.6-Circuits integrats En aquest apartat volem fer menció dels següents integrats: -Amplificadors operacional LM741 i LM747. -Regulador de tensió LM7805 L’operacional LM741 haurà de tenir un encapsulat DIP 8 i si es pretén canviar per un altre model, haurà de complir les característiques més significatives que trobarem en la fulla del fabricant del capítol dels “Annexes”. Aquestes podrien ser el rang de

Page 115: SISTEMA DE CONTROL D’UNA FONT D’ALIMENTACIÓ DE …deeea.urv.cat/public/PROPOSTES/pub/pdf/361pub.pdfhaurà de ser bastant òptim en quant a connexions dels components per poder

PLEC DE CONDICIONS

7

tensions simètriques que pot acceptar, el nivell de rebuig al mode comú,... L’operacional LM747 és doble i en aquest cas té un encapsulat DIP 14. Com en l’anterior cas, models amb la mateixa configuració de potes i amb unes característiques semblants, seran perfectament aplicables. El regulador de tensió LM7805 s’utilitza en format T0-220 i ha de satisfer unes característiques determinades tals com uns bons nivells de regulació de línia i de càrrega, un rang de tensions d’entrada superior als 15 volts i un corrent màxim de sortida superior a 1 amper. 3.1.7-Driver RS-232 El driver RS-232 ha de satisfer les normes i especificacions EIA/TIA-RS232E. El que s’empra actualment és el MAX232 que presenta les següents característiques en cas que s’hagués de substituir per un d’equivalent: -Tensió d’alimentació de 5 V. -Connexió de 5 condensadors electrolítics de 1µF. -Velocitats de transmissió/recepció superiors a 9600 bps. -Encapsulat DIP 16. 3.1.8-EEPROM I2C Les memòries EEPROM externes es comunicaran a través del protocol I2C, tindran un capacitat de 256 kbits, s’alimentaran amb una tensió de 5 volts i tindran un encapsulat DIP 8. En el present projecte s’han utilitzat memòries de la casa Microchip del model M24LC256, encara que altres models amb la mateixa capacitat del mateix fabricant també es poden adaptar perfectament. SGS-Thompson també fabrica aquest tipus de memòries amb idèntic patillatge. 3.1.9-Microcontrolador El microcontrolador utilitzat en el present projecte és el PIC16F876-04 de la casa Microchip. El tipus de software que pota inscrit el fa insubstituïble per d’altres amb el mateix nombre de potes (28 pins) que provinguin d’algun altre fabricant. Dins la casa Microchip hi ha d’altres dispositius de memòria FLASH que compleixen les característiques d’aquest però amb algun tipus de matís: -PIC16F873: té una capacitat de memòria inferior, tan de programa com EEPROM, però suficient per satisfer les necessitats de la nostra aplicació. -PIC16F876A: és pràcticament idèntic en tots els aspectes i, per tant, perfectament substituïble.

Page 116: SISTEMA DE CONTROL D’UNA FONT D’ALIMENTACIÓ DE …deeea.urv.cat/public/PROPOSTES/pub/pdf/361pub.pdfhaurà de ser bastant òptim en quant a connexions dels components per poder

PLEC DE CONDICIONS

8

És important que s’utilitzi un cristall de quars amb una freqüència de 4 MHz perquè el software intern del microcontrolador està fortament lligat als temps que proporciona les oscil·lacions d’aquest. L’encapsulat serà tipus PDIP. 3.1.10-Disseny de plaques del circuit imprès Les plaques del circuit imprès han estat dissenyades amb el programa informàtic “Orcad 9.0” per una posterior impressió dels fotolits. Per a la seva realització s’han escollit plaques presensibilitzades positives en les dos cares i s’ha determinat un perfil i traçat de pistes i botons tenint en compte els següents punts:

-En el recorregut de les pistes evitarem els angles tancats (< 90º), els xamfrans cantelluts i els racons en general.

-Emprarem, doncs, angles suaus (a poder ser de 45º), xamfrans quan hi hagi un canvi sobtat de sentit i emplenarem els racons entre botons adjacents. -S’ha procurat minimitzar el recorregut amb el camí més directe possible i, si convé, utilitzant vies per continuar per l’altra cara. -Els botons han de suportar també l’esforç mecànic de subjecció del component. Cal preveure una superfície proporcional al nombre de pins del component, i al seu moment d’inèrcia. Si cal, s’ampliarà la superfície annexa als botons. -Les pistes (i qualsevol superfície conductora sobre la base) presentaran una capacitat paràsita entre elles. Si dues pistes adjacents es poden inferir un corrent altern, caldrà separar-les, si és necessari interposant-hi una tercera pista unida a un potencial neutre, que actuï com a pantalla electrostàtica. -Els corrents que circulen per les pistes també induiran f.e.m. paràsites en altres pistes. Convé mantenir la longitud de les pistes tan curta com sigui possible, evitar els angles i l’acumulació de diverses pistes paral·leles. -Les plaques de circuit imprès rígid s’han de soldar més endavant. S’han de vigilar les possibles acumulacions de soldadura i la possibilitat de “ponts” que es pugin produir. -Es procurarà evitar els amuntegaments de components (llevat que sigui necessari a la freqüència de treball del circuit), tot considerant també els efectes d’escalfament. L’amplada de les pistes és homogènia i val 0,8 mm, superant els 0,5 mm

establerts per les normes. Els botons emprats són circulars, amb un diàmetre de 2 mm, o quadrats amb també una amplada de 2 mm per costat. Per calcular l’amplada d’una pista, podem utilitzar la següent fórmula empírica:

27

3maxI

a = (1.1)

Page 117: SISTEMA DE CONTROL D’UNA FONT D’ALIMENTACIÓ DE …deeea.urv.cat/public/PROPOSTES/pub/pdf/361pub.pdfhaurà de ser bastant òptim en quant a connexions dels components per poder

PLEC DE CONDICIONS

9

On a és l’amplada de la pista en mm i maxI és la intensitat màxima que ha de córrer per la pista en ampers. 4 Condicions d’execució i muntatge A continuació s’expressarà la forma d’executar, fabricar i muntar algunes parts de l’equip, garantint el compliment de les normatives i reglamentacions vigents que els puguin afectar, ja expressades en les condicions legals i administratives. 4.1-Descripció general de muntatge A continuació es presenten les diferents fases que composen el muntatge del present projecte i l’ordre amb que s’han d’executar, amb l’obligació d’acabar la fase anterior abans de començar la següent.

1)-Encàrreg i compra dels components necessaris. 2)-Fabricació de la placa del circuit imprès. 3)-Muntar els components a la placa. 4)-Muntar la caixa (si es creu necessari).

5)-Ajustament i comprovació dels paràmetres pel bon funcionament. 6)-Posada en marxa de l’equip. 7)-Control de qualitat.

8)-Manteniment de l’equip, informant degudament a les persones que en un futur se’n faran càrrec.

Totes aquestes parts que en el seu conjunt formen l’obra, tindran que ser executades per muntadors que compleixin les normes que la comunitat autònoma, país o bé comunitat internacional tingui previstes per aquest tipus de muntatges, no fent-se responsable el projectista dels desperfectes ocasionats pel seu incompliment. 4.2-Fabricació de la placa de circuit imprès Una vegada dissenyada i impresos els fotolits en paper de transparència, es poden fabricar les plaques seguint el següent procediment fotolitogràfic: -S’han de posar a punt la maquinària i els materials a utilitzar: insoladora, revelador, atacant i les plaques tallades de material fotosensible positiu de doble cara i de fibra de vidre. -La placa de circuit imprès es disposa a l’interior de la insoladora, sobre el vidre i en contacte amb els fotolits originals a escala 1:1. Per tal de garantir en contacte entre els fotolits i la placa, es cobreix el conjunt amb una làmina de plàstic flexible i transparent. Un petit orifici a la base del vidre connecta un depressor o bomba de buit que farà que la

Page 118: SISTEMA DE CONTROL D’UNA FONT D’ALIMENTACIÓ DE …deeea.urv.cat/public/PROPOSTES/pub/pdf/361pub.pdfhaurà de ser bastant òptim en quant a connexions dels components per poder

PLEC DE CONDICIONS

10

mateixa pressió atmosfèrica deixi el conjunt ben premut contra el vidre, sense bombolles d’aire. -El temps d’exposició depèn de la làmpada usada, de la distància d’aquesta placa, del material fotosensible usat i de l’antiguitat d’aquest. Per tot això, el fabricant indica quin és el temps òptim recomanat. -Finalitzada l’exposició, es retira la placa de la insoladora i es col·loca dins el líquid revelador durant el temps indicat pel fabricant. Amb aquest període transcorregut, les pistes s’han de veure nítides i la resta de la superfície sense cap rastre de substància fotosensible, és a dir, el coure net. -Una vegada revelada la placa, es neteja amb aigua abundant. Per la fase d’atacat, es submergeix la placa en atacador i és aquí quan es pot observar com desapareix el coure lliure i les pistes es mantenen intactes. Quan el procés ha finalitzat, es neteja novament la placa amb aigua per aturar la fase de l’atacador. -Per acabar, s’haurà de netejar la substància fotosensible que recobreix les pistes amb alcohol o cetona. Aquestes estan ara a punt per poder ésser recobertes d’estany utilitzant el rodet. -Només resta fer els forats amb una broca de 0,5 a 1 mm, procurant no desenganxar, amb la pressió, el coure de la fibra de vidre. 4.3-Muntatge dels components de la placa Perquè els diferents components de la placa funcionin com un conjunt, han de ser soldats a aquesta. En aquest projecte s’emprarà la soldadura per fusió d’un aliatge metàl·lic (normalment compost per estany en un 62% i plom en un 38%). És important que la temperatura sigui l’adequada pel material (en aquest cas de 179ºC) i s’apliqui durant un temps prudent. Un cop finalitzat aquest procés, s’haurà de procedir a la verificació tan per mètodes òptics com elèctrics, ja sigui amb un multímetre comprovant la continuïtat de les diferents connexions. Finalment es gravarà en el microcontrolador, amb el MPLAB o qualsevol programa alternatiu que pugui realitzar tal efecte i un gravador com el PICSTAR Plus, tot el software dissenyat per aquest projecte i que es pot trobar en els annexes. 4.4-Muntatge de la caixa Amb les plaques finalitzades, es disposaran perquè es faci un estudi d’ubicació dins una caixa. Aquesta caixa protegirà el conjunt del mòdul de possibles cops i curtcircuits. Serà important, però, que la placa es trobi fermament subjectada. que la caixa disposi d’obertures de ventilació i, d’altra banda, permeti veure l’estat dels leds i manipular els diferents interruptors de maneig.

Page 119: SISTEMA DE CONTROL D’UNA FONT D’ALIMENTACIÓ DE …deeea.urv.cat/public/PROPOSTES/pub/pdf/361pub.pdfhaurà de ser bastant òptim en quant a connexions dels components per poder

PLEC DE CONDICIONS

11

4.5-Ajustament i comprovació dels paràmetres pel bon funcionament Totes les proves hauran d’estar supervisades per un tècnic qualificat que haurà de comprovar que: -La tensió arriba correctament rectificada a cadascun dels integrats (excepte en els amplificadors operacionals). -La comunicació sèrie asíncrona entre mòdul i PC és correcta. -La comunicació sèrie I2C entre el PIC i les memòries EEPROM externes funciona. -La precisió en el mostreig de senyal (ja sigui simulada o en el cas real de la font Amrel) sigui la que es descriu en l’apartat 1.2 de la memòria de càlcul. -La sortida del senyal pel filtre es trobi dins els marges de 0 a 5 volts. -L’encesa i apagada correcta de cadascun dels leds. -El funcionament correcte de cadascun dels interruptors de maneig. Totes aquestes operacions es poden trobar més detallades en la memòria descriptiva que, a més, proporcionarà un coneixement més ampli de la manera com activar-les.

Page 120: SISTEMA DE CONTROL D’UNA FONT D’ALIMENTACIÓ DE …deeea.urv.cat/public/PROPOSTES/pub/pdf/361pub.pdfhaurà de ser bastant òptim en quant a connexions dels components per poder

SISTEMA DE CONTROL D’UNA FONT D’ALIMENTACIÓ DE LABORATORI

ANNEX 1: MANUAL BÀSIC D’USUARI

AUTOR: Albert Marsal Vinadé.

DIRECTOR: Xavier Vilanova Salas.

DATA: Desembre/2004.

Page 121: SISTEMA DE CONTROL D’UNA FONT D’ALIMENTACIÓ DE …deeea.urv.cat/public/PROPOSTES/pub/pdf/361pub.pdfhaurà de ser bastant òptim en quant a connexions dels components per poder

ANNEX 1: MANUAL BÀSIC D’USUARI

2

ÍNDEX

1 Funcionament del mòdul de control ............................................................. 3 2 Funcionament del software.............................................................................. 4 3 Connexió................................................................................................................ 5

Page 122: SISTEMA DE CONTROL D’UNA FONT D’ALIMENTACIÓ DE …deeea.urv.cat/public/PROPOSTES/pub/pdf/361pub.pdfhaurà de ser bastant òptim en quant a connexions dels components per poder

ANNEX 1: MANUAL BÀSIC D’USUARI

3

1 Funcionament del mòdul de control *ATENCIÓ: el projecte és capaç de controlar qualsevol font de tensió controlada per tensió amb un rang de 0-5 volts a l’entrada. De la mateixa manera, pot prendre mostres de voltatges no superiors a 5 volts i no inferiors a 0 volts. Valors fora d’aquest rang, poden portar greus conseqüències al sistema o, en el millor dels casos, respostes completament errònies. El mòdul de control de la font Amrel del laboratori 334 de la Universitat Rovira i Virgili consta, molt bàsicament, d’un port sèrie RS-232, un microcontrolador i 5 interruptors (mirar figura 4 en l’apartat 3), de dues posicions fixes, que realitzen les següents funcions (d’esquerra a dreta): -interruptor I: amb el software del PC obert, el mòdul enviarà una trama del conjunt de mostres que hagi emmagatzemat l’últim cop que haguem activat aquest mode de funcionament. -interruptor II: amb el mòdul programat (com s’explica posteriorment), entrarem en règim de funcionament normal, és a dir, prendrà mostres de tensió mentre representarà el senyal de sortida preprogramat. -interruptor III: activem el mode de programació del mòdul. D’aquesta manera, i només utilitzant el software dissenyat pel projecte, podrem establir els paràmetres de temps mostreig, durada total de l’adquisició de mostres, la senyal de sortida que desitgem programar, etc. -interruptor IV: interruptor de RESET del programa. -interruptor V: interruptor de RESET del microcontrolador. Una vegada s’ha pres un interruptor, deixeu que finalitzi aquell procés. Si haguéssiu comès un error, s’aconsella prémer l’interruptor V i escollir novament opció. Un cop connectat l’equip, com es mostra en l’apartat 3, s’encendrà el led de més a la dreta (led V) que indica l’existència de subministrament elèctric. Perquè el microcontrolador estigui operatiu cal que el led IV estigui actiu, cosa que s’aconseguirà activant el commutador V. En aquest instant l’usuari ja pot iniciar qualsevol de les operacions previstes. Els altres leds indiquen, quan es troben actius, el mode de funcionament que s’està executant en aquell moment, és a dir: -led I: executant el mode de transmissió. -led II: executant mode de control i adquisició. -led III: mode de configuració actiu. (S’aconsella fer una ullada a la figura 4 per poder apreciar millor la posició dels diferents commutador i leds dins la placa).

Page 123: SISTEMA DE CONTROL D’UNA FONT D’ALIMENTACIÓ DE …deeea.urv.cat/public/PROPOSTES/pub/pdf/361pub.pdfhaurà de ser bastant òptim en quant a connexions dels components per poder

ANNEX 1: MANUAL BÀSIC D’USUARI

4

2 Funcionament del software *ATENCIÓ: el software ha estat dissenyat expressament per poder configurar el mòdul que hem comentat en l’apartat anterior. També pot servir com a consola de recepció de bytes pel port sèrie, però només es pot extrapolar per a aquesta utilitat. El programa utilitza arxius Excel per emmagatzemar les dades enviades i rebudes. Assegureu-vos que teniu aquest software instal·lat per poder obrir correctament els esmentats arxius. El software que ha estat dissenyat per poder configurar el mòdul de control de la font Amrel, realitza les següents funcions (de manera molt general): -Enviar pel port sèrie la configuració del mòdul (temps de mostreig, durada total de l’adquisició de dades, senyal consigna,etc...). -Adquirir, un cop el mòdul ha estat funcionant en règim normal, els valors d’amperatge que aquest ha llegit de la font. Amb tot això, el que s’ha de fer en primer lloc és configurar el port de comunicació del PC entrant a “config. del sistema” i tot seguit a “configuració del port”. D’aquesta manera podrem establir els paràmetres típics del port sèrie com la velocitat de transmissió, els bits de paritat, la quantitat de bits per trama,... Si es prem l’opció “predeterminats”, apareixeran els valors per defecte que són els aptes per poder establir comunicació amb el present mòdul. Per tant, s’aconsella deixar aquests valors. En aquest punt, podem passar a configurar el mòdul o bé a rebre’n els bytes que ha emmagatzemat. Si el que volem és això últim, entrarem a l’opció “tractament de dades” i seguidament a “Bolcar dades”. El mateix programa ens indicarà què haurem de fer perquè la recepció tingui èxit. Si ha estat així, tenim la possibilitat de veure representades en una gràfica les dades rebudes només prement l’opció “Guardar i visualitzar dades” de la pestanya “tractament de dades”. Si desitgem configurar el mòdul, entrarem a “config. del sistema” i després a “configuració de PIC”. S’han d’omplir totes les dades que es demanen. Un cop finalitzat, enviarem la configuració entrant una vegada més a “config. del sistema” i prement el botó de “enviar configuració”. Si l’operació ha estat realitzada amb èxit, passarem a enviar la consigna. Això ho farem entrant al menú “consignes”, escollint l’opció “obrir consigna” i triant l’arxiu Excel on hi ha guardada la consigna. Tenim la possibilitat de crear un senyal en el moment de l’execució escollint “generar consigna” del mateix menú. Aquesta opció crearà un arxiu Excel amb els valors que nosaltres haurem triat. Amb l’opció “enviar consigna” d’aquest menú, enviarem la consigna que serà més tard la sortida de la font Amrel. Per crear una senyal de sortida pròpia només ens fa falta obrir una fulla de càlcul Excel i donar valors a la primera columna. El màxim nombre de punts que podem definir és de 250 i tindran un rang de 0 a 300 (igual que la font de tensió). Els nombres poden ser reals sense cap tipus d’inconvenient. Degut a que la relació entrada/sortida de la font AMREL no és del tot lineal, és dóna la possibilitat d’obrir un calibratge que aproximarà més els valors. Per fer-ho, cal

Page 124: SISTEMA DE CONTROL D’UNA FONT D’ALIMENTACIÓ DE …deeea.urv.cat/public/PROPOSTES/pub/pdf/361pub.pdfhaurà de ser bastant òptim en quant a connexions dels components per poder

ANNEX 1: MANUAL BÀSIC D’USUARI

5

clicar en “consignes” i, posteriorment, en “obrir calibratge (AMREL SPS 300-4)”. Tan sols cal seleccionar l’arxiu Excel de calibratge que s’adjunta amb el CD del present projecte perquè aquesta es doni. Aquest full de càlcul està format per parelles de punts de la relació tensió entrada/tensió de sortida i de la relació corrent de sortida/tensió mostrejada. Perquè l’aproximació sigui el màxim correcta s’aconsella: -Actualitzar els valor de la columna B per les tensions d’entrada de A. -Actualitzar els valor de la columna E per les tensions mostrejades de D. L’última actualització d’aquest fitxer de calibratge és del 14 de setembre del 2004. 3 Connexió El mòdul es connecta al port sèrie del PC a través d’un cable null-mòdem creuat a fi efecte de realitzar les operacions de configuració i transmissió. Alhora de controlar la font i adquirir mostres, cal que el mòdul estigui connectat amb aquesta segons s’explica a continuació: -La font disposa, en la part posterior, d’un panell de connexions tal i com es mostra en la següent figura 1:

fig.1 Panell posterior font Amrel

-D’aquest panell, el número 6 representa un connector de programació, control i adquisició. El podem veure amb més detall en la figura 2:

fig.2 Connector entrada/sortida JP3

-Del connector JP3, els pins 4 i 5 són per controlar la tensió a la sortida de la font, mentre que mesurant la tensió entre els pins 10 i 11 s’obté el corrent que s’està

Page 125: SISTEMA DE CONTROL D’UNA FONT D’ALIMENTACIÓ DE …deeea.urv.cat/public/PROPOSTES/pub/pdf/361pub.pdfhaurà de ser bastant òptim en quant a connexions dels components per poder

ANNEX 1: MANUAL BÀSIC D’USUARI

6

subministrant. D’aquests, els pins 5 i 11 són massa, el 4 és entrada de 0 a 5 volts respecte el pin 5, i el 10 és sortida amb el mateix rang de tensió respecte del pin 11. -Del panell de la figura 1, el número 7 representa un conjunt de 5 commutadors que controlen la manera com funciona la font Amrel. Han d’estar en les següents posicions, tal i com es mostra en la figura 3:

fig.3 Commutadors SW1

-Amb tot això, el mòdul anirà connectat a la font com s’indica en la següent figura 4:

fig.4 Connexió amb placa

Page 126: SISTEMA DE CONTROL D’UNA FONT D’ALIMENTACIÓ DE …deeea.urv.cat/public/PROPOSTES/pub/pdf/361pub.pdfhaurà de ser bastant òptim en quant a connexions dels components per poder

SISTEMA DE CONTROL D’UNA FONT D’ALIMENTACIÓ DE LABORATORI

ANNEX 2: CODI PROGRAMA PIC16F876

AUTOR: Albert Marsal Vinadé.

DIRECTOR: Xavier Vilanova Salas.

DATA: Desembre/2004.

Page 127: SISTEMA DE CONTROL D’UNA FONT D’ALIMENTACIÓ DE …deeea.urv.cat/public/PROPOSTES/pub/pdf/361pub.pdfhaurà de ser bastant òptim en quant a connexions dels components per poder

ANNEX 2: CODI PROGRAMA PIC16F876

2

ÍNDEX

1 Codi font................................................................................................................ 3

Page 128: SISTEMA DE CONTROL D’UNA FONT D’ALIMENTACIÓ DE …deeea.urv.cat/public/PROPOSTES/pub/pdf/361pub.pdfhaurà de ser bastant òptim en quant a connexions dels components per poder

ANNEX 2: CODI PROGRAMA PIC16F876

3

1 Codi font ;**************************************************************** ;Programa desenvolupat pel control de la font de tensió AMREL ;Autor: Albert Marsal ;Data: 30-06-2004 ;**************************************************************** list p=16f876 #include "p16f876.inc" TMP_W equ 0x70 ;Variable per salvar W dins la interrupció TMP_STA equ 0x71 ;Variable per salvar STATUS dins la interrupció ADRES equ 0x72 ;Adreça de lect./escrip. de la EEPROM interna VALOR equ 0x73 ;Byte llegit/escrit de la EEPROM interna VALOR_H equ 0x74 ;Resultat de la conversió A/D EROR equ 0x75 ;Acumulador errors comunicació I2C I2C_DAT equ 0x76 ;Byte llegit/escrit de la EEPROM externa AUX equ 0x77 ;Variable auxiliar d’ús general N_VALOR equ 0x78 ;Nombre de valors de la consigna PWM RETARD equ 0x79 ;Acumulador auxiliar retard actualització PWM RETAD equ 0x7A ;Acumulador retard actualització PWM RETARDAX equ 0x7B ;Acumulador auxiliar retard adquisició A/D RETADAX equ 0x7C ;Acumulador retard adquisició A/D PORB equ 0x7D ;Valor de PORTB anterior I2C_ADRH equ 0x7E ;Byte alt d’adreça memòria EEPROM externa I2C_ADRL equ 0x7F ;Byte baix d’adreça memòria EEPROM externa W_BYTE equ 0x20 ;Byte de control memòria EEPROM externa H_MOSTR equ 0x21 ;Byte alt aux. d’adreça memòria EEPROM externa L_MOSTR equ 0x22 ;Byte baix au. d’adreça memòria EEPROM externa NUM_MEM equ 0x23 ;Nombre de memòries que s’han d’omplir org 0 goto start ;Instrucció primera adreça memòria programa org 4 goto interrupt ;Posició de programa quan es produeix interrup. start org 5 movlw 0xFB movwf ADRES ;Inicialitzo la adreça de la EEPROM a 251 movlw 0xFF movwf N_VALOR ;Inicialització de nº de valors >< de ADRES movlw 0x00 ;Inicialització de totes les varibles a 0 movwf RETARD movwf RETARDAX movwf RETAD movwf RETADAX

Page 129: SISTEMA DE CONTROL D’UNA FONT D’ALIMENTACIÓ DE …deeea.urv.cat/public/PROPOSTES/pub/pdf/361pub.pdfhaurà de ser bastant òptim en quant a connexions dels components per poder

ANNEX 2: CODI PROGRAMA PIC16F876

4

movwf EROR movwf AUX movwf I2C_ADRH movwf I2C_ADRL movwf VALOR banksel W_BYTE

movlw B'10100000' ;Inicialització dels bytes de configuració de lectura ;i escriptura EEPROM externa

movwf W_BYTE clrf H_MOSTR clrf L_MOSTR clrf NUM_MEM banksel PORTA clrf PORTA ;Neteja tots els bits del PORTA clrf PORTB ; Neteja tots els bits del PORTB clrf PORTC ; Neteja tots els bits del PORTC banksel TRISA movlw 0x01 ;AN0 entrada. AN1-AN7 sortides movwf TRISA movlw 0xF0 ;Els 4 bits alts del PORTB són entrades i els 4 ;baixos són sortides movwf TRISB banksel ADCON0 movf PORTB,W ;Emmagatzemat el valor inicial del PORTB movwf PORB movlw 0x80 movwf ADCON0 ;fosc/32, canal 0 per fer conv., netejo GO/DONE. banksel ADCON1 movlw 0x02 movwf ADCON1 ;Justificació a l'esquerra, pins (AN4-AN0) del

;PORTA com a entrades analògiques, tensió de ;referència Vdd i Vss.

banksel TRISC bcf TRISC, 6 ;PORTC(6) sortida bsf TRISC, 7 ;PORTC(7) entrada ;**************************Configuració USART************************** movlw B'00011001' movwf SPBRG ;9600 bauds movlw B'00000110'

movwf TXSTA ;Transmissió 8bits, trans. deshabilitada, mode ; assíncron, high speed banksel RCSTA movlw B'10010000' movwf RCSTA ;Recepció 8bits, recepció habilitada

Page 130: SISTEMA DE CONTROL D’UNA FONT D’ALIMENTACIÓ DE …deeea.urv.cat/public/PROPOSTES/pub/pdf/361pub.pdfhaurà de ser bastant òptim en quant a connexions dels components per poder

ANNEX 2: CODI PROGRAMA PIC16F876

5

;******************Configuració de la transmició sèrie I2C******************** banksel SSPADD movlw 0x09 ;Es mou 9 en decimal per generar una freqüència ;de baud rate de 100khz movwf SSPADD bsf SSPSTAT,7 ;Deshabilitat slew rate bcf SSPSTAT,6 ;Nivells input d'acord amb I2c especificacions bsf TRISC,3 ; I2C SCL pin entrada bsf TRISC,4 ; I2C SDA pin entrada banksel PORTC bsf PORTC,3 bsf PORTC,4 movlw b'00101000' ;Habilitat el port sèrie, habilita el clock, I2C master ;mode amb clock=Fosc/(4*(SSPADD+1)) movwf SSPCON banksel SSPCON2 ;Deshabilito la recepció bcf SSPCON2,RCEN bcf PIR1,RCIF ;Neteja del flag d'interrupció banksel OPTION_REG bsf OPTION_REG,7 ;Deshabilitades resistències pull-up banksel PORTB bsf PORTB,3 banksel PIE1 bsf PIE1,RCIE ;Habilitades interrupcions USART per rebre bsf INTCON,PEIE ;Habilitades interrupcions per perifèrics bsf INTCON,GIE ;Habilitades interrupcions en general pulsador movf PORB,W ;Valor anterior de portb a aux movwf AUX banksel PORTB movf PORTB,W movwf PORB ;Valor nou de portb a porb xorwf AUX,1 ;El bit en 1 és la tecla que s'ha pulsat btfsc AUX,7 goto start btfsc AUX,6 goto WAIT_CH btfsc AUX,5 goto C_TMR0 btfsc AUX,4 goto ENVIO

Page 131: SISTEMA DE CONTROL D’UNA FONT D’ALIMENTACIÓ DE …deeea.urv.cat/public/PROPOSTES/pub/pdf/361pub.pdfhaurà de ser bastant òptim en quant a connexions dels components per poder

ANNEX 2: CODI PROGRAMA PIC16F876

6

goto pulsador ;Si no s’ha canviat cap pulsador es torna a l’inici WAIT_CH movf VALOR,W ;Espera que arribi el caràcter ‘A’ pel port sèrie. xorlw 0x41 btfss STATUS,Z ;Quan arriba, comença mode configuració goto WAIT_CH banksel RCSTA bcf RCSTA,CREN ;Deshabiliada recepció banksel PIE1 bcf PIE1,RCIE ;Deshabilitades interrupcions USART per rebre movlw 0x01 movwf VALOR ;Valor inicial de VALOR a 1. banksel PORTB bsf PORTB,2 ;Encesa led pota 2 mem_che call W_I2C ;Intenta escriure a EEPROM externa btfsc EROR,7 ;ERROR? goto MEM_ACK btfsc VALOR,3 ;Nombre màxim de memòries? goto MEM_ACK incf VALOR,f ;S’ha detectat memòria, i incrementa VALOR movlw 0x02 addwf W_BYTE,f ;Apunta següent memòria goto mem_che MEM_ACK banksel TXSTA bsf TXSTA,TXEN ;Habilita transmissió USART banksel TXREG btfss PIR1,TXIF ;Ha acabat l’enviament anterior? goto $-1 movf VALOR,W ;Escriu a TXREG el nombre de memòries ;disponible+1 movwf TXREG banksel TXSTA ;Espera que hagi sortit el byte btfss TXSTA,TRMT goto $-1 movlw 0xFA ;Reinicia ADRES amb adreça 250 EEPROM movwf ADRES clrf VALOR ;Es neteja variable movlw 0xFF movwf N_VALOR ;Valor inicial igual a 255 banksel TXSTA bcf TXSTA,TXEN ;Inhabilita transmissió banksel PIE1

Page 132: SISTEMA DE CONTROL D’UNA FONT D’ALIMENTACIÓ DE …deeea.urv.cat/public/PROPOSTES/pub/pdf/361pub.pdfhaurà de ser bastant òptim en quant a connexions dels components per poder

ANNEX 2: CODI PROGRAMA PIC16F876

7

bsf PIE1,RCIE ;Habilita interrupcions recepció USART banksel RCSTA bsf RCSTA,CREN ;Obre la recepció BUCLE movf ADRES,W ;Espera interrupcions xorwf N_VALOR,0 btfss STATUS,Z ;ADRES=N_VALOR? goto BUCLE ;Finalitzada configuració banksel RCSTA bcf RCSTA,CREN ;Tanca la recepció banksel PORTB bcf PORTB,2 ;Apaga led pota 2. movf PORTB,W movwf AUX ;Copia PORTB a AUX ESPERO_NORM ;Després de la configuració, hi ha la possibilitat de

;funcionar normalment movf PORTB,W ;Valor nou de PORTB a w

xorwf AUX,1 btfsc AUX,5 ;Si es canvia l'estat del interruptor 5, començarà ;el mode d’adquisició i control goto $+3 movwf AUX goto ESPERO_NORM ;No surt del bucle fins que canvia commut. 5 ;******************************Adquisició i control************************ C_TMR0 banksel RCSTA bcf RCSTA,CREN ;Tanco la recepció USART banksel PIE1 bcf PIE1,RCIE ;Deshabilita interrupcions USART recepció bcf INTCON,T0IE ;De moment, deshabilita interrupcions per timer0 bcf INTCON,T0IF ;Neteja flag d'interrupció timer0 bcf INTCON,GIE movlw 0x87 ;pre-scaler a 1:256 movwf OPTION_REG banksel PORTB bsf PORTB,1 ;Engega led pota 1

movlw 0xFA ;Si l'execució comença en C_TMR0 és necessari ;que actualitzi la variable N_VALOR

movwf ADRES call R_EEPROM ;Lectura de N_VALOR de EEPROM interna movf VALOR,W

Page 133: SISTEMA DE CONTROL D’UNA FONT D’ALIMENTACIÓ DE …deeea.urv.cat/public/PROPOSTES/pub/pdf/361pub.pdfhaurà de ser bastant òptim en quant a connexions dels components per poder

ANNEX 2: CODI PROGRAMA PIC16F876

8

movwf N_VALOR ;Assignació de la variable retornada per lectura ;EEPROM interna. movlw 0xFB ;llegeix el retard pel llançament de dades al PWM movwf ADRES call R_EEPROM movf VALOR,W movwf RETARD ;Assignació a la variable de contingut adreça 251 movwf RETARDAX movlw 0xFC ;Llegeix el retard per la converció A/D movwf ADRES call R_EEPROM movf VALOR,W movwf RETAD ;Assignació a la variable de contingut adreça 252 movwf RETADAX movlw 0xFD ;Llegeix el byte alt posició final EEPROM externa movwf ADRES call R_EEPROM banksel H_MOSTR movlw 0xFF xorwf VALOR,0 btfss STATUS,Z ;Si h_mostreig val 0xF?, vol dir que val 0x00 ;aquest registre goto $+3 clrf H_MOSTR goto $+3 movf VALOR,W movwf H_MOSTR ;Assignació a la variable de contingut adreça 253 movlw 0xFE ;Llegeix byte baix posició final EEPROM externa movwf ADRES call R_EEPROM banksel L_MOSTR movf VALOR,W movwf L_MOSTR ;Assignació a la variable de contingut adreça 254 movlw 0xFF ;Llegeix el nomdre de memòries que ocuparem movwf ADRES call R_EEPROM banksel NUM_MEM movlw 0xFF xorwf VALOR,0 btfss STATUS,Z ;Si NUM_MEM val 0xF?, vol dir que val 0x00 ;aquest registre goto $+3 clrf NUM_MEM goto $+3 movf VALOR,W movwf NUM_MEM ;Assignació a la variable de contingut adreça 255

Page 134: SISTEMA DE CONTROL D’UNA FONT D’ALIMENTACIÓ DE …deeea.urv.cat/public/PROPOSTES/pub/pdf/361pub.pdfhaurà de ser bastant òptim en quant a connexions dels components per poder

ANNEX 2: CODI PROGRAMA PIC16F876

9

;**************************Configuració timer2 i PWM********************* banksel T2CON clrf T2CON ;Deixa pre-scaler i post-scaler a 1 i deshabilita ;timer2 clrf TMR2 ;Neteja contingut timer2 movlw 0x0f movwf CCP1CON ;PWM amb el timer2 banksel PR2 movlw 0xFF movwf PR2 ;(255+1)*250ns*4*1=3,906kHz movlw 0xfb ;Pota CCP1 output andwf TRISC,F ;El resultat de la AND queda a TRISC movlw 0x00 movwf ADRES ;Es col·loca a la primera adreça de la EEPROM call R_EEPROM banksel CCPR1L movf VALOR,W ;Mou el valor del primer cicle de treball a W movwf CCPR1L ;Escriu duty ;****************************Comencen els timers************************* banksel T1CON clrf T1CON ;Conf. Timer1; clock intern, pre-scaler a 1:1 banksel PIE1 bcf PIE1,TMR1IE ;Deshabilita interrupcions per timer1 banksel PIR1 bcf PIR1,TMR2IF ;Neteja el flag d'interrupció del timer2 movlw 0x3D movwf TMR0 ;195*256*1us=49,92ms al timer0 bsf INTCON,T0IE ;Habilita interrupcions timer0 bsf T2CON,TMR2ON ;Enjega TMR2 decf N_VALOR,f ;Decrementa en '1' perquè la configuració del bucle ;llegiria un valor més. clrf EROR ;Netejo anteriors errors banksel W_BYTE movlw B'10100000' ;Inicialització dels bytes de control de lectura i ;escritura de la EEPROM externa movwf W_BYTE banksel INTCON bsf INTCON, GIE ;Interrupcions en general habilitades ONA banksel L_MOSTR movf I2C_ADRL,W xorwf L_MOSTR,0 btfss STATUS,Z ;Byte baix adreça llegida=byte baix adreça final? goto ONA1 ;Continua procés

Page 135: SISTEMA DE CONTROL D’UNA FONT D’ALIMENTACIÓ DE …deeea.urv.cat/public/PROPOSTES/pub/pdf/361pub.pdfhaurà de ser bastant òptim en quant a connexions dels components per poder

ANNEX 2: CODI PROGRAMA PIC16F876

10

movf I2C_ADRH,W xorwf H_MOSTR,0 btfss STATUS,Z ;Byte alt adreça llegida=byte alt adreça final? goto $+6 movlw B'10100000' addwf NUM_MEM,W xorwf W_BYTE,W btfsc STATUS,Z ;Ha arribat a la memòria final? goto END_ONA ;Sortida bucle ONA1 btfsc EROR,7 ;Comprova que no hagi hagut error de comunicació goto END_ONA movf ADRES,W xorwf N_VALOR,0 ;Quan adreça i nº de valors siguin iguals, torna a la ;primera adreça btfss STATUS,Z goto ONA ;Espera més interrupcions. Torna a iniciar bucle movlw 0x00 ;Torna a la primera adreça EEPROM movwf ADRES goto ONA ;Torna a iniciar bucle END_ONA banksel T2CON bcf INTCON,T0IE ;Deshabilita interrupcions per timer0 bcf INTCON,GIE bcf T2CON,TMR2ON ;Apago TMR2 banksel PORTB bcf PORTB,1 ;Apaga led pota 1. movf PORTB,W ;Copia el valor anterior de PORTB movwf AUX ;Després del funcionament normal, hi ha la ;possibilitat d'enviar els bytes mostrejats ESPERO_ENV movf PORTB,W ;Valor nou de PORTB a W xorwf AUX,1 btfsc AUX,4 ;Si es canvia l'estat del interruptor4, començarà ;l'enviament dels bytes goto $+3 ;Si canvia interruptor, comença la transmissió movwf AUX goto ESPERO_ENV ;Espera al canvi de interruptor4 ;**************************Transmissió de dades*************************** ENVIO bcf INTCON,GIE ;Inhabilita interrupcions generals banksel PIE1 bcf PIE1,RCIE ;Inhabilita interrupcions USART per rebre banksel PORTB bsf PORTB,0 ;Engega led pota 0.

Page 136: SISTEMA DE CONTROL D’UNA FONT D’ALIMENTACIÓ DE …deeea.urv.cat/public/PROPOSTES/pub/pdf/361pub.pdfhaurà de ser bastant òptim en quant a connexions dels components per poder

ANNEX 2: CODI PROGRAMA PIC16F876

11

;Si s’arriba a aquest punt des del menú inicial, cal ;llegir les variables

movlw 0xFD ;Llegeix byte alt posició final EEPROM externa movwf ADRES call R_EEPROM banksel H_MOSTR movlw 0xFF xorwf VALOR,0 btfss STATUS,Z ;si h_mostreig val 0xF?, vol dir que val 0x00 ;aquest registre goto $+3 clrf H_MOSTR goto $+3 movf VALOR,W movwf H_MOSTR movlw 0xFE ;Llegeix byte baix posició final EEPROM externa movwf ADRES call R_EEPROM banksel L_MOSTR movf VALOR,W movwf L_MOSTR movlw 0xFF ;Llegeix el nomdre de memòries que s’ompliran movwf ADRES call R_EEPROM banksel NUM_MEM movlw 0xFF xorwf VALOR,0 btfss STATUS,Z ;si NUM_MEM val 0xF?, vol dir que val 0x00 ;aquest registre goto $+3 clrf NUM_MEM goto $+3 movf VALOR,W movwf NUM_MEM clrf EROR ;Es netegen possibles errors anteriors banksel W_BYTE movlw B'10100000' ;Inicialització dels bytes de configuració de lectura ;i escriptura de la EEPROM externa movwf W_BYTE clrf I2C_ADRH ;Neteja l’adreça de la memòria EEPROM a llegir clrf I2C_ADRL call R_I2C ;Es llegeix el primer valor de la EEPROM externa ;apuntat per I2C_ADRH i I2C_ADRL. banksel TXREG movf I2C_DAT,W ;S’escriu a TXREG el primer valor a transmetre movwf TXREG

Page 137: SISTEMA DE CONTROL D’UNA FONT D’ALIMENTACIÓ DE …deeea.urv.cat/public/PROPOSTES/pub/pdf/361pub.pdfhaurà de ser bastant òptim en quant a connexions dels components per poder

ANNEX 2: CODI PROGRAMA PIC16F876

12

incf I2C_ADRL,1 ;Increment del byte baix de l’adreça banksel TXSTA bsf TXSTA,TXEN ;S’habilita transmissió bsf PIE1,TXIE ;S’habiliten interrupcions per transmissió bsf INTCON,GIE ;S’habiliten interrupcions generals BUCLE2 banksel H_MOSTR movf I2C_ADRL,W xorwf L_MOSTR,0 btfss STATUS,Z ;Byte baix adreça enviada=byte baix adreça final? goto ENVIO1 ;Si no és igual, comprova si hi ha hagut errors movf I2C_ADRH,W xorwf H_MOSTR,0 btfss STATUS,Z ;Byte alt adreça enviada=byte alt adreça final? goto $+7 bcf W_BYTE,0 movlw B'10100000' addwf NUM_MEM,W xorwf W_BYTE,W btfsc STATUS,Z ;Ha buidat el nombre indicat de memòries? goto FI_PROGR ENVIO1 btfss EROR,7 ;S’ha produït error de comunicació? goto BUCLE2 ;S’esperen més interrupcions FI_PROGR banksel PIE1 clrf PIE1 ;Deshabilita interrupcions de perifèrics clrf INTCON ;Deshabilita totes les interrupcions banksel TXSTA btfss TXSTA,TRMT ;Espera que l’últim byte surti pel port sèrie goto $-1 banksel PORTB bcf PORTB,0 ;Apaga led de pota 0. goto FI ;********************************************************************** ;INTERRUPCIONS ;********************************************************************** interrupt movwf TMP_W ;Guarda W sense alterar STATUS swapf STATUS,W ;Escriu STATUS girat a W sense alterar ;STATUS

Page 138: SISTEMA DE CONTROL D’UNA FONT D’ALIMENTACIÓ DE …deeea.urv.cat/public/PROPOSTES/pub/pdf/361pub.pdfhaurà de ser bastant òptim en quant a connexions dels components per poder

ANNEX 2: CODI PROGRAMA PIC16F876

13

clrf STATUS ;Es neteja el registre movwf TMP_STA ;Guardem STATUS sense variar flags a una ;variable banksel PIR1 btfsc PIR1,RCIF ;Interrupció UART de recepció? goto rep btfsc PIR1,TXIF ;Interrupció UART de transmició? goto envia btfsc INTCON,T0IF ;Interrupció timer0? goto timer0 goto fi_int ;Fi interrupció ;***************************Rutina de recepció*************************** rep movf RCREG,W ;Funció d'escritura a EEPROM movwf VALOR movlw 0xFA xorwf ADRES,0 ;Si és el primer valor enviat, és el nombre de valors ;de la consigna btfss STATUS,Z goto $+3 movf VALOR,W movwf N_VALOR ;S’assigna el nombre de valors de la consigna call W_EEPROM ;Escriptura EEPROM interna de variable anterior incf ADRES,F ;Pròxima direcció de memòria goto fi_int ;**************************Rutina d’enviament*************************** envia call R_I2C

movlw 0xFF xorwf I2C_ADRL,0 btfss STATUS,Z ;I2C_ADRL=255? goto salt1 movlw 0x7F ;Si és igual... xorwf I2C_ADRH,0 btfss STATUS,Z ;I2C_ADRH=128? goto $+7 clrf I2C_ADRH ;Si és igual passa a 0 banksel W_BYTE movlw 0x02 addwf W_BYTE,f ;S’apunta a una nova EEPROM goto $+2 incf I2C_ADRH,f ;Si I2C_ADRH < 128, incrementa en una unitat salt1 incf I2C_ADRL,f ;Si I2C_ADRL<255, incrementa en una unitat banksel TXREG

Page 139: SISTEMA DE CONTROL D’UNA FONT D’ALIMENTACIÓ DE …deeea.urv.cat/public/PROPOSTES/pub/pdf/361pub.pdfhaurà de ser bastant òptim en quant a connexions dels components per poder

ANNEX 2: CODI PROGRAMA PIC16F876

14

movf I2C_DAT,W ;S’escriu a TXREG el següent valor a transmetre ;llegit de EEPROM externa

movwf TXREG goto fi_int ;******************************Rutina TIMER0*************************** timer0 banksel TMR0 movlw 0x3D ;49,92ms movwf TMR0 ;Recàrrega ràpida del timer decf RETARD,1 ;Decrement del registre de retard decf RETAD,1 ;Decrement del registre de retard A/D movlw 0x00 xorwf RETARD,0 ;Acumulador actualització PWM=0? btfss STATUS,Z goto $+9 ;Si no =0, es mira període adquisició incf ADRES,1 ;Següent adreça de la EEPROM interna call R_EEPROM banksel CCPR1L movf VALOR,W movwf CCPR1L ;Ha llegit el següent valor de la EEPROM i ;actualitza duty_cicle movf RETARDAX,W movwf RETARD ;Recàrrega d’acumulador amb la variable auxiliar movlw 0x00 xorwf RETAD,0 ;Acumulador període adquisició=0? btfss STATUS,Z goto fi_int ;Si no igual, surt de la rutina call ADCONV ;Funció conversió movf VALOR_H,W movwf I2C_DAT ;Es copia valor resultant de la conversió call W_I2C ;Escriu a la I2C_EEPROM la dada capturada movlw 0xFF xorwf I2C_ADRL,0 btfss STATUS,Z ;Byte baix d’adreça actual d’escriptura=255? goto salt movlw 0x7F xorwf I2C_ADRH,0 btfss STATUS,Z ;Byte alt d’adreça actual d’escriptura=128? goto $+7 clrf I2C_ADRH ;Si ha arribat a 128, passa a 0 banksel W_BYTE movlw 0x02 addwf W_BYTE,f ;Canvi de EEPROM goto $+2 incf I2C_ADRH,f ;Si no igual a 128, incrementa variable salt incf I2C_ADRL,f ;Si no igual a 255, incrementa variable

Page 140: SISTEMA DE CONTROL D’UNA FONT D’ALIMENTACIÓ DE …deeea.urv.cat/public/PROPOSTES/pub/pdf/361pub.pdfhaurà de ser bastant òptim en quant a connexions dels components per poder

ANNEX 2: CODI PROGRAMA PIC16F876

15

movf RETADAX,W movwf RETAD ;Recàrrega d’acumulador amb variable auxiliar goto fi_int fi_int swapf TMP_STA,W ;Gira valor anterior d’STATUS a W movwf STATUS ;Mou a STATUS el seu valor inicial swapf TMP_W,F ;Gira valor inicial de W dins la variable swapf TMP_W,W ;Gira valor de variable i el copia a W; W=valor ;inicial banksel PIR1 bcf PIR1,RCIF ;Neteja flag d’interrupció recepció bcf INTCON,T0IF ;Neteja flag d'interrupció de timer0 retfie ;Reactiven interrupcions globals ;********************************************************************** ;SUBRUTINES ;********************************************************************** ;***********************Escriptura a EEPROM interna********************** W_EEPROM banksel EECON1 btfsc EECON1, WR goto $-1 ;Espera a que l'escriptura anterior estigui feta bcf STATUS, RP0 ;Bank 2 movf ADRES, W movwf EEADR ;S’escriu adreça de la EEPROM interna movf VALOR, W movwf EEDATA ;S’escriu valor a escriure a EEPROM interna bsf STATUS,RP0 ;Bank 3 bcf EECON1,EEPGD ;Apunta a memòria de dades EEPROM bsf EECON1,WREN ;Habilita escriptura movlw 0x55 movwf EECON2 ;Escriu 55h a EECON2 movlw 0xAA movwf EECON2 ;Escriu AAh a EECON2 bsf EECON1,WR ;Comença escriptura a EEPROM bcf EECON1,WREN ;Deshabilita l'escriptura a EEPROM

return

Page 141: SISTEMA DE CONTROL D’UNA FONT D’ALIMENTACIÓ DE …deeea.urv.cat/public/PROPOSTES/pub/pdf/361pub.pdfhaurà de ser bastant òptim en quant a connexions dels components per poder

ANNEX 2: CODI PROGRAMA PIC16F876

16

;*********************Lectura de la EEPROM interna************************ R_EEPROM banksel EECON1 btfsc EECON1, WR goto $-1 ;Espera a que l'escritura anterior estigui feta banksel EEADR ;Se li ha de passar l'adreça que ha de llegir movf ADRES,W movwf EEADR ;La direcció que volem llegir està a EEADR banksel EECON1 bcf EECON1, EEPGD ;Apuntem a memòria de dades EEPROM bsf EECON1, RD ;Habilita lectura de EEPROM banksel EEDATA movf EEDATA,W ;W conté el valor llegit de la EEPROM movwf VALOR ;El valor llegit a VALOR return ;***********************Subrutina de conversió A/D ******************** ADCONV

banksel ADCON0 bsf ADCON0,ADON ;Engega el convertidor banksel TMR1H movlw 0xff movwf TMR1H movlw 0xEB movwf TMR1L ;20(-65516)*4*250ns=20us al TIMER1 bsf T1CON,TMR1ON ;Comença a contar btfsc TMR1H,7 ;Espera que desbordi el temporitzador goto $-1 bcf T1CON,TMR1ON ;Apaga TIMER1 banksel ADCON0 bsf ADCON0,GO ;Comença la conversió btfsc ADCON0,GO goto $-1 movf ADRESH,W ;Escriu el byte alt de ADRESH a valor_h movwf VALOR_H bcf ADCON0,ADON ;Apaga convertidor return

Page 142: SISTEMA DE CONTROL D’UNA FONT D’ALIMENTACIÓ DE …deeea.urv.cat/public/PROPOSTES/pub/pdf/361pub.pdfhaurà de ser bastant òptim en quant a connexions dels components per poder

ANNEX 2: CODI PROGRAMA PIC16F876

17

;********************Escriptura a la EEPROM perifèrica********************* W_I2C banksel W_BYTE bcf W_BYTE,0 ;Byte de configuració per escriptura call STARTI2C ;Rutina d’inici de comunicació banksel SSPBUF bcf PIR1,SSPIF movf I2C_ADRH,W ;Envia byte alt de l'adreça movwf SSPBUF btfss PIR1,SSPIF ;Està a punt la memòria per rebre propera dada? goto $-1 banksel SSPBUF bcf PIR1,SSPIF movf I2C_ADRL,W ;Envia byte baix de l'adreça movwf SSPBUF btfss PIR1,SSPIF ;Està a punt la memòria per rebre propera dada? goto $-1 banksel SSPBUF bcf PIR1,SSPIF movf I2C_DAT,W ;Envia la dada a escriure movwf SSPBUF btfss PIR1,SSPIF ;Està a punt la memòria per rebre propera dada? goto $-1 ;STOP condició call STOP_CON ;Funció d’enviament del bit de parada return ;************************Lectura de la EEPROM perifèrica******************* R_I2C banksel W_BYTE bcf W_BYTE,0 ;Byte de configuració per escriptura call STARTI2C ;Rutina d’inici de comunicació banksel SSPBUF bcf PIR1,SSPIF movf I2C_ADRH,W ;Envia byte alt de l'adreça a llegir movwf SSPBUF btfss PIR1,SSPIF ;Està a punt la memòria per rebre propera dada? goto $-1 bcf PIR1,SSPIF movf I2C_ADRL,W ;Envia byte baix de l'adreça a llegir movwf SSPBUF

Page 143: SISTEMA DE CONTROL D’UNA FONT D’ALIMENTACIÓ DE …deeea.urv.cat/public/PROPOSTES/pub/pdf/361pub.pdfhaurà de ser bastant òptim en quant a connexions dels components per poder

ANNEX 2: CODI PROGRAMA PIC16F876

18

btfss PIR1,SSPIF ;Està a punt la memòria per rebre propera dada? goto $-1 ;Seqüència per a llegir bytes de la EEPROM

banksel W_BYTE bsf W_BYTE,0 ;Byte de configuració per lectura call STARTI2C ;Seqüència d’inici per la comunicació banksel PIR1 bcf PIR1,SSPIF call I2C_IDLE ;Està mòdul MSSP operant? banksel SSPCON2 bsf SSPCON2,RCEN ;Habilita recepció banksel PIR1 btfss PIR1,SSPIF ;Espero a que el buffer estigui ple goto $-1 banksel SSPBUF movf SSPBUF,W movwf I2C_DAT ;Quan està ple, copia byte a la variable I2C_DAT banksel SSPCON2 bcf SSPCON2,RC EN ;Deshabilita recepció call STOP_CON ;Rutina d’enviament del bit de parada return ;******************Funció espera a la no operació del mòdul MSSP************* I2C_IDLE banksel SSPSTAT btfsc SSPSTAT,2 goto $-1 ;Està el mòdul MSSP tranmitint? banksel SSPCON2 movf SSPCON2,W andlw 0x1F ;Es troba el mòdul MSSP activant seqüència de ;recepció, reconeixement, parada o inici? btfss STATUS,Z goto $-3 return ;*******************Rutina d'espera a l'acknowledge de l'esclau**************** STARTI2C clrf EROR ;Esborra els possibles errors anteriors banksel SSPCON2

Page 144: SISTEMA DE CONTROL D’UNA FONT D’ALIMENTACIÓ DE …deeea.urv.cat/public/PROPOSTES/pub/pdf/361pub.pdfhaurà de ser bastant òptim en quant a connexions dels components per poder

ANNEX 2: CODI PROGRAMA PIC16F876

19

bsf SSPCON2,SEN ;Inicia bus start condition btfsc SSPCON2,SEN goto $-1 ;Ha enviat el bit d’inici? RE_START2 banksel SSPBUF bcf PIR1,SSPIF movf W_BYTE,W ;Envia la paraula de control a la EEPROM movwf SSPBUF btfss PIR1,SSPIF ;Ha contestat la memòria? goto $-1 banksel SSPCON2 btfss SSPCON2,ACKSTAT ;Ha reconegut la memòria la instrucció? return ;Fi de la rutina banksel SSPCON2 ;Si no ha reconegut instrucció bsf SSPCON2,RSEN ;Torna a enviar bit d’inici btfsc SSPCON2,RSEN ;Ha enviat bit d’inici? goto $-1 incf EROR,f ;S’ha produït un error més en la comunicació btfsc EROR,7 ;S’han donat 128 errors? return ;Si s’han donat, fi de la rutina goto RE_START2 ;Si no s’han donat, torna a enviar byte control return ;************************Rutina d’enviament bit de parada******************* STOP_CON banksel PIR1 bcf PIR1,SSPIF banksel SSPCON2 bsf SSPCON2,PEN ;Envio bit de parada banksel PIR1 btfss PIR1,SSPIF ;Espera a que el bit de parada hagi estat enviat goto $-1 return ;********************************************************************** FI end ;Torna a l’inici del programa; adreça 0x00

Page 145: SISTEMA DE CONTROL D’UNA FONT D’ALIMENTACIÓ DE …deeea.urv.cat/public/PROPOSTES/pub/pdf/361pub.pdfhaurà de ser bastant òptim en quant a connexions dels components per poder

SISTEMA DE CONTROL D’UNA FONT D’ALIMENTACIÓ DE LABORATORI

ANNEX 3: CODI PROGRAMA PC

AUTOR: Albert Marsal Vinadé.

DIRECTOR: Xavier Vilanova Salas.

DATA: Desembre/2004.

Page 146: SISTEMA DE CONTROL D’UNA FONT D’ALIMENTACIÓ DE …deeea.urv.cat/public/PROPOSTES/pub/pdf/361pub.pdfhaurà de ser bastant òptim en quant a connexions dels components per poder

ANNEX 3: CODI PROGRAMA PC

2

ÍNDEX 1 Variables globals................................................................................................. 3 2 Menú principal .................................................................................................... 4 2.1-Codi font associat al menú principal ................................................................ 4 3 Creació consigna ............................................................................................... 15 3.1-Codi font associat a la creació de la consigna ................................................ 15 4 Configuració port sèrie ................................................................................... 17 4.1-Codi associat a la configuració port sèrie ...................................................... 17 5 Configuració PIC.............................................................................................. 20 5.1-Codi associat al formulari de configuració del PIC ....................................... 20 6 Visualització de dades ..................................................................................... 24 6.1-Codi font associat al formulari de visualització de dades.............................. 24 7 Col·locació dades calibratge en vectors ...................................................... 29 7.1-Codi font associat al formulari del diàleg de calibratge ................................ 29

Page 147: SISTEMA DE CONTROL D’UNA FONT D’ALIMENTACIÓ DE …deeea.urv.cat/public/PROPOSTES/pub/pdf/361pub.pdfhaurà de ser bastant òptim en quant a connexions dels components per poder

ANNEX 3: CODI PROGRAMA PC

3

1 Variables globals Option Explicit Public fulladecalcul As Object Public DocWord As Word.Application Public arxiu As String ‘//Arxiu que conté la consigna Public arxiuscalibracio As String ‘//Arxiu que conté el calibratge Public valors As String ‘//Nombre de valors que té el senyal consigna Public valorsrep As Long ‘//Nombre de valors rebuts del PIC Public rep(262144) As String ‘//Vector de caràcters rebuts del PIC Public conf(6) As String ‘//Vector de variables de la configuració Public puc_enviar1 As Boolean ‘//Variable booleana per habilitar enviament Public puc_enviar2 As Boolean ‘//Variable booleana per habilitar enviament Public puc_enviar3 As Boolean ‘//Variable booleana per habilitar enviament Public memoria As String ‘//Capacitat de memòria del PIC Public t_sample As Integer ‘//Període de mostreig Public t_pwm As Integer ‘//Període de refresc del PWM Public hores As Integer ‘//Hores totals del temps d’adquisició Public minuts As Integer ‘//Minuts totals del temps d’adquisició Public tensio(2, 300) As Double ‘//Matriu de calibratge tensió entrada/tensió sortida Public corrent(2, 300) As Double ‘//Matriu de calibratge tensió mostr./corrent sortida

Page 148: SISTEMA DE CONTROL D’UNA FONT D’ALIMENTACIÓ DE …deeea.urv.cat/public/PROPOSTES/pub/pdf/361pub.pdfhaurà de ser bastant òptim en quant a connexions dels components per poder

ANNEX 3: CODI PROGRAMA PC

4

2 Menú principal

fig.1 Formulari del menú principal 2.1-Codi font associat al menú principal ‘*************************Variables globals menú principal****************** Option Explicit Dim envia(251) As String ‘//Vector de caràcters per enviar consigna ‘************Funció que s’executa quan es vol realitzar una calibració************ Private Sub calibracio_Click() Load Dialeg_calibracio Dialeg_calibracio.Show ‘//Mostra la ruta del fitxer de caliració End Sub ‘*****************Funció que s’executa quan es clica sobre ajuda*************** Private Sub com_fun_Click() Dim filtre As String On Error GoTo tract_error Set DocWord = New Word.Application DocWord.Documents.Open "d:\AJUDA BÀSICA DE FUNCIONAMENT.doc" DocWord.Application.Visible = True ‘//Obrir fitxer i fer-ne visible el contingut Exit Sub tract_error: ‘//Error en obrir fitxer If Err.Number = 5174 Then ‘//Si error=no es troba fitxer

If MsgBox("No es troba d:\AJUDA BÀSICA DE FUNCIONAMENT.doc; buscar_ nova ruta?", vbOKCancel + vbCritical, "Error") = vbOK Then ‘//Missatge d’error

filtre = "Fitxers Excel (*.doc)|*.doc|" & _ "Tots els fitxers (*.*)|*.*" ‘//Mostrar fitxers .doc CommonDialog1.Filter = filtre CommonDialog1.ShowOpen ‘//Mostrar diàleg per buscar fitxer a obrir DocWord.Documents.Open (CommonDialog1.FileName)

Page 149: SISTEMA DE CONTROL D’UNA FONT D’ALIMENTACIÓ DE …deeea.urv.cat/public/PROPOSTES/pub/pdf/361pub.pdfhaurà de ser bastant òptim en quant a connexions dels components per poder

ANNEX 3: CODI PROGRAMA PC

5

DocWord.Application.Visible = True ‘//Mostrar fitxer filtre = "Fitxers Excel (*.xls)|*.xls|" & _ "Tots els fitxers (*.*)|*.*" ‘//Mostrar fitxers .xls per properes aplic. CommonDialog1.Filter = filtre End If Else ‘//Si error < > no es troba fitxer MsgBox Err.Number ‘//Mostra error End If End Sub ‘*********Funció que s’executa quan s’entra al diàleg de configuració del PIC****** Private Sub conf_pic_Click() Load pic_conf ‘//Carrega formulari If pic_conf.Text1.Enabled = False Then ‘//Si no s’ha executat cap config. prèvia pic_conf.Timer1.Interval = 5000 ‘//Engega el temporitzador amb 5 segons pic_conf.Timer1.Enabled = True MSComm1.Output = "A" ‘//Envia caràcter ‘A’ pel port sèrie End If pic_conf.Show ‘//Mostra formulari configuració PIC Dialog.Label1 = "Esperant consigna del PIC....." & Chr(13) & "Canvieu l'estat de l'interruptor 3" If (Module1.memoria = "") Then Dialog.Show ‘//Mostrar Dialog.Label anterior End If End Sub ‘***********Funció que s’executa quan es clica per enviar configuració al PIC****** Private Sub enviarconf_click() Dim t As Integer Dialog.Label1 = "Enviant configuració del PIC..." Dialog.Show ‘//Mostrar Dialog.Label1 anterior For t = 0 To 5 MSComm1.Output = conf(t) ‘//S’envien els 6 caràcters de conf Texte.Text = Texte.Text & conf(t) ‘//S’escriuen en el quadre de text del Next t ‘//formulari principal Dialog.Hide MsgBox "Configuració enviada amb èxit", vbOKOnly, "Diàleg amb el PIC" If (Module1.arxiu <> "") Then Enviar.Enabled = True ‘//Si s’ha acabat la configuració i s’ha triat End If ‘//arxiu de consigna, es pot enviar consigna enviarconf.Enabled = False End Sub

Page 150: SISTEMA DE CONTROL D’UNA FONT D’ALIMENTACIÓ DE …deeea.urv.cat/public/PROPOSTES/pub/pdf/361pub.pdfhaurà de ser bastant òptim en quant a connexions dels components per poder

ANNEX 3: CODI PROGRAMA PC

6

‘********Funció que s’executa quan es clica sobre la configuració port sèrie******** Private Sub config_Click() Load user_conf user_conf.Show ‘//Mostra formulari de configuració port sèrie End Sub ‘****************Funció que s’executa quan s’inicia el programa**************** Private Sub Form_Load() Dim filtre As String Enviar.Enabled = False ‘//No es pot enviar consigna Texte.Enabled = False ‘//No es pot escriure al text de dades enviades conf_pic.Enabled = False ‘//No es pot entrar a la configuració del PIC pic_conf.Text1.Enabled = False ‘//S’inhabiliten diferents propietats del formulari pic_conf.Text2.Enabled = False ‘//de configuració del PIC pic_conf.Text3.Enabled = False pic_conf.Text4.Enabled = False pic_conf.textm.Enabled = False pic_conf.acceptar.Enabled = False Module1.puc_enviar1 = False ‘//Variables booleanes que indiquen quan es pot Module1.puc_enviar2 = False ‘//enviar la consigna Module1.puc_enviar3 = False Module1.arxiu = "" ‘//Nom de l’arxiu que conté la consigna és nul pic_conf.Timer1.Enabled = False Module1.valorsrep = 0 ‘//Valors mostrejats i rebuts del PIC són 0 filtre = "Fitxers Excel (*.xls)|*.xls|" & _ "Tots els fitxers (*.*)|*.*" ‘//Quan es vol buscar fitxer per obrir, només es CommonDialog1.Filter = filtre ‘//busquen fitxers .xls CommonDialog1.FilterIndex = 1 End Sub ‘**************Funció que s’executa quan l’usuari tanca el programa************* Private Sub Form_Unload(Cancel As Integer) On Error GoTo tractament_error If Not (fulladecalcul Is Nothing) Then ‘//Si el fitxer Excel de la consigna es troba obert fulladecalcul.Application.Quit ‘//Tanca fitxer Set fulladecalcul = Nothing End If If MSComm1.PortOpen = True Then ‘//Si el port sèrie està obert MSComm1.PortOpen = False ‘//Tancar port sèrie End If

Page 151: SISTEMA DE CONTROL D’UNA FONT D’ALIMENTACIÓ DE …deeea.urv.cat/public/PROPOSTES/pub/pdf/361pub.pdfhaurà de ser bastant òptim en quant a connexions dels components per poder

ANNEX 3: CODI PROGRAMA PC

7

Exit Sub tractament_error: ‘//Si es produeix algun error al tancar el fitxer, es MsgBox Err.Description ‘//mostra End Sub ‘*******Funció que s’executa quan es fa reset del que s’havia fet fins al moment ***** Private Sub reset_Click() If Not (fulladecalcul Is Nothing) Then ‘//Si s’havia obert arxiu Excel amb la consigna fulladecalcul.Application.Quit ‘//Es tanca arxiu Set fulladecalcul = Nothing End If pic_conf.Text1.Enabled = False ‘//S’inhabiliten diferents propietats del pic_conf.Text2.Enabled = False ‘//formulari de configuració del PIC pic_conf.Text3.Enabled = False pic_conf.Text4.Enabled = False pic_conf.textm.Enabled = False Texte.Text = "" ‘//Quadre de text de dades enviades buit textr.Text = "" ‘//Quadre de text de dades rebudes buit Module1.arxiu = "" ‘//Nom de l’arxiu de la consigna nul Module1.arxiuscalibracio = "" ‘//Nom arxiu calibratge nul Module1.memoria = "" ‘//Informació enviada pel PIC referent a la Module1.puc_enviar1 = False ‘//capacitat de memòria nula Module1.puc_enviar2 = False ‘//Variables booleanes indicant que no es Module1.puc_enviar3 = False ‘//pot enviar consigna Module1.valors = 0 ‘//Nombre de mostres de la consigna és 0 Module1.valorsrep = 0 ‘//0 adquisicions rebudes del PIC Module1.t_sample = 0 ‘//Temps de mostreig configurat és 0 conf_pic.Enabled = False ‘//No es pot entrar a la configuració del PIC enviarconf.Enabled = False ‘//No es pot enviar la configuració del PIC grafica.Enabled = False ‘//No està activa la representació gràfica Module1.rep(0) = "" ‘//El primer valor del vector de recepció és ‘//nul pic_conf.Timer1.Enabled = False ‘//S’atura el temporitzador Enviar.Enabled = False ‘//No es permet enviar un consigna If MSComm1.PortOpen = True Then ‘//Si es troba obert el port sèrie MSComm1.PortOpen = False ‘//Tanca port End If End Sub

Page 152: SISTEMA DE CONTROL D’UNA FONT D’ALIMENTACIÓ DE …deeea.urv.cat/public/PROPOSTES/pub/pdf/361pub.pdfhaurà de ser bastant òptim en quant a connexions dels components per poder

ANNEX 3: CODI PROGRAMA PC

8

‘****************Funció que s’executa quan es clica sobre l’opció “surt”********** Private Sub Surt_Click() Unload Form1 ‘//Executa la funció de tancament de programa End Sub ‘**************Funció que s’executa quan es vol obrir un fitxer consigna********** Private Sub Obre_Click() If Not (fulladecalcul Is Nothing) Then ‘//Si s’havia obert arxiu Excel amb la consigna fulladecalcul.Application.Quit ‘//es tanca Set fulladecalcul = Nothing End If pic_conf.textm.Enabled = False CommonDialog1.ShowOpen ‘//Mostra la ruta de l’arxiu que conté la consigna Module1.arxiu = CommonDialog1.FileName If (Module1.arxiu <> "") Then Module1.puc_enviar3 = True ‘//S’activa una de les condicions per enviar consigna

If (Module1.puc_enviar1) And (Module1.puc_enviar2) And (Module1.puc_enviar3) And (Texte.Text <> "") Then ‘//Si es compleixen les

‘//tres condicions Enviar.Enabled = True ‘//Ja es pot enviar consigna End If Else Exit Sub End If End Sub ‘**********Funció que s’executa quan es vol crear un dels senyals predefinits******* Private Sub Senyals_Click() Load num_valors num_valors.Show ‘//Mostra el formulari per la creació de consignes pic_conf.textm.Enabled = False ‘//predefindides End Sub ‘**********************Funció d’enviament de la consigna******************** Private Sub Enviar_Click() Dim n As Integer, t As Integer, fila As Integer On Error GoTo tractament_error If (conf(0) = "") Or (conf(1) = "") Or (conf(2) = "") Then ‘//S’ha realitzat config.?

Page 153: SISTEMA DE CONTROL D’UNA FONT D’ALIMENTACIÓ DE …deeea.urv.cat/public/PROPOSTES/pub/pdf/361pub.pdfhaurà de ser bastant òptim en quant a connexions dels components per poder

ANNEX 3: CODI PROGRAMA PC

9

MsgBox "ERROR: executa la configuració del pic al menú configuració del sistema i omple les dades", vbOKOnly + vbCritical, "CONTROL D'ERRORS"

Exit Sub ‘//Si no s’ha realitzat la configuració del PIC, End If ‘//apareix missatge d’error i es surt de la funció guarda: If Module1.arxiu = "" Then ‘//Si per algun motiu s’entra a l’enviament de CommonDialog1.ShowOpen ‘//la consigna i no s’ha donat l’arxiu Module1.arxiu = CommonDialog1.FileName ‘//Seleccionar arxiu If (Module1.arxiu <> "") Then Set fulladecalcul = Excel.Application fulladecalcul.Workbooks.Open (Module1.arxiu) ‘//Obrir arxiu Else Exit Sub End If Else Set fulladecalcul = Excel.Application ‘//Si l’arxiu ja s’ha escollit fulladecalcul.Workbooks.Open (Module1.arxiu) ‘//Obrir arxiu End If fora: If valors = "" Then ‘//Si per algun motiu el nombre de valors de la ‘//consigna és nul, ha de ser introduït valors = InputBox("Número de bytes a enviar al PIC", "CONTROL D'ERRORS") If (valors > 250) Or (valors < 1) Then

MsgBox "Error en el nombre de dades de la consigna: ha de ser major de 0 i menor que 250", , "CONTROL D'ERRORS"

valors = "" ‘//Si el rang introduït és incorrecte pren valor 0 GoTo fora ‘//Torna a demanar nombre de valors End If End If Dialog.Label1 = " Creant consigna del PIC...." Dialog.Show ‘//Apareix Dialog.Label1 For n = 1 To Int(valors) ‘//Per tots els valors de la consigna If fulladecalcul.ActiveWorkbook.ActiveSheet.Cells(n, 1).Value > 300 Then fulladecalcul.ActiveWorkbook.ActiveSheet.Cells(n, 1).Value = 300 End If ‘//Es comprova que siguin inferiors a 300 If fulladecalcul.ActiveWorkbook.ActiveSheet.Cells(n, 1).Value < 0 Then fulladecalcul.ActiveWorkbook.ActiveSheet.Cells(n, 1).Value = 0 End If ‘//Es comprova que siguin superiors o iguals a 0 If Module1.arxiuscalibracio = "" Then

fulladecalcul.ActiveWorkbook.ActiveSheet.Cells(n, 2).Value = fulladecalcul.ActiveWorkbook.ActiveSheet.Cells(n, 1).Value * 5 / 300

Else ‘//Si no hi ha calibratge, es calcula l’equivalent a fila = 1 ‘//5 volts per la columna B Do While (Module1.tensio(2, fila) <= ‘//Si hi ha calibratge fulladecalcul.ActiveWorkbook.ActiveSheet.Cells(n, 1).Value) fila = fila + 1 ‘//Es recorre el vector de tensions de calibratge on

Page 154: SISTEMA DE CONTROL D’UNA FONT D’ALIMENTACIÓ DE …deeea.urv.cat/public/PROPOSTES/pub/pdf/361pub.pdfhaurà de ser bastant òptim en quant a connexions dels components per poder

ANNEX 3: CODI PROGRAMA PC

10

If fila = 300 Then ‘//es troba la tensió desitjada de sortida Exit Do End If Loop

fulladecalcul.ActiveWorkbook.ActiveSheet.Cells(n, 2).Value = Module1.tensio(1, fila - 1) + (fulladecalcul.ActiveWorkbook.ActiveSheet.Cells(n, 1).Value - Module1.tensio(2, fila - 1)) / ((Module1.tensio(2, fila) - Module1.tensio(2, fila - 1)) / (Module1.tensio(1, fila) - Module1.tensio(1, fila - 1)))

End If ‘//Quan s’ha trobat es realitza interpolació

fulladecalcul.ActiveWorkbook.ActiveSheet.Cells(n, 3).Value = CInt(fulladecalcul.ActiveWorkbook.ActiveSheet.Cells(n, 2).Value * 255 / 5) ‘//Es calcula el valor del byte per la columna C fulladecalcul.ActiveWorkbook.ActiveSheet.Cells(n, 4).Value = Chr(fulladecalcul.ActiveWorkbook.ActiveSheet.Cells(n, 3).Value)

‘//Es dóna el caràcter corresponent al byte de la ‘//columna C en la D If Module1.arxiuscalibracio = "" Then

fulladecalcul.ActiveWorkbook.ActiveSheet.Cells(n, 7).Value = fulladecalcul.ActiveWorkbook.ActiveSheet.Cells(n, 3).Value * 300 / 255

Else ‘//Es dóna a la columna G el valor real enviat a la fila = 1 ‘//font de tensió si no hi ha calibratge

Do While (Module1.tensio(1, fila) <= fulladecalcul.ActiveWorkbook.ActiveSheet.Cells(n, 3).Value * 5 / 255)

fila = fila + 1 ‘//Si hi ha calibratge, es busca en el vector de If fila = 300 Then ‘//tensions la tensió de sortida que correspon a la Exit Do ‘//que s’ha enviat realment a l’entrada End If Loop

fulladecalcul.ActiveWorkbook.ActiveSheet.Cells(n, 7).Value = Module1.tensio(2, fila - 1) + (fulladecalcul.ActiveWorkbook.ActiveSheet.Cells(n, 3).Value * 5 / 255 - Module1.tensio(1, fila - 1)) / ((Module1.tensio(1, fila) - Module1.tensio(1, fila - 1)) / (Module1.tensio(2, fila) - Module1.tensio(2, fila - 1)))

End If ‘//Es calcula el valor de la columna G per Next n ‘//interpolació quan s’ha trobat dins el vector ‘//S’anoten els valors de configuració en l’arxiu Excel fulladecalcul.ActiveWorkbook.ActiveSheet.Cells(1, 9).Value = t_sample fulladecalcul.ActiveWorkbook.ActiveSheet.Cells(2, 9).Value = t_pwm fulladecalcul.ActiveWorkbook.ActiveSheet.Cells(3, 9).Value = Int(valors) fulladecalcul.ActiveWorkbook.ActiveSheet.Cells(4, 9).Value = hores fulladecalcul.ActiveWorkbook.ActiveSheet.Cells(5, 9).Value = minuts fulladecalcul.ActiveWorkbook.ActiveSheet.Cells(1, 8).Value = "Temps mostreig" fulladecalcul.ActiveWorkbook.ActiveSheet.Cells(2, 8).Value = "Temps pwm" fulladecalcul.ActiveWorkbook.ActiveSheet.Cells(3, 8).Value = "Número valors" fulladecalcul.ActiveWorkbook.ActiveSheet.Cells(4, 8).Value = "Hores" fulladecalcul.ActiveWorkbook.ActiveSheet.Cells(5, 8).Value = "Minuts"

Page 155: SISTEMA DE CONTROL D’UNA FONT D’ALIMENTACIÓ DE …deeea.urv.cat/public/PROPOSTES/pub/pdf/361pub.pdfhaurà de ser bastant òptim en quant a connexions dels components per poder

ANNEX 3: CODI PROGRAMA PC

11

For t = 1 To Int(valors) ‘//Els valors a enviar es posen al vector “envia” If (fulladecalcul.ActiveWorkbook.ActiveSheet.Cells(t, 3).Value = 39) Then envia(t) = "'" ‘//Quan el valor de la columna C és 39 cal enviar ‘//el caràcter ANSI ‘ perquè l’Excel no el reconeix Else If (fulladecalcul.ActiveWorkbook.ActiveSheet.Cells(t, 3).Value = 0) Then envia(t) = Chr(0) ‘//Quan el valor de la columna C és 0 cal enviar Else ‘//el caràcter ANSI 0 perquè Excel no el reconeix envia(t) = fulladecalcul.ActiveWorkbook.ActiveSheet.Cells(t, 4).Value End If ‘//Si no es cap dels dos caràcters anteriors, End If ‘//s’assigna al vector el valor de la columna D. Next t Dialog.Label1 = " Enviant consigna al PIC...." For t = 1 To Int(valors) MSComm1.Output = envia(t) ‘//Surten pel port sèrie els valors del vector ‘//d’enviament Texte.Text = Texte.Text & envia(t) ‘//S’apunten els valors enviats al quadre de Next t ‘//text MsgBox "La consigna ha estat enviades amb èxit", vbOKOnly, "COMUNICACIÓ PC-PIC" Enviar.Enabled = False ‘//No es pot tornar a enviar la consigna t = 0 Dialog.Hide Exit Sub tractament_error: ‘//Si s’ha produït un error alhora d’obrir arxiu MsgBox Err.Description ‘//S’anuncia l’error Module1.arxiu = "" ‘//El nom de l’arxiu és nul GoTo guarda End Sub ‘****************Funció de col·locació de dades rebudes a l’arxiu Excel********** Private Sub grafica_Click() Dim t As Long Dim c As String, a As String Dim fila As Integer t = 0 While t < (valorsrep) ‘//Els valors rebuts del vector “rep” a columna E fulladecalcul.ActiveWorkbook.ActiveSheet.Cells(t + 1, 5).Value = rep(t) If rep(t) = "'" Then

fulladecalcul.ActiveWorkbook.ActiveSheet.Cells(t + 1, 6).Value = (39 + 0.5) * 5 / (255) ‘//Si el caràcter rebut és ‘ es calcula el valor

Else ‘//equivalent de tensió d’entrada a la columna F

Page 156: SISTEMA DE CONTROL D’UNA FONT D’ALIMENTACIÓ DE …deeea.urv.cat/public/PROPOSTES/pub/pdf/361pub.pdfhaurà de ser bastant òptim en quant a connexions dels components per poder

ANNEX 3: CODI PROGRAMA PC

12

fulladecalcul.ActiveWorkbook.ActiveSheet.Cells(t + 1, 6).Value = (Asc(rep(t)) + 0.5) * 5 / (255) ‘//Si no, es calcula la tensió d’entrada directament

End If If Module1.arxiuscalibracio = "" Then ‘//Si no hi ha calibratge, a columna F valor ‘//equivalent de corrent per tensió d’entrada

fulladecalcul.ActiveWorkbook.ActiveSheet.Cells(t + 1, 6).Value = fulladecalcul.ActiveWorkbook.ActiveSheet.Cells(t + 1, 6).Value * 4 / 5

Else ‘//Si hi ha calibratge fila = 1

Do While (Module1.corrent(1, fila) <= fulladecalcul.ActiveWorkbook.ActiveSheet.Cells(t + 1, 6).Value)

fila = fila + 1 ‘//Busca al vector de corrent de sortida, el If fila = 300 Then ‘//el valor de la columna F Exit Do End If Loop

fulladecalcul.ActiveWorkbook.ActiveSheet.Cells(t + 1, 6).Value = Module1.corrent(2, fila - 1) + (fulladecalcul.ActiveWorkbook.ActiveSheet.Cells(t + 1, 6).Value - Module1.corrent(1, fila - 1)) / ((Module1.corrent(1, fila) - Module1.corrent(1, fila - 1)) / (Module1.corrent(2, fila) - Module1.corrent(2, fila - 1)))

End If ‘//Es calcula F per interpolació dels valors t = t + 1 ‘//obtinguts del vector Wend ‘//Captura variables de configuració If fulladecalcul.ActiveWorkbook.ActiveSheet.Cells(1, 9).Value <> 0 Then t_sample = fulladecalcul.ActiveWorkbook.ActiveSheet.Cells(1, 9).Value t_pwm = fulladecalcul.ActiveWorkbook.ActiveSheet.Cells(2, 9).Value valors = fulladecalcul.ActiveWorkbook.ActiveSheet.Cells(3, 9).Value Else ‘//Si no hi són perquè l’usuari ha triat altre fitxer t_sample = 1 ‘//Dóna valors aleatoris per tal que la representació t_pwm = 1 ‘//no provoqui error valors = 100 End If Load grafic grafic.Show ‘//Mostra el formulari de representació gràfica End Sub ‘***************Funció que s’executa quan hi ha interrupció port sèrie************ Private Sub MSComm1_OnComm() Select Case MSComm1.CommEvent Case comEvReceive ‘//Interrupció per recepció d’un byte If (pic_conf.Timer1.Enabled = True) And (Module1.memoria = "") Then Module1.memoria = MSComm1.Input ‘//Si temporitzador actiu i encara no Exit Sub ‘//s’ha rebut el nombre de memòries, byte rebut= memòria

Page 157: SISTEMA DE CONTROL D’UNA FONT D’ALIMENTACIÓ DE …deeea.urv.cat/public/PROPOSTES/pub/pdf/361pub.pdfhaurà de ser bastant òptim en quant a connexions dels components per poder

ANNEX 3: CODI PROGRAMA PC

13

End If If (rep(0) = "") And (Module1.arxiu <> "") Then ‘//Si és la primera dada rebuda grafica.Enabled = True ‘//de l’adquisició del PIC i està obert l’arxiu per End If ‘//col·locar-la, s’habilita la representació gràfica rep(valorsrep) = MSComm1.Input ‘//Les dades rebudes es col·loquen al vector textr.Text = textr.Text & rep(valorsrep) ‘//I s’escriuen en el quadre de text de valorsrep = valorsrep + 1 ‘//dades rebudes del formulari prinipal Case comBreak MsgBox "S'ha rebut una interrupció" ‘Les fonts d’interrupció s’anuncien Case comEventFrame MsgBox "Error de trama" Case comEventOverrun MsgBox "Dades perdudes" Case comEventRxOver MsgBox "Desbordament del búfer de recepció" Case comEventRxParity MsgBox "Error de paritat" Case comEventTxFull MsgBox "Búfer de transmisió ple" Case comEventDCB MsgBox "Error inesperat al recuperar DCB" Case comEvCD MsgBox "Canvi en la línea CD" Case comEvCTS MsgBox "Canvi en la línea CTS" Case comEvDSR MsgBox "Canvi en la línea DSR" Case comEvRing MsgBox "Canvi en l'indicador de trucades" End Select End Sub ‘****************Funció que s’executa quan es clica sobre bolcar dades********** Private Sub volcdad_Click() On Error GoTo tractament_error ‘//Proporciona l’arxiu on es col·locaran les dades rebudes If Module1.arxiu = "" Then ‘//Si no hi ha cap arxiu establert CommonDialog1.ShowSave ‘//Mostra diàleg per crear arxiu nou o per Module1.arxiu = CommonDialog1.FileName ‘//obrir-lo If (Module1.arxiu <> "") Then Set fulladecalcul = GetObject(Module1.arxiu) ‘//Existeix arxiu? Set fulladecalcul = Nothing Set fulladecalcul = Excel.Application fulladecalcul.Workbooks.Open (Module1.arxiu) ‘//Si arxiu existeix, s’obre Else Exit Sub End If

Page 158: SISTEMA DE CONTROL D’UNA FONT D’ALIMENTACIÓ DE …deeea.urv.cat/public/PROPOSTES/pub/pdf/361pub.pdfhaurà de ser bastant òptim en quant a connexions dels components per poder

ANNEX 3: CODI PROGRAMA PC

14

Else ‘//Si s’havia triat un arxiu per posar dades rebudes If (fulladecalcul Is Nothing) Then ‘//Però no estava obert Set fulladecalcul = Excel.Application fulladecalcul.Workbooks.Open (Module1.arxiu) ‘//S’obre arxiu End If End If MsgBox "El PC està llest per rebre. Premeu l'interruptor 1 d'enviament" & Chr(13) & "de dades del PIC un cop estigueu llestos per transmetre.", vbOKOnly + vbInformation, "COMUNICACIÓ PIC-PC" ‘//Missatge informació usuari Exit Sub ‘//Finalitza funció tractament_error: ‘//Si s’ha produït un error en obrir el fitxer perquè If Err.Number = 432 Then ‘//aquest no existia If (Module1.arxiu <> "") Then ‘//Si s’havia donat el nom del fitxer Set fulladecalcul = CreateObject("Excel.sheet.5") ‘//Es crea nou fitxer fulladecalcul.SaveAs Module1.arxiu ‘//Es guarda fulladecalcul.Application.Quit ‘//Es tanca Set fulladecalcul = Nothing Set fulladecalcul = Excel.Application fulladecalcul.Workbooks.Open (Module1.arxiu) ‘//S’obre correctament per End If ‘//poder escriure Else MsgBox Err.Description ‘//Si s’ha produït un altre error, s’anuncia End If MsgBox "El PC està llest per rebre. Premeu l'interruptor 1 d'enviament" & Chr(13) & "de dades del PIC un cop estigueu llestos per transmetre.", vbOKOnly + vbInformation, "COMUNICACIÓ PIC-PC" ‘//Missatge informació usuari End Sub

Page 159: SISTEMA DE CONTROL D’UNA FONT D’ALIMENTACIÓ DE …deeea.urv.cat/public/PROPOSTES/pub/pdf/361pub.pdfhaurà de ser bastant òptim en quant a connexions dels components per poder

ANNEX 3: CODI PROGRAMA PC

15

3 Creació consigna

fig.2 Formulari de creació de la consigna 3.1-Codi font associat a la creació de la consigna ‘****************Variables globals per la creació de la consigna***************** Option Explicit Const pi = 3.14159 ‘***************Funció que s’executa quan es clica sobre “calcular”************* Private Sub Calcular_Click() Dim t As Integer, mig As Integer Dim triang As Single On Error GoTo tractament_error If Not (fulladecalcul Is Nothing) Then fulladecalcul.Application.Quit ‘//Si hi havia algun arxiu obert, es tanca Set fulladecalcul = Nothing End If ‘//Control d’errors al introduir valors If senyal_combo.Text = "" Then ‘//Si no s’ha indicat el tipus de senyal

MsgBox "Error: has d'indicar quin tipus de senyal vols representar", vbOKOnly, "CONTROL D'ERRORS" ‘//Missatge d’error i cal indicar-lo

Exit Sub End If If (Val(n_val.Text) < 0) Or (Val(n_val.Text) > 250) Or (n_val.Text = "") Then MsgBox "Error: el nombre de valors ha ser entre 0 i 250 ", vbOKOnly, "CONTROL D'ERRORS" ‘//Missatge d’error si el nombre de valors Exit Sub ‘//a calcular és major als permesos End If If (Val(l_inf.Text) < 0) Or (Val(l_inf.Text) > 300) Or (l_inf.Text = "") Or (Val(l_inf.Text) > Val(l_sup.Text)) Then ‘//Límit inferior del senyal < 300, >0 i ‘// < que límit superior MsgBox "Error: el límit inferior de la senyal ha de ser entre 0 i 300 i menor que el límit superior ", vbOKOnly, "CONTROL D'ERRORS" ‘//Missatge error

Page 160: SISTEMA DE CONTROL D’UNA FONT D’ALIMENTACIÓ DE …deeea.urv.cat/public/PROPOSTES/pub/pdf/361pub.pdfhaurà de ser bastant òptim en quant a connexions dels components per poder

ANNEX 3: CODI PROGRAMA PC

16

Exit Sub ‘//Cal tornar a introduir valor End If If (Val(l_sup.Text) < 0) Or (Val(l_sup.Text) > 300) Or (l_sup.Text = "") Or (Val(l_inf.Text) > Val(l_sup.Text)) Then ‘//Límit superior <=300, >0 i > que límit inf. MsgBox "Error: el límit superior de la senyal ha de ser entre 0 i 300 i major que el límit inferior", vbOKOnly, "CONTROL D'ERRORS" ‘//Missatge error Exit Sub ‘//Cal tornar a introduir valor End If mig = (CInt(l_sup.Text) - CInt(l_inf.Text)) / 2 ‘//Càlcul del valor mig de la senyal triang = (CInt(l_sup.Text) - CInt(l_inf.Text)) / CInt(n_val.Text) ‘//Pendent de l'ona ‘//triangular Form1.CommonDialog1.ShowSave ‘//Mostrar diàleg per crear arxiu nou Module1.arxiu = Form1.CommonDialog1.FileName If (Module1.arxiu <> "") Then ‘//Si s’ha introduït nou nom arxiu Set fulladecalcul = CreateObject("Excel.sheet.5") ‘//Crea arxiu Else Exit Sub End If Select Case senyal_combo.Text ‘//Segons el tipus de senyal que s’hagi triat Case "Sinusoïdal" ‘//Cas que sigui ona sinusoïdal For t = 1 To CInt(n_val.Text) fulladecalcul.Application.Cells(t, 1) = mig * Sin((2 * pi / Val(n_val.Text)) * t) + mig + Val(l_inf.Text) ‘//S’escriuen en columna A fitxer Excel els Next t ‘//valors calculats d’un període Case "Quadrada" ‘//Cas que sigui ona quadrada For t = 1 To (CInt(n_val.Text) / 2) fulladecalcul.Application.Cells(t, 1).Value = CInt(l_sup.Text) Next t ‘//Meitat de període en límit superior For t = (CInt(n_val.Text) / 2) + 1 To CInt(n_val.Text) fulladecalcul.Application.Cells(t, 1).Value = CInt(l_inf.Text) Next t ‘//Meitat de període en límit inferior Case "Triangular" ‘//Cas que sigui ona triangular For t = 1 To CInt(n_val.Text) fulladecalcul.Application.Cells(t, 1).Value = (triang * t) + CInt(l_inf.Text) Next t ‘//Càlcul dels valors d’un període End Select fulladecalcul.SaveAs Module1.arxiu ‘//Es guarda el que s’ha escrit en fitxer fulladecalcul.Application.Quit ‘//Es tanca fitxer Set fulladecalcul = Nothing Module1.arxiu = "" ‘//Nom de fitxer és nul Unload num_valors Module1.puc_enviar3 = True ‘//S’activa una de les condicions per enviar

Page 161: SISTEMA DE CONTROL D’UNA FONT D’ALIMENTACIÓ DE …deeea.urv.cat/public/PROPOSTES/pub/pdf/361pub.pdfhaurà de ser bastant òptim en quant a connexions dels components per poder

ANNEX 3: CODI PROGRAMA PC

17

If (Module1.puc_enviar1) And (Module1.puc_enviar2) And (Module1.puc_enviar3) And (Form1.Texte.Text <> "") Then ‘//Si es compleixen totes les condicions Form1.Enviar.Enabled = True ‘//S’habilita l’enviament End If Exit Sub tractament_error: ‘//En cas d’error, sortir de la funció MsgBox Err.Description ‘//Mostrar error End Sub 4 Configuració port sèrie

fig.3 Formulari configuració port sèrie 4.1-Codi associat a la configuració port sèrie ‘*****************Funció que s’executa quan es clica sobre “acceptar”*********** Private Sub acceptar_Click() Dim vector As String On Error Resume Next ‘//En cas que es produeixi error, s’anuncia If Form1.MSComm1.PortOpen = True Then Form1.MSComm1.PortOpen = False ‘//Si hi ha el port obert, es tanca End If Select Case lstport.Text ‘//S’assigna el número de port segons la Case "COMM1" ‘//selecció que hagi fet l’usuari Form1.MSComm1.CommPort = 1 Case "COMM2" Form1.MSComm1.CommPort = 2 Case "COMM3" Form1.MSComm1.CommPort = 3

Page 162: SISTEMA DE CONTROL D’UNA FONT D’ALIMENTACIÓ DE …deeea.urv.cat/public/PROPOSTES/pub/pdf/361pub.pdfhaurà de ser bastant òptim en quant a connexions dels components per poder

ANNEX 3: CODI PROGRAMA PC

18

Case "COMM4" Form1.MSComm1.CommPort = 4 Case "COMM5" Form1.MSComm1.CommPort = 5 Case "COMM6" Form1.MSComm1.CommPort = 6 End Select If Form1.MSComm1.PortOpen = True Then MsgBox "Tanqueu el port en ús" ‘//Si es vol obrir un port que està éssent Exit Sub ‘//usat per un altre programa, es surt End If vector = lstvel.Text & "," & Left(lstparitat.Text, 1) & "," & lstnumbits.Text & "," & lststop.Text Form1.MSComm1.Settings = vector ‘//S’assignen les característiques de la ‘//configuració al port Select Case lstlectura.Text ‘//Segons el que apareix en mode de lectura Case "Mode Text" ‘//S’assigna el mode de lectura dels bytes Form1.MSComm1.InputMode = comInputModeText ‘//Com a caràcters Case "Mode Binari" Form1.MSComm1.InputMode = comInputModeBinary ‘//Com a bits End Select Select Case lstflux.Text ‘//Segons el que apareix en control de flux Case "Cap" Form1.MSComm1.Handshaking = comNone ‘//Sense control Case "Xon/Xoff" Form1.MSComm1.Handshaking = comXOnXoff ‘//Protocol Xon/Xoff Case "Hardware (RTS/CTS)" Form1.MSComm1.Handshaking = comRTS ‘//Petició per emetre/llest per emetre Case "Ambdós (RTS i Xon/Xoff)" Form1.MSComm1.Handshaking = comRTSXOnXOff ‘//Els dos anteriors alhora End Select ‘//Altra configuració port sèrie Form1.MSComm1.RThreshold = 1 ‘//Caràcters rebuts perquè es doni interrupció Form1.MSComm1.SThreshold = 1 ‘//Caràcters al buffer de transmissió perquè es ‘//doni interrupció Form1.MSComm1.InputLen = 1 ‘//Nombre de caràcters que llegeix alhora Form1.MSComm1.InBufferSize = 512 ‘//Tamany del buffer de recepció Form1.MSComm1.PortOpen = True ‘//S’obre el port If Form1.MSComm1.PortOpen = False Then ‘//Si no es pot obrir MsgBox "Error: No es pot obrir el port " & lstport.Text, vbOKOnly + vbCritical, App.Title ‘//Missatge error Exit Sub ‘//Es finalitza la funció End If Unload user_conf Module1.puc_enviar1 = True ‘//Primera condició per enviar activa Form1.volcdad.Enabled = True ‘//S’habilita la funció de recepció de dades

Page 163: SISTEMA DE CONTROL D’UNA FONT D’ALIMENTACIÓ DE …deeea.urv.cat/public/PROPOSTES/pub/pdf/361pub.pdfhaurà de ser bastant òptim en quant a connexions dels components per poder

ANNEX 3: CODI PROGRAMA PC

19

If (Module1.puc_enviar1) And (Module1.puc_enviar2) And (Module1.puc_enviar3) Then ‘//En cas que es compleixin totes les condicions per poder enviar Form1.enviarconf.Enabled = True ‘//S’habilita l’enviament End If Form1.conf_pic.Enabled = True ‘//S’habilita la configuració del PIC End Sub ‘*****************Funció que s’executa quan es clica sobre “cancelar”*********** Private Sub cancelar_Click() Unload user_conf ‘//Tanca formulari If Module1.puc_enviar1 = False Then ‘//Si la primera condició per enviar inactiva Form1.conf_pic.Enabled = False ‘//S’inhabilita la configuració del PIC Form1.volcdad.Enabled = False ‘//S’inhabilita la recepció de dades End If End Sub ‘****************Funció que s’executa quan es tanca el formulari*************** Private Sub Form_Unload(Cancel As Integer) If Module1.puc_enviar1 = False Then ‘//Si la primera condició per enviar inactiva Form1.conf_pic.Enabled = False ‘//S’inhabilita la configuració del PIC End If End Sub ‘*************Funció que s’executa quan es clica sobre “predeterminats”********** Private Sub predeter_Click() ‘//S’estableixen les condicions adequades lstport.Text = "COMM1" ‘//per la comunicació amb el present projecte lstvel.Text = "9600" ‘//en els diferents quadres de configuració lstparitat.Text = "None - Ninguno" lstnumbits.Text = "8" lststop.Text = "1" lstlectura.Text = "Mode Text" lstflux.Text = "Cap" End Sub

Page 164: SISTEMA DE CONTROL D’UNA FONT D’ALIMENTACIÓ DE …deeea.urv.cat/public/PROPOSTES/pub/pdf/361pub.pdfhaurà de ser bastant òptim en quant a connexions dels components per poder

ANNEX 3: CODI PROGRAMA PC

20

5 Configuració PIC

fig.4 Formulari configuració PIC 5.1-Codi associat al formulari de configuració del PIC ‘***********************Variables globals configuració PIC******************* Option Explicit Dim mem As Long Const timer = 49.92 ‘//Constant del temporitzador del PIC ‘**************Funció que s’executa quan es clica sobre “acceptar”************** Private Sub acceptar_Click() Dim pwm1 As Integer, adconv1 As Integer, auxiliar As Long, b_alt As Integer, b_baix As Integer Dim num_mem As Integer Dim x As Single On Error GoTo tractament_error ‘//En cas d’error, anar a aquest punt de fun. num_mem = 0

‘//Correcció d’errors en els valors introduïts If (text1.Text <> "") Then ‘//Ha escrit interval de mostreig? If (Int(text1.Text) < 50) Or (Int(text1.Text) > 12750) Then MsgBox "Error de rang de temps de mostreig", , "CONTROL D'ERRORS" Exit Sub ‘//L’interval de mostreig dins el rang? End If ‘//Missatge d’error Else ‘//Si no s’ha indicat cap interval de mostreig MsgBox "Error: Has d'indicar el temps de mostreig", , "CONTROL D'ERRORS" Exit Sub ‘//Missatge d’error End If If (text2.Text <> "") Then ‘//Ha escrit interval d’actualització PWM? If (Int(text2.Text) < 50) Or (Int(text2.Text) > 12750) Then

Page 165: SISTEMA DE CONTROL D’UNA FONT D’ALIMENTACIÓ DE …deeea.urv.cat/public/PROPOSTES/pub/pdf/361pub.pdfhaurà de ser bastant òptim en quant a connexions dels components per poder

ANNEX 3: CODI PROGRAMA PC

21

MsgBox "Error de rang de temps de llançament de dades", , "CONTROL D'ERRORS" ‘//L’interval d’act. PWM dins el rang? Exit Sub ‘//Missatge d’error End If Else ‘//Si no s’ha indicat cap interval de mostreig MsgBox "Error: Has d'indicar el temps de llançament de dades", , "CONTROL D'ERRORS" ‘//Missatge d’error Exit Sub End If If textm.Enabled = True Then If (textm.Text <> "") Then ‘//Ha escrit nombre de mostres PWM? If (Int(textm.Text) < 0) Or (Int(textm.Text) > 250) Then MsgBox "Error de rang en el nombre de bytes a enviar", , "CONTROL D'ERRORS" ‘//Es troba dins els intervals? Exit Sub ‘//Missatge d’error End If Else ‘//No ha escrit nombre de mostres PWM? MsgBox "Error: Has d'indicar el nombre de bytes a enviar", , "CONTROL D'ERRORS" ‘//Missatge d’error Exit Sub End If End If ‘//Si ha escrit temps total funcionament If (Text3.Text <> "") And (Text4.Text <> "") Then If (Int(Text4.Text) < 0) Or (Int(Text4.Text) > 59) Then MsgBox "Error de rang en els minuts de mostreig", , "CONTROL D'ERRORS" Exit Sub ‘//Si els minuts no són correctes End If adconv1 = (CInt(text1.Text)) / timer ‘//Càlcul acumulador interval adquisició PIC auxiliar = (((Int(Text3.Text)) * 3600000) + ((Int(Text4.Text)) * 60000)) / (Int(text1.Text)) ‘//Càlcul de nombre total de mostres segons el temps total auxiliar = auxiliar + (Int(text1.Text) - adconv1 * timer) * auxiliar / Int(text1.Text) ‘//S’aproxima més el càlcul tenint en compte l’error del timer If (Int(Text3.Text) < 0) Or (auxiliar > (32768 * (Asc(Module1.memoria) - 1))) Then MsgBox "Error de capacitat de memòria del PIC", , "CONTROL D'ERRORS" Exit Sub ‘//Si el temps total és massa gran, missatge d’error End If Else ‘//Si no s’ha escrit temps total de funcionament MsgBox "Error: Has d'indicar el temps total de mostreig", , "CONTROL D'ERRORS" ‘//Missatge d’error Exit Sub End If pwm1 = (CInt(text2.Text)) / timer ‘//Càlcul acumulador d’actualització PWM PIC ‘//Càlcul del nombre de memòries que cal omplir If auxiliar > 32768 Then num_mem = CInt((auxiliar / 32768) - 0.5) auxiliar = auxiliar - (num_mem * 32768) ‘//Bytes restants per la última memòria

Page 166: SISTEMA DE CONTROL D’UNA FONT D’ALIMENTACIÓ DE …deeea.urv.cat/public/PROPOSTES/pub/pdf/361pub.pdfhaurà de ser bastant òptim en quant a connexions dels components per poder

ANNEX 3: CODI PROGRAMA PC

22

num_mem = num_mem * 2 ‘//Perquè ho entengui el PIC, ha de ser End If ‘//múltiple de 2. x = (auxiliar / 256) ‘//Càlcul del byte baix que representa el nombre de b_alt = CInt(x - 0.5) ‘//bytes restants x = x - b_alt ‘//Càlcul del byte alt que representa el nombre de b_baix = CInt(x * 256) ‘//bytes restants If b_alt = 0 Then ‘//Si byte alt=255, llavors ha de ser 0 b_alt = 255 End If If num_mem = 0 Then ‘//Si numero de memòries a ompir=255, ha de ser 0 num_mem = 255 End If ‘//Es col·loquen tots els valors en el vector de conf. conf(5) = Chr(num_mem) ‘//en forma de caràcters conf(4) = Chr(b_baix) conf(3) = Chr(b_alt) conf(2) = Chr(adconv1) conf(1) = Chr(pwm1) If textm.Enabled = True Then valors = (textm.Text) conf(0) = Chr(valors) End If ‘//S’assignen els valors a les variables globals de t_sample = Int(text1.Text) ‘//tot el programa t_pwm = Int(text2.Text) hores = Int(Text3.Text) minuts = Int(Text4.Text) Module1.puc_enviar2 = True ‘//S’activa segona condició d’enviament If (Module1.puc_enviar1) And (Module1.puc_enviar2) Then Form1.enviarconf.Enabled = True ‘//Si les dos primeres condicions d’enviament End If ‘//estan actives, es pot enviar configuració Unload pic_conf Exit Sub tractament_error: ‘//En cas d’error MsgBox Err.Description ‘//Mostrar error i sortir de la funció End Sub

Page 167: SISTEMA DE CONTROL D’UNA FONT D’ALIMENTACIÓ DE …deeea.urv.cat/public/PROPOSTES/pub/pdf/361pub.pdfhaurà de ser bastant òptim en quant a connexions dels components per poder

ANNEX 3: CODI PROGRAMA PC

23

‘****************Funció que s’executa quan es clica sobre “cancelar”************ Private Sub cancelar_Click() Unload pic_conf ‘//Es tanca el formulari End Sub ‘*****************Funció que s’executa quan es carrega el formulari************* Private Sub Form_Load() ‘//Si anteriorment ja s’ha rebut del PIC el If Module1.memoria <> "" Then ‘//nombre de memòries disponible text1.Enabled = True ‘//Es permet novament la configuració text2.Enabled = True Text3.Enabled = True Text4.Enabled = True textm.Enabled = True acceptar.Enabled = True End If End Sub ‘********Funció que s’executa quan el temporitzador del PC finalitza de contar****** Private Sub Timer1_Timer() If Module1.memoria <> "" Then ‘//S’ha rebut byte del PIC? If (Asc(Module1.memoria) >= 1 And Asc(Module1.memoria) <= 9) Then mem = ((Asc(Module1.memoria)) - 1) * 256 ‘//Es troba dins els marges esperats? Dialog.Hide MsgBox mem & "Kbits de memòria disponibles", vbOKOnly, "COMPROVACIÓ DE MEMORIA" ‘//S’anuncia la capacitat en Kbits text1.Enabled = True ‘//S’habiliten els quadres de text per poder text2.Enabled = True ‘//entrar configuració Text3.Enabled = True Text4.Enabled = True textm.Enabled = True acceptar.Enabled = True Else ‘//Si no es troba dins els marges esperats Dialog.Hide MsgBox "Error de comunicació amb el PIC: Assegureu-vos que heu canviat" & Chr(13) & "l'estat de l'interruptor 3 abans d'iniciar l'operació" & Chr(13) & " Feu un reset si continuen els problemes", vbOKOnly, "COMPROVACIÓ DE MEMORIA" End If Else Dialog.Hide ‘//Si no s’ha rebut cap byte del PIC MsgBox "Error de comunicació amb el PIC: Assegureu-vos que heu canviat" & Chr(13) & "l'estat de l'interruptor 3 abans d'iniciar l'operació." & Chr(13) & "Feu un reset si continuen els problemes", vbOKOnly, "COMPROVACIÓ DE MEMORIA" End If

Page 168: SISTEMA DE CONTROL D’UNA FONT D’ALIMENTACIÓ DE …deeea.urv.cat/public/PROPOSTES/pub/pdf/361pub.pdfhaurà de ser bastant òptim en quant a connexions dels components per poder

ANNEX 3: CODI PROGRAMA PC

24

Timer1.Enabled = False ‘//S’atura el temporitzador End Sub 6 Visualització de dades

fig.5 Formulari de visualització de dades 6.1-Codi font associat al formulari de visualització de dades ‘*******************Variables globals en la funció de visualització************** Private ymin As Integer ‘//Valor mínim de la gràfica Private val_graf(262144) As Integer ‘//Vector de punts de la gràfica Private val_real(262144) As Double ‘//Vector de valors capturats de la columna F Private ymax As Integer ‘//Valor màxim de la gràfica Private increm As Double ‘//Increment de punts vertical Private incremx As Integer ‘//Increment de punts horitzontal Private saltar_num As Integer ‘//Variable per saltar nombres alhora de representar Private val_grf As Double

Page 169: SISTEMA DE CONTROL D’UNA FONT D’ALIMENTACIÓ DE …deeea.urv.cat/public/PROPOSTES/pub/pdf/361pub.pdfhaurà de ser bastant òptim en quant a connexions dels components per poder

ANNEX 3: CODI PROGRAMA PC

25

‘*****************Funció que s’executa quan es clica sobre “dibuixa”************ Private Sub dibuixa_Click() Dim t As Integer Dim xant As Integer, currentx As Integer ‘//Reinicia ymax i ymin amb el primer valor de columna F ymax = fulladecalcul.ActiveWorkbook.ActiveSheet.Cells(1, 6).Value ymin = fulladecalcul.ActiveWorkbook.ActiveSheet.Cells(1, 6).Value For t = 2 To valorsrep ‘//Busca la intensitat màxima If (fulladecalcul.ActiveWorkbook.ActiveSheet.Cells(t, 6).Value) > ymax Then ymax = fulladecalcul.ActiveWorkbook.ActiveSheet.Cells(t, 6).Value Else ‘//Busca la intensitat mínima If (fulladecalcul.ActiveWorkbook.ActiveSheet.Cells(t, 6).Value) < ymin Then ymin = fulladecalcul.ActiveWorkbook.ActiveSheet.Cells(t, 6).Value End If End If Next t ymin = ymin – 1 ‘//Amplia una mica els marges If ymin < 0 Then ymin = 0 End If ymax = ymax + 1 ‘//Dibuix dels eixos Picture1.Line (500, 10)-(500, 6500) ‘//Línia des del punt(x,y) al punt (x1,y1) Picture1.Line (500, 6500)-(42767, 6500) xant = ymax - ymin Picture1.currentx = 300 Picture1.CurrentY = 0 Picture1.Print ymax ‘//Escriu el valor de ymax a l’eix y del Picture1.currentx = 550 ‘//gràfic Picture1.CurrentY = 0 Picture1.Print "ampers" ‘//Escriu el valor de les unitats d’aquest eix For t = 1 To (xant - 1) ‘//S’escriu cada punt enter entre ymax i Picture1.currentx = 300 ‘//ymin al costat de l’eix y Picture1.CurrentY = (6450 / xant) * t Picture1.Print ymax - t Next t Picture1.currentx = 300 Picture1.CurrentY = 6450 Picture1.Print ymin ‘//Escriu el valor de ymin a l’eix y del Picture1.currentx = 9500 ‘//gràfic Picture1.CurrentY = 6450 Picture1.Print "segons" ‘//Escriu el valor de les unitats d’aquest eix

Page 170: SISTEMA DE CONTROL D’UNA FONT D’ALIMENTACIÓ DE …deeea.urv.cat/public/PROPOSTES/pub/pdf/361pub.pdfhaurà de ser bastant òptim en quant a connexions dels components per poder

ANNEX 3: CODI PROGRAMA PC

26

Picture1.currentx = 6000 ‘//Escriu el temps en segons que representa Picture1.Print t_sample; "ms per mostra" ‘//cada divisió en l’eix x For t = 1 To (valorsrep) ‘//S’assigna la columna F al vector val_real(t) = fulladecalcul.ActiveWorkbook.ActiveSheet.Cells(t, 6).Value Next t dibuixar End Sub ‘****************Funció que s’executa quan es carrega el formulari************** Private Sub Form_Load() HScroll1.Max = 32767 If (Module1.valorsrep < 900) Then ‘//Si es reben menys de 900 valors, no HScroll1.Visible = False ‘//mostra la barra de desplaçament lateral End If End Sub ‘******Funció que s’executa quan l’usuari mou la barra de desplaçament lateral****** Private Sub HScroll1_Change() Picture1.AutoRedraw = True ‘//Guarda imatge a la memòria del programa Picture1.Left = -HScroll1.Value ‘//Desplaçament de la imatge igual al de la barra End Sub ‘*Funció que s’executa quan es mou el ratolí sobre la gràfica amb el botó esquerra clicat ‘* Private Sub Picture1_MouseMove(Button As Integer, Shift As Integer, x As Single, Y As Single) Dim s As Integer, repeticio As Integer Dim xs As Double, tempdiv As Double Dim xseg As Single Picture1.AutoRedraw = True ‘//Guarda imatge a la memòria del programa repeticio = 0 ‘//Vegades que s’ha repetit el senyal de ‘//sortida segons el temps actual xseg = t_sample / 1000 ‘//Temps d’adquisició passat a segons tempdiv = t_sample / t_pwm ‘//Quocient entre el temps d’adquisició i el ‘//temps d’actualització del PWM If ymax > 0 Then If Button = 1 Then ‘//Botó esquerra del ratolí clicat? If x > 501 Then ‘//Si la coordenada x del ratolí és > 501 linex.Left = x ‘//La línia del dibuix pren aquest valor Y = ((6500 - Y) / increm) + ymin ‘//Valor en ampers de la coordenada y

Page 171: SISTEMA DE CONTROL D’UNA FONT D’ALIMENTACIÓ DE …deeea.urv.cat/public/PROPOSTES/pub/pdf/361pub.pdfhaurà de ser bastant òptim en quant a connexions dels components per poder

ANNEX 3: CODI PROGRAMA PC

27

estat.Text = " Y: " & Y & " Ampers" ‘//Apareix valor anterior en quadre de text s = Int((x - 500) / incremx) ‘//Valor en temps de la coordenada x If (s + ((s + 1) * saltar_num)) >= valorsrep Then ‘//Si la coordenada x del ratolí s = (valorsrep - 1 - saltar_num) / (1 + saltar_num) ‘//sobrepassa el temps que End If ‘//representen el valors rebuts, pren valor ‘//última mostra

‘//Temps assenyalat pel ratolí és major que període senyal sortida If (Int((s + 1+((s + 1) * saltar_num)) * tempdiv) + 1) > Int(valors) Then repeticio = Int((Int((s + 1+((s + 1) * saltar_num)) * tempdiv) + 1) / Int(valors)) * Int(valors) ‘//Quants període és més gran? If Int((s + 1+((s + 1) * saltar_num)) * tempdiv + 1) = repeticio Then repeticio = repeticio - Int(valors) End If End If If s >= 0 Then ‘//Quan la coordenada x és major que 0

Text1.Text = Format(val_real(s + 1 + ((s + 1) * saltar_num)), "###0.00 Ampers") ‘//Quadre de text marca valor de corrent a que pertany s Text3.Text = Format(fulladecalcul.ActiveWorkbook.ActiveSheet.Cells(Int(((x - 500) / incremx +t+ ((s + 1) * saltar_num)) * tempdiv) + 1 - repeticio, 7).Value, "###0.00 Volts") ‘//Segons columna G arxiu Excel, valor de tensió sortida ‘//corresponent al temps marcat per s Text2.Text = Format((s + 1 + ((s + 1) * saltar_num)) * xseg, "###0.000 Segons") ‘//Quadre de text marca temps que indica s en segons

End If End If End If End If End Sub ‘*************************Funció que dibuixa el gràfic********************** Private Sub dibuixar() Dim t As Integer Dim xant As Long, currentx As Long saltar_num = 0 ‘//Si hi pocs números a representar no en ‘//salta cap Select Case valorsrep ‘//Segons el nombre de valors rebuts ‘//Determina la distància x entre punts del Case Is < 900 ‘//gràfic i si cal saltar valors incremx = Int(9000 / valorsrep) Case Is > 240000 saltar_num = 6 incremx = 1

Page 172: SISTEMA DE CONTROL D’UNA FONT D’ALIMENTACIÓ DE …deeea.urv.cat/public/PROPOSTES/pub/pdf/361pub.pdfhaurà de ser bastant òptim en quant a connexions dels components per poder

ANNEX 3: CODI PROGRAMA PC

28

Case Is > 200000 saltar_num = 5 incremx = 1 Case Is > 160000 saltar_num = 4 incremx = 1 Case Is > 120000 saltar_num = 3 incremx = 1 Case Is > 80000 saltar_num = 2 incremx = 1 Case Is > 40000 saltar_num = 1 incremx = 1 Case Is > 4000 incremx = 1 Case Is > 900 incremx = 10 End Select For t = 1 To 19 ‘//Dibuix de 19 línies divisòries horitzontals Picture1.Line (500, 0 + (325 * t))-(42767, 0 + (325 * t)) Next t increm = 6500 / (ymax - ymin) ‘//Es determinen els punts Y que hi ha en 1 amper val_grf = (val_real(1 + saltar_num) - ymin) * increm ‘//Càlcul del punt Y del primer ‘//valor a representar xant = 500 ‘//Primer valor a la posició 500 de l’eix x val_graf(1 + saltar_num) = Int(6500 - val_grf) ‘//S’assigna al vector val_graf el

‘//punt y equivalent al primer valor. 6500 és el ‘//valor de la coordenada x de l’eix x del gràfic

t = 2 * (saltar_num + 1) ‘//Variable de recorregut del vector val_real While t <= valorsrep Picture1.ForeColor = 255 ‘//Color de línia vermell val_grf = (val_real(t) - ymin) * increm ‘//Càlcul de coordenada y currentx = 500 + (incremx * (t / (1 + saltar_num) - 1)) ‘//Càlcul coordenada x val_graf(t) = Int(6500 - val_grf) ‘//Assignació de punt y a vector val_graf ‘//Línia entre punt actual i anterior de val_graf Picture1.Line (xant, val_graf(t - 1 - saltar_num))-(currentx, val_graf(t)) Picture1.ForeColor = 50 ‘//Color de lína negre ‘//Una creu a cada punt representat Picture1.Line (currentx - 5, val_graf(t) - 5)-(currentx + 5, val_graf(t) + 5) Picture1.Line (currentx - 5, val_graf(t) + 5)-(currentx + 5, val_graf(t) - 5) xant = currentx ‘//Coordenada x anterior t = t + saltar_num + 1 Wend End Sub

Page 173: SISTEMA DE CONTROL D’UNA FONT D’ALIMENTACIÓ DE …deeea.urv.cat/public/PROPOSTES/pub/pdf/361pub.pdfhaurà de ser bastant òptim en quant a connexions dels components per poder

ANNEX 3: CODI PROGRAMA PC

29

7 Col·locació dades calibratge en vectors

fig.6 Formulari associat al diàleg pel calibratge 7.1-Codi font associat al formulari del diàleg de calibratge ‘***************Funció que s’executa quan es clica en “acceptar”*************** Private Sub acceptar_Click() Dim fila As Integer fila = 1 On Error GoTo tractament_error ‘//En cas d’error, anar a un altre punt de funció If Not (fulladecalcul Is Nothing) Then fulladecalcul.Application.Quit ‘//Si hi ha un arxiu Excel obert es tanca Set fulladecalcul = Nothing End If ‘//S’obre arxiu Excel indicat en el formulari Module1.arxiuscalibracio = Dir1.Path & "\" & File1.FileName Set fulladecalcul = Excel.Application fulladecalcul.Workbooks.Open (Module1.arxiuscalibracio) ‘//S’assigna al vector de tensió les columnes A i B Do While (fulladecalcul.ActiveWorkbook.ActiveSheet.Cells(fila, 2).Value <> "" and fila < 301 ) Module1.tensio(1, fila) = fulladecalcul.ActiveWorkbook.ActiveSheet.Cells(fila, 1).Value ‘//S’assigna valor de tensió d’entrada Module1.tensio(2, fila) = fulladecalcul.ActiveWorkbook.ActiveSheet.Cells(fila, 2).Value ‘//S’assigna valor de tensió de sortida fila = fila + 1 Loop fila = 1

Page 174: SISTEMA DE CONTROL D’UNA FONT D’ALIMENTACIÓ DE …deeea.urv.cat/public/PROPOSTES/pub/pdf/361pub.pdfhaurà de ser bastant òptim en quant a connexions dels components per poder

ANNEX 3: CODI PROGRAMA PC

30

‘//S’assigna al vector de corrent les columnes D i E Do While (fulladecalcul.ActiveWorkbook.ActiveSheet.Cells(fila, 4).Value <> "" and fila < 301) Module1.corrent(1, fila) = fulladecalcul.ActiveWorkbook.ActiveSheet.Cells(fila, 4).Value ‘//S’assigna el valor de la tensió mostrejada Module1.corrent(2, fila) = fulladecalcul.ActiveWorkbook.ActiveSheet.Cells(fila, 5).Value ‘//S’assigna el valor del corrent de sortida fila = fila + 1 Loop fulladecalcul.Application.Quit ‘//Es tanca arxiu Excel de calibratge Set fulladecalcul = Nothing If Module1.arxiu <> "" Then ‘//Si quan s’ha entrat a aquesta funció hi havia a Set fulladecalcul = Excel.Application ‘//arxiu Excel de consigna obert fulladecalcul.Workbooks.Open (Module1.arxiu) ‘//Es torna a obrir End If Unload Dialeg_calibracio Exit Sub tractament_error: ‘//En cas d’error MsgBox Err.Description ‘//Es mostra l’error End Sub ‘**************Funció que s’executa quan es clica sobre “cancelar”************** Private Sub cancelar_Click() Unload Dialeg_calibracio ‘//Es tanca formulari Module1.arxiuscalibracio = "" End Sub ‘*****************Funció que s’executa quan es canvia d’unitat***************** Private Sub Drive1_Change() Dir1.Path = Drive1.Drive ‘//Quan canvia unitat, actualitza directoris unitat End Sub ‘***************Funció que s’executa quan es canvia de directori**************** Private Sub Dir1_Change() File1.Path = Dir1.Path ‘//Quan canvia directori, actualitza arxius directori End Sub