Skip to content

Commit

Permalink
[board] add support of PWM on AUX and default mag i2c for Tawaki
Browse files Browse the repository at this point in the history
  • Loading branch information
gautierhattenberger committed Oct 8, 2019
1 parent 58deebc commit 0bdcc09
Show file tree
Hide file tree
Showing 4 changed files with 197 additions and 6 deletions.
2 changes: 1 addition & 1 deletion conf/modules/board_tawaki.xml
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@
<define name="IMU_MPU_Y_SIGN" value="-1" cond="ifeq (,$(findstring $(BOARD_TAWAKI_ROTATED),1 TRUE))"/>
<configure name="BMP3_I2C_DEV" value="i2c4" case="upper|lower"/>
<define name="BMP3_SLAVE_ADDR" value="BMP3_I2C_ADDR_ALT"/>
<configure name="MAG_LIS3MDL_I2C_DEV" value="i2c4" case="upper|lower"/>
<configure name="MAG_LIS3MDL_I2C_DEV" default="i2c4" case="upper|lower"/>
<define name="MODULE_LIS3MDL_UPDATE_AHRS"/>
<define name="LIS3MDL_CHAN_X" value="1" cond="ifeq (,$(findstring $(BOARD_TAWAKI_ROTATED),1 TRUE))"/>
<define name="LIS3MDL_CHAN_Y" value="0" cond="ifeq (,$(findstring $(BOARD_TAWAKI_ROTATED),1 TRUE))"/>
Expand Down
30 changes: 30 additions & 0 deletions sw/airborne/arch/chibios/subsystems/actuators/actuators_pwm_arch.c
Original file line number Diff line number Diff line change
Expand Up @@ -124,6 +124,21 @@ void actuators_pwm_arch_init(void)
#ifdef PWM_SERVO_11
gpio_setup_pin_af(PWM_SERVO_11_GPIO, PWM_SERVO_11_PIN, PWM_SERVO_11_AF, true);
#endif
#ifdef PWM_SERVO_12
gpio_setup_pin_af(PWM_SERVO_12_GPIO, PWM_SERVO_12_PIN, PWM_SERVO_12_AF, true);
#endif
#ifdef PWM_SERVO_13
gpio_setup_pin_af(PWM_SERVO_13_GPIO, PWM_SERVO_13_PIN, PWM_SERVO_13_AF, true);
#endif
#ifdef PWM_SERVO_14
gpio_setup_pin_af(PWM_SERVO_14_GPIO, PWM_SERVO_14_PIN, PWM_SERVO_14_AF, true);
#endif
#ifdef PWM_SERVO_15
gpio_setup_pin_af(PWM_SERVO_15_GPIO, PWM_SERVO_15_PIN, PWM_SERVO_15_AF, true);
#endif
#ifdef PWM_SERVO_16
gpio_setup_pin_af(PWM_SERVO_16_GPIO, PWM_SERVO_16_PIN, PWM_SERVO_16_AF, true);
#endif

