Incomplete library for configuration of a DRV8301 pre-driver through a SPI interface.

DRV8301 is 3-Phase Brushless Motor Pre-Driver with Dual Current Sense Amps and Buck Converter (PWM Ctrl w/ SPI). Please find more information on Texas Instruments web pages and datasheet.

Files at this revision

API Documentation at this revision

Comitter:
tbjazic
Date:
Sat Nov 28 13:47:59 2015 +0000
Parent:
5:57bbd3728fd0
Commit message:
Pogledajte prijedloge za pobolj?anja. Imali ste jo? uvijek zna?ajnih pogre?ki. Da lak?e vidite gdje sam ?to pisao, usporedite posljednje dvije revizije library-a.

Changed in this revision

DRV8301.cpp Show annotated file Show diff for this revision Revisions of this file
DRV8301.h Show annotated file Show diff for this revision Revisions of this file
diff -r 57bbd3728fd0 -r f245fce762f6 DRV8301.cpp
--- a/DRV8301.cpp	Sat Nov 28 10:59:46 2015 +0000
+++ b/DRV8301.cpp	Sat Nov 28 13:47:59 2015 +0000
@@ -1,40 +1,42 @@
 #include "DRV8301.h"
 #include "mbed.h"
 
+/** Primjer konstruktora s fiksno oređenim pinovima */
+DRV8301::DRV8301() : spi(p11, p12, p13), cs(p8), en_gate(p14) {
+    startup();  //nužno izvršiti za slučaj da se u dosadašnjem radu pojavila pogreška, resetira cijeli DRV8301 te gasi sve dojave grešaka osim ukoliko su još uvijek prisutne
+}
 
