succes
motor.cpp@0:c15430f1895f, 2017-02-11 (annotated)
- Committer:
- mk1
- Date:
- Sat Feb 11 15:55:34 2017 +0000
- Revision:
- 0:c15430f1895f
succes
Who changed what in which revision?
User | Revision | Line number | New 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 |