nucleo-g431rb: add support for IHM16M1
This commit is contained in:
parent
25240d9114
commit
0ada35faeb
@ -8,3 +8,62 @@ STATUS
|
|||||||
======
|
======
|
||||||
|
|
||||||
2020-06-12: The basic NSH configuration is now functional.
|
2020-06-12: The basic NSH configuration is now functional.
|
||||||
|
|
||||||
|
Configurations
|
||||||
|
==============
|
||||||
|
|
||||||
|
ihm16m1_f32 and ihm16m1_b16:
|
||||||
|
----------------------------
|
||||||
|
|
||||||
|
These examples are dedicated for the X-NUCLEO-IHM16M1 expansion board
|
||||||
|
based on STSPIN830 driver for three-phase brushless DC motors.
|
||||||
|
|
||||||
|
X-NUCLEO-IHM16M1 must be configured to work with FOC and 3-shunt
|
||||||
|
resistors. See ST documentation for details.
|
||||||
|
|
||||||
|
Pin configuration for the X-NUCLEO-IHM16M1 (TIM1 configuration):
|
||||||
|
|
||||||
|
Board Function Chip Function Chip Pin Number
|
||||||
|
------------- ---------------- -----------------
|
||||||
|
Phase U high TIM1_CH1 PA8
|
||||||
|
Phase U enable GPIO_PB13 PB13
|
||||||
|
Phase V high TIM1_CH2 PA9
|
||||||
|
Phase V enable GPIO_PB14 PB14
|
||||||
|
Phase W high TIM1_CH3 PA10
|
||||||
|
Phase W enable GPIO_PB15 PB15
|
||||||
|
EN_FAULT GPIO_PB12 PB12
|
||||||
|
Current U GPIO_ADC1_IN2 PA1
|
||||||
|
Current V GPIO_ADC1_IN12 PB1
|
||||||
|
Current W GPIO_ADC1_IN15 PB0
|
||||||
|
Temperature ? PC4
|
||||||
|
VBUS GPIO_ADC1_IN1 PA0
|
||||||
|
BEMF1 (NU)
|
||||||
|
BEMF2 (NU)
|
||||||
|
BEMF3 (NU)
|
||||||
|
LED
|
||||||
|
+3V3 (CN7_16)
|
||||||
|
GND (CN7_20)
|
||||||
|
GPIO_BEMF (NU)
|
||||||
|
ENCO_A/HALL_H1
|
||||||
|
ENCO_B/HALL_H2
|
||||||
|
ENCO_Z/HALL_H3
|
||||||
|
GPIO1 (NU)
|
||||||
|
GPIO2 (NU)
|
||||||
|
GPIO3 (NU)
|
||||||
|
CPOUT (NU)
|
||||||
|
BKIN1 (NU)
|
||||||
|
POT GPIO_ADC1_IN8 PC2
|
||||||
|
CURR_REF (NU)
|
||||||
|
DAC (NU)
|
||||||
|
|
||||||
|
Current shunt resistance = 0.33
|
||||||
|
Current sense gain = -1.53 (inverted current)
|
||||||
|
Vbus sense gain = 9.31k/(9.31k+169k) = 0.0522124390107
|
||||||
|
Vbus min = 7V
|
||||||
|
Vbus max = 45V
|
||||||
|
Iout max = 1.5A RMS
|
||||||
|
|
||||||
|
IPHASE_RATIO = 1/(R_shunt*gain) = -1.98
|
||||||
|
VBUS_RATIO = 1/VBUS_gain = 16
|
||||||
|
|
||||||
|
For now only 3-shunt resistors configuration is supported.
|
||||||
|
89
boards/arm/stm32/nucleo-g431rb/configs/ihm16m1_b16/defconfig
Normal file
89
boards/arm/stm32/nucleo-g431rb/configs/ihm16m1_b16/defconfig
Normal file
@ -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="nucleo-g431rb"
|
||||||
|
CONFIG_ARCH_BOARD_NUCLEO_G431RB=y
|
||||||
|
CONFIG_ARCH_BUTTONS=y
|
||||||
|
CONFIG_ARCH_CHIP="stm32"
|
||||||
|
CONFIG_ARCH_CHIP_STM32=y
|
||||||
|
CONFIG_ARCH_CHIP_STM32G431R=y
|
||||||
|
CONFIG_ARCH_INTERRUPTSTACK=1024
|
||||||
|
CONFIG_ARCH_IRQBUTTONS=y
|
||||||
|
CONFIG_ARMV7M_LIBM=y
|
||||||
|
CONFIG_BOARD_LOOPSPERMSEC=8499
|
||||||
|
CONFIG_BOARD_STM32_COMMON=y
|
||||||
|
CONFIG_BOARD_STM32_IHM16M1=y
|
||||||
|
CONFIG_BOARD_STM32_IHM16M1_POT=y
|
||||||
|
CONFIG_BOARD_STM32_IHM16M1_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=-160
|
||||||
|
CONFIG_EXAMPLES_FOC_NOTIFIER_FREQ=10000
|
||||||
|
CONFIG_EXAMPLES_FOC_PWM_FREQ=20000
|
||||||
|
CONFIG_EXAMPLES_FOC_RAMP_ACC=1000000
|
||||||
|
CONFIG_EXAMPLES_FOC_RAMP_DEC=1000000
|
||||||
|
CONFIG_EXAMPLES_FOC_RAMP_THR=10000
|
||||||
|
CONFIG_EXAMPLES_FOC_VBUS_ADC=y
|
||||||
|
CONFIG_EXAMPLES_FOC_VBUS_SCALE=16000
|
||||||
|
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=4
|
||||||
|
CONFIG_MOTOR=y
|
||||||
|
CONFIG_MOTOR_FOC=y
|
||||||
|
CONFIG_MOTOR_FOC_TRACE=y
|
||||||
|
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_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"
|
89
boards/arm/stm32/nucleo-g431rb/configs/ihm16m1_f32/defconfig
Normal file
89
boards/arm/stm32/nucleo-g431rb/configs/ihm16m1_f32/defconfig
Normal file
@ -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="nucleo-g431rb"
|
||||||
|
CONFIG_ARCH_BOARD_NUCLEO_G431RB=y
|
||||||
|
CONFIG_ARCH_BUTTONS=y
|
||||||
|
CONFIG_ARCH_CHIP="stm32"
|
||||||
|
CONFIG_ARCH_CHIP_STM32=y
|
||||||
|
CONFIG_ARCH_CHIP_STM32G431R=y
|
||||||
|
CONFIG_ARCH_INTERRUPTSTACK=1024
|
||||||
|
CONFIG_ARCH_IRQBUTTONS=y
|
||||||
|
CONFIG_ARMV7M_LIBM=y
|
||||||
|
CONFIG_BOARD_LOOPSPERMSEC=8499
|
||||||
|
CONFIG_BOARD_STM32_COMMON=y
|
||||||
|
CONFIG_BOARD_STM32_IHM16M1=y
|
||||||
|
CONFIG_BOARD_STM32_IHM16M1_POT=y
|
||||||
|
CONFIG_BOARD_STM32_IHM16M1_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=-160
|
||||||
|
CONFIG_EXAMPLES_FOC_NOTIFIER_FREQ=10000
|
||||||
|
CONFIG_EXAMPLES_FOC_PWM_FREQ=20000
|
||||||
|
CONFIG_EXAMPLES_FOC_RAMP_ACC=1000000
|
||||||
|
CONFIG_EXAMPLES_FOC_RAMP_DEC=1000000
|
||||||
|
CONFIG_EXAMPLES_FOC_RAMP_THR=10000
|
||||||
|
CONFIG_EXAMPLES_FOC_VBUS_ADC=y
|
||||||
|
CONFIG_EXAMPLES_FOC_VBUS_SCALE=16000
|
||||||
|
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_LIBM=y
|
||||||
|
CONFIG_MAX_TASKS=4
|
||||||
|
CONFIG_MOTOR=y
|
||||||
|
CONFIG_MOTOR_FOC=y
|
||||||
|
CONFIG_MOTOR_FOC_TRACE=y
|
||||||
|
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_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"
|
@ -242,4 +242,49 @@
|
|||||||
|
|
||||||
#define ADC1_DMA_CHAN DMAMAP_DMA12_ADC1_0 /* DMA1 */
|
#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 */
|
||||||
|
|
||||||
|
#ifdef CONFIG_BOARD_STM32_IHM16M1
|
||||||
|
|
||||||
|
/* Configuration specific for the X-NUCLEO-IHM16M1 expansion board with
|
||||||
|
* the STSPIN830 driver.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* TIM1 configuration *******************************************************/
|
||||||
|
|
||||||
|
# define GPIO_TIM1_CH1OUT GPIO_TIM1_CH1OUT_1 /* TIM1 CH1 - PA8 - U high */
|
||||||
|
# define GPIO_TIM1_CH2OUT GPIO_TIM1_CH2OUT_1 /* TIM1 CH2 - PA9 - V high */
|
||||||
|
# define GPIO_TIM1_CH3OUT GPIO_TIM1_CH3OUT_1 /* TIM1 CH3 - PA10 - W high */
|
||||||
|
# define GPIO_TIM1_CH4OUT 0 /* not used as output */
|
||||||
|
|
||||||
|
/* UVW ENABLE */
|
||||||
|
|
||||||
|
# define GPIO_FOC_EN_U (GPIO_OUTPUT|GPIO_PUSHPULL|GPIO_SPEED_50MHz| \
|
||||||
|
GPIO_OUTPUT_CLEAR|GPIO_PORTB|GPIO_PIN13)
|
||||||
|
# define GPIO_FOC_EN_V (GPIO_OUTPUT|GPIO_PUSHPULL|GPIO_SPEED_50MHz| \
|
||||||
|
GPIO_OUTPUT_CLEAR|GPIO_PORTB|GPIO_PIN14)
|
||||||
|
# define GPIO_FOC_EN_W (GPIO_OUTPUT|GPIO_PUSHPULL|GPIO_SPEED_50MHz| \
|
||||||
|
GPIO_OUTPUT_CLEAR|GPIO_PORTB|GPIO_PIN15)
|
||||||
|
|
||||||
|
/* EN_FAULT */
|
||||||
|
|
||||||
|
# define GPIO_FOC_ENFAULT (GPIO_OUTPUT|GPIO_OPENDRAIN|GPIO_SPEED_50MHz| \
|
||||||
|
GPIO_OUTPUT_CLEAR|GPIO_PORTB|GPIO_PIN12)
|
||||||
|
|
||||||
|
/* Debug pins */
|
||||||
|
|
||||||
|
# define GPIO_FOC_DEBUG0 (GPIO_OUTPUT|GPIO_PUSHPULL|GPIO_SPEED_50MHz| \
|
||||||
|
GPIO_OUTPUT_CLEAR|GPIO_PORTB|GPIO_PIN8)
|
||||||
|
# define GPIO_FOC_DEBUG1 (GPIO_OUTPUT|GPIO_PUSHPULL|GPIO_SPEED_50MHz| \
|
||||||
|
GPIO_OUTPUT_CLEAR|GPIO_PORTB|GPIO_PIN9)
|
||||||
|
# define GPIO_FOC_DEBUG2 (GPIO_OUTPUT|GPIO_PUSHPULL|GPIO_SPEED_50MHz| \
|
||||||
|
GPIO_OUTPUT_CLEAR|GPIO_PORTC|GPIO_PIN6)
|
||||||
|
# define GPIO_FOC_DEBUG3 (GPIO_OUTPUT|GPIO_PUSHPULL|GPIO_SPEED_50MHz| \
|
||||||
|
GPIO_OUTPUT_CLEAR|GPIO_PORTA|GPIO_PIN12)
|
||||||
|
|
||||||
|
#endif /* CONFIG_BOARD_STM32_IHM16M1 */
|
||||||
|
|
||||||
#endif /* __BOARDS_ARM_STM32_NUCLEO_G431RB_INCLUDE_BOARD_H */
|
#endif /* __BOARDS_ARM_STM32_NUCLEO_G431RB_INCLUDE_BOARD_H */
|
||||||
|
@ -37,6 +37,7 @@ ifeq ($(CONFIG_LIB_BOARDCTL),y)
|
|||||||
CSRCS += stm32_appinit.c
|
CSRCS += stm32_appinit.c
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
ifneq ($(CONFIG_STM32_FOC),y)
|
||||||
ifeq ($(CONFIG_PWM),y)
|
ifeq ($(CONFIG_PWM),y)
|
||||||
CSRCS += stm32_pwm.c
|
CSRCS += stm32_pwm.c
|
||||||
endif
|
endif
|
||||||
@ -44,6 +45,11 @@ endif
|
|||||||
ifeq ($(CONFIG_ADC),y)
|
ifeq ($(CONFIG_ADC),y)
|
||||||
CSRCS += stm32_adc.c
|
CSRCS += stm32_adc.c
|
||||||
endif
|
endif
|
||||||
|
endif
|
||||||
|
|
||||||
|
ifeq ($(CONFIG_BOARD_STM32_IHM16M1),y)
|
||||||
|
CSRCS += stm32_foc_ihm16m1.c
|
||||||
|
endif
|
||||||
|
|
||||||
DEPPATH += --dep-path board
|
DEPPATH += --dep-path board
|
||||||
VPATH += :board
|
VPATH += :board
|
||||||
|
@ -131,4 +131,16 @@ int stm32_pwm_setup(void);
|
|||||||
int stm32_adc_setup(void);
|
int stm32_adc_setup(void);
|
||||||
#endif
|
#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_NUCLEO_G431RB_SRC_NUCLEO_G431RB_H */
|
#endif /* __BOARDS_ARM_STM32_NUCLEO_G431RB_SRC_NUCLEO_G431RB_H */
|
||||||
|
@ -102,6 +102,16 @@ int stm32_bringup(void)
|
|||||||
}
|
}
|
||||||
#endif
|
#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
|
#ifdef CONFIG_ADC
|
||||||
/* Initialize ADC and register the ADC driver. */
|
/* Initialize ADC and register the ADC driver. */
|
||||||
|
|
||||||
|
183
boards/arm/stm32/nucleo-g431rb/src/stm32_foc_ihm16m1.c
Normal file
183
boards/arm/stm32/nucleo-g431rb/src/stm32_foc_ihm16m1.c
Normal file
@ -0,0 +1,183 @@
|
|||||||
|
/****************************************************************************
|
||||||
|
* boards/arm/stm32/nucleo-g431rb/src/stm32_foc_ihm16m1.c
|
||||||
|
*
|
||||||
|
* Licensed to the Apache Software Foundation (ASF) under one or more
|
||||||
|
* contributor license agreements. See the NOTICE file distributed with
|
||||||
|
* this work for additional information regarding copyright ownership. The
|
||||||
|
* ASF licenses this file to you under the Apache License, Version 2.0 (the
|
||||||
|
* "License"); you may not use this file except in compliance with the
|
||||||
|
* License. You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||||
|
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||||
|
* License for the specific language governing permissions and limitations
|
||||||
|
* under the License.
|
||||||
|
*
|
||||||
|
****************************************************************************/
|
||||||
|
|
||||||
|
/****************************************************************************
|
||||||
|
* Included Files
|
||||||
|
****************************************************************************/
|
||||||
|
|
||||||
|
#include <nuttx/config.h>
|
||||||
|
|
||||||
|
#include "stm32_ihm16m1.h"
|
||||||
|
|
||||||
|
/****************************************************************************
|
||||||
|
* Pre-processor Definitions
|
||||||
|
****************************************************************************/
|
||||||
|
|
||||||
|
#define CURRENT_SAMPLE_TIME ADC_SMPR_24p5
|
||||||
|
#define VBUS_SAMPLE_TIME ADC_SMPR_640p5
|
||||||
|
#define POT_SAMPLE_TIME ADC_SMPR_640p5
|
||||||
|
|
||||||
|
/* ADC1 channels used in this example */
|
||||||
|
|
||||||
|
#define ADC1_INJECTED (CONFIG_MOTOR_FOC_SHUNTS)
|
||||||
|
|
||||||
|
#ifdef CONFIG_BOARD_STM32_IHM16M1_VBUS
|
||||||
|
# define IHM16M1_VBUS 1
|
||||||
|
#else
|
||||||
|
# define IHM16M1_VBUS 0
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef CONFIG_BOARD_STM32_IHM16M1_POT
|
||||||
|
# define IHM16M1_POT 1
|
||||||
|
#else
|
||||||
|
# define IHM16M1_POT 0
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#define ADC1_REGULAR (IHM16M1_VBUS + IHM16M1_POT)
|
||||||
|
#define ADC1_NCHANNELS (ADC1_INJECTED + ADC1_REGULAR)
|
||||||
|
|
||||||
|
/* Check ADC1 configuration */
|
||||||
|
|
||||||
|
#if ADC1_INJECTED != CONFIG_STM32_ADC1_INJECTED_CHAN
|
||||||
|
# error
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if CONFIG_STM32_ADC1_RESOLUTION != 0
|
||||||
|
# error
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/****************************************************************************
|
||||||
|
* Private Data
|
||||||
|
****************************************************************************/
|
||||||
|
|
||||||
|
/* FOC ADC configration:
|
||||||
|
* - Current Phase V -> ADC1 INJ1 -> ADC1_IN2 (PA1)
|
||||||
|
* - Current Phase U -> ADC1 INJ2 -> ADC1_IN12 (PB1)
|
||||||
|
* - Current Phase W -> ADC1 INJ3 -> ADC1_IN15 (PB0)
|
||||||
|
* optional:
|
||||||
|
* - VBUS -> ADC1 REG -> ADC1_IN1 (PA0)
|
||||||
|
* - POT -> ADC1 REG -> ADC1_IN8 (PC2)
|
||||||
|
*
|
||||||
|
* TIM1 PWM configuration:
|
||||||
|
* - Phase U high -> TIM1_CH1 (PA8)
|
||||||
|
* - Phase V high -> TIM1_CH2 (PA9)
|
||||||
|
* - Phase W high -> TIM1_CH3 (PA10)
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
static uint8_t g_adc1_chan[] =
|
||||||
|
{
|
||||||
|
#ifdef CONFIG_BOARD_STM32_IHM16M1_VBUS
|
||||||
|
1, /* ADC1 REG - VBUS */
|
||||||
|
#endif
|
||||||
|
#ifdef CONFIG_BOARD_STM32_IHM16M1_POT
|
||||||
|
8, /* ADC1 REG - POT */
|
||||||
|
#endif
|
||||||
|
2, /* ADC1 INJ1 - PHASE 1 */
|
||||||
|
#if CONFIG_MOTOR_FOC_SHUNTS == 3
|
||||||
|
12, /* ADC1 INJ2 - PHASE 2 */
|
||||||
|
15, /* ADC1 INJ3 - PHASE 3 */
|
||||||
|
#endif
|
||||||
|
};
|
||||||
|
|
||||||
|
static uint32_t g_adc1_pins[] =
|
||||||
|
{
|
||||||
|
#ifdef CONFIG_BOARD_STM32_IHM16M1_VBUS
|
||||||
|
GPIO_ADC1_IN1,
|
||||||
|
#endif
|
||||||
|
#ifdef CONFIG_BOARD_STM32_IHM16M1_POT
|
||||||
|
GPIO_ADC1_IN8,
|
||||||
|
#endif
|
||||||
|
GPIO_ADC1_IN2,
|
||||||
|
#if CONFIG_MOTOR_FOC_SHUNTS > 1
|
||||||
|
GPIO_ADC1_IN12,
|
||||||
|
#endif
|
||||||
|
#if CONFIG_MOTOR_FOC_SHUNTS > 2
|
||||||
|
GPIO_ADC1_IN15,
|
||||||
|
#endif
|
||||||
|
};
|
||||||
|
|
||||||
|
/* ADC1 sample time configuration */
|
||||||
|
|
||||||
|
static adc_channel_t g_adc1_stime[] =
|
||||||
|
{
|
||||||
|
#ifdef CONFIG_BOARD_STM32_IHM16M1_VBUS
|
||||||
|
{
|
||||||
|
.channel = 1,
|
||||||
|
.sample_time = VBUS_SAMPLE_TIME
|
||||||
|
},
|
||||||
|
#endif
|
||||||
|
#ifdef CONFIG_BOARD_STM32_IHM16M1_POT
|
||||||
|
{
|
||||||
|
.channel = 8,
|
||||||
|
.sample_time = POT_SAMPLE_TIME
|
||||||
|
},
|
||||||
|
#endif
|
||||||
|
{
|
||||||
|
.channel = 2,
|
||||||
|
.sample_time = CURRENT_SAMPLE_TIME
|
||||||
|
},
|
||||||
|
#if CONFIG_MOTOR_FOC_SHUNTS > 1
|
||||||
|
{
|
||||||
|
.channel = 12,
|
||||||
|
.sample_time = CURRENT_SAMPLE_TIME
|
||||||
|
},
|
||||||
|
#endif
|
||||||
|
#if CONFIG_MOTOR_FOC_SHUNTS > 2
|
||||||
|
{
|
||||||
|
.channel = 15,
|
||||||
|
.sample_time = CURRENT_SAMPLE_TIME
|
||||||
|
},
|
||||||
|
#endif
|
||||||
|
};
|
||||||
|
|
||||||
|
/* Board specific ADC configuration for FOC */
|
||||||
|
|
||||||
|
static struct stm32_foc_adc_s g_adc_cfg =
|
||||||
|
{
|
||||||
|
.chan = g_adc1_chan,
|
||||||
|
.pins = g_adc1_pins,
|
||||||
|
.stime = g_adc1_stime,
|
||||||
|
.nchan = ADC1_NCHANNELS,
|
||||||
|
.regch = ADC1_REGULAR,
|
||||||
|
.intf = 1
|
||||||
|
};
|
||||||
|
|
||||||
|
/****************************************************************************
|
||||||
|
* Public Functions
|
||||||
|
****************************************************************************/
|
||||||
|
|
||||||
|
/****************************************************************************
|
||||||
|
* Name: stm32_foc_setup
|
||||||
|
*
|
||||||
|
* Description:
|
||||||
|
* Initialize FOC driver.
|
||||||
|
*
|
||||||
|
* This function should be call by board_app_initialize().
|
||||||
|
*
|
||||||
|
* Returned Value:
|
||||||
|
* 0 on success, a negated errno value on failure
|
||||||
|
*
|
||||||
|
****************************************************************************/
|
||||||
|
|
||||||
|
int stm32_foc_setup(void)
|
||||||
|
{
|
||||||
|
return board_ihm16m1_initialize(&g_adc_cfg);
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user