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)
_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));
}
}

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/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
};

View File

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