Internship Proje ct at Continental Automotive Iaș i [615395]

Light sensor PWM measurement
Internship Proje ct at Continental Automotive Iaș i

Student: [anonimizat], student: [anonimizat], A.C., AIA, 1401A
Profesor licență : Dr. ing. Constantin C ătălin Dosoftei
Mentor: prof. universitar la facultatea E.T.T.I. și “Technical Project Leader ” la
Continental , Dr. Pancu C ătălin
Rezumat: Această lucrare de licență constă în construirea și dezvoltarea unui sistem (light sensor, PCB, C
embedded software, electronics & mechanical design) care e capabil să "citească" (cu ajutorul întreruperilor
provenite de la un timer și folosind un ADC) șii să afișeze pe un LCD parametrii unui semnal PWM (duty cycle,
frequency, voltage). Acest semnal este generat de pe o placă într -un led sau într -o serie de led uri diferite (în gama
20mA -3A cur ent și 250Hz – 3kHz frecvență). Așadar o placă va genera semnalul într -un led, iar altă îl va citi și
interpreta cu ajutorul senzorului de lumin ă. Utilitatea în practică a acestui sistem (format din senzorul de lumină
îndreptat spre led, plăcuța electronică pentru achiziționarea și interpretarea semnalului) este aceea de a măsură un
semnal PWM fără o intervenție adițională în structura unui testbench de lumini. Acest semnal va fi citit și
interpretat doar din exterior. Măsurând diverse serii de leduri, ne putem da seama dacă acestea sunt în regulă (unul
luminează mai slab sau altele dintr -o serie întreagă sunt arse, etc.) fără a fi nevoie de alte echipamente adiționale și
intervenții intern e.

Cuvinte cheie: senzor, microcontroller, PWM (impulsuri modulate în durată), fototranzistor,
întreruperi.

1. Secțiune introductivă

1.1 Descrierea problemei aborda te
Scopul acestui proiect este interpretarea parametrilor unui semnal ideal
„dreptunghiular” folosit în practică , unde acesta este de obicei influențat de diverș i
factori (interni sau externi) , cum ar fi circuitele Buck ( care conțin ș i R,L,C) folo site

pentru eliminarea zgomotel or și a influenț elor electro -magnetice care modifică forma
semnalului și factorul de umplere .
Am scris un program î n C embedded pen tru a calcula perioada Tpornit ș i Toprit
din Figura 1 a unui semnal PWM î n cazul ideal ( din teori e). Acest semnal va fi generat
într-un led de pe o placă externă cu care nu pot comunica. Lumina generată de led va fi
preluată și prelucrată prin in termediul unui senzor de lumină (fototranzistor, rezistenț e,
tub metali c mat, tub contractibil, distanțiere, ș urubu ri, un suport fix cu 2 articulații cu o
mișcare de translație și una de rotaț ie) și o placă de achiziț ionare a se mnalelor,
proiectate ș i contruite de la zero .

Figura 1 – Forma semnalului PWM ideal

Figura 2 – Forma semn alelor PWM ideal și „perturbat ”

Dificultatea lucr ării const ă în adaptarea funcțion ării sistemului p entru cele dou ă
semnale din Figura 2. A stfel toate măsură torile pe care le efectueaz ă softul implementat
(calcul perioadă , duty cycle, frecvență , amplitudine, etc.) vor furniza rezultate corecte în
ambele cazuri . Soluția pe care am g ăsit-o pentru a elimina aceste perturbații care
afectează calculele din softul implementat este: o procedură de calibrare a senzorului de
lumină ( o secvență de cod și prin un sistem de reglare a distanț ei senzorului dintre
emițător – led și recepto r – fototranzistor ).

1.2 Activitatea de cercetare din do meniul de specialitate referit î n bibliografie

Înainte de a î ncepe proiectu l propriu -zis, m -am documentat din cartea:
„Echipamente cu logică programabilă – Îndrumar de laborator”, Editura Politehnium,
Iași 2013; autori: Cătă lin Panc u, Maricel Adam, Adrian Baraboi. Aceasta fiind suport
pentru placa de dezvoltare EVB 4.3, mediul de programare CodeVisionAvr.
Cu ajutorul acesteia m -am familiarizat cu multe aspec te privind partea de
software cât ș i cea de el ectronică analogică (rezolvâ nd aplicațiile propuse pentru
laborator ș i învățâ nd să utilizez diverse circuite/echipamente) [1].
Apoi am utilizat câteva dispozitive de lumină cum ar fi fotodioda, fotorezistența ,
și în final fototranzistorul în câteva aplicaț ii simple pe placa de dezvoltare.

