22
PROJEKTOVANJE I IZRADA VIŠEKANALNOG KONTROLERA ZA PROGRAMIBILNI LED IZVOR DIPLOMSKI RAD IZ FIZIČKE ELEKTRONIKE

PROJEKTOVANJE I IZRADA VIŠEKANALNOG KONTROLERA ZA PROGRAMIBILNI LED IZVOR DIPLOMSKI RAD IZ FIZIČKE ELEKTRONIKE

Embed Size (px)

Citation preview

Page 1: PROJEKTOVANJE I IZRADA VIŠEKANALNOG KONTROLERA ZA PROGRAMIBILNI LED IZVOR DIPLOMSKI RAD IZ FIZIČKE ELEKTRONIKE

PROJEKTOVANJE I IZRADA VIŠEKANALNOG KONTROLERA ZA PROGRAMIBILNI LED IZVORDIPLOMSKI RAD IZ FIZIČKE ELEKTRONIKE

Page 2: PROJEKTOVANJE I IZRADA VIŠEKANALNOG KONTROLERA ZA PROGRAMIBILNI LED IZVOR DIPLOMSKI RAD IZ FIZIČKE ELEKTRONIKE

UVOD• Spektralno modulisani LED izvori sa različitim spektralnim

doprinosima, namenjeni kalibraciji optičkih detektora.

• Podesiti doprinose pojedinačnih LED u ukupnom spektru.

• Podešavanje pomoću odgovarajuće struje.

• Dobijanje željenog spektra pomoću LED različitih karakteristika.

• Za kalibraciju optičkih radijacionih pirometara, spektar će imati oblik Plankovog zakona zračenja.

• Sumiranje unutar integrišuće sfere.

Page 3: PROJEKTOVANJE I IZRADA VIŠEKANALNOG KONTROLERA ZA PROGRAMIBILNI LED IZVOR DIPLOMSKI RAD IZ FIZIČKE ELEKTRONIKE

Zadatak

• Kontrolisani pulsni izvor struje od 10mA do 100mA.

• Kontrolisani odnos signal-pauza za svaki kanal zasebno.

• Period od maksimalno

• Za 15 kanala, na svakom kanalu minimum 5V.

Page 4: PROJEKTOVANJE I IZRADA VIŠEKANALNOG KONTROLERA ZA PROGRAMIBILNI LED IZVOR DIPLOMSKI RAD IZ FIZIČKE ELEKTRONIKE

PWM

Tehnika dobijanja analognihrezultata digitalno.

• 1 – 5V, 0 – 0V.

• Simuliramo napone u rasponuod 0V do 5V menjajući odnossignal-pauza.

• Velika frekvencija stabilni napon.

Page 5: PROJEKTOVANJE I IZRADA VIŠEKANALNOG KONTROLERA ZA PROGRAMIBILNI LED IZVOR DIPLOMSKI RAD IZ FIZIČKE ELEKTRONIKE

BLOK ŠEMA UREĐAJA

Arduino daje najviše 40mA moramo da povećamo struju

strujni izvori za svaki kanal.

Page 6: PROJEKTOVANJE I IZRADA VIŠEKANALNOG KONTROLERA ZA PROGRAMIBILNI LED IZVOR DIPLOMSKI RAD IZ FIZIČKE ELEKTRONIKE

ARDUINO• ATMega 16MHz

• 15 pina za PWM

• USB kontroler

• Napajanje zasebno ili preko USB

Page 7: PROJEKTOVANJE I IZRADA VIŠEKANALNOG KONTROLERA ZA PROGRAMIBILNI LED IZVOR DIPLOMSKI RAD IZ FIZIČKE ELEKTRONIKE

PWM LED TESTER

Paralelni otporni niz

8x470Ω

Nylon konektori 2.54mm, 4x8-pol

Difuzne 3mm LED I=2mA

Page 8: PROJEKTOVANJE I IZRADA VIŠEKANALNOG KONTROLERA ZA PROGRAMIBILNI LED IZVOR DIPLOMSKI RAD IZ FIZIČKE ELEKTRONIKE

LED PANEL I NIZ LED ZA TESTIRANJE

DIPZIF

Kontaktna letvica 1x15

Kontaktna letvica 1x15

Kontaktna letvica 2x15sa jumper-ima

• 5mm LED 20mA (u praksi 40mA)

