This is an old revision of the document!


API NXP Cup ARC Board

Introducere

Un API pentru a folosi placa ARC cat mai usor. La aceasta se pot connecta 2 encodere, 2 servouri, 2 motoare DC si 2 camere Pixy2. API-ul creat ofera control asupra servourilor; control direct asupra %dc motoarelor sau se poate specifica un rpm daca se doteaza cu encodere prin folosirea unui PID; API-ul pentru camera Pixy2 a fost portat pe acest uC.

Descriere generală

Diagrama software:

TO_DO: Schimba imaginea cu cea mai noua versiune, fa OCW-ul sa vada ultima versiune si sa o ignore pe prima

Diagrama hardware:


Hardware Design

Componente:

  1. 1 ARC Board;
  2. 2 motoare DC;
  3. 4 senzori hall;
  4. 1 servo;
  5. 1 Pixy2;
  6. 1 Arduino Pro Mini;
  7. 1 receiver FS-A8S 2.4Ghz Mini.


  1. Placa ARC a fost construita de Haute Ecole ARC pentru competitia NXP Cup. Microcontroller-ul folosit este un ARM Cortex-M4 MK64FN1M0VLL12 (datasheet). Schematica placii si utilizarile initiale ale pinilor pot fi gasite aici: ARC-Board schematic.
  2. Pe placa ARC se afla 2 punti H, prin urmare putem connecta pana la 2 motoare cu comenzi diferite.
  3. Se folosesc cate 2 senzori/roata, fiecare roata are 9 magneti atasati, prin urmare rezolutia este de 40 de grade. Cei 2 senzori de pe o roata functioneaza in cuadratura pentru a obtine si directia de rotatie.
  4. Un servo montat in fata masinutei controleaza directia rotilor.
  5. Pentru contextul nostru, camera video poate sa recunoasca liniile de pe podea sub forma de vectori si sa intoarca pozitiile acestora in matricea de vizualizare a camerei. Mai multe detalii se pot gasi pe wiki-ul camerei: Pixy2-wiki.
  6. Arduino-ul este folosit pentru a decoda semnalul iBUS venit de la receiver. Am optat pentru un periferic pentru a nu incarca uC-ul principal si deoarece am gasit o biblioteca care decodeaza acest protocol. Din pacate nu am gasit o biblioteca de Attiny pentru acest protocol.
  7. Un receiver de dimensiuni mici pe 2.4Ghz compatibil cu radio telecomenzile FlySky. Este folosit pentru a da o comanda de kill masinii daca este pe cale sa se loveasca de ceva.

Software Design

<Timer.hpp>

Metode:

  // Timer& get_instance(void)
  // return: o referinta catre obiect si la prima apelare este initializat obiectul.
  // param: void
  Timer& instance = Timer::get_instance();
  // uint32_t micros(void)
  // return: un unsigned int ce reprezinta timpul in microsecunde de la primul apel Timer::get_instance()
  // param: void
  auto elapsed = instance.micros();
  // uint32_t millis()
  // return: un unsigned int ce reprezinta timpul in milisecunde de la primul apel Timer::get_instance()
  // param: void
  auto elapsed = instance.millis();
  // void delayMicroseconds(uint32_t t)
  // return: void
  // param: un unsigned int care specifica durata in microsecunde de asteptare
  // misc: functie blocanta
  instance.delayMicroseconds(500000U); // 0.5 sec
  // void delay(uint32_t t)
  // return: void
  // param: un unsigned int care specifica durata in milisecunde de asteptare
  // misc: functie blocanta
  instance.delay(1000); // 1.0 sec
  // uint32_t add_irq_handler(void (*time_IRQn_handler)(void))
  // return: 0 for success, -1 for error
  // param: un pointer la o functie ce intoarce void si accepta void ca parametru
  // misc: adauga functii in vectorul "irq_handlers" ce vor fi apelate la intreruperea de ceas (0.2 sec)
  instance.add_irq_handler(function);
  // void call_irq_handlers()
  // return: void
  // param: void
  // misc: apelata de rutina de tratare a intreruperii de ceas (0.2 sec) pentru a executa toate functiile din vectorul "irq_handlers"
  instance.call_irq_handlers();

Rezultate Obținute

TODO

Concluzii

TODO

Download

TODO

Jurnal

TODO

Bibliografie/Resurse

TODO

pm/prj2021/abasoc/api_arc_board.1620057652.txt.gz · Last modified: 2021/05/03 19:00 by robert_mihai.lica
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0