1.3 Contribuț ii personale

Pe lângă s enzorul de lumină realizat ș i softul implementat , am realizat o schemă
și un layout în Eagle (pentru placa construită ), în care am ales să folosesc un
microcontroller atmega164 de 8 biț i, un circuit de comunicatie FT232, partea de
alimentare (regulator, condensatoare de decuplare, USB, conectori etc. ), un
potenț ometru pentru ajustare contrast LCD, 4 switchuri pentru a naviga în meniul afiș at
pe un LC D 2×16, un switch de comutare tensiunii de alimentare de la 5V la 20V (de la
USB la o sursă externă ), 10 pini pentru pr ogramatorul/debugger atmel -ice, ș i 2 pini
(emitor, colector) pe ntru senzorul de lumină extern .

2. Prezentarea soluț iei problemei abordate

2.1 Scrie rea programului C cu ajutorul că ruia pot calcula un factor de umplere al
semnalului generat în led ș i preluat de senzor

M-am familiariz at cu modul de captură al timerului 1 pe 16 biți al
microcontrol erului atmega16. Registrul ICR al intrări lor poate capta valoarea t imer /

counter la un eveniment extern d eclanș at pe pin ul de intrare (ICP1). Unitatea de captare
a imaginii include o unitate de filtrare digitală (Noise Canceler) pentru reducerea șansei
de a capta vârfuri de zgomot. Valoarea TOP sau valoarea maximă de Timer / Counter
poate fi definită în unele moduri de funcționare fie de registrul OCR1A, fie de registrul
ICR1, fie de un set de valori fixe. Timerul / c ounter -ul încorporează o unitate de intrare
care poate capta evenimente externe și poate indica timpul de apariție. Semnalul extern
care indică un eveniment sau mai multe evenimente poate fi aplicat pe pinul ICP1.
Aceste „time stamps” pot fi folosite apoi pentru a cal cula perioad a, frecvența, dut y
cycle -ul în ciclul de funcționare (în gama 5-95%) .
Unitatea de captare a intrării este ilustrată prin diagr ama bloc prezentată în
Figura 3 .

Figura 3 – Unitatea de captare a intr ării

O parte esențială din codul implementat este rutina de î ntrerupere a timerului 1
folosită pentru a capta even imentele de „rising edge ” (ledul începe să se aprindă) și
„falling edge ” (ledul începe să se stingă) pentru a putea obține o perioadă de T_led_on
și T_led_off. Mai jos am folosit registrel e ICR (input capture register), TCRR1B
(Timer/Counter1 Control Register B) și TIMSK ( Timer Interrupt Mask Register ) pentru
a porni și opri un timer și a face diverse operaț ii de calcul ale perioadei în timp real , prin
intermediul fototranzistorului folosit . Acesta este conectat la pinul de ICP1 ș i sesizează
o „tranziț ie de pe on pe off” sau invers (recepționează lumina în bază sau nu) – acesta
fiind semiconductor foarte sensibil.
În continuare sun t prezentate niște secvențe în care se calculează parametrii
semnalului de intrare.

