boards/b-g431b-esc1: add support for FOC configurations

This commit is contained in:
raiden00pl
2021-05-28 09:22:49 +02:00
committed by Alan Carvalho de Assis
parent d76f8ea04a
commit f6e6bc65ce
10 changed files with 939 additions and 2 deletions
+12
View File
@@ -5,4 +5,16 @@
if ARCH_BOARD_B_G431B_ESC1
if STM32_FOC
config BOARD_STM32_BG431BESC1_FOC_VBUS
bool "B-G431B-ESC1 board VBUS sense"
default n
config BOARD_STM32_BG431BESC1_FOC_POT
bool "B-G431B-ESC1 board POT support"
default n
endif # STM32_FOC
endif # ARCH_BOARD_B_G431B_ESC1
+41
View File
@@ -18,3 +18,44 @@ Configuration Sub-directories
---
Configures the NuttShell (nsh) located at apps/examples/nsh. The
Configuration enables the serial interfaces on USART2.
foc_f32 and foc_b16:
---------------------
FOC examples based on hardware on board.
Pin configuration:
Board Function Chip Function Chip Pin Number
-------------- -------------- ---------------
Phase U high TIM1_CH1 PA8
Phase U low TIM1_CH1N PC13
Phase V high TIM1_CH2 PA9
Phase V low TIM1_CH2N PA12
Phase W high TIM1_CH3 PA10
Phase W low TIM1_CH3N PB15
Current U + OPAMP1_VINP PA1
Current U - OPAMP1_VINM PA3
Current V + OPAMP2_VINP PA7
Current V - OPAMP2_VINM PA5
Current W + OPAMP3_VINP PB0
Current W - OPAMP3_VINM PB2
Temperature PB14
VBUS ADC1_IN1 PA0
POT ADC1_IN11 PB12
LED GPIO_PC6 PC6
ENCO_A/HALL_H1 PB6
ENCO_B/HALL_H2 PB7
ENCO_Z/HALL_H3 PB8
BUTTON GPIO_PC10 PC10
PWM PA15
Current shunt resistance = 0.003
PGA gain = 16
Current sense gain = -9.14 (inverted current)
Vbus sense gain = 18k/(18k+169k) = 0.0962
Vbus min = ?
Vbus max = 25V
Iout max = 40A peak
IPHASE_RATIO = 1/(R_shunt*gain) = -36.47
VBUS_RATIO = 1/VBUS_gain = 10.4
@@ -0,0 +1,89 @@
#
# This file is autogenerated: PLEASE DO NOT EDIT IT.
#
# You can use "make menuconfig" to make any modifications to the installed .config file.
# You can then do "make savedefconfig" to generate a new defconfig file that includes your
# modifications.
#
CONFIG_ADC=y
CONFIG_ADC_FIFOSIZE=3
CONFIG_ANALOG=y
CONFIG_ARCH="arm"
CONFIG_ARCH_BOARD="b-g431b-esc1"
CONFIG_ARCH_BOARD_B_G431B_ESC1=y
CONFIG_ARCH_BUTTONS=y
CONFIG_ARCH_CHIP="stm32"
CONFIG_ARCH_CHIP_STM32=y
CONFIG_ARCH_CHIP_STM32G431C=y
CONFIG_ARCH_INTERRUPTSTACK=1024
CONFIG_ARCH_IRQBUTTONS=y
CONFIG_ARMV7M_LIBM=y
CONFIG_BOARD_LOOPSPERMSEC=8499
CONFIG_BOARD_STM32_BG431BESC1_FOC_POT=y
CONFIG_BOARD_STM32_BG431BESC1_FOC_VBUS=y
CONFIG_BUILTIN=y
CONFIG_DEBUG_FULLOPT=y
CONFIG_DEBUG_SYMBOLS=y
CONFIG_DEFAULT_SMALL=y
CONFIG_DEFAULT_TASK_STACKSIZE=1024
CONFIG_EXAMPLES_FOC=y
CONFIG_EXAMPLES_FOC_ADC_MAX=4095
CONFIG_EXAMPLES_FOC_ADC_VREF=3300
CONFIG_EXAMPLES_FOC_CONTROL_STACKSIZE=2048
CONFIG_EXAMPLES_FOC_FIXED16_INST=1
CONFIG_EXAMPLES_FOC_HAVE_BUTTON=y
CONFIG_EXAMPLES_FOC_IPHASE_ADC=-2939
CONFIG_EXAMPLES_FOC_NOTIFIER_FREQ=10000
CONFIG_EXAMPLES_FOC_PWM_FREQ=20000
CONFIG_EXAMPLES_FOC_RAMP_ACC=200000
CONFIG_EXAMPLES_FOC_RAMP_DEC=200000
CONFIG_EXAMPLES_FOC_RAMP_THR=10000
CONFIG_EXAMPLES_FOC_VBUS_ADC=y
CONFIG_EXAMPLES_FOC_VBUS_SCALE=10400
CONFIG_EXAMPLES_FOC_VEL_ADC=y
CONFIG_INDUSTRY_FOC=y
CONFIG_INDUSTRY_FOC_FIXED16=y
CONFIG_INPUT=y
CONFIG_INPUT_BUTTONS=y
CONFIG_INPUT_BUTTONS_LOWER=y
CONFIG_INTELHEX_BINARY=y
CONFIG_LIBM=y
CONFIG_MAX_TASKS=8
CONFIG_MOTOR=y
CONFIG_MOTOR_FOC=y
CONFIG_MOTOR_FOC_SHUNTS=2
CONFIG_MQ_MAXMSGSIZE=5
CONFIG_NSH_ARCHINIT=y
CONFIG_NSH_BUILTIN_APPS=y
CONFIG_PREALLOC_TIMERS=4
CONFIG_RAM_SIZE=22528
CONFIG_RAM_START=0x20000000
CONFIG_RAW_BINARY=y
CONFIG_RR_INTERVAL=200
CONFIG_SCHED_WAITPID=y
CONFIG_SDCLONE_DISABLE=y
CONFIG_START_DAY=14
CONFIG_START_MONTH=10
CONFIG_START_YEAR=2014
CONFIG_STM32_ADC1_ANIOC_TRIGGER=1
CONFIG_STM32_ADC1_DMA=y
CONFIG_STM32_ADC1_DMA_CFG=1
CONFIG_STM32_ADC1_INJECTED_CHAN=3
CONFIG_STM32_DMA1=y
CONFIG_STM32_DMA2=y
CONFIG_STM32_DMAMUX1=y
CONFIG_STM32_FOC=y
CONFIG_STM32_FOC_FOC0=y
CONFIG_STM32_FOC_G4_ADCCHAN0_WORKAROUND=y
CONFIG_STM32_FOC_HAS_PWM_COMPLEMENTARY=y
CONFIG_STM32_JTAG_SW_ENABLE=y
CONFIG_STM32_TIM1_CH1MODE=0
CONFIG_STM32_TIM1_CH2MODE=0
CONFIG_STM32_TIM1_CH3MODE=0
CONFIG_STM32_TIM1_MODE=2
CONFIG_STM32_USART2=y
CONFIG_SYSTEM_NSH=y
CONFIG_TASK_NAME_SIZE=0
CONFIG_USART2_SERIAL_CONSOLE=y
CONFIG_USART2_TXDMA=y
CONFIG_USER_ENTRYPOINT="nsh_main"
@@ -0,0 +1,90 @@
#
# This file is autogenerated: PLEASE DO NOT EDIT IT.
#
# You can use "make menuconfig" to make any modifications to the installed .config file.
# You can then do "make savedefconfig" to generate a new defconfig file that includes your
# modifications.
#
CONFIG_ADC=y
CONFIG_ADC_FIFOSIZE=3
CONFIG_ANALOG=y
CONFIG_ARCH="arm"
CONFIG_ARCH_BOARD="b-g431b-esc1"
CONFIG_ARCH_BOARD_B_G431B_ESC1=y
CONFIG_ARCH_BUTTONS=y
CONFIG_ARCH_CHIP="stm32"
CONFIG_ARCH_CHIP_STM32=y
CONFIG_ARCH_CHIP_STM32G431C=y
CONFIG_ARCH_INTERRUPTSTACK=1024
CONFIG_ARCH_IRQBUTTONS=y
CONFIG_ARMV7M_LIBM=y
CONFIG_BOARD_LOOPSPERMSEC=8499
CONFIG_BOARD_STM32_BG431BESC1_FOC_POT=y
CONFIG_BOARD_STM32_BG431BESC1_FOC_VBUS=y
CONFIG_BUILTIN=y
CONFIG_DEBUG_FULLOPT=y
CONFIG_DEBUG_SYMBOLS=y
CONFIG_DEFAULT_SMALL=y
CONFIG_DEFAULT_TASK_STACKSIZE=1024
CONFIG_EXAMPLES_FOC=y
CONFIG_EXAMPLES_FOC_ADC_MAX=4095
CONFIG_EXAMPLES_FOC_ADC_VREF=3300
CONFIG_EXAMPLES_FOC_CONTROL_STACKSIZE=2048
CONFIG_EXAMPLES_FOC_FLOAT_INST=1
CONFIG_EXAMPLES_FOC_HAVE_BUTTON=y
CONFIG_EXAMPLES_FOC_IPHASE_ADC=-2939
CONFIG_EXAMPLES_FOC_NOTIFIER_FREQ=10000
CONFIG_EXAMPLES_FOC_PWM_FREQ=20000
CONFIG_EXAMPLES_FOC_RAMP_ACC=200000
CONFIG_EXAMPLES_FOC_RAMP_DEC=200000
CONFIG_EXAMPLES_FOC_RAMP_THR=10000
CONFIG_EXAMPLES_FOC_VBUS_ADC=y
CONFIG_EXAMPLES_FOC_VBUS_SCALE=10400
CONFIG_EXAMPLES_FOC_VEL_ADC=y
CONFIG_INDUSTRY_FOC=y
CONFIG_INDUSTRY_FOC_FLOAT=y
CONFIG_INPUT=y
CONFIG_INPUT_BUTTONS=y
CONFIG_INPUT_BUTTONS_LOWER=y
CONFIG_INTELHEX_BINARY=y
CONFIG_LIBC_FLOATINGPOINT=y
CONFIG_LIBM=y
CONFIG_MAX_TASKS=8
CONFIG_MOTOR=y
CONFIG_MOTOR_FOC=y
CONFIG_MOTOR_FOC_SHUNTS=2
CONFIG_MQ_MAXMSGSIZE=5
CONFIG_NSH_ARCHINIT=y
CONFIG_NSH_BUILTIN_APPS=y
CONFIG_PREALLOC_TIMERS=4
CONFIG_RAM_SIZE=22528
CONFIG_RAM_START=0x20000000
CONFIG_RAW_BINARY=y
CONFIG_RR_INTERVAL=200
CONFIG_SCHED_WAITPID=y
CONFIG_SDCLONE_DISABLE=y
CONFIG_START_DAY=14
CONFIG_START_MONTH=10
CONFIG_START_YEAR=2014
CONFIG_STM32_ADC1_ANIOC_TRIGGER=1
CONFIG_STM32_ADC1_DMA=y
CONFIG_STM32_ADC1_DMA_CFG=1
CONFIG_STM32_ADC1_INJECTED_CHAN=3
CONFIG_STM32_DMA1=y
CONFIG_STM32_DMA2=y
CONFIG_STM32_DMAMUX1=y
CONFIG_STM32_FOC=y
CONFIG_STM32_FOC_FOC0=y
CONFIG_STM32_FOC_G4_ADCCHAN0_WORKAROUND=y
CONFIG_STM32_FOC_HAS_PWM_COMPLEMENTARY=y
CONFIG_STM32_JTAG_SW_ENABLE=y
CONFIG_STM32_TIM1_CH1MODE=0
CONFIG_STM32_TIM1_CH2MODE=0
CONFIG_STM32_TIM1_CH3MODE=0
CONFIG_STM32_TIM1_MODE=2
CONFIG_STM32_USART2=y
CONFIG_SYSTEM_NSH=y
CONFIG_TASK_NAME_SIZE=0
CONFIG_USART2_SERIAL_CONSOLE=y
CONFIG_USART2_TXDMA=y
CONFIG_USER_ENTRYPOINT="nsh_main"
@@ -120,6 +120,45 @@
#define STM32_RCC_CFGR_PPRE2 RCC_CFGR_PPRE2_HCLK
#define STM32_PCLK2_FREQUENCY STM32_HCLK_FREQUENCY
/* APB2 timers 1, 8, 20 and 15-17 will receive PCLK2. */
/* Timers driven from APB2 will be PCLK2 */
#define STM32_APB2_TIM1_CLKIN (STM32_PCLK2_FREQUENCY)
#define STM32_APB2_TIM8_CLKIN (STM32_PCLK2_FREQUENCY)
#define STM32_APB1_TIM15_CLKIN (STM32_PCLK2_FREQUENCY)
#define STM32_APB1_TIM16_CLKIN (STM32_PCLK2_FREQUENCY)
#define STM32_APB1_TIM17_CLKIN (STM32_PCLK2_FREQUENCY)
/* APB1 timers 2-7 will be twice PCLK1 */
#define STM32_APB1_TIM2_CLKIN (STM32_PCLK1_FREQUENCY)
#define STM32_APB1_TIM3_CLKIN (STM32_PCLK1_FREQUENCY)
#define STM32_APB1_TIM4_CLKIN (STM32_PCLK1_FREQUENCY)
#define STM32_APB1_TIM6_CLKIN (STM32_PCLK1_FREQUENCY)
#define STM32_APB1_TIM7_CLKIN (STM32_PCLK1_FREQUENCY)
/* USB divider -- Divide PLL clock by 1.5 */
#define STM32_CFGR_USBPRE 0
/* Timer Frequencies, if APBx is set to 1, frequency is same to APBx
* otherwise frequency is 2xAPBx.
*/
#define BOARD_TIM1_FREQUENCY (STM32_PCLK2_FREQUENCY)
#define BOARD_TIM2_FREQUENCY (STM32_PCLK1_FREQUENCY)
#define BOARD_TIM3_FREQUENCY (STM32_PCLK1_FREQUENCY)
#define BOARD_TIM4_FREQUENCY (STM32_PCLK1_FREQUENCY)
#define BOARD_TIM5_FREQUENCY (STM32_PCLK1_FREQUENCY)
#define BOARD_TIM6_FREQUENCY (STM32_PCLK1_FREQUENCY)
#define BOARD_TIM7_FREQUENCY (STM32_PCLK1_FREQUENCY)
#define BOARD_TIM8_FREQUENCY (STM32_PCLK2_FREQUENCY)
#define BOARD_TIM15_FREQUENCY (STM32_PCLK2_FREQUENCY)
#define BOARD_TIM16_FREQUENCY (STM32_PCLK2_FREQUENCY)
#define BOARD_TIM17_FREQUENCY (STM32_PCLK2_FREQUENCY)
#define BOARD_TIM20_FREQUENCY (STM32_PCLK2_FREQUENCY)
/* LED definitions **********************************************************/
/* The B-G431B-ESC1 has four user LEDs.
@@ -184,4 +223,21 @@
/* Pin Multiplexing Disambiguation ******************************************/
/* TIM1 configuration *******************************************************/
#define GPIO_TIM1_CH1NOUT GPIO_TIM1_CH1NOUT_4 /* TIM1 CH1N - PC13 - U low */
#define GPIO_TIM1_CH2NOUT GPIO_TIM1_CH2NOUT_1 /* TIM1 CH2N - PA12 - V low */
#define GPIO_TIM1_CH3NOUT GPIO_TIM1_CH3NOUT_3 /* TIM1 CH3N - PB15 - W low */
/* DMA channels *************************************************************/
/* ADC */
#define ADC1_DMA_CHAN DMAMAP_DMA12_ADC1_0 /* DMA1 */
/* USART2 */
#define DMACHAN_USART2_TX DMAMAP_DMA12_USART2TX_0 /* DMA1 */
#define DMACHAN_USART2_RX DMAMAP_DMA12_USART2RX_0 /* DMA1 */
#endif /* __BOARDS_ARM_STM32_B_G431B_ESC1_INCLUDE_BOARD_H */
@@ -37,6 +37,10 @@ ifeq ($(CONFIG_LIB_BOARDCTL),y)
CSRCS += stm32_appinit.c
endif
ifeq ($(CONFIG_STM32_FOC),y)
CSRCS += stm32_foc.c
endif
DEPPATH += --dep-path board
VPATH += :board
CFLAGS += $(shell $(INCDIR) "$(CC)" $(TOPDIR)$(DELIM)arch$(DELIM)$(CONFIG_ARCH)$(DELIM)src$(DELIM)board$(DELIM)board)
@@ -98,4 +98,28 @@
int stm32_bringup(void);
/****************************************************************************
* Name: stm32_adc_setup
*
* Description:
* Initialize ADC and register the ADC driver.
*
****************************************************************************/
#ifdef CONFIG_ADC
int stm32_adc_setup(void);
#endif
/****************************************************************************
* Name: stm32_foc_setup
*
* Description:
* Initialize FOC peripheral for the board.
*
****************************************************************************/
#ifdef CONFIG_STM32_FOC
int stm32_foc_setup(void);
#endif
#endif /* __BOARDS_ARM_STM32_B_G431B_ESC1_SRC_B_G431B_ESC1_H */
@@ -92,6 +92,26 @@ int stm32_bringup(void)
}
#endif
#ifdef CONFIG_STM32_FOC
/* Initialize and register the FOC device - must be before ADC setup */
ret = stm32_foc_setup();
if (ret < 0)
{
syslog(LOG_ERR, "ERROR: stm32_foc_setup failed: %d\n", ret);
}
#endif
#ifdef CONFIG_ADC
/* Initialize ADC and register the ADC driver. */
ret = stm32_adc_setup();
if (ret < 0)
{
syslog(LOG_ERR, "ERROR: stm32_adc_setup failed: %d\n", ret);
}
#endif
UNUSED(ret);
return OK;
}
@@ -74,11 +74,11 @@ uint32_t board_button_initialize(void)
uint32_t board_buttons(void)
{
/* Check the state of the USER button. A HIGH value means that the key is
/* Check the state of the USER button. A LOW value means that the key is
* pressed.
*/
return stm32_gpioread(GPIO_BTN_USER) ? BUTTON_USER_BIT : 0;
return stm32_gpioread(GPIO_BTN_USER) ? 0 : BUTTON_USER_BIT;
}
/****************************************************************************
File diff suppressed because it is too large Load Diff