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@3:227ecd07b9cd, 2015-11-24 (annotated)
- 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?
User | Revision | Line number | New 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 | } |