350 likes | 460 Views
Universitatea “ Politehnica ” din Timişoara Facultatea de Electronică şi Comunicaţii Departamentul Electronică Aplicată. Platforma de dez voltare TINI- nod într-o reţea CAN. Conducător ştinţific : Conf.Dr.Ing. Dorina Isar Student : Cărbunar Ovidiu.
E N D
Universitatea “Politehnica” din Timişoara Facultatea de Electronică şi Comunicaţii Departamentul Electronică Aplicată Platforma de dezvoltare TINI- nod într-o reţea CAN Conducător ştinţific: Conf.Dr.Ing. Dorina Isar Student: Cărbunar Ovidiu
Platforma de dezvoltare TINI Este formată din placa de bază şi SIMM.
Microcontrolerul DS80C400 Port 5 Control Register (P5CNT) SFR A2h -- CAN0BA -- -- C0_I/O P5CNT.2 P5CNT.1 P5CNT.0 C0_I/O Bit 3 CAN 0 I/O enable. CAN0BA CAN 0 bus active status.
Microcontrolerul DS80C400 Memoria de date internă • 9472 octeţi de memorie SRAM internă din • care 256 octeţi este pentru memoria • controlerului CAN.
Caracteristici - CAN • Bus serial asincron • APLICAŢII DE CONTROL IN TIMP REAL Viteza: 1Mbps • Detecţie excelentă a erorilor • Identificatorul mesajului specifică atât conţinutul cât şi prioritatea mesajului • Deconectare automată a nodurilor defecte • Retransmisie automatăîn urma detectării unei erori • Funcţionare în regim de consum redus • Excelent raport preţ-performanţă • Se pot conecta/deconecta noduri în timp ce reţeaua locală este în funcţiune
Frame-uri CAN • Frame = structura unei transmisii de date • Frame CAN Mesajul CAN • Există 4 tipuri de formate pentru frame-uri: • - Data Frame, • Remote Frame, • Error Frame, • Overload Frame
Data Frame Nr. biti/camp 1 11+1 1+1+4 0...64 15+1 1+1 7 7 x R ID + RTR (D) ACK + Delimitator ACK (R) SOF(D) Secv.CRC + Delimitator CRC (R)
Transmiterea şi primirea mesajelor - datele CAN sunt transmise şi recepţionate prin cele 15 centre de mesaje.
Transmiterea şi primirea mesajelor - biţii TXS şi RXS din registrul de stare indică dacă s-au trimis sau recepţionat date. SFR A4h BSS EC96 /128 WKS RXS TXS ER2 ER1 ER0
Transmiterea şi primirea mesajelor - 4 registre pentru verificarea recepţiei/transmisiei datelor. SFR 96h C0RMS 0.7 C0RMS 0.6 C0RMS 0.5 C0RMS 0.4 C0RMS 0.3 C0RMS 0.2 C0RMS 0.1 C0RMS 0.0 SFR 97h C0RMS 1.7 C0RMS 1.6 C0RMS 1.5 C0RMS 1.4 C0RMS 1.3 C0RMS 1.2 C0RMS 1.1 C0RMS 1.0
Transmiterea şi primirea mesajelor - 4 registre pentru verificarea recepţiei/transmisiei datelor. SFR 9Eh C0TMA 0.7 C0TMA 0.6 C0TMA 0.5 C0TMA 0.4 C0TMA 0.3 C0TMA 0.2 C0TMA 0.1 C0TMA 0.0 SFR 9Fh -- -- C0TMA 1.6 C0TMA 1.5 C0TMA 1.4 C0TMA 1.3 C0TMA 1.2 C0TMA 1.1 C0TMA 1.0
Transmiterea şi primirea mesajelor - fiecare centru de mesaje conţine un registru format (C0MyF) DTBYC3-0 (Data byte count) - indică numărul de biţi din câmpul de date al mesajului.
Totul despre erori • Erori de bit transmis • Erori datorate inserării/neinserării de biţi suplimentari (de bit stuffing) • Erori de verificare CRC • Erori de format • Erori datorate bitului de Acknowledge
Totul despre erori Registrul de stare CAN 0 (C0S) SFR A4h BSS EC96 /128 WKS RXS TXS ER2 ER1 ER0
Totul despre erori - fiecare nod CAN are numărătoare interne de erori. - în funcţie de valoarea conţinută de aceste numărătoare un nod CAN poate fi in una din următoarele stări:
Totul despre erori • modulul CAN conţine 2 registre speciale (C0RE si C0TE) care permit monitorizarea • şi modificarea numărătoarelor de erori.
Sicronizarea pe bus-ul CAN - sincronizare hard pe SOF - pentru a asigura o eşantionare corectă, nodul CAN trebuie să se resincronizeze pe tot parcursul Frame-ului.
Construcţia unui bit • durata unui bit pe bus-ul CAN are 4 segmente bine definite si • este un multiplu de tactul uControler-ului. • “unitatea de masura” pentru • costrucţia bitului pe CAN este • Time Quanta, TQ. - registrul de temporizare 0 pe bus-ul CAN (C0BT0) - BPR7-BPR0 determină numărul de tacte asociate cu time quanta.
Construcţia unui bit Segment de sincronizare- este folosit de fiecare nod să se sincronizeze pentru receptie. - durata 1 TQ.
Construcţia unui bit Segment pentru timpul de propagare- furnizeazăîntârzierea necesară pentru compensarea timpului de propagare a semnalului electric. - durata 1..8TQ.
Construcţia unui bit • “Segmentul 1 pentru defazare” - compensarea • erorilor de defazare la sincronizare. • Lungimea sa: 1 ... 8 TQ poate fi mărită pe • timpulresinscronizarii. - registrul de temporizare 0 pe bus-ul CAN (C0BT0)
Construcţia unui bit • “Segmentul 2 pentru defazare” • durata: 1 ... 8 TQ, nu mai • mare decat segmentul 1.
Construcţia unui bit Pentru o programare mai usoara:
Construcţia unui bit Pentru o programare mai usoara: Registrul de temporizare 1 (C0BT1)
Programarea momentului de esantionare - eşantionarea mai devreme- se pot utiliza oscilatoare mai ieftine.
Programarea momentului de esantionare • - eşantionarea mai târziu- lungime maximă pentru bus.
Necesităţi software pentru programarea platformei TINI Java Development Environment • Java Communications API • TINI Software Development Kit Java Development Environment - mediul de dezvoltare al aplicatiilor JAVA • Java Communication API - infrastructura necesară comunicării pe portul serial RS232 între calculator şi platforma TINI. • TINI SDK - software-ul pentru aplicatiile dedicate platformei TINI
Clase în java utilizate pentru comunicaţia pe interfaţa CAN Clasa CanBus - Această clasă permite accesul la controlerele CanBus Metode - setSynchronizationJumpWidth (int jumpWidth) - receive (CanFrame frame) - sendDataFrame (int ID, boolean extendedID, byte[] data) - setMessageCenterRXMode (int messageCenter) - setBaudRatePrescaler (int prescaler) - setTSEG1 (int tseg1) - setTSEG2 (int tseg2) - enableMessageCenter (int messageCenter) - enableController () - close ()
Clase în java utilizate pentru comunicaţia pe interfaţa CAN Clasa CANFrame - este folosită împreună cu clasa CANBus pentru a transmite/recepţiona frame-uri pe bus-ul CAN Constructori CanFrame() – creează un nou frame CAN cu următorii parametrii : ID = 0 ; extendedID = false ; messageCenter = 0 ; remoteFrameRequest = false ; data = new byte [8]; lenght = 0 ;
Program de identificare a vitezei de comunicaţie pe CAN CAN baud rate = Fosc/[BRP*(1+TSEG1+TSEG2)] BRP, TSEG1 şi TSEG2 pot fi programate folosind metode din clasa com.dalsemi.comm.CanBus. Paşii pentru setarea vitezei: - CanBus bus = new CanBus(CanBus.CANBUS0); - bus.setBaudRatePrescaler(BRP); - bus.setTSEG1(TSEG1); - bus.setTSEG2(TSEG2); Registrul de control CAN 0 (C0C)
Contribuţii personale • Documentare TINI • Documentare CAN • Studiu asupra eficientizarii transmisiilor • Program in java pentru setari ale controlerului CAN • Program de detectare automata a vitezei de comunicatie pe CAN