From 5d646717fe232d6cecd178bcce559291049676e3 Mon Sep 17 00:00:00 2001 From: Sean Kelly Date: Thu, 13 Apr 2017 19:43:16 -0700 Subject: [PATCH] Support for BigQuad deck as a CRAZYFLIE2 variant Supported features in this commit: - Mag enabled (both CRAZYFLIE2 and CRAZYFLIE2BQ) - Brushless motors - ESC passthrough for BLHeli programming - CPPM Rx input - VBat sensor - Current sensor - GPS Tx/Rx pins enabled - I2C SDA/SCL enabled as UART1 (SDA = Rx, SCL = Tx) --- src/main/drivers/timer.c | 5 +- src/main/target/CRAZYFLIE2/CRAZYFLIE2BQ.mk | 1 + src/main/target/CRAZYFLIE2/target.c | 20 +++---- src/main/target/CRAZYFLIE2/target.h | 61 +++++++++++++++------- 4 files changed, 58 insertions(+), 29 deletions(-) create mode 100644 src/main/target/CRAZYFLIE2/CRAZYFLIE2BQ.mk diff --git a/src/main/drivers/timer.c b/src/main/drivers/timer.c index 58995478f..050600cb0 100755 --- a/src/main/drivers/timer.c +++ b/src/main/drivers/timer.c @@ -680,6 +680,9 @@ _TIM_IRQ_HANDLER(TIM1_TRG_COM_TIM11_IRQHandler, 11); #if USED_TIMERS & TIM_N(12) _TIM_IRQ_HANDLER(TIM8_BRK_TIM12_IRQHandler, 12); #endif +#if USED_TIMERS & TIM_N(14) +_TIM_IRQ_HANDLER(TIM8_TRG_COM_TIM14_IRQHandler, 14); +#endif #if USED_TIMERS & TIM_N(15) _TIM_IRQ_HANDLER(TIM1_BRK_TIM15_IRQHandler, 15); #endif @@ -856,4 +859,4 @@ uint16_t timerGetPrescalerByDesiredMhz(TIM_TypeDef *tim, uint16_t mhz) uint16_t timerGetPeriodByPrescaler(TIM_TypeDef *tim, uint16_t prescaler, uint32_t hertz) { return ((uint16_t)((timerClock(tim) / (prescaler + 1)) / hertz)); -} \ No newline at end of file +} diff --git a/src/main/target/CRAZYFLIE2/CRAZYFLIE2BQ.mk b/src/main/target/CRAZYFLIE2/CRAZYFLIE2BQ.mk new file mode 100644 index 000000000..51a468c6f --- /dev/null +++ b/src/main/target/CRAZYFLIE2/CRAZYFLIE2BQ.mk @@ -0,0 +1 @@ +# CRAZYFLIE2BQ is a VARIANT of CRAZYFLIE2 with custom config for the BigQuad expansion deck (https://wiki.bitcraze.io/projects:crazyflie2:expansionboards:bigquad) diff --git a/src/main/target/CRAZYFLIE2/target.c b/src/main/target/CRAZYFLIE2/target.c index 264dda66a..ef71338a4 100644 --- a/src/main/target/CRAZYFLIE2/target.c +++ b/src/main/target/CRAZYFLIE2/target.c @@ -21,18 +21,20 @@ #include "drivers/io.h" #include "drivers/timer.h" +#include "drivers/timer_def.h" #include "drivers/dma.h" const timerHardware_t timerHardware[USABLE_TIMER_CHANNEL_COUNT] = { -#ifndef CRAZYFLIE2_USE_BIG_QUAD_DECK - { TIM2, IO_TAG(PB11), TIM_Channel_4, TIM_USE_MOTOR, 1, GPIO_AF_TIM2, NULL, 0, 0 }, // PWM2 - OUT2 (Motor 2) - { TIM2, IO_TAG(PA1), TIM_Channel_2, TIM_USE_MOTOR, 1, GPIO_AF_TIM2, NULL, 0, 0 }, // PWM1 - OUT1 (Motor 1) - { TIM2, IO_TAG(PA15), TIM_Channel_1, TIM_USE_MOTOR, 1, GPIO_AF_TIM2, NULL, 0, 0 }, // PWM3 - OUT3 (Motor 3) - { TIM4, IO_TAG(PB9), TIM_Channel_4, TIM_USE_MOTOR, 1, GPIO_AF_TIM4, NULL, 0, 0 }, // PWM4 - OUT4 (Motor 4) +#if defined(CRAZYFLIE2BQ) + DEF_TIM(TIM14, CH1, PA7, TIM_USE_PPM, TIMER_INPUT_ENABLED, 0 ), // PPM IN + DEF_TIM(TIM3, CH1, PB4, TIM_USE_MOTOR, TIMER_OUTPUT_ENABLED, 0 ), // PWM1 - OUT1 (Motor 1) + DEF_TIM(TIM2, CH3, PA2, TIM_USE_MOTOR, TIMER_OUTPUT_ENABLED, 0 ), // PWM2 - OUT2 (Motor 2) + DEF_TIM(TIM3, CH2, PB5, TIM_USE_MOTOR, TIMER_OUTPUT_ENABLED, 0 ), // PWM3 - OUT3 (Motor 3) + DEF_TIM(TIM2, CH4, PA3, TIM_USE_MOTOR, TIMER_OUTPUT_ENABLED, 0 ), // PWM4 - OUT4 (Motor 4) #else - { TIM3, IO_TAG(PB4), TIM_Channel_1, TIM_USE_MOTOR, 1, GPIO_AF_TIM3, NULL, 0, 0 }, // PWM2 - OUT2 (Motor 2) - { TIM2, IO_TAG(PA2), TIM_Channel_3, TIM_USE_MOTOR, 1, GPIO_AF_TIM2, NULL, 0, 0 }, // PWM1 - OUT1 (Motor 1) - { TIM3, IO_TAG(PB5), TIM_Channel_2, TIM_USE_MOTOR, 1, GPIO_AF_TIM3, NULL, 0, 0 }, // PWM3 - OUT3 (Motor 3) - { TIM2, IO_TAG(PA3), TIM_Channel_4, TIM_USE_MOTOR, 1, GPIO_AF_TIM2, NULL, 0, 0 }, // PWM4 - OUT4 (Motor 4) + DEF_TIM(TIM2, CH4, PB11, TIM_USE_MOTOR, TIMER_OUTPUT_ENABLED, 0), // PWM1 - OUT1 (Motor 1) + DEF_TIM(TIM2, CH2, PA1, TIM_USE_MOTOR, TIMER_OUTPUT_ENABLED, 0), // PWM2 - OUT2 (Motor 2) + DEF_TIM(TIM2, CH1, PA15, TIM_USE_MOTOR, TIMER_OUTPUT_ENABLED, 0), // PWM3 - OUT3 (Motor 3) + DEF_TIM(TIM4, CH4, PB9, TIM_USE_MOTOR, TIMER_OUTPUT_ENABLED, 0), // PWM4 - OUT4 (Motor 4) #endif }; diff --git a/src/main/target/CRAZYFLIE2/target.h b/src/main/target/CRAZYFLIE2/target.h index 38099f597..7ce1900bd 100644 --- a/src/main/target/CRAZYFLIE2/target.h +++ b/src/main/target/CRAZYFLIE2/target.h @@ -26,21 +26,21 @@ #pragma once +#if defined(CRAZYFLIE2BQ) +#define TARGET_BOARD_IDENTIFIER "CFBQ" +#define USBD_PRODUCT_STRING "Crazyflie 2.0 (BigQuad Deck)" +#else #define TARGET_BOARD_IDENTIFIER "CF20" - #define USBD_PRODUCT_STRING "Crazyflie 2.0" - -// Uncomment this define to build for the Crazyflie -// using the BigQuad expansion deck -//#define CRAZYFLIE2_USE_BIG_QUAD_DECK +#endif #define USABLE_TIMER_CHANNEL_COUNT 14 -#ifndef CRAZYFLIE2_USE_BIG_QUAD_DECK -#define USED_TIMERS ( TIM_N(2) | TIM_N(4) ) -#define BRUSHED_MOTORS + +#if defined(CRAZYFLIE2BQ) +#define USED_TIMERS ( TIM_N(2) | TIM_N(3) | TIM_N(14) ) #else -#define USED_TIMERS ( TIM_N(2) | TIM_N(3) ) -#endif //CRAZYFLIE2_USE_BIG_QUAD_DECK +#define USED_TIMERS ( TIM_N(2) | TIM_N(4) ) +#endif #define LED0 PD2 #define LED1 PC0 @@ -55,19 +55,25 @@ #define USE_VCP -#define USE_UART2 -#define UART2_TX_PIN PA1 -#define UART2_RX_PIN PA3 +#if defined(CRAZYFLIE2BQ) +#define USE_UART1 +#define UART1_TX_PIN PB6 +#define UART1_RX_PIN PB7 #define USE_UART3 #define UART3_TX_PIN PC10 #define UART3_RX_PIN PC11 +#endif #define USE_UART6 #define UART6_TX_PIN PC6 #define UART6_RX_PIN PC7 +#if defined(CRAZYFLIE2BQ) #define SERIAL_PORT_COUNT 4 +#else +#define SERIAL_PORT_COUNT 2 +#endif #define USE_I2C #define USE_I2C_DEVICE_3 @@ -85,17 +91,34 @@ #define USE_ACC_MPU6500 #define ACC_MPU6500_ALIGN CW270_DEG -// Mag isn't working quite right -- disabling it for now -//#define MAG -//#define USE_MPU9250_MAG // Enables bypass configuration on the MPU9250 I2C bus -//#define USE_MAG_AK8963 -//#define MAG_AK8963_ALIGN CW270_DEG +#define MAG +#define USE_MPU9250_MAG // Enables bypass configuration on the MPU9250 I2C bus +#define USE_MAG_AK8963 +#define MAG_AK8963_ALIGN CW270_DEG #define USE_EXTI #define MPU_INT_EXTI PC13 #define USE_SERIALRX_TARGET_CUSTOM -#define DEFAULT_RX_FEATURE FEATURE_RX_SERIAL #define SERIALRX_UART SERIAL_PORT_USART6 #define SERIALRX_PROVIDER SERIALRX_TARGET_CUSTOM #define RX_CHANNELS_TAER + +#if defined(CRAZYFLIE2BQ) +#define DEFAULT_RX_FEATURE FEATURE_RX_PPM +#else +#define DEFAULT_RX_FEATURE FEATURE_RX_SERIAL +#endif + +#if defined(CRAZYFLIE2BQ) +#define USE_SERIAL_4WAY_BLHELI_INTERFACE + +#define DEFAULT_VOLTAGE_METER_SOURCE VOLTAGE_METER_ADC +#define DEFAULT_CURRENT_METER_SOURCE CURRENT_METER_ADC +#define USE_ADC +#define ADC_INSTANCE ADC1 +#define CURRENT_METER_ADC_PIN PA5 +#define VBAT_ADC_PIN PA6 +#else +#define BRUSHED_MOTORS +#endif