Sunteți pe pagina 1din 10

Universitatea Tehnică „Gheorghe ASACHI” Iaşi

Facultatea de Automatică și Calculatoare

Rețele de Sisteme Încorporate


Proiect

Rețea de noduri CAN

Irașoc Alexandru
Munteanu Ciprian
Grijincu Cristi
CI 1A

2017
CUPRINS
1. INTRODUCERE .................................................................................................................................. 3
1.1. Tema proiectului ........................................................................................................................... 3
2. IMPLEMENTAREA HARDWARE .................................................................................................... 5
2.1. Componentele hardware ale nodului CAN ................................................................................... 5
2.2 Structura nodului CAN ................................................................................................................. 7
3 IMPLEMENTARE SOFTWARE ......................................................................................................... 8
3.1. Transmiterea mesajului CAN........................................................................................................ 8
3.2. Comunicația cu senzorii folosiți în proiect ................................................................................... 9
1. INTRODUCERE
1.1. Tema proiectului

Tema proiectului este de a realiza în mai multe echipe o serie de noduri de intrare sau de
ieșire ce vor face parte dintr-o rețea CAN. Nodurile de intrare vor transmite mesaje cu anumite
id-uri în rețeaua CAN, iar cele de ieșire vor monitoriza rețeaua și vor prelua mesajele necesare.
Scopul proiectului este de a avea o rețea CAN funcțională care să implice cât mai multe noduri și
care să se respecte mesajele, conexiunile între noduri și frecvențele de transmitere a mesajelor
prestabilite.
Nodurile participante la rețeaua CAN sunt prezentate în tabelul următor.
Nr Nod în rețeaua CAN Tip Nod Conexiune cu alte noduri
1 Motor Ieșire TX: -
RX: 4, 9, 10
2 RS323 - out Ieșire TX: -
RX: * IN
3 Senzor temperatură Intrare TX: 2, 5, 6, 8
RX:
4 RS323 - in Intrare TX: * OUT
RX: -
5 WiFi - Telefon Ieșire TX: -
RX: 3, 4, 11
6 LCD Ieșire TX: -
RX: 3, 9, 11, 7
7 Senzor lumină / Senzor Intrare TX: 2, 5, 6
gaz RX:
8 LED RGB Ieșire TX: -
RX: 6, 11, 10, 9
9 Tastatura Intrare TX: 1, 2, 6, 8
RX: -
10 Senzor Accelerometru Intrare TX: 1, 2, 8
RX: -
11 Scanner de culoare Intrare TX: 2, 5, 6, 8
RX: -
12 Difuzor Ieșire TX: -
RX: * IN
Tabel 1. Nodurile din rețeaua CAN

3
Mesajele ce vor fi transmise în rețeaua CAN de către nodurile de intrare sunt prezentate în
tabelul de mai jos.
Nume mesaj ID DLC Mod de Perioadă Întârziere Transmițător
[octet] transmitere ciclicitate
Speaker_Control 0x1 1 Eveniment - 50 Serial / tastatură
LCD_Control 0x2 1 Eveniment - 50 Serial / tastatură
WiFi_Control 0x3 1 Eveniment - 50 Serial / tastatură
Motor_Control 0x4 2 Eveniment - 50 Serial / tastatură
LED_Control 0x5 4 Eveniment - 50 Serial / tastatură
Char_data 0x10 1 Eveniment - 50 Serial / tastatură
Temperature_Data 0x20 1 Ciclic 1000 0 Senzor Temperatură
LightGas_Data 0x30 2 Ciclic 500 0 Senzor Lumină / Gas
Color_Data 0x40 3 Ciclic 200 0 Color Scanner
Accelerometer_Data 0x50 6 Ciclic 100 0 Senzor Accelerometru
Tabel 2. Nodurile din rețeaua CAN
Echipa noastră va realiza un nod de intrare ce va transmite informații legate de
luminozitate și concentrația de gaze din aer în rețeaua CAN.

