DRV8830/Texas Instruments H-Bridge Voltage-Controlled Motor Driver library for Brushed DC Motor
Dependents: NucleoF401_motor_test_simple Frequency_Counter_w_GPS_1PPS Nucleo_ACM1602_I2C_DC_Angle Frequency_Cntr_1PPS_F746ZG
DRV8830.h
- Committer:
- kenjiArai
- Date:
- 2017-08-23
- Revision:
- 4:323a62f5fff3
- Parent:
- 2:fa7da669c1aa
File content as of revision 4:323a62f5fff3:
/*
* mbed library program
* Texas Instruments / DRV8830 H-Bridge Voltage-Controlled Motor Driver
* http://www.ti.com/product/drv8830
*
* Copyright (c) 2014,'17 Kenji Arai / JH1PJL
* http://www.page.sannet.ne.jp/kenjia/index.html
* http://mbed.org/users/kenjiArai/
* Created: August 6th, 2014
* Revised: August 23rd, 2017
*/
#ifndef MBED_DRV8830
#define MBED_DRV8830
// DRV8830 LOW-VOLTAGE MOTOR DRIVER WITH SERIAL INTERFACE
// 7bit address = 0b01100000(0x60) -> 8bit = 0b11000000(0xc0) -> 0xc1(Read) or 0xc0(Write)
// ADDR_01 = (A1=0)+(A0=1), ADDR_1N = (A1=1)+(A0=No Connection)
// -> Please make sure your H/W configuration
#define DRV8830ADDR_00 0xc0
#define DRV8830ADDR_0N 0xc2
#define DRV8830ADDR_01 0xc4
#define DRV8830ADDR_N0 0xc6
#define DRV8830ADDR_NN 0xc8
#define DRV8830ADDR_N1 0xca
#define DRV8830ADDR_10 0xcc
#define DRV8830ADDR_1N 0xce
#define DRV8830ADDR_11 0xd0
// fault status
#define DRV8830_F_ILIMIT 0x10
#define DRV8830_F_OTS 0x08
#define DRV8830_F_UVLO 0x04
#define DRV8830_F_OCP 0x02
#define DRV8830_F_FAULT 0x01
/** DRV8830 class
*
* This is a driver code for the DRV8830 H-Bridge Voltage-Controlled Motor Driver.
* http://www.ti.com/product/drv8830
*
* @code
* #include "mbed.h"
* #include "DRV8830.h"
*
* // I2C Communication
* DRV8830 motor(PinName p_sda, PinName p_scl, addr);
* // If you connected I2C line not only this device but also other devices,
* // you need to declare following method.
* I2C i2c(PinName p_sda, PinName p_scl);
* DRV8830 motor(I2C& p_i2c, addr);
*
* int main() {
* uint8_t status;
*
* // Speed control
* motor.speed(0.5); // CW
* motor.speed(-0.5); // CCW
* motor.speed(0.0); // Stop(FREE)
* // Check error and reset
* status = motor.status();
* if (status & DRV8830_F_FAULT){
* motor.reset();
* }
* }
* @endcode
*/
class DRV8830 {
public:
/** Configure data pin
* @param data SDA and SCL pins
* @param DRV8830 address (H/W configuration of A1,A0)
*/
DRV8830(PinName p_sda, PinName p_scl, uint8_t addr);
/** Configure data pin (with other devices on I2C line)
* @param I2C previous definition
* @param DRV8830 address (H/W configuration of A1,A0)
*/
DRV8830(I2C& p_i2c, uint8_t addr);
/** Set motor speed
* @param speed (Range 0 to 1.0 or 0 to -1.0)
* @return none
*/
void speed(float speed);
/** Set voltage
* @param voltage (0 to 5V)
* @return none
*/
void set_voltage(float volt);
/** Read status
* @param none
* @return FAULT register content
*/
uint8_t status();
/** Reset DRV8830 chip
* @param none
* @return none
*/
void reset();
protected:
I2C *_i2c_p;
I2C &_i2c;
private:
char DRV8830_addr;
};
#endif // MBED_DRV8830