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)
This commit is contained in:
Sean Kelly 2017-04-13 19:43:16 -07:00
parent 1c1cebc448
commit 5d646717fe
4 changed files with 58 additions and 29 deletions

View File

@ -680,6 +680,9 @@ _TIM_IRQ_HANDLER(TIM1_TRG_COM_TIM11_IRQHandler, 11);
#if USED_TIMERS & TIM_N(12) #if USED_TIMERS & TIM_N(12)
_TIM_IRQ_HANDLER(TIM8_BRK_TIM12_IRQHandler, 12); _TIM_IRQ_HANDLER(TIM8_BRK_TIM12_IRQHandler, 12);
#endif #endif
#if USED_TIMERS & TIM_N(14)
_TIM_IRQ_HANDLER(TIM8_TRG_COM_TIM14_IRQHandler, 14);
#endif
#if USED_TIMERS & TIM_N(15) #if USED_TIMERS & TIM_N(15)
_TIM_IRQ_HANDLER(TIM1_BRK_TIM15_IRQHandler, 15); _TIM_IRQ_HANDLER(TIM1_BRK_TIM15_IRQHandler, 15);
#endif #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) uint16_t timerGetPeriodByPrescaler(TIM_TypeDef *tim, uint16_t prescaler, uint32_t hertz)
{ {
return ((uint16_t)((timerClock(tim) / (prescaler + 1)) / hertz)); return ((uint16_t)((timerClock(tim) / (prescaler + 1)) / hertz));
} }

View File

@ -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)

View File

@ -21,18 +21,20 @@
#include "drivers/io.h" #include "drivers/io.h"
#include "drivers/timer.h" #include "drivers/timer.h"
#include "drivers/timer_def.h"
#include "drivers/dma.h" #include "drivers/dma.h"
const timerHardware_t timerHardware[USABLE_TIMER_CHANNEL_COUNT] = { const timerHardware_t timerHardware[USABLE_TIMER_CHANNEL_COUNT] = {
#ifndef CRAZYFLIE2_USE_BIG_QUAD_DECK #if defined(CRAZYFLIE2BQ)
{ TIM2, IO_TAG(PB11), TIM_Channel_4, TIM_USE_MOTOR, 1, GPIO_AF_TIM2, NULL, 0, 0 }, // PWM2 - OUT2 (Motor 2) DEF_TIM(TIM14, CH1, PA7, TIM_USE_PPM, TIMER_INPUT_ENABLED, 0 ), // PPM IN
{ TIM2, IO_TAG(PA1), TIM_Channel_2, TIM_USE_MOTOR, 1, GPIO_AF_TIM2, NULL, 0, 0 }, // PWM1 - OUT1 (Motor 1) DEF_TIM(TIM3, CH1, PB4, TIM_USE_MOTOR, TIMER_OUTPUT_ENABLED, 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) DEF_TIM(TIM2, CH3, PA2, TIM_USE_MOTOR, TIMER_OUTPUT_ENABLED, 0 ), // PWM2 - OUT2 (Motor 2)
{ TIM4, IO_TAG(PB9), TIM_Channel_4, TIM_USE_MOTOR, 1, GPIO_AF_TIM4, NULL, 0, 0 }, // PWM4 - OUT4 (Motor 4) 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 #else
{ TIM3, IO_TAG(PB4), TIM_Channel_1, TIM_USE_MOTOR, 1, GPIO_AF_TIM3, NULL, 0, 0 }, // PWM2 - OUT2 (Motor 2) DEF_TIM(TIM2, CH4, PB11, TIM_USE_MOTOR, TIMER_OUTPUT_ENABLED, 0), // PWM1 - OUT1 (Motor 1)
{ TIM2, IO_TAG(PA2), TIM_Channel_3, TIM_USE_MOTOR, 1, GPIO_AF_TIM2, NULL, 0, 0 }, // PWM1 - OUT1 (Motor 1) DEF_TIM(TIM2, CH2, PA1, TIM_USE_MOTOR, TIMER_OUTPUT_ENABLED, 0), // PWM2 - OUT2 (Motor 2)
{ TIM3, IO_TAG(PB5), TIM_Channel_2, TIM_USE_MOTOR, 1, GPIO_AF_TIM3, NULL, 0, 0 }, // PWM3 - OUT3 (Motor 3) DEF_TIM(TIM2, CH1, PA15, TIM_USE_MOTOR, TIMER_OUTPUT_ENABLED, 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(TIM4, CH4, PB9, TIM_USE_MOTOR, TIMER_OUTPUT_ENABLED, 0), // PWM4 - OUT4 (Motor 4)
#endif #endif
}; };

