succes

Dependencies:   microbit

Committer:
mk1
Date:
Sat Feb 11 15:55:34 2017 +0000
Revision:
0:c15430f1895f
succes

Who changed what in which revision?

UserRevisionLine numberNew contents of line
mk1 0:c15430f1895f 1 #include "mbed.h"
mk1 0:c15430f1895f 2 #include "motor.h"
mk1 0:c15430f1895f 3
mk1 0:c15430f1895f 4
mk1 0:c15430f1895f 5 Motor::Motor(MicroBit & bit)
mk1 0:c15430f1895f 6 : _bit(bit),
mk1 0:c15430f1895f 7 _speed(0),
mk1 0:c15430f1895f 8 _targetSpeed(0)
mk1 0:c15430f1895f 9 {
mk1 0:c15430f1895f 10 // 50% duty cycle will make a nice step pulse
mk1 0:c15430f1895f 11 SetPWMDutyCycle(900);
mk1 0:c15430f1895f 12 }
mk1 0:c15430f1895f 13
mk1 0:c15430f1895f 14 void Motor::SetSpeed(float targetSpeed)
mk1 0:c15430f1895f 15 {
mk1 0:c15430f1895f 16 _targetSpeed = targetSpeed;
mk1 0:c15430f1895f 17 }
mk1 0:c15430f1895f 18
mk1 0:c15430f1895f 19 float Motor::Speed()
mk1 0:c15430f1895f 20 {
mk1 0:c15430f1895f 21 return _speed;
mk1 0:c15430f1895f 22 }
mk1 0:c15430f1895f 23
mk1 0:c15430f1895f 24 void Motor::Step()
mk1 0:c15430f1895f 25 {
mk1 0:c15430f1895f 26 if ((_speed - _targetSpeed) > ACCELERATION)
mk1 0:c15430f1895f 27 _speed -= ACCELERATION;
mk1 0:c15430f1895f 28 else if ((_speed - _targetSpeed) < -ACCELERATION)
mk1 0:c15430f1895f 29 _speed += ACCELERATION;
mk1 0:c15430f1895f 30 else
mk1 0:c15430f1895f 31 _speed = _targetSpeed;
mk1 0:c15430f1895f 32
mk1 0:c15430f1895f 33 if ((_speed < 0.00005) && (_speed > -0.00005))
mk1 0:c15430f1895f 34 _speed = 0.00005; // Prevent int overflow in SetPWMPeriod.
mk1 0:c15430f1895f 35
mk1 0:c15430f1895f 36 SetPWMPeriod(abs(100000/_speed));
mk1 0:c15430f1895f 37 }
mk1 0:c15430f1895f 38
mk1 0:c15430f1895f 39 void Motor::SetPWMDutyCycle(int value) const
mk1 0:c15430f1895f 40 {
mk1 0:c15430f1895f 41 _bit.io.P3.setAnalogValue(value);
mk1 0:c15430f1895f 42 _bit.io.P4.setAnalogValue(value);
mk1 0:c15430f1895f 43 }
mk1 0:c15430f1895f 44
mk1 0:c15430f1895f 45 void Motor::SetPWMPeriod(int usValue) const
mk1 0:c15430f1895f 46 {
mk1 0:c15430f1895f 47 _bit.io.P3.setAnalogPeriodUs(usValue);
mk1 0:c15430f1895f 48 _bit.io.P4.setAnalogPeriodUs(usValue);
mk1 0:c15430f1895f 49 }
mk1 0:c15430f1895f 50
mk1 0:c15430f1895f 51 void Motor::SetDirection(STEP_DIRECTION direction) const
mk1 0:c15430f1895f 52 {
mk1 0:c15430f1895f 53 _bit.io.P8.setDigitalValue(direction);
mk1 0:c15430f1895f 54 _bit.io.P16.setDigitalValue(direction);
mk1 0:c15430f1895f 55 }
mk1 0:c15430f1895f 56