diff --git a/crazyflie_software/crazyflie-firmware-2021.06/src/drivers/interface/motors.h b/crazyflie_software/crazyflie-firmware-2021.06/src/drivers/interface/motors.h index a62d121bd522c9fa9280c34f01b7367efa18843a..c65de17c50536e5ad64076b7580dcf178173846d 100644 --- a/crazyflie_software/crazyflie-firmware-2021.06/src/drivers/interface/motors.h +++ b/crazyflie_software/crazyflie-firmware-2021.06/src/drivers/interface/motors.h @@ -116,6 +116,18 @@ #define MOTORS_BL_POLARITY TIM_OCPolarity_Low #endif +// ------------- uCart 23 Drone --------------------------- +#define BLMC_PERIOD_uCart23 0.0025 // 2.5ms = 400Hz +#define MOTORS_HIGH_PERIOD_ZERO_uCart23 0.001 // 1ms for zero throttle + +#define MOTORS_BL_PWM_PRESCALE_RAW_uCart23 (uint32_t)((TIM_CLOCK_HZ/0xFFFF) * BLMC_PERIOD_uCart23 + 1) // +1 is to not end up above 0xFFFF in the end +#define MOTORS_BL_PWM_CNT_FOR_PERIOD_uCart23 (uint32_t)(TIM_CLOCK_HZ * BLMC_PERIOD_uCart23 / MOTORS_BL_PWM_PRESCALE_RAW_uCart23) +#define MOTORS_BL_PWM_CNT_FOR_HIGH_uCart23 (uint32_t)(TIM_CLOCK_HZ * MOTORS_HIGH_PERIOD_ZERO_uCart23 / MOTORS_BL_PWM_PRESCALE_RAW_uCart23) +#define MOTORS_BL_PWM_PERIOD_uCart23 MOTORS_BL_PWM_CNT_FOR_PERIOD_uCart23 +#define MOTORS_BL_PWM_PRESCALE_uCart23 (uint16_t)(MOTORS_BL_PWM_PRESCALE_RAW_uCart23 - 1) +#define MOTORS_BL_POLARITY_uCart23 TIM_OCPolarity_Low +// --------------------------------------------------------- + #define NBR_OF_MOTORS 4 // Motors IDs define #define MOTOR_M1 0 diff --git a/crazyflie_software/crazyflie-firmware-2021.06/src/drivers/src/motors.c b/crazyflie_software/crazyflie-firmware-2021.06/src/drivers/src/motors.c index 24bccfb7349e8a532374994104dc5438ace968cd..18561b1ef2d56a600b7d37cf981ca7236fe6ad96 100644 --- a/crazyflie_software/crazyflie-firmware-2021.06/src/drivers/src/motors.c +++ b/crazyflie_software/crazyflie-firmware-2021.06/src/drivers/src/motors.c @@ -46,12 +46,14 @@ static uint16_t motorsBLConvBitsTo16(uint16_t bits); static uint16_t motorsBLConv16ToBits(uint16_t bits); static uint16_t motorsConvBitsTo16(uint16_t bits); static uint16_t motorsConv16ToBits(uint16_t bits); +static uint16_t motorsConv16ToBits_uCart23(uint16_t bits); uint32_t motor_ratios[] = {0, 0, 0, 0}; void motorsPlayTone(uint16_t frequency, uint16_t duration_msec); void motorsPlayMelody(uint16_t *notes); void motorsBeep(int id, bool enable, uint16_t frequency, uint16_t ratio); +void motorsConfigureESC(); #include "motors_def_cf2.c" @@ -67,26 +69,31 @@ static bool isInit = false; static uint16_t motorsBLConvBitsTo16(uint16_t bits) { - return (0xFFFF * (bits - MOTORS_BL_PWM_CNT_FOR_HIGH) / MOTORS_BL_PWM_CNT_FOR_HIGH); + return motorsConv16ToBits_uCart23(bits); //(0xFFFF * (bits - MOTORS_BL_PWM_CNT_FOR_HIGH) / MOTORS_BL_PWM_CNT_FOR_HIGH); } static uint16_t motorsBLConv16ToBits(uint16_t bits) { - return (MOTORS_BL_PWM_CNT_FOR_HIGH + ((bits * MOTORS_BL_PWM_CNT_FOR_HIGH) / 0xFFFF)); + return motorsConv16ToBits_uCart23(bits); //(MOTORS_BL_PWM_CNT_FOR_HIGH + ((bits * MOTORS_BL_PWM_CNT_FOR_HIGH) / 0xFFFF)); } static uint16_t motorsConvBitsTo16(uint16_t bits) { - return ((bits) << (16 - MOTORS_PWM_BITS)); + return motorsConv16ToBits_uCart23(bits); //((bits) << (16 - MOTORS_PWM_BITS)); } static uint16_t motorsConv16ToBits(uint16_t bits) { - return ((bits) >> (16 - MOTORS_PWM_BITS) & ((1 << MOTORS_PWM_BITS) - 1)); + return motorsConv16ToBits_uCart23(bits); //((bits) >> (16 - MOTORS_PWM_BITS) & ((1 << MOTORS_PWM_BITS) - 1)); +} + +static uint16_t motorsConv16ToBits_uCart23(uint16_t bits) +{ + return (MOTORS_BL_PWM_CNT_FOR_HIGH_uCart23 + ((bits * MOTORS_BL_PWM_CNT_FOR_HIGH_uCart23) / 0xFFFF)); } // We have data that maps PWM to thrust at different supply voltage levels. -// However, it is not the PWM that drives the motors but the voltage and +// However, it is not the PWM that drives the moStors but the voltage and // amps (= power). With the PWM it is possible to simulate different // voltage levels. The assumption is that the voltage used will be an // procentage of the supply voltage, we assume that 50% PWM will result in @@ -257,10 +264,12 @@ bool motorsTest(void) if (motorMap[i]->drvType == BRUSHED) { #ifdef ACTIVATE_STARTUP_SOUND + /* motorsBeep(MOTORS[i], true, testsound[i], (uint16_t)(MOTORS_TIM_BEEP_CLK_FREQ / A4)/ 20); vTaskDelay(M2T(MOTORS_TEST_ON_TIME_MS)); motorsBeep(MOTORS[i], false, 0, 0); - vTaskDelay(M2T(MOTORS_TEST_DELAY_TIME_MS)); + vTaskDelay(M2T(MOTORS_TEST_DELAY_TIME_MS));*/ + motorsConfigureESC(); #else motorsSetRatio(MOTORS[i], MOTORS_TEST_RATIO); vTaskDelay(M2T(MOTORS_TEST_ON_TIME_MS)); @@ -346,6 +355,45 @@ void motorsBeep(int id, bool enable, uint16_t frequency, uint16_t ratio) } +void motorsConfigureESC() { + + // Set maximum throttle, 100% duty cycle + motorMap[0]->setCompare(motorMap[0]->tim, 0); + motorMap[1]->setCompare(motorMap[1]->tim, 0); + motorMap[2]->setCompare(motorMap[2]->tim, 0); + motorMap[3]->setCompare(motorMap[3]->tim, 0); + vTaskDelay(M2T(20)); // wait 2 ms + + + + + motorMap[0]->setCompare(motorMap[0]->tim, motorsConv16ToBits_uCart23(65535)); + vTaskDelay(M2T(2)); // wait 2 ms + motorMap[0]->setCompare(motorMap[0]->tim, motorsConv16ToBits_uCart23(0)); + vTaskDelay(M2T(20)); // wait 2 msS + + motorMap[1]->setCompare(motorMap[1]->tim, motorsConv16ToBits_uCart23(65535)); + vTaskDelay(M2T(2)); // wait 2 ms + motorMap[1]->setCompare(motorMap[1]->tim, motorsConv16ToBits_uCart23(0)); + vTaskDelay(M2T(20)); // wait 2 ms + + motorMap[2]->setCompare(motorMap[2]->tim, motorsConv16ToBits_uCart23(65535)); + vTaskDelay(M2T(2)); // wait 2 ms + motorMap[2]->setCompare(motorMap[2]->tim, motorsConv16ToBits_uCart23(0)); + vTaskDelay(M2T(20)); // wait 2 ms + + motorMap[3]->setCompare(motorMap[3]->tim, motorsConv16ToBits_uCart23(65535)); + vTaskDelay(M2T(2)); // wait 2 ms + motorMap[3]->setCompare(motorMap[3]->tim, motorsConv16ToBits_uCart23(0)); + vTaskDelay(M2T(20)); // wait 2 ms + // set min throttle: duty cycle 1 ms for 2ms + + + + +} + + // Play a tone with a given frequency and a specific duration in milliseconds (ms) void motorsPlayTone(uint16_t frequency, uint16_t duration_msec) { diff --git a/crazyflie_software/crazyflie-firmware-2021.06/tools/make/config.mk.example b/crazyflie_software/crazyflie-firmware-2021.06/tools/make/config.mk.example deleted file mode 100644 index 9f4b7c452ec60800306cfcb52011980564c45144..0000000000000000000000000000000000000000 --- a/crazyflie_software/crazyflie-firmware-2021.06/tools/make/config.mk.example +++ /dev/null @@ -1,113 +0,0 @@ -## Copy this file to config.mk and modify to get you personal build configuration - -## Weight of the Crazyflie, including decks. The default setting is a Crazyflie 2.X without decks. -# CFLAGS += -DCF_MASS=0.027f // in kg - -## Force device type string -# CFLAGS += -DDEVICE_TYPE_STRING_FORCE="CF20" - -## Force a sensor implementation to be used -# SENSORS=bosch - -## Set CRTP link to E-SKY receiver -# CFLAGS += -DUSE_ESKYLINK - -## Redirect the console output to the UART -# CFLAGS += -DDEBUG_PRINT_ON_UART - -## Redirect the console output to JLINK (using SEGGER RTT) -# DEBUG_PRINT_ON_SEGGER_RTT = 1 - -## Load a deck driver that has no OW memory -# CFLAGS += -DDECK_FORCE=bcBuzzer - -## Load multiple deck drivers that has no OW memory -# CFLAGS += -DDECK_FORCE=bcBuzzer:bcLedRing - -## Enable biq quad deck features -# CFLAGS += -DENABLE_BQ_DECK -# CFLAGS += -DBQ_DECK_ENABLE_PM -# CFLAGS += -DBQ_DECK_ENABLE_OSD - -## Use morse when flashing the LED to indicate that the Crazyflie is calibrated -# CFLAGS += -DCALIBRATED_LED_MORSE - -## Disable LEDs from turning on/flashing -# CFLAGS += -DTURN_OFF_LEDS - -## Set the default LED Ring effect (if not set, effect 6 will be used) -# CFLAGS += -DLEDRING_DEFAULT_EFFECT=0 - -## Set LED Rings to use less LEDs -# CFLAGS += -DLED_RING_NBR_LEDS=6 - -## Set LED Rings to use less more LEDs (only if board is modified) -# CFLAGS += -DLED_RING_NBR_LEDS=24 - -## Do not send CRTP messages when parameter values are updated -# CFLAGS += -DSILENT_PARAM_UPDATES - -## Turn on monitoring of queue usages -# CFLAGS += -DDEBUG_QUEUE_MONITOR - -## Automatically reboot to bootloader before flashing -# CLOAD_CMDS = -w radio://0/100/2M/E7E7E7E7E7 - -## Set number of anchor in LocoPositioningSystem -# CFLAGS += -DLOCODECK_NR_OF_ANCHORS=8 - -## Set alternative pins for LOCO deck (IRQ=IO_2, RESET=IO_3, default are RX1 and TX1) -# CFLAGS += -DLOCODECK_USE_ALT_PINS - -## Set other pin for reset on the LOCO deck. Only works when LOCODECK_USE_ALT_PINS is set. -# For instance useful with Loco + Lighhouse + Flow decks where IO_3 collides with the Flow deck -# CFLAGS += -DLOCODECK_ALT_PIN_RESET=DECK_GPIO_IO4 - -## Disable Low Interference Mode when using Loco Deck -# CFLAGS += -DLOCODECK_NO_LOW_INTERFERENCE - -## Low interference communication -# Set the 'low interference' 2.4GHz TX power. This power is set when the loco deck is initialized -# Possible power are: +4, 0, -4, -8, -12, -16, -20, -30 -# CFLAGS += -DPLATFORM_NRF51_LOW_INTERFERENCE_TX_POWER_DBM="(-12)" - -## Set alternative pins for uSD-deck. Patch soldering required (CS->RX2(PA3), SCLK->TX1(PC10), MISO->RX1(PC11), MOSI->IO_4(PC12)) -# CFLAGS += -DUSDDECK_USE_ALT_PINS_AND_SPI - -## Use J-Link as Debugger/flasher -# OPENOCD_INTERFACE ?= interface/jlink.cfg -# OPENOCD_TARGET ?= target/stm32f4x.cfg -# OPENOCD_CMDS ?= -c "transport select swd" - -## LPS settings ---------------------------------------------------- -## Set operation mode of the LPS system (auto is default) -## TWR -# CFLAGS += -DLPS_TWR_ENABLE=1 -## TDoA2 -# LPS_TDOA_ENABLE=1 -## TDoA3 -# LPS_TDOA3_ENABLE=1 - -## TDoA 3 - experimental -# Enable 2D positioning. The value (1.2) is the height that the tag will move at. Only use in TDoA 3 -# CFLAGS += -DLPS_2D_POSITION_HEIGHT=1.2 - -## Enable longer range (lower bit rate). Only use in TDoA 3 -# Note: Anchors must also be built with this flag -# CFLAGS += -DLPS_LONGER_RANGE - -## Full LPS TX power. -# CFLAGS += -DLPS_FULL_TX_POWER - -## SDCard test configuration ------------------------------------ -# FATFS_DISKIO_TESTS = 1 # Set to 1 to enable FatFS diskio function tests. Erases card. - -## Brushless handling -# Start disarmed, needs to be armed before being able to fly -# CFLAGS += -DSTART_DISARMED -# IDLE motor drive when armed, 0 = 0%, 65535 = 100% (the motors runs as long as the Crazyflie is armed) -# CFLAGS += -DDEFAULT_IDLE_THRUST=5000 - -## Lighthouse handling -# If lighthouse will need to act as a ground truth (so not entered in the kalman filter) -# CFLAGS += -DLIGHTHOUSE_AS_GROUNDTRUTH