View File

@ -26,21 +26,21 @@
#pragma once #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 TARGET_BOARD_IDENTIFIER "CF20"
#define USBD_PRODUCT_STRING "Crazyflie 2.0" #define USBD_PRODUCT_STRING "Crazyflie 2.0"
#endif
// Uncomment this define to build for the Crazyflie
// using the BigQuad expansion deck
//#define CRAZYFLIE2_USE_BIG_QUAD_DECK
#define USABLE_TIMER_CHANNEL_COUNT 14 #define USABLE_TIMER_CHANNEL_COUNT 14
#ifndef CRAZYFLIE2_USE_BIG_QUAD_DECK
#define USED_TIMERS ( TIM_N(2) | TIM_N(4) ) #if defined(CRAZYFLIE2BQ)
#define BRUSHED_MOTORS #define USED_TIMERS ( TIM_N(2) | TIM_N(3) | TIM_N(14) )
#else #else
#define USED_TIMERS ( TIM_N(2) | TIM_N(3) ) #define USED_TIMERS ( TIM_N(2) | TIM_N(4) )
#endif //CRAZYFLIE2_USE_BIG_QUAD_DECK #endif
#define LED0 PD2 #define LED0 PD2
#define LED1 PC0 #define LED1 PC0
@ -55,19 +55,25 @@
#define USE_VCP #define USE_VCP
#define USE_UART2 #if defined(CRAZYFLIE2BQ)
#define UART2_TX_PIN PA1 #define USE_UART1
#define UART2_RX_PIN PA3 #define UART1_TX_PIN PB6
#define UART1_RX_PIN PB7
#define USE_UART3 #define USE_UART3
#define UART3_TX_PIN PC10 #define UART3_TX_PIN PC10
#define UART3_RX_PIN PC11 #define UART3_RX_PIN PC11
#endif
#define USE_UART6 #define USE_UART6
#define UART6_TX_PIN PC6 #define UART6_TX_PIN PC6
#define UART6_RX_PIN PC7 #define UART6_RX_PIN PC7
#if defined(CRAZYFLIE2BQ)
#define SERIAL_PORT_COUNT 4 #define SERIAL_PORT_COUNT 4
#else
#define SERIAL_PORT_COUNT 2
#endif
#define USE_I2C #define USE_I2C
#define USE_I2C_DEVICE_3 #define USE_I2C_DEVICE_3
@ -85,17 +91,34 @@
#define USE_ACC_MPU6500 #define USE_ACC_MPU6500
#define ACC_MPU6500_ALIGN CW270_DEG #define ACC_MPU6500_ALIGN CW270_DEG
// Mag isn't working quite right -- disabling it for now #define MAG
//#define MAG #define USE_MPU9250_MAG // Enables bypass configuration on the MPU9250 I2C bus
//#define USE_MPU9250_MAG // Enables bypass configuration on the MPU9250 I2C bus #define USE_MAG_AK8963
//#define USE_MAG_AK8963 #define MAG_AK8963_ALIGN CW270_DEG
//#define MAG_AK8963_ALIGN CW270_DEG
#define USE_EXTI #define USE_EXTI
#define MPU_INT_EXTI PC13 #define MPU_INT_EXTI PC13
#define USE_SERIALRX_TARGET_CUSTOM #define USE_SERIALRX_TARGET_CUSTOM
#define DEFAULT_RX_FEATURE FEATURE_RX_SERIAL
#define SERIALRX_UART SERIAL_PORT_USART6 #define SERIALRX_UART SERIAL_PORT_USART6
#define SERIALRX_PROVIDER SERIALRX_TARGET_CUSTOM #define SERIALRX_PROVIDER SERIALRX_TARGET_CUSTOM
#define RX_CHANNELS_TAER #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