Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: Encoder HIDScope TextLCD mbed-dsp mbed
Fork of Main-script_groep7 by
Diff: main.cpp
- Revision:
- 3:156c3e536ed4
- Parent:
- 2:de7b6c1d67c4
- Child:
- 4:377ddd65e4a6
--- a/main.cpp Thu Oct 30 11:51:21 2014 +0000
+++ b/main.cpp Thu Oct 30 12:21:43 2014 +0000
@@ -122,7 +122,7 @@
current_herhalingen = previous_herhalingen + 1; previous_herhalingen = current_herhalingen;
}
-void slaan () {
+void GotoPosition (float position_setpoint_rad, float speed_radpersecond) {
current_pos_motor1 = motor1.getPosition(); //bekijk na elke 0.005s wat de huidige 'waarde' van de encoder is
delta_pos_motor1_puls = current_pos_motor1 - previous_pos_motor1; //Bereken wat het verschil in waarde is voor het berekenen van de snelheid(puls)
pos_motor1_rad = current_pos_motor1/(1600/(2*PI)); //echte waarde omrekenen naar rad voor (positie) PID regelaar
@@ -134,14 +134,16 @@
previous_pos_motor1 = current_pos_motor1; //sla de huidige waarde op als vorige waarde.
//nu gaan we positie regelen i.p.v. snelheid.
- if (current_pos_motor1 >= 400)
+ if (abs(pos_motor1_rad - position_setpoint_rad) <= 0.1) //if position error < ...rad, then stop.
{
- gewenste_snelheid_rad = 0;
+ speed_radpersecond = 0;
current_herhalingen = previous_herhalingen + 1;
previous_herhalingen = current_herhalingen;
}
-
- setpoint = prev_setpoint + TSAMP * gewenste_snelheid_rad;
+ else if(pos_motor1_rad - position_setpoint_rad > 0)
+ setpoint = prev_setpoint + TSAMP * speed_radpersecond;
+ else
+ setpoint = prev_setpoint -( TSAMP * speed_radpersecond);
/*new_pwm = (setpoint - motor1.getPosition())*.001; -> P action*/
PWM1_percentage = pid(setpoint, pos_motor1_rad);
//scope.set(1, setpoint-pos_motor1_rad);
@@ -154,7 +156,6 @@
{
PWM1_percentage =100;
}
- else {}
if(PWM1_percentage > 0)
{
@@ -165,59 +166,13 @@
motordir1 = 0;
}
- pwm_motor1.write(abs(((1-PWM1_min_50)/100)*PWM1_percentage + PWM1_min_50));
+ pwm_motor1.write(PWM1_percentage/100.);//abs(((1-PWM1_min_50)/100)*PWM1_percentage + PWM1_min_50));
//scope.set(5, abs(((1-PWM1_min_50)/100)*PWM1_percentage + PWM1_min_50));
prev_setpoint = setpoint;
//scope.send();
}
-void return2rust () {
- current_herhalingen = previous_herhalingen + 1; previous_herhalingen = current_herhalingen;
- current_pos_motor1 = motor1.getPosition(); //bekijk na elke 0.005s wat de huidige 'waarde' van de encoder is
- delta_pos_motor1_puls = current_pos_motor1 - previous_pos_motor1; //Bereken wat het verschil in waarde is voor het berekenen van de snelheid(puls)
- pos_motor1_rad = current_pos_motor1/(1600/(2*PI)); //echte waarde omrekenen naar rad voor (positie) PID regelaar
- delta_pos_motor1_rad = delta_pos_motor1_puls/(1600/(2*PI)); //delta waarde omrekenen naar rad voor snelheidsbepaling (rad)
- //snelheid_motor1_rad = delta_pos_motor1_rad / TSAMP; //rad delen door TSAMP om rad/s te verkrijgen
- //snelheid_arm_ms = snelheid_motor1_rad * lengte_arm; //deze waarde maar lengte van de arm om de snelheid van het uiteinde van die arm te verkrijgen
- //scope.set(0, snelheid_motor1_rad);
-
- previous_pos_motor1 = current_pos_motor1; //sla de huidige waarde op als vorige waarde.
-
- //nu gaan we positie regelen i.p.v. snelheid.
- if (current_pos_motor1 <= 0)
- {
- gewenste_snelheid_rad_return = 0;
- }
-
- setpoint = prev_setpoint + (TSAMP * gewenste_snelheid_rad_return);
- /*new_pwm = (setpoint - motor1.getPosition())*.001; -> P action*/
- PWM1_percentage = pid(setpoint, pos_motor1_rad);
- //scope.set(1, setpoint-pos_motor1_rad);
-
- if (PWM1_percentage < -100)
- {
- PWM1_percentage = -100;
- }
- else if (PWM1_percentage >100)
- {
- PWM1_percentage =100;
- }
- else {}
-
- if(PWM1_percentage > 0)
- {
- motordir1 = 1;
- }
- else
- {
- motordir1 = 0;
- }
-
- pwm_motor1.write(abs(((1-PWM1_min_50)/100)*PWM1_percentage + PWM1_min_50));
- //scope.set(5, abs(((1-PWM1_min_50)/100)*PWM1_percentage + PWM1_min_50));
- prev_setpoint = setpoint;
- //scope.send();
-}
+
float pid(float setpoint, float measurement)
{
@@ -334,7 +289,7 @@
case SLAAN:
{
- slaan();
+ GotoPosition(0.7,4);
if (current_herhalingen == 200)
{
state = RETURN2RUST;
@@ -349,7 +304,7 @@
case RETURN2RUST:
{
- return2rust();
+ GotoPosition(0,1);
/*if (current_herhalingen == 200)
{
state = RUST;
