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

Committer:
kenjiArai
Date:
Wed Aug 23 09:24:05 2017 +0000
Revision:
4:323a62f5fff3
Parent:
2:fa7da669c1aa
countermeasure for  NonCopyable

Who changed what in which revision?

UserRevisionLine numberNew contents of line
kenjiArai 0:05db098cf4f8 1 /*
kenjiArai 0:05db098cf4f8 2 * mbed library program
kenjiArai 0:05db098cf4f8 3 * Texas Instruments / DRV8830 H-Bridge Voltage-Controlled Motor Driver
kenjiArai 0:05db098cf4f8 4 * http://www.ti.com/product/drv8830
kenjiArai 0:05db098cf4f8 5 *
kenjiArai 4:323a62f5fff3 6 * Copyright (c) 2014,'17 Kenji Arai / JH1PJL
kenjiArai 0:05db098cf4f8 7 * http://www.page.sannet.ne.jp/kenjia/index.html
kenjiArai 0:05db098cf4f8 8 * http://mbed.org/users/kenjiArai/
kenjiArai 4:323a62f5fff3 9 * Created: August 6th, 2014
kenjiArai 4:323a62f5fff3 10 * Revised: August 23rd, 2017
kenjiArai 0:05db098cf4f8 11 */
kenjiArai 0:05db098cf4f8 12
kenjiArai 0:05db098cf4f8 13 #ifndef MBED_DRV8830
kenjiArai 0:05db098cf4f8 14 #define MBED_DRV8830
kenjiArai 0:05db098cf4f8 15
kenjiArai 0:05db098cf4f8 16 // DRV8830 LOW-VOLTAGE MOTOR DRIVER WITH SERIAL INTERFACE
kenjiArai 0:05db098cf4f8 17 // 7bit address = 0b01100000(0x60) -> 8bit = 0b11000000(0xc0) -> 0xc1(Read) or 0xc0(Write)
kenjiArai 0:05db098cf4f8 18 // ADDR_01 = (A1=0)+(A0=1), ADDR_1N = (A1=1)+(A0=No Connection)
kenjiArai 0:05db098cf4f8 19 // -> Please make sure your H/W configuration
kenjiArai 0:05db098cf4f8 20 #define DRV8830ADDR_00 0xc0
kenjiArai 0:05db098cf4f8 21 #define DRV8830ADDR_0N 0xc2
kenjiArai 0:05db098cf4f8 22 #define DRV8830ADDR_01 0xc4
kenjiArai 0:05db098cf4f8 23 #define DRV8830ADDR_N0 0xc6
kenjiArai 0:05db098cf4f8 24 #define DRV8830ADDR_NN 0xc8
kenjiArai 0:05db098cf4f8 25 #define DRV8830ADDR_N1 0xca
kenjiArai 0:05db098cf4f8 26 #define DRV8830ADDR_10 0xcc
kenjiArai 0:05db098cf4f8 27 #define DRV8830ADDR_1N 0xce
kenjiArai 0:05db098cf4f8 28 #define DRV8830ADDR_11 0xd0
kenjiArai 0:05db098cf4f8 29
kenjiArai 0:05db098cf4f8 30 // fault status
kenjiArai 0:05db098cf4f8 31 #define DRV8830_F_ILIMIT 0x10
kenjiArai 0:05db098cf4f8 32 #define DRV8830_F_OTS 0x08
kenjiArai 0:05db098cf4f8 33 #define DRV8830_F_UVLO 0x04
kenjiArai 0:05db098cf4f8 34 #define DRV8830_F_OCP 0x02
kenjiArai 0:05db098cf4f8 35 #define DRV8830_F_FAULT 0x01
kenjiArai 0:05db098cf4f8 36
kenjiArai 0:05db098cf4f8 37 /** DRV8830 class
kenjiArai 0:05db098cf4f8 38 *
kenjiArai 0:05db098cf4f8 39 * This is a driver code for the DRV8830 H-Bridge Voltage-Controlled Motor Driver.
kenjiArai 0:05db098cf4f8 40 * http://www.ti.com/product/drv8830
kenjiArai 0:05db098cf4f8 41 *
kenjiArai 0:05db098cf4f8 42 * @code
kenjiArai 0:05db098cf4f8 43 * #include "mbed.h"
kenjiArai 0:05db098cf4f8 44 * #include "DRV8830.h"
kenjiArai 0:05db098cf4f8 45 *
kenjiArai 0:05db098cf4f8 46 * // I2C Communication
kenjiArai 0:05db098cf4f8 47 * DRV8830 motor(PinName p_sda, PinName p_scl, addr);
kenjiArai 0:05db098cf4f8 48 * // If you connected I2C line not only this device but also other devices,
kenjiArai 0:05db098cf4f8 49 * // you need to declare following method.
kenjiArai 0:05db098cf4f8 50 * I2C i2c(PinName p_sda, PinName p_scl);
kenjiArai 0:05db098cf4f8 51 * DRV8830 motor(I2C& p_i2c, addr);
kenjiArai 0:05db098cf4f8 52 *
kenjiArai 0:05db098cf4f8 53 * int main() {
kenjiArai 0:05db098cf4f8 54 * uint8_t status;
kenjiArai 0:05db098cf4f8 55 *
kenjiArai 0:05db098cf4f8 56 * // Speed control
kenjiArai 0:05db098cf4f8 57 * motor.speed(0.5); // CW
kenjiArai 0:05db098cf4f8 58 * motor.speed(-0.5); // CCW
kenjiArai 0:05db098cf4f8 59 * motor.speed(0.0); // Stop(FREE)
kenjiArai 0:05db098cf4f8 60 * // Check error and reset
kenjiArai 0:05db098cf4f8 61 * status = motor.status();
kenjiArai 0:05db098cf4f8 62 * if (status & DRV8830_F_FAULT){
kenjiArai 0:05db098cf4f8 63 * motor.reset();
kenjiArai 0:05db098cf4f8 64 * }
kenjiArai 0:05db098cf4f8 65 * }
kenjiArai 0:05db098cf4f8 66 * @endcode
kenjiArai 0:05db098cf4f8 67 */
kenjiArai 0:05db098cf4f8 68
kenjiArai 0:05db098cf4f8 69 class DRV8830 {
kenjiArai 0:05db098cf4f8 70 public:
kenjiArai 0:05db098cf4f8 71 /** Configure data pin
kenjiArai 0:05db098cf4f8 72 * @param data SDA and SCL pins
kenjiArai 0:05db098cf4f8 73 * @param DRV8830 address (H/W configuration of A1,A0)
kenjiArai 0:05db098cf4f8 74 */
kenjiArai 0:05db098cf4f8 75 DRV8830(PinName p_sda, PinName p_scl, uint8_t addr);
kenjiArai 0:05db098cf4f8 76
kenjiArai 0:05db098cf4f8 77 /** Configure data pin (with other devices on I2C line)
kenjiArai 0:05db098cf4f8 78 * @param I2C previous definition
kenjiArai 0:05db098cf4f8 79 * @param DRV8830 address (H/W configuration of A1,A0)
kenjiArai 0:05db098cf4f8 80 */
kenjiArai 0:05db098cf4f8 81 DRV8830(I2C& p_i2c, uint8_t addr);
kenjiArai 0:05db098cf4f8 82
kenjiArai 0:05db098cf4f8 83 /** Set motor speed
kenjiArai 0:05db098cf4f8 84 * @param speed (Range 0 to 1.0 or 0 to -1.0)
kenjiArai 0:05db098cf4f8 85 * @return none
kenjiArai 0:05db098cf4f8 86 */
kenjiArai 0:05db098cf4f8 87 void speed(float speed);
kenjiArai 1:a9b58bc85be0 88
kenjiArai 2:fa7da669c1aa 89 /** Set voltage
kenjiArai 2:fa7da669c1aa 90 * @param voltage (0 to 5V)
kenjiArai 1:a9b58bc85be0 91 * @return none
kenjiArai 1:a9b58bc85be0 92 */
kenjiArai 1:a9b58bc85be0 93 void set_voltage(float volt);
kenjiArai 1:a9b58bc85be0 94
kenjiArai 0:05db098cf4f8 95 /** Read status
kenjiArai 0:05db098cf4f8 96 * @param none
kenjiArai 0:05db098cf4f8 97 * @return FAULT register content
kenjiArai 0:05db098cf4f8 98 */
kenjiArai 0:05db098cf4f8 99 uint8_t status();
kenjiArai 0:05db098cf4f8 100
kenjiArai 0:05db098cf4f8 101 /** Reset DRV8830 chip
kenjiArai 0:05db098cf4f8 102 * @param none
kenjiArai 0:05db098cf4f8 103 * @return none
kenjiArai 0:05db098cf4f8 104 */
kenjiArai 0:05db098cf4f8 105 void reset();
kenjiArai 0:05db098cf4f8 106
kenjiArai 0:05db098cf4f8 107 protected:
kenjiArai 4:323a62f5fff3 108 I2C *_i2c_p;
kenjiArai 4:323a62f5fff3 109 I2C &_i2c;
kenjiArai 0:05db098cf4f8 110
kenjiArai 0:05db098cf4f8 111 private:
kenjiArai 0:05db098cf4f8 112 char DRV8830_addr;
kenjiArai 0:05db098cf4f8 113 };
kenjiArai 0:05db098cf4f8 114
kenjiArai 0:05db098cf4f8 115 #endif // MBED_DRV8830
kenjiArai 4:323a62f5fff3 116