Test to control motors
Dependencies: HIDScope_friso MODSERIAL QEI mbed
main.cpp
- Committer:
- FR150
- Date:
- 2016-10-19
- Revision:
- 0:42272569c45a
- Child:
- 2:8fb37a4587f1
File content as of revision 0:42272569c45a:
#include "mbed.h" #include "MODSERIAL.h" #define SERIAL_BAUD 115200 #include "QEI.h" #include "HIDScope.h" MODSERIAL pc(USBTX, USBRX); QEI Encoder(D12,D13,NC,64,QEI::X4_ENCODING); DigitalOut motor1_direction(D4); PwmOut motor1_pwm(D5); InterruptIn button1(D2); AnalogIn potmeter1(A0); HIDScope scope(1); Ticker scopeTimer; const float timer = 0.01; const float timer1 = 0.1; const float countspr = 8400; const float max_velocity = 8.4; const float pi = 3.14159265359; int counts; int counts_p; int pwmvalue; float potmeter; float angle; float referencevelocity; float velocity; void print(){ pc.printf("%i\r\n", counts); pc.printf("velocity: %3.3f%\n", velocity); pc.printf("angle: %3.3f%\n", angle); } void flipdirection() { motor1_direction = !motor1_direction; } void controlmotor() { potmeter = potmeter1.read(); referencevelocity = potmeter*max_velocity; motor1_pwm.pulsewidth(referencevelocity/max_velocity*0.020); } void calculateangle() { angle = fmod(counts,countspr)/countspr*2*pi; } void derivative() { velocity = (counts-counts_p)/countspr*2*pi/timer; counts_p = counts; } void scopeSend() { scope.set(0,velocity); scope.send(); } int main() { motor1_direction = 1; pc.baud(SERIAL_BAUD); Ticker time; Ticker time1; Ticker time2; Ticker time3; time.attach(print, timer1); time1.attach(controlmotor, timer); time2.attach(calculateangle, timer); time3.attach(derivative, timer); button1.rise(&flipdirection); scopeTimer.attach_us(&scopeSend, 1e4); motor1_pwm.period(0.020f); // set pwm period to 20ms while (true) { counts = Encoder.getPulses(); } }