Exemplul 1:
interrupt [TIM1_CAPT] void timer1_capt_isr(void){
if (flag == 0) //rising {
start_time_L = ICR1L; //we need to quickly load the values from ICR1 in
variables
start_time_H = ICR1H;
rise_edge = ((long)start _time_H <<8) +start_time_L;
TCCR1B &= ~(1<<ICES1); //change input capture edge select on falling edge }
if (flag == 1) //falling {
stop_time_L = ICR1L;
stop_time_H = ICR1H;
fall_edge= ((long)stop_time_H <<8) + stop_time_L;
TCCR1B |= (1<<ICES1); //change input capture edge select on rising edge }
if (flag == 2) // next rising {
next_time_L = ICR1L; //we need to quickly loa d the values from ICR1 in other
variable
next_time_H = ICR1H;
next_rise = ((long)next_time_H <<8) +next_time_L;
TCCR1B &= ~(1<<ICES1); //change input capture edge select on falling edge
TIMSK &= ~(1<<TICIE1); //disab le input capture interrupt }
flag ++; //increment flag}

Ținând cont de frecvenț a de 16 Mhz (selectată din mediul de dezvoltare) se
obține o perio adă de 62.5 ns pe tact. Timerul 1 fiind pe 16 biț i => 65536 * 62,5 ns = ~ 4
ms perioada (adica o frecvenț a de 250 Hz ).

Exemplul 2:
if(fall_edge > rise_edge) {
Ton = (unsigned long) (fall_edge – rise_edge); //time change between falling and
rising edge }
else if(rise_edge>fall_edge) {
Ton= (unsigned long)((65535 -rise_edge)+fall_edge); }
if(next_rise > fall_edge) {
Toff = (unsigned long) (next_rise – fall_edge); //time change between falling and
rising edge }
else if(fall_edge > next_rise) {
Toff= (unsigned long)((65535 -fall_edge)+next_rise); }
// calculating the PWM parameters
Ton=((unsigned long)((( Ton *625)/10000) ));
Toff=(unsigned long)((( Toff *625)/10000));
T= (unsigned long) (Ton+Toff);
DC =(long)((Ton*100)/T);
F= (long) (1000000/T);

În următoarea secvență se face procedura de calibrare a senzorului prin 10 pante
de eșantioane CAN ( ADC – convertor analog numeric) dependent e de factorul de
umplere calculat prin intermediul luminii (DCvir – duty c ycle virtual) (Figura 4) . Am
folosit 10 variabile de tip eeprom (ADC _DC_100 – ADC_ DC_1 ) pentru a le putea
modifica valoarea in timp real la fiecare calibrare a ledului , ca să obțin un duty cycle
calculat matematic , folosind doar eșantioanele convertorul ui analog numeric si
acționând switch-urile de pe placa.

Exemplul 3:
if (adc_result<ADC _DC90 && adc_result>=ADC_DC80) {
duty = (10/(ADC_DC90 -ADC_DC80))*adc_result -(10/(ADC_DC90 -ADC_DC80)
*ADC_DC80 -80);
//print duty on LCD}
If (PIND.4==0 && DC_gen==90) { // press switch and generate DC of 90 %
delay_ms(250);
ADC_DC90=adc _result; //save the result
DC_gen=80; // next if structure
lcd_putsf("SET DC=80% ->S3");}

2.2 Calibrarea senzorului
Am creat o procedură de calibrare a senzorului de lumină (printr -o secvență de cod
dar ș i prin intermediul unui sistem de reglare a distanț ei).

Figura 4 – Exemplu de procedur ă de calibrare
Vadc -Analog to digital converter digits (10 bits sample : 0 -1024)
DCvir – “Virtual” Duty Cycle calculated with a mathematical formula

Ecuația unei drepte intersectată de 2 puncte:
{
⇒{

 a = (y1 -y2)/(x1 -x2);
 b = y1 – a*x1=y2 -a*x2
a,b = const.;
y1, y2 = DCvir între 10-100
x1, x2= Vadc între 0 -1024.

După ce s-a efectuat partea de calibrare, urmează partea de măsurare a
parametrilor semnalului PWM de intrare.
Concluzii:

Testele făcute cu acest sistem sunt foarte precise în cazul unui semnal
dreptunghiular ideal, dar în cazurile di n practică apar tot felul de influențe interne și
externe și alte perturbații, care pot afecta măsurătorile. (cum ar fi intensitatea luminii –
mediul, timpul de rising și timpul de falling a semnalului, ajustarea distanței poate fi
imprecisă, etc. )
Avantaju l acestui sistem este acela că a re două modalități de a măsura factor ul
de umpl ere. Dezavantajul îl poate constitui procedura de calibrare manuală, care e ste
necesară , pentru fiecare led în parte.
Limitele acestui sistem reprezintă plaja de măsurare al factorului de umplere
care o reprezintă intervalul 5-95 %.
O optimizare în viitorul apropiat o constituie adaugarea unei modalități de
calibrare automată în loc de cea manuală, reglând distanța senzorului prin intermediul
unui servom otor comandat de un driver pentru optimizarea sistemului.

Bibliografie

[1] Cătălin Panc u, Maricel Adam, Adrian Baraboi, 2013, Echipamente cu logica
programabila – Indrumar de laborator , Editura Politehnium Iasi 2013

Similar Posts