-DRV8301::DRV8301(PinName pcs, PinName pmosi, PinName pmiso, PinName psck, PinName pen_gate) : spi(p11, p12, p13), cs(pcs), mosi(pmosi), miso(pmiso), sck(psck), en_gate(pen_gate){
-    
-    
-    spi.format(16,1);           //format SPI komunikacije: 16-bitne riječi, mod 1 clocka
-    spi.frequency(1000000);     //frekvencija clocka 1MHz
-    cs = 1;
-    cs = 0;
-    
+DRV8301::DRV8301(PinName pcs, PinName pmosi, PinName pmiso, PinName psck, PinName pen_gate) : spi(pmosi, pmiso, psck), cs(pcs), en_gate(pen_gate) {
     startup();  //nužno izvršiti za slučaj da se u dosadašnjem radu pojavila pogreška, resetira cijeli DRV8301 te gasi sve dojave grešaka osim ukoliko su još uvijek prisutne
-    
 }
 
 //funkcija za pokretanje (reboot) DRV-a
-    
-void DRV8301::startup(){
+void DRV8301::startup() {
+    spi.format(16,1);           //format SPI komunikacije: 16-bitne riječi, mod 1 clocka
+    spi.frequency(1000000);     //frekvencija clocka 1MHz
+    cs = 1;
+    cs = 0; 
     en_gate = 0;    //postavlja EN_GATE pin predupravljača u 0 čime gasi cijeli predupravljač
-    wait_us (25);   //čekanje od 25 mikrosekundi kako bi se izbjeglo blokiranje predupravljača
+    wait_us (25);   //čekanje od 25 mikrosekundi kako bi se izbjeglo blokiranje predupravljača --> pozovite se na stranicu datasheeta
     en_gate = 1;    //postavlja EN_GATE pin u 1 čime pokreće predupravljač
-    wait (1);   //čekanje od 1 sekunde
+    wait (1);   //čekanje od 1 sekunde // zašto treba ovo čekanje od 1 sekunde?
+    
+    /* ne bi bilo loše pročitati inicijalna stanja registara */
 }
+
 //funkcija za ograničenje struje
-
 void DRV8301::setCurrentLimit(uint8_t inputCL){
-    uint16_t controlRegister1 = spi.write(0x9000);  //čita stanje kontrolnog registra 1 i sprema ga u varijablu controlRegister1
-    int maskCurrentLimit = 0x783F;              //maska koja postavlja bitove za postavljanje ograničenja (bitovi D6, D7, D8, D9, D10 kontrolnog registra 1; datasheet) struje u 0 ne mijenjajući pritome ostale
+    /* ovdje bi trebali provjeriti da li je broj u rasponu od 0 do 31 */
+    controlRegister1 = spi.write(0x9000);   //čita stanje kontrolnog registra 1 i sprema ga u varijablu controlRegister1 // nije potrebna još jedna lokalna varijabla funkcije
+    int maskCurrentLimit = 0x783F;          //maska koja postavlja bitove za postavljanje ograničenja (bitovi D6, D7, D8, D9, D10 kontrolnog registra 1; datasheet) struje u 0 ne mijenjajući pritome ostale
     controlRegister1 &= maskCurrentLimit;   //provodi logičku I operaciju po bitovima između stanja registra i maske te sprema rezultat u varijablu controlRegister1
-    controlRegister1 |= inputCL << 6;         //uneseni broj input u binarnom obliku pomiče za 6 mjesta ulijevo kako bi se postavili na pravo mjesto u registru, provodi logičku ILI operaciju s varijablom  controlRegister1 te rezultat sprema
-    spi.write(controlRegister1);            //upisuje varijablu controlRegister1 u kontrolni registar 1
+    controlRegister1 |= inputCL << 6;       //uneseni broj input u binarnom obliku pomiče za 6 mjesta ulijevo kako bi se postavili na pravo mjesto u registru, provodi logičku ILI operaciju s varijablom  controlRegister1 te rezultat sprema
+    spi.write(controlRegister1);            //upisuje varijablu controlRegister1 u kontrolni registar 1 // da li ste provjerili da li se kod čitanja registra MSB vraća u 0?
 }
  
 //funkcija za broj PWM ulaza
-
 void DRV8301::setPWMNumber(uint8_t inputPWMNumber){
+    /* provjera raspona inputPWMNumber */
     uint16_t controlRegister1 = spi.write(0x9000);  //čita stanje kontrolnog registra 1 i sprema ga u varijablu controlRegister1
     int maskPWM = 0x7FF7;                       //maska koja postavlja bitove registra zadužene za odabir broja PWM signala (bit D3 kontrolnog registra 1; datasheet) u 0 ne mijenjajući pritome ostale
     controlRegister1 &= maskPWM;            //provodi logičku I operaciju po bitovima između stanja registra i maske te sprema rezultat u varijablu controlRegister1
@@ -45,6 +47,7 @@
 //funkcija za mod OCP-a
 
 void DRV8301::setOCPMode(uint8_t inputOCPMode){
+    /* provjera raspona inputOCPMode */
     uint16_t controlRegister1 = spi.write(0x9000);  //čita stanje kontrolnog registra 1 i sprema ga u varijablu controlRegister1
     int maskOCP = 0x7FCF;                       //maska koja postavlja bitove registra zadužene za odabir moda OCP-a (bitovi D4 i D5 kontrolnog registra 1; datasheet) u 0 ne mijenjajući pritome ostale
     controlRegister1 &= maskOCP;            //provodi logičku I operaciju po bitovima između stanja registra i maske te sprema rezultat u varijablu controlRegister1
@@ -55,6 +58,7 @@
 //funkcija za mod OCTW-a 
 
 void DRV8301::setOCTW(uint8_t inputOCTWMode){
+    /* provjera raspona  */
     uint16_t controlRegister2 = spi.write(0x9800);  //čita stanje kontrolnog registra 2 i sprema ga u varijablu controlRegister2
     int maskOCTW = 0x7FFC;                      //maska koja postavlja bitove registra zadužene za odabir moda OCTW-a (bitovi D0 i D1 kontrolnog registra 2; datasheet) u 0 ne mijenjajući pritome ostale
     controlRegister2 &= maskOCTW;           //provodi logičku I operaciju po bitovima između stanja registra i maske te sprema rezultat u varijablu controlRegister2
@@ -65,6 +69,7 @@
 //funkcija za pojačanje
 
 void DRV8301::setGain(uint8_t inputGain){
+    /* provjera raspona  */
     uint16_t controlRegister2 = spi.write(0x9800);  //čita stanje kontrolnog registra 2 i sprema ga u varijablu controlRegister2
     int maskGain = 0x7FF3;                      //maska koja postavlja bitove registra zadužene za odabir iznosa pojačanja (bitovi D2 i D3 kontrolnog registra 2; datasheet) u 0 ne mijenjajući pritome ostale
     controlRegister2 &= maskGain;           //provodi logičku I operaciju po bitovima između stanja registra i maske te sprema rezultat u varijablu controlRegister2
@@ -75,37 +80,38 @@
 //funkcija za dobivanje stanja u registru 1
 
 uint16_t DRV8301::getControlRegister1(){
-    uint16_t controlRegister1 = spi.write(0x9000);  //šalje naredbu za čitanje u kontrolni registar 1 te dobiva odgovor kojega posprema u varijablu controlRegister1
+    controlRegister1 = spi.write(0x9000);  //šalje naredbu za čitanje u kontrolni registar 1 te dobiva odgovor kojega posprema u varijablu controlRegister1
     return controlRegister1;
 }
    
 // funkcija za dobivanje stanja u registru 2
 
 uint16_t DRV8301::getControlRegister2(){
-    uint16_t controlRegister2 = spi.write(0x9800);  //šalje naredbu za čitanje u kontrolni registar 2 te dobiva odgovor kojega posprema u varijablu controlRegister2
+    controlRegister2 = spi.write(0x9800);  //šalje naredbu za čitanje u kontrolni registar 2 te dobiva odgovor kojega posprema u varijablu controlRegister2
     return controlRegister2;
 }
 
 //funkcija za čitanje statusnog registra 1
 
 uint16_t DRV8301::getStatusRegister1(){
-    uint16_t statusRegister1 = spi.write(0x8000);   //šalje naredbu za čitanje u statusni registar 1 te dobiva odgovorkojega posprema u varijablu statusRegister1
+    statusRegister1 = spi.write(0x8000);   //šalje naredbu za čitanje u statusni registar 1 te dobiva odgovorkojega posprema u varijablu statusRegister1
     return statusRegister1;
 }
 
 //funkcija za čitanje statusnog registra 2
 
 uint16_t DRV8301::getStatusRegister2(){
-    uint16_t statusRegister2 = spi.write(0x8800);   //šalje naredbu za čitanje u statusni registar 2 te dobiva odgovorkojega posprema u varijablu statusRegister2
+    statusRegister2 = spi.write(0x8800);   //šalje naredbu za čitanje u statusni registar 2 te dobiva odgovorkojega posprema u varijablu statusRegister2
     return statusRegister2;
 }
 
 //funkcija za ograničenje struje gate-a internog MOSFET-a
 
 void DRV8301::setGateCurrent(uint8_t inputGateCurrent){
-    uint16_t controlRegister1 = spi.write(0x9000);  //čita stanje kontrolnog registra 1 i sprema ga u varijablu controlRegister1
+    /* provjera raspona inputGateCurrent */
+    controlRegister1 = spi.write(0x9000);  //čita stanje kontrolnog registra 1 i sprema ga u varijablu controlRegister1
     int maskGateCurrent = 0x7FFC;   //maska koja postavlja bitove registra zadužene za odabir struje gate-a (bitovi D0 i D1 kontrolnog registra 1; datasheet) u 0 ne mijenjajući pritome ostale
     controlRegister1 &= maskGateCurrent; //provodi logičku I operaciju po bitovima između stanja registra i maske te sprema rezultat u varijablu controlRegister1
     controlRegister1 |= inputGateCurrent;   //s unesenim brojem inputGateCurrent u binarnom obliku provodi logičku ILI operaciju s varijablom  controlRegister1 te rezultat sprema
     spi.write(controlRegister1);    //upisuje varijablu controlRegister1 u kontrolni registar 1
-    }
\ No newline at end of file
+}
\ No newline at end of file
diff -r 57bbd3728fd0 -r f245fce762f6 DRV8301.h
--- a/DRV8301.h	Sat Nov 28 10:59:46 2015 +0000
+++ b/DRV8301.h	Sat Nov 28 13:47:59 2015 +0000
@@ -6,27 +6,27 @@
 /** DRV8301 klasa izrađena za potrebe završnog rada.
   * Koristi se za pokretanje i podešavanje postavki predupravljača DRV8301 pisanjem pomoću SPI sučelja izravno u kontrolne registre predupravljača
   * te čitajući podatke iz statusnih registara kako bi se detektirale pogreške. Ova biblioteka služi kao jednostavno sučelje između korisnika i sustava
-  * koji obuhvaća predupravljač DRV8301 i mbed LPC1768  
+  * koji obuhvaća predupravljač DRV8301 i mbed mikroupravljač  
 */
 class DRV8301{
     public:
-        /** instancira DRV8301
-         */
+        DRV8301();
+        /** Jasno je da je to konstruktor. Tu navedite opis parametara konstruktora         */
         DRV8301(PinName cs, PinName mosi, PinName miso, PinName sck, PinName en_gate);
         
-        
+        /* TB: potpuno nepotrebne varijable  
         uint8_t inputCL;
         uint8_t inputGain;
         uint8_t inputPWMNumber;
         uint8_t inputOCPMode;
         uint8_t inputOCTWMode;
         uint8_t inputGateCurrent;
-        
+        */
 
-//korištene funkcije     
+        /* TB: maknuti//korištene funkcije      */
     
         /** Postavlja ograničenje struje u željenu vrijednost definirane prema tablici 13 u datasheetu DRV8301
-            @param inputCL Broj koji unese korisnik kako bi odabrao koje ograničenje struje želi postaviti 
+            @param inputCL Broj od 0 do 31 koji unosi korisnik kako bi odabrao koje ograničenje struje želi postaviti 
             definiran prema tablici 13 u datasheetu DRV8301 uzimajući drain-to-source napon i računajući iznos struje
         */
         void setCurrentLimit(uint8_t inputCL);
@@ -89,9 +89,10 @@
 //korištene varijable
 
         DigitalOut cs;  //"chip select" digital out line which selects the SPI slave
+        /* TB: nepotrebno jer je to dio spi-a
         DigitalOut mosi;    //"master output slave input" digital out line through which SPI master sends data to the slave
         DigitalIn miso; //"master input slave output" digital in line through which SPI master receives data from SPI slave
-        DigitalOut sck; //"SPI clock" digital out line, used for synchronizing SPI communication
+        DigitalOut sck; //"SPI clock" digital out line, used for synchronizing SPI communication */
         DigitalOut en_gate; //"enable gate" digital out line used to reset the DRV8301 if necessary
         
         uint16_t controlRegister1;  //control register 1 data is saved here