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:
Thu Nov 27 21:41:21 2014 +0000
Revision:
2:fa7da669c1aa
Parent:
1:a9b58bc85be0
Child:
4:323a62f5fff3
change comments

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 0:05db098cf4f8 6 * Copyright (c) 2014 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 0:05db098cf4f8 9 * Created: August 6th, 2014
kenjiArai 1:a9b58bc85be0 10 * Revised: November 24th, 2014
kenjiArai 0:05db098cf4f8 11 *
kenjiArai 0:05db098cf4f8 12 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
kenjiArai 0:05db098cf4f8 13 * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE
kenjiArai 0:05db098cf4f8 14 * AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
kenjiArai 0:05db098cf4f8 15 * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
kenjiArai 0:05db098cf4f8 16 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
kenjiArai 0:05db098cf4f8 17 */
kenjiArai 0:05db098cf4f8 18
kenjiArai 0:05db098cf4f8 19 #ifndef MBED_DRV8830
kenjiArai 0:05db098cf4f8 20 #define MBED_DRV8830
kenjiArai 0:05db098cf4f8 21
kenjiArai 0:05db098cf4f8 22 // DRV8830 LOW-VOLTAGE MOTOR DRIVER WITH SERIAL INTERFACE
kenjiArai 0:05db098cf4f8 23 // 7bit address = 0b01100000(0x60) -> 8bit = 0b11000000(0xc0) -> 0xc1(Read) or 0xc0(Write)
kenjiArai 0:05db098cf4f8 24 // ADDR_01 = (A1=0)+(A0=1), ADDR_1N = (A1=1)+(A0=No Connection)
kenjiArai 0:05db098cf4f8 25 // -> Please make sure your H/W configuration
kenjiArai 0:05db098cf4f8 26 #define DRV8830ADDR_00 0xc0
kenjiArai 0:05db098cf4f8 27 #define DRV8830ADDR_0N 0xc2
kenjiArai 0:05db098cf4f8 28 #define DRV8830ADDR_01 0xc4
kenjiArai 0:05db098cf4f8 29 #define DRV8830ADDR_N0 0xc6
kenjiArai 0:05db098cf4f8 30 #define DRV8830ADDR_NN 0xc8
kenjiArai 0:05db098cf4f8 31 #define DRV8830ADDR_N1 0xca
kenjiArai 0:05db098cf4f8 32 #define DRV8830ADDR_10 0xcc
kenjiArai 0:05db098cf4f8 33 #define DRV8830ADDR_1N 0xce
kenjiArai 0:05db098cf4f8 34 #define DRV8830ADDR_11 0xd0
kenjiArai 0:05db098cf4f8 35
kenjiArai 0:05db098cf4f8 36 // fault status
kenjiArai 0:05db098cf4f8 37 #define DRV8830_F_ILIMIT 0x10
kenjiArai 0:05db098cf4f8 38 #define DRV8830_F_OTS 0x08
kenjiArai 0:05db098cf4f8 39 #define DRV8830_F_UVLO 0x04
kenjiArai 0:05db098cf4f8 40 #define DRV8830_F_OCP 0x02
kenjiArai 0:05db098cf4f8 41 #define DRV8830_F_FAULT 0x01
kenjiArai 0:05db098cf4f8 42
kenjiArai 0:05db098cf4f8 43 /** DRV8830 class
kenjiArai 0:05db098cf4f8 44 *
kenjiArai 0:05db098cf4f8 45 * This is a driver code for the DRV8830 H-Bridge Voltage-Controlled Motor Driver.
kenjiArai 0:05db098cf4f8 46 * http://www.ti.com/product/drv8830
kenjiArai 0:05db098cf4f8 47 *
kenjiArai 0:05db098cf4f8 48 * @code
kenjiArai 0:05db098cf4f8 49 * #include "mbed.h"
kenjiArai 0:05db098cf4f8 50 * #include "DRV8830.h"
kenjiArai 0:05db098cf4f8 51 *
kenjiArai 0:05db098cf4f8 52 * // I2C Communication
kenjiArai 0:05db098cf4f8 53 * DRV8830 motor(PinName p_sda, PinName p_scl, addr);
kenjiArai 0:05db098cf4f8 54 * // If you connected I2C line not only this device but also other devices,
kenjiArai 0:05db098cf4f8 55 * // you need to declare following method.
kenjiArai 0:05db098cf4f8 56 * I2C i2c(PinName p_sda, PinName p_scl);
kenjiArai 0:05db098cf4f8 57 * DRV8830 motor(I2C& p_i2c, addr);
kenjiArai 0:05db098cf4f8 58 *
kenjiArai 0:05db098cf4f8 59 * int main() {
kenjiArai 0:05db098cf4f8 60 * uint8_t status;
kenjiArai 0:05db098cf4f8 61 *
kenjiArai 0:05db098cf4f8 62 * // Speed control
kenjiArai 0:05db098cf4f8 63 * motor.speed(0.5); // CW
kenjiArai 0:05db098cf4f8 64 * motor.speed(-0.5); // CCW
kenjiArai 0:05db098cf4f8 65 * motor.speed(0.0); // Stop(FREE)
kenjiArai 0:05db098cf4f8 66 * // Check error and reset
kenjiArai 0:05db098cf4f8 67 * status = motor.status();
kenjiArai 0:05db098cf4f8 68 * if (status & DRV8830_F_FAULT){
kenjiArai 0:05db098cf4f8 69 * motor.reset();
kenjiArai 0:05db098cf4f8 70 * }
kenjiArai 0:05db098cf4f8 71 * }
kenjiArai 0:05db098cf4f8 72 * @endcode
kenjiArai 0:05db098cf4f8 73 */
kenjiArai 0:05db098cf4f8 74
kenjiArai 0:05db098cf4f8 75 class DRV8830 {
kenjiArai 0:05db098cf4f8 76 public:
kenjiArai 0:05db098cf4f8 77 /** Configure data pin
kenjiArai 0:05db098cf4f8 78 * @param data SDA and SCL pins
kenjiArai 0:05db098cf4f8 79 * @param DRV8830 address (H/W configuration of A1,A0)
kenjiArai 0:05db098cf4f8 80 */
kenjiArai 0:05db098cf4f8 81 DRV8830(PinName p_sda, PinName p_scl, uint8_t addr);
kenjiArai 0:05db098cf4f8 82
kenjiArai 0:05db098cf4f8 83 /** Configure data pin (with other devices on I2C line)
kenjiArai 0:05db098cf4f8 84 * @param I2C previous definition
kenjiArai 0:05db098cf4f8 85 * @param DRV8830 address (H/W configuration of A1,A0)
kenjiArai 0:05db098cf4f8 86 */
kenjiArai 0:05db098cf4f8 87 DRV8830(I2C& p_i2c, uint8_t addr);
kenjiArai 0:05db098cf4f8 88
kenjiArai 0:05db098cf4f8 89 /** Set motor speed
kenjiArai 0:05db098cf4f8 90 * @param speed (Range 0 to 1.0 or 0 to -1.0)
kenjiArai 0:05db098cf4f8 91 * @return none
kenjiArai 0:05db098cf4f8 92 */
kenjiArai 0:05db098cf4f8 93 void speed(float speed);
kenjiArai 1:a9b58bc85be0 94
kenjiArai 2:fa7da669c1aa 95 /** Set voltage
kenjiArai 2:fa7da669c1aa 96 * @param voltage (0 to 5V)
kenjiArai 1:a9b58bc85be0 97 * @return none
kenjiArai 1:a9b58bc85be0 98 */
kenjiArai 1:a9b58bc85be0 99 void set_voltage(float volt);
kenjiArai 1:a9b58bc85be0 100
kenjiArai 0:05db098cf4f8 101 /** Read status
kenjiArai 0:05db098cf4f8 102 * @param none
kenjiArai 0:05db098cf4f8 103 * @return FAULT register content
kenjiArai 0:05db098cf4f8 104 */
kenjiArai 0:05db098cf4f8 105 uint8_t status();
kenjiArai 0:05db098cf4f8 106
kenjiArai 0:05db098cf4f8 107 /** Reset DRV8830 chip
kenjiArai 0:05db098cf4f8 108 * @param none
kenjiArai 0:05db098cf4f8 109 * @return none
kenjiArai 0:05db098cf4f8 110 */
kenjiArai 0:05db098cf4f8 111 void reset();
kenjiArai 0:05db098cf4f8 112
kenjiArai 0:05db098cf4f8 113 protected:
kenjiArai 0:05db098cf4f8 114 I2C i2c;
kenjiArai 0:05db098cf4f8 115
kenjiArai 0:05db098cf4f8 116 private:
kenjiArai 0:05db098cf4f8 117 char DRV8830_addr;
kenjiArai 0:05db098cf4f8 118 };
kenjiArai 0:05db098cf4f8 119
kenjiArai 0:05db098cf4f8 120 #endif // MBED_DRV8830