• 2.1V pad napona• 3 diode u red i 7 paralelno

250mA i 6.3V

Page 9: PROJEKTOVANJE I IZRADA VIŠEKANALNOG KONTROLERA ZA PROGRAMIBILNI LED IZVOR DIPLOMSKI RAD IZ FIZIČKE ELEKTRONIKE

STRUJNI IZVORI

• ,

• Menjamo varira

• Pregrevanje 2N2218A (250MHz)

• Test BC140, BC142, BD135

• Dobijene vrednosti: <10mA i >200mA, >6.3V

Page 10: PROJEKTOVANJE I IZRADA VIŠEKANALNOG KONTROLERA ZA PROGRAMIBILNI LED IZVOR DIPLOMSKI RAD IZ FIZIČKE ELEKTRONIKE

POTENCIOMETRI

• ,

• Fino i grubo podešavanje jačine struje.

100 200 300 400 500

0.1

0.2

0.3

0.4

0.5

0.6

Page 11: PROJEKTOVANJE I IZRADA VIŠEKANALNOG KONTROLERA ZA PROGRAMIBILNI LED IZVOR DIPLOMSKI RAD IZ FIZIČKE ELEKTRONIKE

PCB

Page 12: PROJEKTOVANJE I IZRADA VIŠEKANALNOG KONTROLERA ZA PROGRAMIBILNI LED IZVOR DIPLOMSKI RAD IZ FIZIČKE ELEKTRONIKE

KUĆIŠTE I RASPORED KOMPONENATA

Page 13: PROJEKTOVANJE I IZRADA VIŠEKANALNOG KONTROLERA ZA PROGRAMIBILNI LED IZVOR DIPLOMSKI RAD IZ FIZIČKE ELEKTRONIKE
Page 14: PROJEKTOVANJE I IZRADA VIŠEKANALNOG KONTROLERA ZA PROGRAMIBILNI LED IZVOR DIPLOMSKI RAD IZ FIZIČKE ELEKTRONIKE

PROGRAMIRANJE• Kontrola odnosa signal-pauza preko

računara za svaki kanal zasebno.

• Baud Rate = 9600b/s.

Određivanje COM porta

Unos vrednosti za

PWM u %

Između 0 i 100

Prijava greške

Pretvaranje u 8-bit

Kreiranje stringa sa

deliteljima

String u Int

Int u String

Slanje na COM port

Mapiranje pinova

Menjanje frekvencije

Čitanje sa serijskog

Deljenje stringa

String u int

PWM

Page 15: PROJEKTOVANJE I IZRADA VIŠEKANALNOG KONTROLERA ZA PROGRAMIBILNI LED IZVOR DIPLOMSKI RAD IZ FIZIČKE ELEKTRONIKE

ARDUINO PWM• analogWrite(pin, vrednost)

• Podrazumevane PWM frekvencije: 490Hz i 976Hz

• Menjamo vrednosti 5 tajmera. Prescaler 1 dajenajveću frekvencu: 31.25kHz i 62.5kHz

int myEraser = 7; // 111 se koristi za brisanje// postavljamo prescaler za timer 1 na 0TCCR1B &= ~myEraser;// upisujemo novu vrednostint myPrescaler = 1;TCCR1B |= myPrescaler; // upisujemo prescaler

Page 16: PROJEKTOVANJE I IZRADA VIŠEKANALNOG KONTROLERA ZA PROGRAMIBILNI LED IZVOR DIPLOMSKI RAD IZ FIZIČKE ELEKTRONIKE

Provera na osciloskopu: desno pinovi 4 i 13, levo ostali pinovi.

Page 17: PROJEKTOVANJE I IZRADA VIŠEKANALNOG KONTROLERA ZA PROGRAMIBILNI LED IZVOR DIPLOMSKI RAD IZ FIZIČKE ELEKTRONIKE

ARDUINO - PROGRAMIRANJEchar inputBuffer[100]; // For incoming serial data

String s;

int pwm[15]; // 0 – 255

String pod;

int ledPin[] = 2,3,4,5,6,7,44,45,46,8,9,10,11,12,13; // maps Arduino pins

void setup()

Serial.begin(9600); // Opens serial port, sets data rate to 9600 bit/s.

int myEraser = 7; // sets integer that erases timers

