27 #include <mraa/i2c.hpp> 33 #define SmartDrive_Motor_ID_1 0x01 34 #define SmartDrive_Motor_ID_2 0x02 35 #define SmartDrive_Motor_ID_BOTH 0x03 37 #define SmartDrive_Dir_Reverse 0x00 38 #define SmartDrive_Dir_Forward 0x01 40 #define SmartDrive_Action_Float 0x00 //stop and let the motor coast. 41 #define SmartDrive_Action_Brake 0x01 //apply brakes, and resist change to tachometer 42 #define SmartDrive_Action_BrakeHold 0x02 //apply brakes, and restore externally forced change to tachometer 45 #define SmartDrive_Completion_Wait_For 0x01 46 #define SmartDrive_Completion_Dont_Wait 0x00 48 #define SmartDrive_DefaultAddress 0x1b 49 #define SmartDrive_VOLTAGE_MULTIPLIER 212.7 53 #define SmartDrive_Speed_Full 90 54 #define SmartDrive_Speed_Medium 60 55 #define SmartDrive_Speed_Slow 25 58 #define SmartDrive_CONTROL_SPEED 0x01 59 #define SmartDrive_CONTROL_RAMP 0x02 60 #define SmartDrive_CONTROL_RELATIVE 0x04 61 #define SmartDrive_CONTROL_TACHO 0x08 62 #define SmartDrive_CONTROL_BRK 0x10 63 #define SmartDrive_CONTROL_ON 0x20 64 #define SmartDrive_CONTROL_TIME 0x40 65 #define SmartDrive_CONTROL_GO 0x80 67 #define SmartDrive_COMMAND 0x41 68 #define SmartDrive_SETPT_M1 0x42 69 #define SmartDrive_SPEED_M1 0x46 70 #define SmartDrive_TIME_M1 0x47 71 #define SmartDrive_CMD_B_M1 0x48 72 #define SmartDrive_CMD_A_M1 0x49 74 #define SmartDrive_SETPT_M2 0x4A 75 #define SmartDrive_SPEED_M2 0x4E 76 #define SmartDrive_TIME_M2 0x4F 77 #define SmartDrive_CMD_B_M2 0x50 78 #define SmartDrive_CMD_A_M2 0x51 81 #define SmartDrive_POSITION_M1 0x52 82 #define SmartDrive_POSITION_M2 0x56 83 #define SmartDrive_STATUS_M1 0x5A 84 #define SmartDrive_STATUS_M2 0x5B 85 #define SmartDrive_TASKS_M1 0x5C 86 #define SmartDrive_TASKS_M2 0x5D 89 #define SmartDrive_P_Kp 0x5E //proportional gain-position 90 #define SmartDrive_P_Ki 0x60 //integral gain-position 91 #define SmartDrive_P_Kd 0x62 //derivative gain-position 92 #define SmartDrive_S_Kp 0x64 //proportional gain-speed 93 #define SmartDrive_S_Ki 0x66 //integral gain-speed 94 #define SmartDrive_S_Kd 0x68 //derivative gain-speed 95 #define SmartDrive_PASSCOUNT 0x6A 96 #define SmartDrive_PASSTOLERANCE 0x6B 98 #define SmartDrive_CHKSUM 0x6C 101 #define SmartDrive_BATT_VOLTAGE 0x6E 102 #define SmartDrive_RESETSTATUS 0x6F 103 #define SmartDrive_CURRENT_M1 0x70 104 #define SmartDrive_CURRENT_M2 0x72 117 #define SmartDrive_MOTOR_CONTROL_ON 0x1 118 #define SmartDrive_MOTOR_IS_RAMPING 0x2 119 #define SmartDrive_MOTOR_IS_POWERED 0x4 120 #define SmartDrive_MOTOR_POS_CTRL_ON 0x8 121 #define SmartDrive_MOTOR_IN_BRAKE_MODE 0x10 122 #define SmartDrive_MOTOR_OVERLOADED 0x20 123 #define SmartDrive_MOTOR_IN_TIME_MODE 0x40 124 #define SmartDrive_MOTOR_IS_STALLED 0x80 160 SmartDrive(
int i2c_bus,
int address = SmartDrive_DefaultAddress);
185 void Run_Unlimited(
int motor_id,
int direction, uint8_t speed);
192 void StopMotor(
int motor_id,
int next_action );
203 void Run_Seconds(
int motor_id,
int direction, uint8_t speed, uint8_t duration,
bool wait_for_completion,
int next_action );
226 void Run_Degrees(
int motor_id,
int direction, uint8_t speed, uint32_t degrees,
bool wait_for_completion,
int next_action);
237 void Run_Rotations(
int motor_id,
int direction, uint8_t speed, uint32_t rotations,
bool wait_for_completion,
int next_action);
247 void Run_Tacho(
int motor_id, uint8_t speed, uint32_t tacho_count,
bool wait_for_completion,
int next_action);
270 void SetPerformanceParameters( uint16_t Kp_tacho, uint16_t Ki_tacho, uint16_t Kd_tacho, uint16_t Kp_speed, uint16_t Ki_speed, uint16_t Kd_speed, uint8_t passcount, uint8_t tolerance);
290 void writeByte(uint8_t addr, uint8_t value);
291 void writeArray(uint8_t* array, uint8_t len);
292 uint8_t readByte(uint8_t addr);
293 uint16_t readInteger(uint8_t addr);
294 uint32_t readLongSigned(uint8_t addr);
297 int m_smartdrive_control_address;
298 mraa::I2c m_i2c_smartdrive_control;
void Run_Unlimited(int motor_id, int direction, uint8_t speed)
Definition: smartdrive.cxx:134
void Run_Rotations(int motor_id, int direction, uint8_t speed, uint32_t rotations, bool wait_for_completion, int next_action)
Definition: smartdrive.cxx:259
void Run_Tacho(int motor_id, uint8_t speed, uint32_t tacho_count, bool wait_for_completion, int next_action)
Definition: smartdrive.cxx:300
float GetBattVoltage()
Definition: smartdrive.cxx:107
SmartDrive(int i2c_bus, int address=SmartDrive_DefaultAddress)
Definition: smartdrive.cxx:37
API for the SmartDrive advanced motor controller from OpenElectronis.
Definition: smartdrive.hpp:152
void Run_Degrees(int motor_id, int direction, uint8_t speed, uint32_t degrees, bool wait_for_completion, int next_action)
Definition: smartdrive.cxx:218
C++ API wrapper for the bh1749 driver.
Definition: a110x.hpp:29
void SetPerformanceParameters(uint16_t Kp_tacho, uint16_t Ki_tacho, uint16_t Kd_tacho, uint16_t Kp_speed, uint16_t Ki_speed, uint16_t Kd_speed, uint8_t passcount, uint8_t tolerance)
Definition: smartdrive.cxx:357
void StopMotor(int motor_id, int next_action)
Definition: smartdrive.cxx:159
void Run_Seconds(int motor_id, int direction, uint8_t speed, uint8_t duration, bool wait_for_completion, int next_action)
Definition: smartdrive.cxx:167
uint32_t ReadTachometerPosition(int motor_id)
Definition: smartdrive.cxx:120
void WaitUntilTimeDone(int motor_id)
Definition: smartdrive.cxx:200
void WaitUntilTachoDone(int motor_id)
Definition: smartdrive.cxx:337
bool IsTachoDone(int motor_id)
Definition: smartdrive.cxx:344
void ReadPerformanceParameters()
Definition: smartdrive.cxx:377
bool IsTimeDone(int motor_id)
Definition: smartdrive.cxx:207
uint8_t GetMotorStatus(int motor_id)
Definition: smartdrive.cxx:393
void PrintMotorStatus(int motor_id)
Definition: smartdrive.cxx:406
void command(uint8_t cmd)
Definition: smartdrive.cxx:100