Simple DC motor control commands for driving DC motor conroller with PWM and up to 2 direction signals (complementary). Takes float value from -1.0 to 1.0.

Dependents:   Teensy_Mot_QEI_Ser_20180111 Axis Axis_20181108 Axis_version2

Fork of MotCon by Joseph Bradshaw

Overloaded class that takes a pwm motor control pin and one or two direction pins for driving DC motors with a variety of motor control IC's. Tested examples include the LM298, TD340, MC33926, A3949.

Committer:
jebradshaw
Date:
Thu May 19 13:17:10 2016 +0000
Revision:
2:23cd902e1774
Parent:
1:69e79f1db999
updated API documentation

Who changed what in which revision?

UserRevisionLine numberNew contents of line
jebradshaw 0:3ba12980833b 1 #include "MotCon.h"
jebradshaw 0:3ba12980833b 2
jebradshaw 0:3ba12980833b 3 MotCon::MotCon(PinName pwm, PinName dir) : _pwm(pwm), _dir(dir) {
jebradshaw 0:3ba12980833b 4 _pwm.period_us(50);
jebradshaw 0:3ba12980833b 5 _pwm = 0.0;
jebradshaw 0:3ba12980833b 6 _dir = 0;
jebradshaw 0:3ba12980833b 7 }
jebradshaw 0:3ba12980833b 8
jebradshaw 0:3ba12980833b 9 // dc is signed duty cycle (+/-1.0)
jebradshaw 0:3ba12980833b 10 void MotCon::mot_control(float dc){
jebradshaw 0:3ba12980833b 11 if(dc>1.0)
jebradshaw 0:3ba12980833b 12 dc=1.0;
jebradshaw 0:3ba12980833b 13 if(dc<-1.0)
jebradshaw 0:3ba12980833b 14 dc=-1.0;
jebradshaw 0:3ba12980833b 15
jebradshaw 0:3ba12980833b 16 if(dc > 0.001){
jebradshaw 0:3ba12980833b 17 _dir = 0;
jebradshaw 0:3ba12980833b 18 _pwm = dc;
jebradshaw 0:3ba12980833b 19 }
jebradshaw 0:3ba12980833b 20 else if(dc < -0.001){
jebradshaw 0:3ba12980833b 21 _dir = 1;
jebradshaw 0:3ba12980833b 22 _pwm = abs(dc);
jebradshaw 0:3ba12980833b 23 }
jebradshaw 0:3ba12980833b 24 else{
jebradshaw 0:3ba12980833b 25 _dir = 0;
jebradshaw 0:3ba12980833b 26 _pwm = 0.0;
jebradshaw 0:3ba12980833b 27 }
jebradshaw 0:3ba12980833b 28 }
jebradshaw 1:69e79f1db999 29
jebradshaw 1:69e79f1db999 30 // dc is signed duty cycle (+/-1.0)
jebradshaw 1:69e79f1db999 31 void MotCon::mot_control(float dc, int invert){
jebradshaw 1:69e79f1db999 32 if(dc>1.0)
jebradshaw 1:69e79f1db999 33 dc=1.0;
jebradshaw 1:69e79f1db999 34 if(dc<-1.0)
jebradshaw 1:69e79f1db999 35 dc=-1.0;
jebradshaw 1:69e79f1db999 36
jebradshaw 1:69e79f1db999 37 if(invert==0){
jebradshaw 1:69e79f1db999 38 if(dc > 0.001){
jebradshaw 1:69e79f1db999 39 _dir = 0;
jebradshaw 1:69e79f1db999 40 _pwm = dc;
jebradshaw 1:69e79f1db999 41 }
jebradshaw 1:69e79f1db999 42 else if(dc < -0.001){
jebradshaw 1:69e79f1db999 43 _dir = 1;
jebradshaw 1:69e79f1db999 44 _pwm = abs(dc);
jebradshaw 1:69e79f1db999 45 }
jebradshaw 1:69e79f1db999 46 else{
jebradshaw 1:69e79f1db999 47 _dir = 0;
jebradshaw 1:69e79f1db999 48 _pwm = 0.0;
jebradshaw 1:69e79f1db999 49 }
jebradshaw 1:69e79f1db999 50 }
jebradshaw 1:69e79f1db999 51 else{
jebradshaw 1:69e79f1db999 52 if(dc > 0.001){
jebradshaw 1:69e79f1db999 53 _dir = 1;
jebradshaw 1:69e79f1db999 54 _pwm = dc;
jebradshaw 1:69e79f1db999 55 }
jebradshaw 1:69e79f1db999 56 else if(dc < -0.001){
jebradshaw 1:69e79f1db999 57 _dir = 0;
jebradshaw 1:69e79f1db999 58 _pwm = abs(dc);
jebradshaw 1:69e79f1db999 59 }
jebradshaw 1:69e79f1db999 60 else{
jebradshaw 1:69e79f1db999 61 _dir = 0;
jebradshaw 1:69e79f1db999 62 _pwm = 0.0;
jebradshaw 1:69e79f1db999 63 }
jebradshaw 1:69e79f1db999 64 }
jebradshaw 1:69e79f1db999 65 }