4
2. IMPLEMENTAREA HARDWARE
2.1. Componentele hardware ale nodului CAN

În realizarea proiectului am folosit platforma de dezvoltare LPC11C24 produsă de cei de la


NXP. Am ales această platformă deoarece aceasta include direct integrat un C_CAN controller,
drivere pentru CAN și un CAN transceiver de mare viteză. Viteza Toate aceste elemente aflate
direct pe platformă fac din aceasta o alegere potrivită pentru dezvoltarea unui nod dintr-o rețea
CAN.

Figura 1. Schema bloc a platformei LPC11C24

5
Pentru a putea prelua informații despre concentrația de gaze din aer în cadrul proiectului
am folosit senzorul MQ-2. Acesta este un senzor de gaz ce folosește o componentă
electrochimică ce se încinge pentru a detecta prezența gazului în aer. MQ-2 este sensibil la o
gamă largă de tipuri de gaz precum Metan, Butan, Propan, Hidrogen, LPG, alcool sau fum.
Senzorul oferă date prin intermediul unei ieșiri analogice ce poate fi citit cu un periferic de tip
ADC de pe o platformă de dezvoltare. Rezistența senzorului este influențată de prezența gazului
în aer și acest lucru este transmis prin ieșirea analogică a senzorului. Pentru a încinge
componenta electrochimică acest senzor consumă destul de mult curent și trebuie conectat la o
sursă de alimentare de 5V. Senzorul folosit în proiect face parte dintr-un circuit integrat.

Figura 2. Schema senzorului MQ-2


Pentru a putea prelua informații despre intensitatea luminoasă din mediu în cadrul
proiectului am folosit senzorul AMS302. Acesta este un senzor de lumină ambientală ce
transformă intensitatea luminoasă în curent electric. Intensitatea luminoasă exprimată în lucși
este direct proporțională cu curentul electric convertit de senzor exprimat în microamperi.
Senzorul deține un filtru optic special cei conferă o sensibilitate asemănătoare ochiului uman.
Senzorul se alimentează la 5V.

Figura 3. Schema senzorului AMS302

6
2.2 Structura nodului CAN

Componentele hardware folosite pentru crearea nodului CAN sunt conectate conform
figurii de mai jos:

Figura 4. Structura bloc a nodului CAN

7
3 IMPLEMENTARE SOFTWARE
3.1. Transmiterea mesajului CAN

În cadrul rețelei CAN nodul nostru va transmite un mesaj cu id-ul 0x30 ce va conține
informații despre luminozitate și concentrația gazelor din aer. Mesajul va fi format din doi octeți,
câte unul pentru fiecare senzor.

Figura 5. Formatul mesajului transmis


Platforma LPC11C24 are stocat în memoria ROM driverele pentru perifericul C_CAN.
Astfel pentru inițializare și pentru realizarea comunicației în rețeaua CAN sunt puse la dispoziție
un set de funcții de bază ce pot fi folosite de utilizatori pentru aplicațiile lor.
typedef struct _CAND {
void (*init_can) (uint32_t * can_cfg, uint8_t isr_ena);
void (*isr) (void);
void (*config_rxmsgobj) (CAN_MSG_OBJ * msg_obj);
uint8_t (*can_receive) (CAN_MSG_OBJ * msg_obj);
void (*can_transmit) (CAN_MSG_OBJ * msg_obj);
void (*config_canopen) (CAN_CANOPENCFG * canopen_cfg);
void (*canopen_handler) (void);
void (*config_calb) (CAN_CALLBACKS * callback_cfg);
} CAND;

Dintre aceste funcții în aplicația noastră folosim pe cea de inițializare a perifericului pentru
a seta rata de transmisie și pe cea de configurare pentru a asigna funcții de tratate a
evenimentelor legate de comunicația în rețeaua CAN. Printre acestea se află și funcția care se
apelează atunci când sunt întâlnite erori în rețeaua CAN. În această funcție reinițializăm
perifericul pentru a putea continua transmiterea mesajelor. Pentru a transmite un mesaj se
creează o variabilă de tip CCAN_MSG_OBJ_T, membrii acestei structuri fiind setați
corespunzător.
Pentru a trimite mesajul în rețeaua CAN la fiecare 500ms, am configurat un timer în care
construim și trimitem mesajul. Un al doilea timer este configurat să declanșeze citirea senzorilor
cu 100ms înainte ca mesajul să fie trimis. Acesta din urmă este repornit în rutina de tratare a
întreruperii primului timer.

