Library for MAX14871 Shield, MAXREFDES89#
Dependents: MAXREFDES89_MAX14871_Shield_Demo MAXREFDES89_Test_Program Line_Following_Bot Line_Following_Bot_Pololu
Revision 1:7e9b864ddacf, committed 2015-07-26
- Comitter:
- j3
- Date:
- Sun Jul 26 22:19:50 2015 +0000
- Parent:
- 0:b5189f4ce1cb
- Child:
- 2:9b50d36d69c8
- Commit message:
- updated period, duty cycle, and vref to floats
Changed in this revision
--- a/MAX5387.lib Thu Jul 23 23:36:46 2015 +0000 +++ b/MAX5387.lib Sun Jul 26 22:19:50 2015 +0000 @@ -1,1 +1,1 @@ -https://developer.mbed.org/teams/Maxim-Integrated/code/MAX5387/#f50b0fb1f7f6 +https://developer.mbed.org/teams/Maxim-Integrated/code/MAX5387/#25deebfe51ba
--- a/MAX7300.lib Thu Jul 23 23:36:46 2015 +0000 +++ b/MAX7300.lib Sun Jul 26 22:19:50 2015 +0000 @@ -1,1 +1,1 @@ -https://developer.mbed.org/teams/Maxim-Integrated/code/MAX7300/#fd2de5d21702 +https://developer.mbed.org/teams/Maxim-Integrated/code/MAX7300/#4ffbd5539b69
--- a/max14871_shield.cpp Thu Jul 23 23:36:46 2015 +0000
+++ b/max14871_shield.cpp Sun Jul 26 22:19:50 2015 +0000
@@ -1,5 +1,5 @@
/******************************************************************//**
-* @file max14871_shield.h
+* @file max14871_shield.cpp
*
* @author Justin Jordan
*
@@ -45,7 +45,7 @@
#include "max14871_shield.h"
-#define MIN_PERIOD (20) //50KHz
+#define MIN_PERIOD (0.00002) //50KHz
//Motor Driver control inputs
#define MD_EN (0x01)
@@ -53,7 +53,7 @@
#define MD_MODE0 (0x04)
#define MD_MODE1 (0x08)
-#define MAX_VREF (100)
+#define MAX_VREF (2.0)
//GPIO Expander Default Configurations
#define MAX7300_ALL_OUTPUTS (0x55)
@@ -180,6 +180,8 @@
{
port_data |= (MD_EN << 4);
}
+
+ set_pwm_duty_cycle(md, 0.0);
break;
case BRAKE:
@@ -192,7 +194,7 @@
port_data &= ~(MD_EN << 4);
}
- set_pwm_duty_cycle(md, 0);
+ set_pwm_duty_cycle(md, 0.0);
break;
case REVERSE:
@@ -237,15 +239,23 @@
//*********************************************************************
int16_t Max14871_Shield::set_current_regulation_mode(max14871_motor_driver_t md,
max14871_current_regulation_mode_t mode,
- uint8_t vref)
+ float vref)
{
int16_t result = 0;
int16_t port_data;
+ uint8_t local_vref = 0;
Max7300::max7300_port_number_t low_port;
Max5387 *p_digi_pot;
+ if(vref > MAX_VREF)
+ {
+ vref = MAX_VREF;
+ }
+ local_vref = ((uint8_t) ((vref * 255) / 3.3));
+
//determine the low port of an 8 bit register to read/write
+ //and digipot associated with motor driver
if(md < MD3)
{
low_port = Max7300::MAX7300_PORT_04;
@@ -282,23 +292,13 @@
{
port_data &= ~MD_MODE0;
port_data |= MD_MODE1;
-
- if(vref > MAX_VREF)
- {
- vref = MAX_VREF;
- }
- p_digi_pot->write_ch_A(vref);
+ p_digi_pot->write_ch_A(local_vref);
}
else
{
port_data &= ~(MD_MODE0 << 4);
port_data |= (MD_MODE1 << 4);
-
- if(vref > MAX_VREF)
- {
- vref = MAX_VREF;
- }
- p_digi_pot->write_ch_B(vref);
+ p_digi_pot->write_ch_B(local_vref);
}
break;
@@ -334,22 +334,12 @@
if(md % 2)
{
port_data |= (MD_MODE1 + MD_MODE0);
-
- if(vref > MAX_VREF)
- {
- vref = MAX_VREF;
- }
- p_digi_pot->write_ch_A(vref);
+ p_digi_pot->write_ch_A(local_vref);
}
else
{
port_data |= ((MD_MODE1 + MD_MODE0) << 4);
-
- if(vref > MAX_VREF)
- {
- vref = MAX_VREF;
- }
- p_digi_pot->write_ch_B(vref);
+ p_digi_pot->write_ch_B(local_vref);
}
break;
@@ -358,23 +348,13 @@
{
port_data |= MD_MODE0;
port_data &= ~MD_MODE1;
-
- if(vref > MAX_VREF)
- {
- vref = MAX_VREF;
- }
- p_digi_pot->write_ch_A(vref);
+ p_digi_pot->write_ch_A(local_vref);
}
else
{
port_data |= (MD_MODE0 << 4);
port_data &= ~(MD_MODE1 << 4);
-
- if(vref > MAX_VREF)
- {
- vref = MAX_VREF;
- }
- p_digi_pot->write_ch_B(vref);
+ p_digi_pot->write_ch_B(local_vref);
}
break;
@@ -394,7 +374,7 @@
//*********************************************************************
-int16_t Max14871_Shield::set_pwm_period(max14871_motor_driver_t md, uint16_t period)
+int16_t Max14871_Shield::set_pwm_period(max14871_motor_driver_t md, float period)
{
int16_t result = 0;
@@ -407,19 +387,19 @@
switch(md)
{
case MD1:
- _p_pwm1->period_us(period);
+ _p_pwm1->period(period);
break;
case MD2:
- _p_pwm2->period_us(period);
+ _p_pwm2->period(period);
break;
case MD3:
- _p_pwm3->period_us(period);
+ _p_pwm3->period(period);
break;
case MD4:
- _p_pwm4->period_us(period);
+ _p_pwm4->period(period);
break;
default:
@@ -433,26 +413,26 @@
//*********************************************************************
-int16_t Max14871_Shield::set_pwm_duty_cycle(max14871_motor_driver_t md, uint16_t duty_cycle)
+int16_t Max14871_Shield::set_pwm_duty_cycle(max14871_motor_driver_t md, float duty_cycle)
{
int16_t result = 0;
switch(md)
{
case MD1:
- _p_pwm1->pulsewidth_us(duty_cycle);
+ _p_pwm1->write(duty_cycle);
break;
case MD2:
- _p_pwm2->pulsewidth_us(duty_cycle);
+ _p_pwm2->write(duty_cycle);
break;
case MD3:
- _p_pwm3->pulsewidth_us(duty_cycle);
+ _p_pwm3->write(duty_cycle);
break;
case MD4:
- _p_pwm4->pulsewidth_us(duty_cycle);
+ _p_pwm4->write(duty_cycle);
break;
default:
@@ -489,13 +469,13 @@
_p_io_expander->enable_transition_detection();
_p_io_expander->enable_ports();
- //set Vref pin of all motor drivers to 1.3V
+ //set Vref pin of all motor drivers to 2.0V
_p_digi_pot1->write_ch_AB(MAX_VREF);
_p_digi_pot2->write_ch_AB(MAX_VREF);
//set switching frequency of all motor drivers to 50KHz
- _p_pwm1->period_us(MIN_PERIOD);
- _p_pwm2->period_us(MIN_PERIOD);
- _p_pwm3->period_us(MIN_PERIOD);
- _p_pwm4->period_us(MIN_PERIOD);
+ _p_pwm1->period(MIN_PERIOD);
+ _p_pwm2->period(MIN_PERIOD);
+ _p_pwm3->period(MIN_PERIOD);
+ _p_pwm4->period(MIN_PERIOD);
}
--- a/max14871_shield.h Thu Jul 23 23:36:46 2015 +0000
+++ b/max14871_shield.h Sun Jul 26 22:19:50 2015 +0000
@@ -1,5 +1,5 @@
/******************************************************************//**
-* @file Max14871_Shield.h
+* @file max14871_shield.h
*
* @author Justin Jordan
*
@@ -157,13 +157,14 @@
* @param[in] md - 1 of 4 motor drivers on the shield
* @param[in] mode - 1 of 6 current regulation modes of the
* motor driver
+ * @param[in] vref - sets maximum motor current, Max of 2.0V
*
* On Exit:
* @return 0 on success, non-0 on failure
**************************************************************/
int16_t set_current_regulation_mode(max14871_motor_driver_t md,
max14871_current_regulation_mode_t mode,
- uint8_t vref);
+ float vref);
/**********************************************************//**
@@ -173,13 +174,12 @@
*
* On Entry:
* @param[in] md - 1 of 4 motor drivers on the shield
- * @param[in] period - period of the pwm signal in
- * micro-seconds
+ * @param[in] period - PWM period specified in seconds
*
* On Exit:
* @return 0 on success, non-0 on failure
**************************************************************/
- int16_t set_pwm_period(max14871_motor_driver_t md, uint16_t period);
+ int16_t set_pwm_period(max14871_motor_driver_t md, float period);
/**********************************************************//**
@@ -189,13 +189,13 @@
*
* On Entry:
* @param[in] md - 1 of 4 motor drivers on the shield
- * @param[in] duty_cycle - duty cycle of the pwm signal in
- * micro-seconds
+ * @param[in] duty_cycle - duty cycle of the pwm signal specified
+ * as a percentage
*
* On Exit:
* @return 0 on success, non-0 on failure
**************************************************************/
- int16_t set_pwm_duty_cycle(max14871_motor_driver_t md, uint16_t duty_cycle);
+ int16_t set_pwm_duty_cycle(max14871_motor_driver_t md, float duty_cycle);
private:
MAXREFDES89#-MAX14871