From c0036cbbddc1e50622ac13c150587bc0699f76c3 Mon Sep 17 00:00:00 2001 From: Siddharth Purohit Date: Fri, 29 Mar 2019 17:38:35 +0530 Subject: [PATCH] AP_BoardConfig: add support for PWM Voltage level setting --- libraries/AP_BoardConfig/AP_BoardConfig.cpp | 11 ++++++++++- libraries/AP_BoardConfig/AP_BoardConfig.h | 4 ++++ libraries/AP_BoardConfig/board_drivers.cpp | 8 ++++++++ 3 files changed, 22 insertions(+), 1 deletion(-) diff --git a/libraries/AP_BoardConfig/AP_BoardConfig.cpp b/libraries/AP_BoardConfig/AP_BoardConfig.cpp index 23857ed3c5..b7068be090 100644 --- a/libraries/AP_BoardConfig/AP_BoardConfig.cpp +++ b/libraries/AP_BoardConfig/AP_BoardConfig.cpp @@ -220,7 +220,16 @@ const AP_Param::GroupInfo AP_BoardConfig::var_info[] = { // @User: Advanced AP_GROUPINFO("SD_SLOWDOWN", 17, AP_BoardConfig, _sdcard_slowdown, 0), #endif - + +#ifdef HAL_GPIO_PWM_VOLT_PIN + // @Param: PWM_VOLT_SEL + // @DisplayName: Set PWM Out Voltage + // @Description: This sets the voltage max for PWM output pulses. 0 for 3.3V and 1 for 5V output. + //@Values: 0:3.3V,1:5V + // @User: Advanced + AP_GROUPINFO("PWM_VOLT_SEL", 18, AP_BoardConfig, _pwm_volt_sel, 0), +#endif + AP_GROUPEND }; diff --git a/libraries/AP_BoardConfig/AP_BoardConfig.h b/libraries/AP_BoardConfig/AP_BoardConfig.h index ae0a52278b..ee528d8197 100644 --- a/libraries/AP_BoardConfig/AP_BoardConfig.h +++ b/libraries/AP_BoardConfig/AP_BoardConfig.h @@ -216,6 +216,10 @@ private: AP_Float _vservo_min; #endif +#ifdef HAL_GPIO_PWM_VOLT_PIN + AP_Int8 _pwm_volt_sel; +#endif + #if CONFIG_HAL_BOARD == HAL_BOARD_CHIBIOS AP_Int8 _sdcard_slowdown; #endif diff --git a/libraries/AP_BoardConfig/board_drivers.cpp b/libraries/AP_BoardConfig/board_drivers.cpp index 3aad7edfe2..78c942469d 100644 --- a/libraries/AP_BoardConfig/board_drivers.cpp +++ b/libraries/AP_BoardConfig/board_drivers.cpp @@ -345,6 +345,14 @@ void AP_BoardConfig::board_setup() hal.rcin->init(); hal.rcout->init(); #endif + +#if HAL_GPIO_PWM_VOLT_PIN + if (_pwm_volt_sel == 0) { + hal.gpio->write(HAL_GPIO_PWM_VOLT_PIN, 1); //set pin for 3.3V PWM Output + } else if (_pwm_volt_sel == 1) { + hal.gpio->write(HAL_GPIO_PWM_VOLT_PIN, 0); //set pin for 5V PWM Output + } +#endif board_setup_uart(); board_setup_sbus(); #if AP_FEATURE_BOARD_DETECT