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.

Committer:
pantunovi
Date:
Tue Nov 24 13:22:30 2015 +0000
Revision:
3:227ecd07b9cd
Parent:
2:bdca7d22b783
Child:
4:98c76c7b8020

        

Who changed what in which revision?

UserRevisionLine numberNew contents of line
pantunovi 0:2825ac4882fd 1 #include "DRV8301.h"
pantunovi 3:227ecd07b9cd 2 #include "mbed.h"
pantunovi 3:227ecd07b9cd 3
pantunovi 3:227ecd07b9cd 4 SPI spi(p11, p12, p13);
pantunovi 0:2825ac4882fd 5
pantunovi 3:227ecd07b9cd 6 DRV8301::DRV8301(PinName pcs, PinName pmosi, PinName pmiso, PinName psck, PinName pen_gate) : cs(pcs), mosi(pmosi), miso(pmiso), sck(psck), en_gate(pen_gate){
pantunovi 3:227ecd07b9cd 7
pantunovi 3:227ecd07b9cd 8 SPI spi(pcs, pmosi, pmiso, psck);
pantunovi 3:227ecd07b9cd 9
pantunovi 3:227ecd07b9cd 10 spi.format(16,1);
pantunovi 3:227ecd07b9cd 11 spi.frequency(1000000);
pantunovi 3:227ecd07b9cd 12 cs = 1;
pantunovi 3:227ecd07b9cd 13 cs = 0;
pantunovi 3:227ecd07b9cd 14
pantunovi 0:2825ac4882fd 15 startup();
pantunovi 3:227ecd07b9cd 16 register1 = spi.write(0x9000);
pantunovi 3:227ecd07b9cd 17 register2 = spi.write(0x9800);
pantunovi 3:227ecd07b9cd 18
pantunovi 2:bdca7d22b783 19 }
pantunovi 0:2825ac4882fd 20
pantunovi 3:227ecd07b9cd 21 //funkcija za ograničenje struje
pantunovi 0:2825ac4882fd 22
pantunovi 0:2825ac4882fd 23 void DRV8301::setCurrentLimit(uint8_t input){
pantunovi 0:2825ac4882fd 24 uint16_t register1;
pantunovi 2:bdca7d22b783 25 maskCurrentLimit = 0x783F;
pantunovi 0:2825ac4882fd 26 register1 &= maskCurrentLimit;
pantunovi 0:2825ac4882fd 27 register1 |= input << 6;
pantunovi 2:bdca7d22b783 28 }
pantunovi 0:2825ac4882fd 29
pantunovi 3:227ecd07b9cd 30 //funkcija za broj PWM ulaza
pantunovi 0:2825ac4882fd 31
pantunovi 0:2825ac4882fd 32 void DRV8301::setPWMNumber(uint8_t input){
pantunovi 0:2825ac4882fd 33 uint16_t register1;
pantunovi 2:bdca7d22b783 34 maskPWM = 0x7FF7;
pantunovi 0:2825ac4882fd 35 register1 &= maskPWM;
pantunovi 0:2825ac4882fd 36 register1 |= input << 3;
pantunovi 2:bdca7d22b783 37 }
pantunovi 0:2825ac4882fd 38
pantunovi 3:227ecd07b9cd 39 //funkcija za mod OCP-a
pantunovi 0:2825ac4882fd 40
pantunovi 0:2825ac4882fd 41 void DRV8301::setOCPMode(uint8_t input){
pantunovi 0:2825ac4882fd 42 uint16_t register1;
pantunovi 2:bdca7d22b783 43 maskOCP = 0x7FCF;
pantunovi 0:2825ac4882fd 44 register1 &= maskOCP;
pantunovi 0:2825ac4882fd 45 register1 |= input << 4;
pantunovi 2:bdca7d22b783 46 }
pantunovi 0:2825ac4882fd 47
pantunovi 3:227ecd07b9cd 48 //funkcija za mod OCTW-a
pantunovi 0:2825ac4882fd 49
pantunovi 0:2825ac4882fd 50 void DRV8301::setOCTW(uint8_t input){
pantunovi 0:2825ac4882fd 51 uint16_t register2;
pantunovi 2:bdca7d22b783 52 maskOCTW = 0x7FFC;
pantunovi 0:2825ac4882fd 53 register2 &= maskOCTW;
pantunovi 0:2825ac4882fd 54 register2 |= input;
pantunovi 2:bdca7d22b783 55 }
pantunovi 0:2825ac4882fd 56
pantunovi 0:2825ac4882fd 57 //funkcija za pojačanje
pantunovi 0:2825ac4882fd 58
pantunovi 0:2825ac4882fd 59 void DRV8301::setGain(uint8_t input){
pantunovi 0:2825ac4882fd 60 uint16_t register2;
pantunovi 2:bdca7d22b783 61 maskGain = 0x7FF3;
pantunovi 0:2825ac4882fd 62 register2 &= maskGain;
pantunovi 0:2825ac4882fd 63 register2 |= input << 2;
pantunovi 2:bdca7d22b783 64 }
pantunovi 0:2825ac4882fd 65
pantunovi 0:2825ac4882fd 66 //funkcija za dobivanje stanja u registru 1
pantunovi 0:2825ac4882fd 67
pantunovi 0:2825ac4882fd 68 uint16_t getRegister1(){
pantunovi 0:2825ac4882fd 69 uint16_t register1;
pantunovi 0:2825ac4882fd 70 return register1;
pantunovi 2:bdca7d22b783 71 }
pantunovi 0:2825ac4882fd 72
pantunovi 0:2825ac4882fd 73 // funkcija za dobivanje stanja u registru 2
pantunovi 0:2825ac4882fd 74
pantunovi 0:2825ac4882fd 75 uint16_t getRegister2(){
pantunovi 0:2825ac4882fd 76 uint16_t register2;
pantunovi 0:2825ac4882fd 77 return register2;
pantunovi 2:bdca7d22b783 78 }
pantunovi 0:2825ac4882fd 79
pantunovi 3:227ecd07b9cd 80 //funkcija za čitanje statusnog registra 1
pantunovi 3:227ecd07b9cd 81
pantunovi 3:227ecd07b9cd 82 uint16_t DRV8301::readStatReg1(){
pantunovi 3:227ecd07b9cd 83 uint16_t statReg1 = spi.write(0x8000);
pantunovi 3:227ecd07b9cd 84 return statReg1;
pantunovi 3:227ecd07b9cd 85 }
pantunovi 3:227ecd07b9cd 86
pantunovi 3:227ecd07b9cd 87 //funkcija za čitanje statusnog registra 2
pantunovi 3:227ecd07b9cd 88
pantunovi 3:227ecd07b9cd 89 uint16_t DRV8301::readStatReg2(){
pantunovi 3:227ecd07b9cd 90 uint16_t statReg2 = spi.write(0x8800);
pantunovi 3:227ecd07b9cd 91 return statReg2;
pantunovi 3:227ecd07b9cd 92 }
pantunovi 3:227ecd07b9cd 93
pantunovi 0:2825ac4882fd 94 //funkcija za pokretanje (reboot) DRV-a
pantunovi 0:2825ac4882fd 95
pantunovi 0:2825ac4882fd 96 void DRV8301::startup(){
pantunovi 3:227ecd07b9cd 97 en_gate = 0;
pantunovi 0:2825ac4882fd 98 wait_us (25);
pantunovi 3:227ecd07b9cd 99 en_gate = 1;
pantunovi 3:227ecd07b9cd 100 wait (1);
pantunovi 2:bdca7d22b783 101 }