Library for MAX14871 Shield, MAXREFDES89#
Dependents: MAXREFDES89_MAX14871_Shield_Demo MAXREFDES89_Test_Program Line_Following_Bot Line_Following_Bot_Pololu
Diff: max14871_shield.cpp
- Revision:
- 5:a206f6505109
- Parent:
- 3:89bf07b855e5
- Child:
- 6:dc06cc75c1c8
diff -r 4e42c80f56b6 -r a206f6505109 max14871_shield.cpp
--- a/max14871_shield.cpp Mon Aug 24 17:11:41 2015 +0000
+++ b/max14871_shield.cpp Tue Dec 22 04:24:07 2015 +0000
@@ -385,6 +385,114 @@
//*********************************************************************
+int16_t Max14871_Shield::set_pwm_channel(max14871_motor_driver_t md, PinName ch)
+{
+
+ int16_t result = 0;
+ float pwm_duty_cycle;
+ float pwm_period;
+
+
+ if((ch != D3) && (ch != D4) && (ch != D5) && (ch != D6) &&
+ (ch != D8) && (ch != D9) && (ch != D10) && (ch != D11))
+ {
+ result = -1;
+ }
+ else
+ {
+ switch(md)
+ {
+ case MD1:
+ if((ch != D3) && (ch != D4))
+ {
+ result = -1;
+ }
+ else
+ {
+ pwm_duty_cycle = get_pwm_duty_cycle(md);
+ pwm_period = get_pwm_period(md);
+
+ _p_pwm1->pulsewidth_us(0);
+
+ delete _p_pwm1;
+ _p_pwm1 = new PwmOut(ch);
+
+ set_pwm_period(md, pwm_period);
+ set_pwm_duty_cycle(md, pwm_duty_cycle);
+ }
+ break;
+
+ case MD2:
+ if((ch != D5) && (ch != D6))
+ {
+ result = -1;
+ }
+ else
+ {
+ pwm_duty_cycle = get_pwm_duty_cycle(md);
+ pwm_period = get_pwm_period(md);
+
+ _p_pwm2->pulsewidth_us(0);
+
+ delete _p_pwm2;
+ _p_pwm2 = new PwmOut(ch);
+
+ set_pwm_period(md, pwm_period);
+ set_pwm_duty_cycle(md, pwm_duty_cycle);
+ }
+ break;
+
+ case MD3:
+ if((ch != D8) && (ch != D9))
+ {
+ result = -1;
+ }
+ else
+ {
+ pwm_duty_cycle = get_pwm_duty_cycle(md);
+ pwm_period = get_pwm_period(md);
+
+ _p_pwm3->pulsewidth_us(0);
+
+ delete _p_pwm3;
+ _p_pwm3 = new PwmOut(ch);
+
+ set_pwm_period(md, pwm_period);
+ set_pwm_duty_cycle(md, pwm_duty_cycle);
+ }
+ break;
+
+ case MD4:
+ if((ch != D10) && (ch != D11))
+ {
+ result = -1;
+ }
+ else
+ {
+ pwm_duty_cycle = get_pwm_duty_cycle(md);
+ pwm_period = get_pwm_period(md);
+
+ _p_pwm4->pulsewidth_us(0);
+
+ delete _p_pwm4;
+ _p_pwm4 = new PwmOut(ch);
+
+ set_pwm_period(md, pwm_period);
+ set_pwm_duty_cycle(md, pwm_duty_cycle);
+ }
+ break;
+
+ default:
+ result = -1;
+ break;
+ }
+ }
+
+ return result;
+}
+
+
+//*********************************************************************
int16_t Max14871_Shield::set_pwm_period(max14871_motor_driver_t md, float period)
{
int16_t result = 0;
@@ -399,18 +507,22 @@
{
case MD1:
_p_pwm1->period(period);
+ _motor_data_array[(md - 1)].period = period;
break;
case MD2:
_p_pwm2->period(period);
+ _motor_data_array[(md - 1)].period = period;
break;
case MD3:
_p_pwm3->period(period);
+ _motor_data_array[(md - 1)].period = period;
break;
case MD4:
_p_pwm4->period(period);
+ _motor_data_array[(md - 1)].period = period;
break;
default:
@@ -481,6 +593,13 @@
//*********************************************************************
+float Max14871_Shield::get_pwm_period(max14871_motor_driver_t md)
+{
+ return(_motor_data_array[(md - 1)].period);
+}
+
+
+//*********************************************************************
float Max14871_Shield::get_external_voltage_ref(max14871_motor_driver_t md)
{
return(_motor_data_array[(md - 1)].v_ref);
@@ -529,6 +648,7 @@
_motor_data_array[idx].op_mode = COAST;
_motor_data_array[idx].i_reg_mode = RIPPLE_25_INTERNAL_REF;
_motor_data_array[idx].duty_cycle = 0.0f;
+ _motor_data_array[idx].period = MIN_PERIOD;
_motor_data_array[idx].v_ref = 0.0f;
}
}
MAXREFDES89#-MAX14871