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.

DRV8301.cpp

Committer:
pantunovi
Date:
2015-11-24
Revision:
3:227ecd07b9cd
Parent:
2:bdca7d22b783
Child:
4:98c76c7b8020

File content as of revision 3:227ecd07b9cd:

#include "DRV8301.h"
#include "mbed.h"

SPI spi(p11, p12, p13);

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){
    
    SPI spi(pcs, pmosi, pmiso, psck);
    
    spi.format(16,1);
    spi.frequency(1000000);
    cs = 1;
    cs = 0;
    
    startup();
    register1 = spi.write(0x9000);
    register2 = spi.write(0x9800);
    
}

//funkcija za ograničenje struje

void DRV8301::setCurrentLimit(uint8_t input){
    uint16_t register1;
    maskCurrentLimit = 0x783F;
    register1 &= maskCurrentLimit;
    register1 |= input << 6;
}
 
//funkcija za broj PWM ulaza

void DRV8301::setPWMNumber(uint8_t input){
    uint16_t register1;
    maskPWM = 0x7FF7;
    register1 &= maskPWM;
    register1 |= input << 3;
}
    
//funkcija za mod OCP-a

void DRV8301::setOCPMode(uint8_t input){
    uint16_t register1;
    maskOCP = 0x7FCF;
    register1 &= maskOCP;
    register1 |= input << 4;
}

//funkcija za mod OCTW-a 

void DRV8301::setOCTW(uint8_t input){
    uint16_t register2;
    maskOCTW = 0x7FFC;
    register2 &= maskOCTW;
    register2 |= input;
}
    
//funkcija za pojačanje

void DRV8301::setGain(uint8_t input){
    uint16_t register2;
    maskGain = 0x7FF3;
    register2 &= maskGain;
    register2 |= input << 2;
}

//funkcija za dobivanje stanja u registru 1

uint16_t getRegister1(){
    uint16_t register1;
    return register1;
}
   
// funkcija za dobivanje stanja u registru 2

uint16_t getRegister2(){
    uint16_t register2;
    return register2;
}

//funkcija za čitanje statusnog registra 1

uint16_t DRV8301::readStatReg1(){
    uint16_t statReg1 = spi.write(0x8000);
    return statReg1;
}

//funkcija za čitanje statusnog registra 2

uint16_t DRV8301::readStatReg2(){
    uint16_t statReg2 = spi.write(0x8800);
    return statReg2;
}

//funkcija za pokretanje (reboot) DRV-a
    
void DRV8301::startup(){
    en_gate = 0;
    wait_us (25);
    en_gate = 1;
    wait (1);
}