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@0:05db098cf4f8, 2014-08-23 (annotated)
- Committer:
- kenjiArai
- Date:
- Sat Aug 23 11:18:06 2014 +0000
- Revision:
- 0:05db098cf4f8
- Child:
- 1:a9b58bc85be0
DRV8830/Texas Instruments H-Bridge Voltage-Controlled Motor Driver library for Brushed DC Motor
Who changed what in which revision?
User | Revision | Line number | New 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 | 0:05db098cf4f8 | 10 | * Revised: August 16th, 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 | 0:05db098cf4f8 | 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 | 0:05db098cf4f8 | 108 | I2C i2c; |
kenjiArai | 0:05db098cf4f8 | 109 | |
kenjiArai | 0:05db098cf4f8 | 110 | private: |
kenjiArai | 0:05db098cf4f8 | 111 | char DRV8830_addr; |
kenjiArai | 0:05db098cf4f8 | 112 | }; |
kenjiArai | 0:05db098cf4f8 | 113 | |
kenjiArai | 0:05db098cf4f8 | 114 | #endif // MBED_DRV8830 |