TCCR0B &= ~myEraser; // erase timer 0

TCCR1B &= ~myEraser; // erase timer 1

TCCR2B &= ~myEraser; // erase timer 2

TCCR3B &= ~myEraser; // erase timer 3

TCCR4B &= ~myEraser; // erase timer 4

TCCR5B &= ~myEraser; // erase timer 5

// Write timers values

int myPrescaler = 1; // chose max frequency

// write into timers

TCCR0B |= myPrescaler; // 62kHz, it affects timing functions by reducing

them 62 times

TCCR1B |= myPrescaler; // 31kHz

TCCR2B |= myPrescaler; // 31kHz

TCCR3B |= myPrescaler; // 31kHz

TCCR4B |= myPrescaler; // 31kHz

TCCR5B |= myPrescaler; // 31kHz

void loop()

if (Serial.available() > 0) // writes while there is something to read

from serial

Serial.readBytes(inputBuffer, Serial.available()); // reads from serial

into inputBuffer array

Serial.print(inputBuffer); // writes what has been read from serial

Serial.print("END"); // puts an END at the end of read string

delay(20000); // for default timer 0, enough is this value divided by 62

set it to 20k

pod = String(inputBuffer);

// PWM starts here, for all pins

for (int x=0; x<15; x++)

pwm[x]=splitString(pod,',',x).toInt(); // Uses function splitString to

splits string using comma as delimeter

pinMode(ledPin[x], OUTPUT);

analogWrite(ledPin[x],pwm[x]); // PWM on maped pin

delay(100); // we must give it some time to execute all this

// define splitString function

String splitString(String s, char parser, int index)

String rs='\0'; // empty char

int parserIndex = index;

int parserCnt=0;

while(index>=parserCnt)

rFromIndex = rToIndex+1;

rToIndex = s.indexOf(parser,rFromIndex);

if(index == parserCnt)

if(rToIndex == 0 || rToIndex == -1)

return '\0';

return s.substring(rFromIndex,rToIndex);

else

parserCnt++;

return rs;

Page 18: PROJEKTOVANJE I IZRADA VIŠEKANALNOG KONTROLERA ZA PROGRAMIBILNI LED IZVOR DIPLOMSKI RAD IZ FIZIČKE ELEKTRONIKE

JAVA FORMA

• PWM LED br. poklapaju se saonima na kućištu.

• Arduino Pin odgovaraju rednom br.PWM pina na boardu.

• Unosimo vrednosti od 0 do 100. Ukolikounesemo vrednost van ovog opsega, izaćiće prozor koji prijavljuje grešku.

• Pritiskom na dugme „Apply“, procenti sepretvaraju u 8-bitne vrednosti (od 0 do255), što se i ispisuje za svaki pin. Takođe se šalje informacija na USB i ispisuje koji je COM port odredio operativni sistem za Arduino.

Page 19: PROJEKTOVANJE I IZRADA VIŠEKANALNOG KONTROLERA ZA PROGRAMIBILNI LED IZVOR DIPLOMSKI RAD IZ FIZIČKE ELEKTRONIKE

JAVA KODpackage arduinoserialtest;

import javax.swing.JOptionPane;

import jssc.SerialPort;

import jssc.SerialPortEvent;

import jssc.SerialPortEventListener;

import jssc.SerialPortException;

import jssc.SerialPortList;

public class NewJDialog extends javax.swing.JDialog

jssc.SerialPort serialPort;

String izabraniPort = "";

String tmp="";

String primljeno="";

int percent[];

String percents[];

int bin[];

String bins[];

String percentInput;

String zaSlanje = "";

public NewJDialog()

initComponents();

class SerialPortReader implements SerialPortEventListener

public void serialEvent(SerialPortEvent event)

if (event.getEventValue() == 0)

return;

//Read from serial until the END is received

if (event.isRXCHAR()) try

byte buffer[] =

serialPort.readBytes(event.getEventValue());

tmp = tmp + new String(buffer);

if (new String(buffer).indexOf("END") > -1)

primljeno = tmp.split("END")[0];

tmp = ""; //clear what has been read

catch (SerialPortException ex)

// System.out.println(ex);

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt)

try // detect com port for Arduino

String[] portNames = SerialPortList.getPortNames();

if (portNames == null)

System.out.println("sout"); //print if nothing is detected

return;