/*---------------
* Configure PWM
Expand Down Expand Up @@ -190,4 +205,19 @@ void actuators_pwm_commit(void)
#ifdef PWM_SERVO_11
pwmEnableChannel(&PWM_SERVO_11_DRIVER, PWM_SERVO_11_CHANNEL, PWM_CMD_TO_US(actuators_pwm_values[PWM_SERVO_11]));
#endif
#ifdef PWM_SERVO_12
pwmEnableChannel(&PWM_SERVO_12_DRIVER, PWM_SERVO_12_CHANNEL, PWM_CMD_TO_US(actuators_pwm_values[PWM_SERVO_12]));
#endif
#ifdef PWM_SERVO_13
pwmEnableChannel(&PWM_SERVO_13_DRIVER, PWM_SERVO_13_CHANNEL, PWM_CMD_TO_US(actuators_pwm_values[PWM_SERVO_13]));
#endif
#ifdef PWM_SERVO_14
pwmEnableChannel(&PWM_SERVO_14_DRIVER, PWM_SERVO_14_CHANNEL, PWM_CMD_TO_US(actuators_pwm_values[PWM_SERVO_14]));
#endif
#ifdef PWM_SERVO_15
pwmEnableChannel(&PWM_SERVO_15_DRIVER, PWM_SERVO_15_CHANNEL, PWM_CMD_TO_US(actuators_pwm_values[PWM_SERVO_15]));
#endif
#ifdef PWM_SERVO_16
pwmEnableChannel(&PWM_SERVO_16_DRIVER, PWM_SERVO_16_CHANNEL, PWM_CMD_TO_US(actuators_pwm_values[PWM_SERVO_16]));
#endif
}
8 changes: 6 additions & 2 deletions sw/airborne/boards/tawaki/chibios/v1.0/mcuconf.h
Original file line number Diff line number Diff line change
Expand Up @@ -277,11 +277,15 @@
#ifndef STM32_PWM_USE_TIM2
#define STM32_PWM_USE_TIM2 FALSE // keep free if in tickless mode, can be used in systick mode
#endif
#define STM32_PWM_USE_TIM3 FALSE
#ifndef STM32_PWM_USE_TIM3
#define STM32_PWM_USE_TIM3 FALSE // enable for servo 12, 14, 15, 16 on AUX connectors
#endif
#ifndef STM32_PWM_USE_TIM4
#define STM32_PWM_USE_TIM4 TRUE
#endif
#define STM32_PWM_USE_TIM5 FALSE
#ifndef STM32_PWM_USE_TIM5
#define STM32_PWM_USE_TIM5 FALSE // enable for servo 9, 10, 11, 13 on AUX connectors
#endif
#define STM32_PWM_USE_TIM8 FALSE
#define STM32_PWM_USE_TIM9 FALSE
#define STM32_PWM_TIM1_IRQ_PRIORITY 7
Expand Down
163 changes: 160 additions & 3 deletions sw/airborne/boards/tawaki/chibios/v1.0/tawaki.h
Original file line number Diff line number Diff line change
Expand Up @@ -277,10 +277,129 @@
#define PWM_SERVO_8_ACTIVE PWM_OUTPUT_DISABLED
#endif

// TODO PWM on AUX pins
#ifndef USE_PWM9
#define USE_PWM9 0
#endif
#if USE_PWM9
#define PWM_SERVO_9 9
#define PWM_SERVO_9_GPIO GPIOA
#define PWM_SERVO_9_PIN GPIO0
#define PWM_SERVO_9_AF GPIO_AF2
#define PWM_SERVO_9_DRIVER PWMD5
#define PWM_SERVO_9_CHANNEL 0
#define PWM_SERVO_9_ACTIVE PWM_OUTPUT_ACTIVE_HIGH
#else
#define PWM_SERVO_9_ACTIVE PWM_OUTPUT_DISABLED
#endif

#ifndef USE_PWM10
#define USE_PWM10 0
#endif
#if USE_PWM10
#define PWM_SERVO_10 10
#define PWM_SERVO_10_GPIO GPIOA
#define PWM_SERVO_10_PIN GPIO1
#define PWM_SERVO_10_AF GPIO_AF2
#define PWM_SERVO_10_DRIVER PWMD5
#define PWM_SERVO_10_CHANNEL 1
#define PWM_SERVO_10_ACTIVE PWM_OUTPUT_ACTIVE_HIGH
#else
#define PWM_SERVO_10_ACTIVE PWM_OUTPUT_DISABLED
#endif

#ifndef USE_PWM11
#define USE_PWM11 0
#endif
#if USE_PWM11
#define PWM_SERVO_11 11
#define PWM_SERVO_11_GPIO GPIOA
#define PWM_SERVO_11_PIN GPIO2
#define PWM_SERVO_11_AF GPIO_AF2
#define PWM_SERVO_11_DRIVER PWMD5
#define PWM_SERVO_11_CHANNEL 2
#define PWM_SERVO_11_ACTIVE PWM_OUTPUT_ACTIVE_HIGH
#else
#define PWM_SERVO_11_ACTIVE PWM_OUTPUT_DISABLED
#endif

#ifndef USE_PWM12
#define USE_PWM12 0
#endif
#if USE_PWM12
#define PWM_SERVO_12 12
#define PWM_SERVO_12_GPIO GPIOA
#define PWM_SERVO_12_PIN GPIO6
#define PWM_SERVO_12_AF GPIO_AF2
#define PWM_SERVO_12_DRIVER PWMD3
#define PWM_SERVO_12_CHANNEL 0
#define PWM_SERVO_12_ACTIVE PWM_OUTPUT_ACTIVE_HIGH
#else
#define PWM_SERVO_12_ACTIVE PWM_OUTPUT_DISABLED
#endif

#ifndef USE_PWM13
#define USE_PWM13 0
#endif
#if USE_PWM13
#define PWM_SERVO_13 13
#define PWM_SERVO_13_GPIO GPIOA
#define PWM_SERVO_13_PIN GPIO3
#define PWM_SERVO_13_AF GPIO_AF2
#define PWM_SERVO_13_DRIVER PWMD5
#define PWM_SERVO_13_CHANNEL 3
#define PWM_SERVO_13_ACTIVE PWM_OUTPUT_ACTIVE_HIGH
#else
#define PWM_SERVO_13_ACTIVE PWM_OUTPUT_DISABLED
#endif

#ifndef USE_PWM14
#define USE_PWM14 0
#endif
#if USE_PWM14
#define PWM_SERVO_14 14
#define PWM_SERVO_14_GPIO GPIOA
#define PWM_SERVO_14_PIN GPIO7
#define PWM_SERVO_14_AF GPIO_AF2
#define PWM_SERVO_14_DRIVER PWMD3
#define PWM_SERVO_14_CHANNEL 1
#define PWM_SERVO_14_ACTIVE PWM_OUTPUT_ACTIVE_HIGH
#else
#define PWM_SERVO_14_ACTIVE PWM_OUTPUT_DISABLED
#endif

#ifndef USE_PWM15
#define USE_PWM15 0
#endif
#if USE_PWM15
#define PWM_SERVO_15 15
#define PWM_SERVO_15_GPIO GPIOB
#define PWM_SERVO_15_PIN GPIO0
#define PWM_SERVO_15_AF GPIO_AF2
#define PWM_SERVO_15_DRIVER PWMD3
#define PWM_SERVO_15_CHANNEL 2
#define PWM_SERVO_15_ACTIVE PWM_OUTPUT_ACTIVE_HIGH
#else
#define PWM_SERVO_15_ACTIVE PWM_OUTPUT_DISABLED
#endif

// servo index starting at 1, so NB = 8+1
#define ACTUATORS_PWM_NB 9
#ifndef USE_PWM16
#define USE_PWM16 0
#endif
#if USE_PWM16
#define PWM_SERVO_16 16
#define PWM_SERVO_16_GPIO GPIOB
#define PWM_SERVO_16_PIN GPIO1
#define PWM_SERVO_16_AF GPIO_AF2
#define PWM_SERVO_16_DRIVER PWMD3
#define PWM_SERVO_16_CHANNEL 3
#define PWM_SERVO_16_ACTIVE PWM_OUTPUT_ACTIVE_HIGH
#else
#define PWM_SERVO_16_ACTIVE PWM_OUTPUT_DISABLED
#endif

// servo index starting at 1 + regular servos + aux servos
// so NB = 1+8+8
#define ACTUATORS_PWM_NB 17


#ifdef STM32_PWM_USE_TIM1
Expand All @@ -302,6 +421,25 @@
0 \
}

#ifdef STM32_PWM_USE_TIM3
#define PWM_CONF_TIM3 STM32_PWM_USE_TIM3
#else
#define PWM_CONF_TIM3 1
#endif
#define PWM_CONF3_DEF { \
PWM_FREQUENCY, \
PWM_FREQUENCY/TIM3_SERVO_HZ, \
NULL, \
{ \
{ PWM_SERVO_12_ACTIVE, NULL }, \
{ PWM_SERVO_14_ACTIVE, NULL }, \
{ PWM_SERVO_15_ACTIVE, NULL }, \
{ PWM_SERVO_16_ACTIVE, NULL }, \
}, \
0, \
0 \
}

#ifdef STM32_PWM_USE_TIM4
#define PWM_CONF_TIM4 STM32_PWM_USE_TIM4
#else
Expand All @@ -321,6 +459,25 @@
0 \
}

#ifdef STM32_PWM_USE_TIM5
#define PWM_CONF_TIM5 STM32_PWM_USE_TIM5
#else
#define PWM_CONF_TIM5 1
#endif
#define PWM_CONF5_DEF { \
PWM_FREQUENCY, \
PWM_FREQUENCY/TIM5_SERVO_HZ, \
NULL, \
{ \
{ PWM_SERVO_9_ACTIVE, NULL }, \
{ PWM_SERVO_10_ACTIVE, NULL }, \
{ PWM_SERVO_11_ACTIVE, NULL }, \
{ PWM_SERVO_13_ACTIVE, NULL }, \
}, \
0, \
0 \
}

/**
* DSHOT
*/
Expand Down

0 comments on commit 0bdcc09

Please sign in to comment.