Skip to content
Snippets Groups Projects
Verified Commit 8378d295 authored by Thomas Lambert's avatar Thomas Lambert :helicopter:
Browse files

fix: better offset and true calib

This commit adapts the calibration so it reflects the angles properly.
Note that the left wing sensor for the downstream module is not working.

It was also necessary to add a small offset to the first motor to keep
them more or less in sync. This offset seems to work quite decently.
parent 8d284d56
No related branches found
No related tags found
No related merge requests found
......@@ -50,7 +50,7 @@ void Calibrate() {
gEsc2.write(0);
Serial.println("[INFO]: Calibration done.");
Serial.println("Maxium wing posiions are: ");
Serial.println("Maximum wing positions are: ");
PrintArray(gMaxWingPos);
Serial.println("Offsets are: ");
......@@ -60,6 +60,10 @@ void Calibrate() {
}
}
Serial.println("[INPUT]: Start acquisition then press 'y' to begin.");
while (Serial.available() == 0) {} // Wait for serial input
// Flush Serial before continuing
while (Serial.available()) {
Serial.read();
......
......@@ -58,14 +58,14 @@
#define ENC_ORIENT \
{ 1, -1, 1, -1 } // Encoder orientation
#define MAX_WING_POS \
{ 222.1, 117.77, 117, 117 } // Maximum wing angle (returned by encoder value)
#define TRUE_MAX_ANGLE 38.07 // Maximum wing angle (measured on setup)
{ 4095, 1317, 0, 1494 } // Maximum wing angle (returned by encoder value)
#define TRUE_MAX_ANGLE 38.07 // Maximum wing angle (measured on setup)
/*******************************************************************************
Globals (for things that I can change manually)
*******************************************************************************/
const boolean gSKIP_CALIB = false; // Skip calibration or not
const boolean gSKIP_CALIB = true; // Skip calibration or not
// Constant values that can be tweaked here or in the ESC before run
const uint16_t gMAX_SIG = 2000; // Max signal to the ESC [ms]
......@@ -75,7 +75,7 @@ const uint16_t gMAX_RPM = 3000; // Motor maximum RPM (set in ESC)
const uint16_t gMIN_RPM = 750; // Motor minimum RPM (set in ESC)
const uint8_t gMAX_ESC_VAL = 160; // Value at which motor is at max RPM
const uint8_t gMIN_ESC_VAL = 40; // Min value for ESC to start motor (trial-error)
const uint8_t gESC_OFFSET = 4; // Offset to add to ESC 2 to sync them
const uint8_t gESC_OFFSET = 1; // Offset to add to ESC 1 to sync them
const uint8_t gCSN_PINS[] = CSN_PINS; // Encoder Chip Select pins
const int8_t gENC_ORIENT[] = ENC_ORIENT; // Encoder orientation
......@@ -89,7 +89,7 @@ Servo gEsc2; // ESC for aft motor
uint8_t gEsc_val = 0; // ESC angle (to use with the Servo library) [0-180]
String gMode; // Mode of operation
uint16_t gAngleOffset[] = { 0, 0, 0, 0 }; // Encoder offset (prevent wrap-around)
uint16_t gAngleOffset[] = { 0, 0, 1, 0 }; // Encoder offset (prevent wrap-around)
uint16_t gMaxWingPos[] = MAX_WING_POS; // Encoder maximum recorder position
......@@ -172,8 +172,8 @@ void loop() {
}
// Write value to ESCs
gEsc1.write(gEsc_val);
gEsc2.write(gEsc_val + gESC_OFFSET);
gEsc1.write(gEsc_val + gESC_OFFSET);
gEsc2.write(gEsc_val);
// Read value from rotary encoders
for (int i = 0; i < sizeof(gCSN_PINS); i++) {
......@@ -234,7 +234,7 @@ void StopMotor(int old_esc_val) {
Serial.println("[INFO] MOTOR STOP INITIATED");
if (old_esc_val > gMIN_ESC_VAL) {
if (old_esc_val > gMIN_ESC_VAL + 10) {
Serial.println("[INFO] Slowing down motor for 3 sec...");
gEsc1.write(gMIN_ESC_VAL);
gEsc2.write(gMIN_ESC_VAL);
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment