This program is for an autonomous robot for the competition at the Hochschule Luzern. We are one of the 32 teams. <a href="http://cruisingcrepe.wordpress.com/">http://cruisingcrepe.wordpress.com/</a> The postition control is based on this Documentation: Control of Wheeled Mobile Robots: An Experimental Overview from Alessandro De Luca, Giuseppe Oriolo, Marilena Vendittelli. For more information see here: <a href="http://www.dis.uniroma1.it/~labrob/pub/papers/Ramsete01.pdf">http://www.dis.uniroma1.it/~labrob/pub/papers/Ramsete01.pdf</a>
Fork of autonomousRobotAndroid by
Diff: Actuators/MaxonESCON.cpp
- Revision:
- 3:92ba0254af87
- Parent:
- 2:d8e1613dc38b
- Child:
- 6:48eeb41188dd
diff -r d8e1613dc38b -r 92ba0254af87 Actuators/MaxonESCON.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Actuators/MaxonESCON.cpp Thu Mar 07 09:47:07 2013 +0000 @@ -0,0 +1,86 @@ +#include "MaxonESCON.h" + +using namespace std; + +MaxonESCON::MaxonESCON( + PinName enb, + PinName isenb, + PinName pwm, + PinName actualSpeed, + Hallsensor *hall +) + : + _enb(enb), + _isenb(isenb), + _pwm(pwm), + _actualSpeed(actualSpeed), + _hall(hall) +{ + + _pwm = 0; + + // Initial condition of output enables + _enb = 0; + + // Set initial condition of PWM 2kHz + period(0.0005); + + // Set the pulses to zero + _pulses = 0; + + // Set the Pull Up Resistor + _isenb.mode(PullUp); +} + +void MaxonESCON::setVelocity(float speed) +{ + speed = speed / ESCON_SET_FACTOR * 60.0f; + if(speed > 1 ) { + _pwm = 0.9f; + } else if(speed < -1) { + _pwm = 0.1f; + } else { + _pwm = 0.4f*speed + 0.5f; + } +} + +float MaxonESCON::getActualSpeed(void) +{ + return (_actualSpeed.read()* 2.0f - 1.0f) * ESCON_GET_FACTOR / 60.0f; +} + +void MaxonESCON::period(float period) +{ + _pwm.period(period); +} + +void MaxonESCON::enable(bool enb) +{ + if(enb == false) { + _enb = 1; + } else { + _enb = 0; + } +} + +bool MaxonESCON::isEnabled() +{ + if(_isenb.read() == 1) { + return true; + } else { + return false; + } +} + +int MaxonESCON::getPulses(void) +{ + _pulses = _hall->getPulses(); + return _pulses; +} + +int MaxonESCON::setPulses(int setPos) +{ + _hall->reset(); + _pulses = _hall->getPulses(); + return _pulses; +}