8
3.2. Comunicația cu senzorii folosiți în proiect

Nodul nostru trebuie să transmită la 500ms un mesaj în rețeaua CAN cu date legate de
intensitatea luminoasă(lucși) și concentrația de gaze(%) din aer, date preluate de către cei doi
senzori. Cu 100ms înainte de transmiterea mesajului CAN declanșăm citirea canalelor ADC
alocate senzorilor și realizăm calculul necesar ce ține de preluarea valorilor de la ADC și
transformarea lor în informații utile.
Activăm preluarea de date de către ADC într-o întrerupere de timer. Astfel începe citirea
canalelor selectate, sfârșitul citirii generând întreruperi. În întreruperea ADC - ului preluăm
datele și dezactivăm achiziția până la reactivarea acesteia cu 100ms înainte de următoare
transmitere a mesajului CAN.
Senzorii noștri sunt alimentați din exterior la 5V iar ADC - ul folosește referința internă de
3.3V. Pentru a nu avea probleme cu depășirea valorii de tensiune și interpretarea greșită a valorii
de tensiune avem un divizor rezistiv cu o rezistență RL de 1kΩ ce limitează tensiunea la o
valoare sub 3.3V pentru senzorul de lumină, iar valoarea tensiunii de ieșire a senzorului de gaz
este limitată prin intermediul circuitului integrat din care face parte.

Figura 6. Intensitatea luminoasă în funcție de tensiunea de ieșire


Pentru senzorul de lumină, citim valoarea preluată de ADC, convertim această valoare în
tensiune, iar apoi pe baza legii lui Ohm obținem intensitatea. Pe baza foii de catalog a senzorului
de lumină facem corelația între intensitatea curentului dată în μA și intensitatea luminoasă dată
în lucși. Pe CAN această valoare este transmisă cu o rezoluție de 5 unități.
Foaia de catalog a senzorului ne indică valoarea în lucși ce corespunde pentru două valori
ale intensității luminoase citite de la senzor, atunci când acesta este alimentat la 5V. Aceste
valori sunt cele din tabelul de mai jos.
Simbol Senzor AMS302 Intensitate luminoasă
Intensitate curent 1 IL1 13 μA 5 lx
Intensitate curent 2 IL2 260 μA 100 lx
Tabel 3. Caracteristici tipice ale senzorului

9
Folosind aceste două perechi de valori cunoscute și de faptul că ieșirea senzorului este
lineară se poate calcula ecuația dreptei. Pe baza acestei ecuații se poate determina valoarea în
lucși pentru o anumită intensitate a curentului determinată. Figura de mai jos reprezintă ieșirea
lineară a senzorului în funcție de intensitatea curentului.

Figura 7. Intensitatea luminoasă în funcție de intensitatea curentului


Pentru a obține concentrația de gaze din aer realizăm un raport între rezistența întoarsă de
senzor la un moment dat și o valoare Ro a senzorului calculată pentru un aer ,,curat’’. Pe baza
acestui raport identificam gazul respectiv aflat în aer conform informațiilor din foaia de catalog.

Figura 8. Caracteristicile senzitive ale senzorului


Pentru a obține o informație semnificativă pe care să o transmitem pe CAN dacă nu
facem detecție de gaz raportăm 100% iar dacă în încăpere începem să detectăm gaz această
valoare începe să scadă. De exemplu detectăm alcool, după grafic reiese că valoarea pentru
alcool al raportului este în jur de 3, în acest moment raportăm 70% ( 100% - 3*10%).

10

S-ar putea să vă placă și