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
Revision 5:4842219cb77c, committed 2014-10-31
- Comitter:
- phgbartels
- Date:
- Fri Oct 31 08:36:46 2014 +0000
- Parent:
- 4:377ddd65e4a6
- Child:
- 6:a7379a681adf
- Commit message:
- Main_script_groep7
Changed in this revision
| main.cpp | Show annotated file Show diff for this revision Revisions of this file |
--- a/main.cpp Thu Oct 30 12:59:47 2014 +0000
+++ b/main.cpp Fri Oct 31 08:36:46 2014 +0000
@@ -32,9 +32,9 @@
#define PWM2_min_30 0.529 /*aanpassen! Klopt nog niet met koppelstuk*/
/*Definieren om de hoeveel seconden er gegevens naar de HID-scope gestuurd worden.*/
#define TSAMP 0.005
-#define K_P (100)
-#define K_I (50 * TSAMP)
-#define K_D (1)
+#define K_P (5)
+#define K_I (0.1 * TSAMP)
+#define K_D (0)
//#define K_D (0.0005 /TSAMP)
#define I_LIMIT 100.
#define PI 3.1415926535897
@@ -70,6 +70,7 @@
int beginpos_motor2_new;
int previous_pos_motor1 = 0;
int current_pos_motor1;
+int EMG = 1;
int delta_pos_motor1_puls;
void clamp(float * in, float min, float max);
volatile bool looptimerflag;
@@ -123,10 +124,11 @@
}
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)
+ //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)
+ //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);
@@ -134,26 +136,30 @@
previous_pos_motor1 = current_pos_motor1; //sla de huidige waarde op als vorige waarde.
//nu gaan we positie regelen i.p.v. snelheid.
- pc.printf("%f\n\r",pos_motor1_rad - position_setpoint_rad);
- if (fabs(pos_motor1_rad - position_setpoint_rad) <= 0.2) //if position error < ...rad, then stop.
+
+ if (fabs(pos_motor1_rad - position_setpoint_rad) <= 0.05) //if position error < ...rad, then stop.
{
speed_radpersecond = 0;
setpoint = pos_motor1_rad;
current_herhalingen = previous_herhalingen + 1;
previous_herhalingen = current_herhalingen;
pc.printf("stop\n\r");
+ PWM1_percentage = 0;
}
else if(pos_motor1_rad - position_setpoint_rad < 0)
{
- setpoint = prev_setpoint +( TSAMP * speed_radpersecond);
+ setpoint = prev_setpoint +( TSAMP * speed_radpersecond);
+ PWM1_percentage = pid(setpoint, pos_motor1_rad);
}
else
{
- setpoint = prev_setpoint -( TSAMP * speed_radpersecond);
+ setpoint = prev_setpoint -( TSAMP * speed_radpersecond);
+ PWM1_percentage = pid(setpoint, pos_motor1_rad);
}
/*new_pwm = (setpoint - motor1.getPosition())*.001; -> P action*/
+ pc.printf("%f\n\r",PWM1_percentage);
- PWM1_percentage = pid(setpoint, pos_motor1_rad);
+
//scope.set(1, setpoint-pos_motor1_rad);
if (PWM1_percentage < -100)
@@ -214,11 +220,12 @@
case RUST: {
rust();
/*voorwaarde wanneer hij door kan naar de volgende case*/
- if (current_herhalingen == 600)
+ if (current_herhalingen == 100 && EMG == 1)
{
current_herhalingen = 0;
previous_herhalingen = 0;
state = ARM_KALIBRATIE;
+ EMG = 0;
}
break;
/*bepalen hoe je zorgt dat je maar 1x de kalibraties uitvoerd! (Of eventueel de arm kalibratie elke keer!!)*/
@@ -233,7 +240,7 @@
case ARM_KALIBRATIE:
{
arm_kalibratie();
- if (current_herhalingen == 200)
+ if (current_herhalingen == 100)
{
current_herhalingen = 0;
previous_herhalingen = 0;
@@ -249,7 +256,7 @@
case EMG_KALIBRATIE:
{
emg_kalibratie();
- if (current_herhalingen == 200)
+ if (current_herhalingen == 100)
{
state = METEN_RICHTING;
current_herhalingen = 0;
@@ -261,7 +268,7 @@
case METEN_RICHTING:
{
meten_richting();
- if (current_herhalingen == 200)
+ if (current_herhalingen == 100)
{
state = METEN_HOOGTE;
current_herhalingen = 0;
@@ -273,7 +280,7 @@
case METEN_HOOGTE:
{
meten_hoogte();
- if (current_herhalingen == 200)
+ if (current_herhalingen == 100)
{
state = INSTELLEN_RICHTING;
current_herhalingen = 0;
@@ -285,7 +292,7 @@
case INSTELLEN_RICHTING:
{
instellen_richting();
- if (current_herhalingen == 200)
+ if (current_herhalingen == 100)
{
state = SLAAN;
current_herhalingen = 0;
@@ -297,8 +304,8 @@
case SLAAN:
{
- GotoPosition(0.7,4);
- if (current_herhalingen == 200)
+ GotoPosition(1.5 ,8);
+ if (current_herhalingen == 100)
{
state = RETURN2RUST;
current_herhalingen = 0;
@@ -312,14 +319,14 @@
case RETURN2RUST:
{
- GotoPosition(0,1);
- /*if (current_herhalingen == 200)
+ GotoPosition(0,2);
+ if (current_herhalingen == 100)
{
state = RUST;
current_herhalingen = 0;
previous_herhalingen = 0;
}
- */
+
break;
}
@@ -335,7 +342,7 @@
if(state==RUST){
lcd.cls();
lcd.locate(0,0);
- lcd.printf("S.T.I.E.N.E.N."); //regel 1 LCD scherm
+ lcd.printf("V.I.C.T.O.R.Y."); //regel 1 LCD scherm
lcd.locate(0,1);
lcd.printf(" GROEP 7 ");
}
