From d30f0ed5487c8826928ed49c0cb15d88fbf3dd3f Mon Sep 17 00:00:00 2001 From: Geoffrey Frogeye Date: Thu, 10 May 2018 10:09:44 +0200 Subject: [PATCH] Misc --- arduino/arduino.ino | 10 +++++----- chef/src/CF.h | 2 +- chef/src/diagnostics.c | 4 ++-- chef/src/diagnostics.h | 2 +- chef/src/dimensions.h | 6 +++--- chef/src/lcd.c | 25 ++++++++++++++++--------- simu/simu.m | 14 ++++++++------ 7 files changed, 36 insertions(+), 27 deletions(-) diff --git a/arduino/arduino.ino b/arduino/arduino.ino index 8c73d10..2bbae36 100644 --- a/arduino/arduino.ino +++ b/arduino/arduino.ino @@ -36,24 +36,26 @@ void barilletUnCran() { ax12a.setEndless(ID, ON); - ax12a.turn(ID, LEFT, 1220); + ax12a.turn(ID, LEFT, 1224); delay(978); ax12a.turn(ID, LEFT, 200); delay(100); ax12a.turn(ID, LEFT, 1224); delay(100); + ax12a.turn(ID, LEFT, 0); } void barilletDeuxCrans() { ax12a.setEndless(ID, ON); - ax12a.turn(ID, LEFT, 1220); + ax12a.turn(ID, LEFT, 1224); delay(1955); ax12a.turn(ID, LEFT, 200); delay(100); ax12a.turn(ID, LEFT, 1224); delay(100); + ax12a.turn(ID, LEFT, 0); } void loop() @@ -96,11 +98,9 @@ void loop() break; case 'B': // Tourner barillet d'un cran barilletUnCran(); - delay(500); break; case 'H': // Tourner de deux crans barilletDeuxCrans(); - delay(500); break; case 'R': // Reset barillet // ax12a.setEndless(ID, OFF); @@ -133,4 +133,4 @@ void loop() Serial.write(lettre); } } -} +} diff --git a/chef/src/CF.h b/chef/src/CF.h index 6c370b3..c32c33e 100644 --- a/chef/src/CF.h +++ b/chef/src/CF.h @@ -11,7 +11,7 @@ #define FPGA_PORTNAME "/dev/ttyUSB0" #define CF_BAUDRATE B115200 // #define PRINTRAWDATA -// + typedef void (*rxHandler)(void); void registerRxHandlerCF(unsigned char code, rxHandler handler); // À utiliser après configureCF(); diff --git a/chef/src/diagnostics.c b/chef/src/diagnostics.c index 042b8c8..a20820f 100644 --- a/chef/src/diagnostics.c +++ b/chef/src/diagnostics.c @@ -97,7 +97,7 @@ bool diagJustRun(void* arg) { void (*fonction)(void) = arg; fonction(); - usleep(1000*1000); + usleep(300*1000); return true; } @@ -160,8 +160,8 @@ void runDiagnostics() i = 3; execDiagnostic("Mot+Cod R AR", diagCodeuse, &i); - execDiagnostic("Fermeture loquet", diagJustRun, &diagSetLoquetFerme); execDiagnostic("Ouverture loquet", diagJustRun, &diagSetLoquetOuvert); + execDiagnostic("Fermeture loquet", diagJustRun, &diagSetLoquetFerme); execDiagnostic("Reset barillet", diagJustRun, &barilletReset); execDiagnostic("T+1 barillet", diagJustRun, &barilletSuivant); execDiagnostic("T+2 barillet", diagJustRun, &barilletSkip); diff --git a/chef/src/diagnostics.h b/chef/src/diagnostics.h index 6f21b25..3235afa 100644 --- a/chef/src/diagnostics.h +++ b/chef/src/diagnostics.h @@ -10,7 +10,7 @@ #define DIAGNOSTIC_TENSION_TEST 3 #define DIAGNOSTIC_CODEUSES_DIFF_MIN 100 -#define DIAGNOSTIC_TEMPS_ROTATION 250 +#define DIAGNOSTIC_TEMPS_ROTATION 500 typedef bool (*diagnosticFunc)(void* arg); diff --git a/chef/src/dimensions.h b/chef/src/dimensions.h index 2f30e0f..1ddc7bd 100644 --- a/chef/src/dimensions.h +++ b/chef/src/dimensions.h @@ -21,7 +21,7 @@ #define MOTOR_CONTROLLER_ALIMENTATION 24.0 // V (from elec) #define MOTOR_CONTROLLER_REFERENCE 5 // V (from wiring) #define MOTOR_SATURATION_MIN 0 // V (from random) -#define MOTOR_SATURATION_MAX 12.0 // V (from testing) +#define MOTOR_SATURATION_MAX 3.0 // V (from testing) #define PWM_MAX 3.3 // V (from FPGA datasheet) #define CODER_RESOLUTION 370.0 // cycles/motor rev #define CODER_DATA_FACTOR 4.0 // increments/motor cycles @@ -38,8 +38,8 @@ #define O_DIR_ECART_MIN (5.0 / 360.0 * 2.0 * M_PI) // rad #define O_DIR_ECART_MAX (25.0 / 360.0 * 2.0 * M_PI) // rad #define O_ECART_MAX (25.0 / 360.0 * 2.0 * M_PI) // rad -#define O_GAIN 3.0 -#define P 7.0 +#define O_GAIN 5.0 +#define P 5.0 #define I 0.0 #define D 0.0 diff --git a/chef/src/lcd.c b/chef/src/lcd.c index cd122e9..78d8478 100644 --- a/chef/src/lcd.c +++ b/chef/src/lcd.c @@ -21,6 +21,19 @@ void initLCD() pinMode(LCD_ON_PIN, OUTPUT); } +void eraseLCD() +{ + lockLCD(); + sendLCD(0x01, LCD_MODE_CMD); + sendLCD(0x02, LCD_MODE_CMD); + + for (int i = 0; i < LCD_NB_TOTAL; i++) { + virtual[i] = ' '; + } + unlockLCD(); +} + + void onLCD() { digitalWrite(LCD_ON_PIN, LOW); @@ -32,7 +45,7 @@ void onLCD() sendLCD(0x06, LCD_MODE_CMD); // Cursor move direction sendLCD(0x0C, LCD_MODE_CMD); // Blink Off sendLCD(0x28, LCD_MODE_CMD); // Data length, number of lines, font size - clearLCD(); + eraseLCD(); delay(50); } @@ -57,14 +70,8 @@ void resetLCD() void clearLCD() { - lockLCD(); - sendLCD(0x01, LCD_MODE_CMD); - sendLCD(0x02, LCD_MODE_CMD); - - for (int i = 0; i < LCD_NB_TOTAL; i++) { - virtual[i] = ' '; - } - unlockLCD(); + offLCD(); + onLCD(); } void gotoLCD(uint8_t line) diff --git a/simu/simu.m b/simu/simu.m index 04cfc8c..fdbbd4e 100644 --- a/simu/simu.m +++ b/simu/simu.m @@ -3,7 +3,7 @@ SIMULATION = 0; % Paramètres de lecture DIRNAME = "/home/geoffrey/CdF/cdf2018-principal/log/"; -FILENAME = "000471.csv"; +FILENAME = "000655.csv"; PATH = DIRNAME + FILENAME; % Paramètres de simulation @@ -33,7 +33,7 @@ motorNominalTension = 24.0; % V (from datasheet) motorControllerAlimentation = 24.0; % V (from elec) motorControllerReference = 5; % V (from wiring) motorSaturationMin = 0; % V (from random) -motorSaturationMax = 12.0; % V (from testing) +motorSaturationMax = 3.0; % V (from testing) pwmMax = 3.3; % V (from FPGA datasheet) coderResolution = 370.0; % cycles/motor rev coderDataFactor = 4.0; % increments/motor cycles @@ -51,8 +51,8 @@ dDirEcartMax = 10.0; % mm oDirEcartMin = (5.0 / 360.0 * 2.0 * pi); % rad oDirEcartMax = (25.0 / 360.0 * 2.0 * pi); % rad oEcartMax = (25.0 / 360.0 * 2.0 * pi); % rad -oGain = 3.0; -P = 7.0; +oGain = 5.0; +P = 5.0; I = 0.0; D = 0.0; @@ -130,13 +130,15 @@ legend("Gauche", "Droite", "Err. gauche", "Err. droite"); % Distance p = subplot(2, 2, 3); hold on; -timeGraph(["dDirEcart", "dErr"]); +%timeGraph(["dDirEcart", "dErr"]); +timeGraph(["dDirEcart", "dErr", "secFront", "secBack"]); addLimitline(p, dDirEcartMin); addLimitline(p, dDirEcartMax); title("Distance"); xlabel("Temps (s)"); ylabel("Distance (mm)"); -legend("Ecart direction", "Err. retenue"); +%legend("Ecart direction", "Err. retenue"); +legend("Ecart direction", "Err. retenue", "Distance avant", "Distance arrière"); % Rotation p = subplot(2, 2, 4);