// Print out working COM port

for (int i = 0; i < portNames.length; i++)

// System.out.println("port: " + portNames[i].toString());

izabraniPort = portNames[i].toString();

comport.setText(izabraniPort); // write com port into

textbox

serialPort = new SerialPort(izabraniPort);

serialPort.openPort();

serialPort.setParams(SerialPort.BAUDRATE_9600,

SerialPort.DATABITS_8, SerialPort.STOPBITS_1, SerialPort.PARITY_NONE, false,

false); // speed is 9600 to match Arduino, false statements at the end exist

so that Arduino does not get reset each time there is a read

int mask = SerialPort.MASK_RXCHAR + SerialPort.MASK_CTS +

SerialPort.MASK_DSR;//Prepare mask

serialPort.setEventsMask(mask);//Set mask

serialPort.addEventListener(new SerialPortReader()); // Catch

port

Page 20: PROJEKTOVANJE I IZRADA VIŠEKANALNOG KONTROLERA ZA PROGRAMIBILNI LED IZVOR DIPLOMSKI RAD IZ FIZIČKE ELEKTRONIKE

// Calculations percent = new int[16]; // define array length percents = new String[16]; // define array length bin = new int[16]; bins = new String[16]; // get string values from textboxes percents[1] = percentInput1.getText(); percents[2] = percentInput2.getText(); percents[3] = percentInput3.getText(); percents[4] = percentInput4.getText(); percents[5] = percentInput5.getText(); percents[6] = percentInput6.getText(); percents[7] = percentInput7.getText(); percents[8] = percentInput8.getText(); percents[9] = percentInput9.getText(); percents[10] = percentInput10.getText(); percents[11] = percentInput11.getText(); percents[12] = percentInput12.getText(); percents[13] = percentInput13.getText(); percents[14] = percentInput14.getText(); percents[15] = percentInput15.getText(); // Do for all 15 fields zaSlanje = ""; for (int x=1; x<=15; x++) percent[x] = Integer.parseInt(percents[x]); // set int values bin[x] = (int) Math.round(2.55 * percent[x]); //convert percent to 8-bit value bins[x] = Integer.toString(bin[x]); //convert to string zaSlanje = zaSlanje + bins[x] + ","; // Check if values are withing percent range if (percent[x] < 0 || percent[x] > 100) // Error input report with message box System.out.println("Error"); NewJDialog.infoBox("Input values must be between 0 and 100", "Error");

// System.out.println(zaSlanje + "\n"); //test weather it sends proper values // Display 8-bit values in label bitvalue1.setText(bins[1]); bitvalue2.setText(bins[2]); bitvalue3.setText(bins[3]); bitvalue4.setText(bins[4]); bitvalue5.setText(bins[5]); bitvalue6.setText(bins[6]); bitvalue7.setText(bins[7]); bitvalue8.setText(bins[8]); bitvalue9.setText(bins[9]); bitvalue10.setText(bins[10]); bitvalue11.setText(bins[11]); bitvalue12.setText(bins[12]); bitvalue13.setText(bins[13]); bitvalue14.setText(bins[14]); bitvalue15.setText(bins[15]); //serialPort.writeString(text.getText()); // Set String to send over // String zaSlanje ="100,0,100,0,100,0,100,0,100,0,100,0,100,0,100,"; serialPort.writeString(zaSlanje); System.out.println("Sending String" + zaSlanje); try Thread.sleep(500); catch (InterruptedException ex) // System.out.println("primljeno: " + primljeno); // print what is received over serial serialPort.closePort(); catch (SerialPortException ex) System.out.println("greska: " + ex);

Page 21: PROJEKTOVANJE I IZRADA VIŠEKANALNOG KONTROLERA ZA PROGRAMIBILNI LED IZVOR DIPLOMSKI RAD IZ FIZIČKE ELEKTRONIKE

POVEZIVANJE LED I MERENJE JAČINE STRUJE• Moguće je priključiti po 3 LED

na svakom kanalu.

• A – merenje struje,V – pada napona.

• Za tačnu amplitudu struje,podesiti signal na 1.

Page 22: PROJEKTOVANJE I IZRADA VIŠEKANALNOG KONTROLERA ZA PROGRAMIBILNI LED IZVOR DIPLOMSKI RAD IZ FIZIČKE ELEKTRONIKE