mirror of
https://github.com/apache/nuttx.git
synced 2026-06-07 01:05:54 +08:00
boards/b-g431b-esc1: add support for FOC configurations
This commit is contained in:
committed by
Alan Carvalho de Assis
parent
d76f8ea04a
commit
f6e6bc65ce
@@ -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
|
||||
|
||||
@@ -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
Reference in New Issue
Block a user