nuttx-apps/examples/foc/Kconfig
raiden00pl 27588be53e examples/foc: replace CONFIG_INDUSTRY_FOC_* with CONFIG_EXAMPLES_FOC_*
Decouple the FOC example configuration from the FOC lib configuration.
Purely cosmetic change, without affecting functionality.
2023-11-18 08:40:16 -08:00

780 lines
18 KiB
Plaintext

#
# For a description of the syntax of this configuration file,
# see the file kconfig-language.txt in the NuttX tools repository.
#
menuconfig EXAMPLES_FOC
tristate "FOC motor controller example"
depends on MOTOR_FOC
depends on INDUSTRY_FOC
---help---
Enable the FOC motor controller example.
At the moment, this example implements a simple open-loop velocity controller.
if EXAMPLES_FOC
config EXAMPLES_FOC_DEVPATH
string "FOC device path prefix"
default "/dev/foc"
---help---
The default path to the FOC device without the device minor number.
Default: /dev/foc
config EXAMPLES_FOC_FLOAT_INST
int "FOC float instances"
depends on INDUSTRY_FOC_FLOAT
default 0
config EXAMPLES_FOC_FIXED16_INST
int "FOC fixed16 instances"
depends on INDUSTRY_FOC_FIXED16
default 0
config EXAMPLES_FOC_CONTROL_PRIO
int "FOC control thread priority"
default 255
config EXAMPLES_FOC_CONTROL_STACKSIZE
int "FOC control thread stack size"
default 4096
config EXAMPLES_FOC_VERBOSE
int "Enable verbose print for app"
default 1
range 0 2
config EXAMPLES_FOC_PERF
bool "Enable performance meassurements"
default n
choice
prompt "FOC modulation selection"
default EXAMPLES_FOC_MODULATION_SVM3
config EXAMPLES_FOC_MODULATION_SVM3
bool "FOC use SVM3"
select INDUSTRY_FOC_MODULATION_SVM3
endchoice # FOC modulation selection
choice
prompt "FOC current controller selection"
default EXAMPLES_FOC_CONTROL_PI
config EXAMPLES_FOC_CONTROL_PI
bool "FOC use PI current controller"
select INDUSTRY_FOC_CONTROL_PI
endchoice # FOC current controller
config EXAMPLES_FOC_PWM_FREQ
int "FOC PWM frequency"
default 10000
---help---
Select the FOC PWM switching frequency
config EXAMPLES_FOC_NOTIFIER_FREQ
int "FOC notifier frequency"
default EXAMPLES_FOC_PWM_FREQ
---help---
Select the FOC notifier frequency
config EXAMPLES_FOC_STATE_PRINT_FREQ
int "FOC example data printer frequency"
default 0
depends on INDUSTRY_FOC_HANDLER_PRINT
---help---
Set 0 to disable FOC data print
config EXAMPLES_FOC_STATE_USE_MODEL_PMSM
bool "FOC uses PMSM model"
depends on INDUSTRY_FOC_MODEL_PMSM
default n
---help---
Use PMSM model instead of real hardware
choice
prompt "FOC sensored or sensorless configuration"
default EXAMPLES_FOC_SENSORLESS
config EXAMPLES_FOC_SENSORLESS
bool "FOC example sensorless configuration"
select EXAMPLES_FOC_ANGOBS
config EXAMPLES_FOC_SENSORED
bool "FOC example sensored configuration"
select EXAMPLES_FOC_HAVE_ALIGN
endchoice #
menu "Motor phy"
config EXAMPLES_FOC_MOTOR_POLES
int "FOC example motor poles pairs"
default 0
config EXAMPLES_FOC_MOTOR_RES
int "FOC example motor phase resistance (x1000000)"
default 0
---help---
The unit is micro-ohm (1/1000000 ohm).
config EXAMPLES_FOC_MOTOR_IND
int "FOC example motor phase inductance (x1000000)"
default 0
---help---
The unit is micro micro-henry (1/1000000 henry).
config EXAMPLES_FOC_MOTOR_FLUXLINK
int "FOC example motor flux linkage (x1000000)"
default 0
---help---
The unit is micro-Vs (1/1000000 Vs).
Flux linkage can be obtained from the formula:
lambda_pm = (1 / sqrt(3)) * (60 / 2*PI) * (Ke / P) [Vs]
where:
Ke - motor voltage constant Ke [V/rpm]
P - motor pole pairs
endmenu # Motor phy
if EXAMPLES_FOC_SENSORED
choice
prompt "FOC sensored sensor selection"
config EXAMPLES_FOC_HAVE_QENCO
bool "FOC example have qencoder"
select INDUSTRY_FOC_ANGLE_QENCO
config EXAMPLES_FOC_HAVE_HALL
bool "FOC example Hall sensor support"
select INDUSTRY_FOC_ANGLE_HALL
endchoice # FOC sensored sensor selection
if EXAMPLES_FOC_HAVE_QENCO
config EXAMPLES_FOC_QENCO_POSMAX
int "FOC example qencoder maximum position"
default 0
config EXAMPLES_FOC_QENCO_DEVPATH
string "FOC example qencoder path prefix"
default "/dev/qe"
---help---
The default path to the qenco device without the device minor number.
Default: /dev/qe
endif # EXAMPLES_FOC_HAVE_QENCO
if EXAMPLES_FOC_HAVE_HALL
config EXAMPLES_FOC_HALL_DEVPATH
string "FOC example Hall sensor path prefix"
default "/dev/hall"
---help---
The default path to the Hall device without the device minor number.
Default: /dev/hall
endif # EXAMPLES_FOC_HAVE_HALL
endif # EXAMPLES_FOC_SENSORED
config EXAMPLES_FOC_HAVE_OPENLOOP
bool "FOC example have open-loop controller"
select INDUSTRY_FOC_ANGLE_OPENLOOP
select EXAMPLES_FOC_HAVE_ALIGN
default EXAMPLES_FOC_SENSORLESS
config EXAMPLES_FOC_HAVE_TORQ
bool "FOC example torque controller support"
default n
if EXAMPLES_FOC_HAVE_TORQ
config EXAMPLES_FOC_TORQ_MAX
int "FOC example torque maximum (x1000)"
default 1000
---help---
The unit is mini-ampere (1/1000 ampere) for current mode.
The unit is mini-volt (1/1000 voltage) for voltage mode.
endif # EXAMPLES_FOC_HAVE_TORQ
config EXAMPLES_FOC_HAVE_VEL
bool "FOC example velocity controller support"
default EXAMPLES_FOC_SENSORLESS
select EXAMPLES_FOC_HAVE_TORQ
config EXAMPLES_FOC_HAVE_POS
bool "FOC example position controller support"
default n
select EXAMPLES_FOC_HAVE_VEL
config EXAMPLES_FOC_VELOBS
bool "FOC example velocity observer support"
default n
if EXAMPLES_FOC_HAVE_VEL
config EXAMPLES_FOC_VELCTRL_FREQ
int "FOC example velocity controller frequency"
default 1000
config EXAMPLES_FOC_VELNOW_FILTER
int "FOC example velocity controller (x1000)"
default 990
config EXAMPLES_FOC_VEL_MAX
int "FOC example velocity maximum (x1)"
default 1000
---help---
The unit is rad/s
choice
prompt "FOC velocity controller selection"
default EXAMPLES_FOC_VELCTRL_PI
config EXAMPLES_FOC_VELCTRL_PI
bool "FOC velocity PI controller"
endchoice # FOC velocity controller
if EXAMPLES_FOC_VELCTRL_PI
config EXAMPLES_FOC_VELCTRL_PI_KP
int "FOC velocity PI Kp (1000000x)"
default 0
---help---
The Kp coefficient used in controller is:
Kp = EXAMPLES_FOC_VELCTRL_PI_KP/1000000
config EXAMPLES_FOC_VELCTRL_PI_KI
int "FOC velocity PI Ki (1000000x)"
default 0
---help---
The Ki coefficient used in controller is:
Ki = EXAMPLES_FOC_VELCTRL_PI_KI/1000000
endif # EXAMPLES_FOC_VELCTRL_PI
endif # EXAMPLES_FOC_HAVE_VEL
config EXAMPLES_FOC_ANGOBS
bool "FOC example phase angle observer support"
default n
choice
prompt "FOC angle observer selection"
default EXAMPLES_FOC_ANGOBS_NFO
depends on EXAMPLES_FOC_ANGOBS
config EXAMPLES_FOC_ANGOBS_SMO
bool "FOC angle SMO observer"
select INDUSTRY_FOC_ANGLE_OSMO
config EXAMPLES_FOC_ANGOBS_NFO
bool "FOC angle NFO observer"
select INDUSTRY_FOC_ANGLE_ONFO
endchoice # FOC angle observer
if EXAMPLES_FOC_ANGOBS
config EXAMPLES_FOC_ANGOBS_HYS
int "FOC angle observer hysteresis [x1]"
default 0
---help---
Hysteresis added to the observer to open-loop transition.
config EXAMPLES_FOC_ANGOBS_THR
int "FOC angle observer velocity threshold [x1]"
default 0
---help---
Once the motor reaches this speed, we switch from the open-loop angle
to the observer angle.
config EXAMPLES_FOC_ANGOBS_MERGE_RATIO
int "FOC angle observer merge ratio"
default 50
range 0 50
---help---
This parameter determines how quickly we make the transition from the
open-loop angle to the observer angle after reaching the observer threshold
velocity. The smaler the value, the smoother the transition.
If set to 0 - smooth transition is disabled.
endif # EXAMPLES_FOC_ANGOBS
if EXAMPLES_FOC_ANGOBS_SMO
config EXAMPLES_FOC_ANGOBS_SMO_KSLIDE
int "FOC angle SMO observer Kslide (x1000)"
default 0
---help---
The Kslide coefficient used in observer is:
Kslide = EXAMPLES_FOC_ANGOBS_SMO_KSLIDE/1000
config EXAMPLES_FOC_ANGOBS_SMO_ERRMAX
int "FOC angle SMO observer err_max (x1000)"
default 0
---help---
The err_max coefficient used in observer is:
err_max = EXAMPLES_FOC_ANGOBS_SMO_ERRMAX/1000
endif # EXAMPLES_FOC_ANGOBS_SMO
if EXAMPLES_FOC_ANGOBS_NFO
config EXAMPLES_FOC_ANGOBS_NFO_GAIN
int "FOC angle NFO observer gain (x1)"
default 0
---help---
The gain coefficient used in observer at maximum duty cycle.
config EXAMPLES_FOC_ANGOBS_NFO_GAINSLOW
int "FOC angle NFO observer gain slow (x1)"
default 0
---help---
The gain coefficient used in observer at minimum duty cycle.
endif # EXAMPLES_FOC_ANGOBS_NFO
config EXAMPLES_FOC_VELOBS
bool "FOC example velocity observer support"
default n
if EXAMPLES_FOC_VELOBS
choice
prompt "FOC example velocity observer selection"
default EXAMPLES_FOC_VELOBS_DIV
config EXAMPLES_FOC_VELOBS_DIV
bool "FOC velocity DIV observer"
select INDUSTRY_FOC_VELOCITY_ODIV
config EXAMPLES_FOC_VELOBS_PLL
bool "FOC velocity PLL observer"
select INDUSTRY_FOC_VELOCITY_OPLL
endchoice # FOC example velocity observer selection
if EXAMPLES_FOC_VELOBS_DIV
config EXAMPLES_FOC_VELOBS_DIV_SAMPLES
int "FOC velocity DIV observer samples"
default 10
config EXAMPLES_FOC_VELOBS_DIV_FILTER
int "FOC velocity DIV observer filter (x1000)"
default 990
endif # INDUSTRY_FOC_VELOCITY_ODIV
if EXAMPLES_FOC_VELOBS_PLL
config EXAMPLES_FOC_VELOBS_PLL_KP
int "FOC velocity PLL observer Kp (x1)"
default 0
config EXAMPLES_FOC_VELOBS_PLL_KI
int "FOC velocity PLL observer Ki (x1)"
default 0
endif # EXAMPLES_FOC_VELOBS_PLL
endif # EXAMPLES_FOC_VELOBS
menu "FOC user input"
config EXAMPLES_FOC_HAVE_ADC
bool
default n
choice
prompt "FOC VBUS source"
default EXAMPLES_FOC_VBUS_CONST
config EXAMPLES_FOC_VBUS_CONST
bool "Use hardcoded constant VBUS value"
config EXAMPLES_FOC_VBUS_ADC
bool "Use VBUS provided by ADC interface"
depends on ADC
select EXAMPLES_FOC_HAVE_ADC
endchoice # FOC VBUS interface
if EXAMPLES_FOC_VBUS_CONST
config EXAMPLES_FOC_VBUS_CONST_VALUE
int "FOC VBUS constant value"
default 12000
endif # EXAMPLES_FOC_VBUS_CONST
if EXAMPLES_FOC_HAVE_ADC
config EXAMPLES_FOC_ADC_DEVPATH
string "FOC ADC interface path"
default "/dev/adc0"
config EXAMPLES_FOC_ADC_VREF
int "FOC ADC reference voltage [x1000]"
default 0
config EXAMPLES_FOC_ADC_MAX
int "FOC ADC aux maximum sample value"
default 0
endif # EXAMPLES_FOC_HAVE_ADC
if EXAMPLES_FOC_VBUS_ADC
config EXAMPLES_FOC_VBUS_SCALE
int "FOC VBUS SCALE scale [x1000]"
default 0
endif # EXAMPLES_FOC_VBUS_ADC
choice
prompt "FOC setpoint source"
default EXAMPLES_FOC_SETPOINT_CONST
config EXAMPLES_FOC_SETPOINT_CONST
bool "Use hardcoded constant setpiont value"
config EXAMPLES_FOC_SETPOINT_ADC
bool "Use ADC to control setpoint"
depends on ADC
select EXAMPLES_FOC_HAVE_ADC
select EXAMPLES_FOC_HAVE_SETPOINT_VAR
config EXAMPLES_FOC_SETPOINT_CHAR
bool "Use character interface to control setpoint"
select EXAMPLES_FOC_HAVE_CHARCTRL
select EXAMPLES_FOC_HAVE_SETPOINT_VAR
endchoice # FOC setpoint interface
config EXAMPLES_FOC_HAVE_SETPOINT_VAR
bool
default n
if EXAMPLES_FOC_SETPOINT_CONST
config EXAMPLES_FOC_SETPOINT_CONST_VALUE
int "FOC hardoced setpoint value"
default 0
endif # EXAMPLES_FOC_SETPOINT_CONST
if EXAMPLES_FOC_HAVE_SETPOINT_VAR
config EXAMPLES_FOC_SETPOINT_MAX
int "FOC maximum setpoint [x1000]"
default 0
endif # EXAMPLES_FOC_HAVE_SETPOINT_VAR
config EXAMPLES_FOC_TIME_DEFAULT
int "FOC run time default (sec)"
default 10
config EXAMPLES_FOC_STATE_INIT
int "FOC motor controller state init"
default 1
range 1 4
---help---
1 - motor FREE (no current)
2 - motor STOP (active break)
3 - motor moves in CW direction
4 - motor moves in CCW direction
config EXAMPLES_FOC_HAVE_BUTTON
bool "FOC button support"
default n
---help---
The button is used to change the motor controller state
if EXAMPLES_FOC_HAVE_BUTTON
config EXAMPLES_FOC_BUTTON_DEVPATH
string "FOC button device path"
default "/dev/buttons"
depends on INPUT_BUTTONS
endif
config EXAMPLES_FOC_HAVE_CHARCTRL
bool "FOC character control interface support"
default n
---help---
Use simple character commands to interact with the app
if EXAMPLES_FOC_HAVE_CHARCTRL
config EXAMPLES_FOC_CHAR_SETPOINT_STEP
int "FOC character control setpoint step [x1000]"
default 0
endif
endmenu # FOC user input
menu "FOC controller parameters"
config EXAMPLES_FOC_FMODE
int "FOC control mode"
default 2
range 1 3
---help---
1 - IDLE mode
2 - voltage mode (default)
3 - current mode
config EXAMPLES_FOC_MMODE
int "Motor control mode"
default 2
range 1 5
---help---
1 - torque control
2 - velocity control
3 - position control
4 - align only
5 - ident only
config EXAMPLES_FOC_STOP_CURRENT
int "FOC stop state Q voltage/current [x1000]"
default 0
---help---
This current or voltage will be forced on the motor Q axis when
the application is in active break state.
config EXAMPLES_FOC_OPENLOOP_Q
int "FOC open-loop Vq/Iq setting [x1000]"
default 200
depends on EXAMPLES_FOC_HAVE_OPENLOOP
config EXAMPLES_FOC_FEEDFORWARD
bool "FOC use feedforward compensation for current controller"
select INDUSTRY_FOC_FEEDFORWARD
default n
---help---
This option enables feed-forward compensation for PI current controller
which can help achieve better performace of FOC. This option is not
recomended for sensorless operations and for current controllers that
already has high update frequency.
if EXAMPLES_FOC_CONTROL_PI
config EXAMPLES_FOC_IDQ_KP
int "FOC PI controller Kp gain [x1000]"
default 0
---help---
It is set to 0 by default and must be properly configured by the user!
The value of Kp and Ki depends on the controlled motor parameters.
For more instructions see README.md for this example.
config EXAMPLES_FOC_IDQ_KI
int "FOC PI controller Ki gain [x1000]"
default 0
---help---
It is set to 0 by default and must be properly configured by the user!
The value of Kp and Ki depends on the controlled motor parameters.
For more instructions see README.md for this example.
endif #EXAMPLES_FOC_CONTROL_PI
config EXAMPLES_FOC_RAMP_THR
int "FOC velocity ramp threshold [x1]"
default 0
config EXAMPLES_FOC_RAMP_ACC
int "FOC velocity ramp acc [x1]"
default 0
config EXAMPLES_FOC_RAMP_DEC
int "FOC velocity ramp dec [x1]"
default 0
config EXAMPLES_FOC_HAVE_ALIGN
bool "FOC example motor alignment support"
select INDUSTRY_FOC_ALIGN
default n
if EXAMPLES_FOC_HAVE_ALIGN
config EXAMPLES_FOC_ALIGN_VOLT
int "FOC example motor alignment voltage (x1000)"
default 0
config EXAMPLES_FOC_ALIGN_SEC
int "FOC example motor alignment time (x1000)"
default 0
endif # EXAMPLES_FOC_HAVE_ALIGN
config EXAMPLES_FOC_HAVE_IDENT
bool "FOC example motor identification support"
select INDUSTRY_FOC_IDENT
default n
if EXAMPLES_FOC_HAVE_IDENT
config EXAMPLES_FOC_IDENT_RES_CURRENT
int "FOC motor ident resistance current (x1000)"
default 0
config EXAMPLES_FOC_IDENT_RES_KI
int "FOC motor ident resistance Ki (x1000)"
default 50
config EXAMPLES_FOC_IDENT_IND_VOLTAGE
int "FOC motor ident inductance voltage (x1000)"
default 0
config EXAMPLES_FOC_IDENT_RES_SEC
int "FOC motor ident resistance time in sec (x1000)"
default 0
config EXAMPLES_FOC_IDENT_IND_SEC
int "FOC motor ident inductance time in sec (x1000)"
default 0
config EXAMPLES_FOC_IDENT_IDLE
int "FOC motor ident idle steps"
default 100
endif # EXAMPLES_FOC_HAVE_IDENT
endmenu # FOC controller parameters
config EXAMPLES_FOC_HAVE_RUN
bool
default !EXAMPLES_FOC_RUN_DISABLE
config EXAMPLES_FOC_RUN_DISABLE
bool "FOC Disable FOC motor controller"
default n
config EXAMPLES_FOC_NXSCOPE
bool "FOC nxscope support"
depends on LOGGING_NXSCOPE
select LOGGING_NXSCOPE_DISABLE_PUTLOCK
default n
---help---
This option enables a controller real-time data capture with
the NxScope library.
if EXAMPLES_FOC_NXSCOPE
config EXAMPLES_FOC_NXSCOPE_SERIAL
bool "FOC nxscope on serial port"
select LOGGING_NXSCOPE_INTF_SERIAL
default y
if EXAMPLES_FOC_NXSCOPE_SERIAL
config EXAMPLES_FOC_NXSCOPE_SERIAL_PATH
string "FOC nxscope serial path"
default "/dev/ttyS0"
config EXAMPLES_FOC_NXSCOPE_SERIAL_BAUD
int "FOC nxscope serial baud"
default 115200
endif # EXAMPLES_FOC_NXSCOPE_SERIAL
config EXAMPLES_FOC_NXSCOPE_STREAMBUF_LEN
int "FOC nxscope stream buffer length"
default 512
config EXAMPLES_FOC_NXSCOPE_RXBUF_LEN
int "FOC nxscope RX buffer length"
default 64
config EXAMPLES_FOC_NXSCOPE_RXPADDING
int "FOC nxscope RX padding"
default 0
config EXAMPLES_FOC_NXSCOPE_CHANNELS
int "FOC nxscope channels"
default 0
config EXAMPLES_FOC_NXSCOPE_PRESCALER
int "FOC nxscope prescaler"
default 1
---help---
This option allows you to reduce the frequency of adding samples to
the NxScope buffer.
config EXAMPLES_FOC_NXSCOPE_CFG
hex "FOC nxscope configuration"
default 0x00000000
---help---
Each bit defines the controller state variable that can be captured.
Look at foc_nxscope.h for bits definitions.
config EXAMPLES_FOC_NXSCOPE_START
bool "FOC nxscope start frame sync"
default n
---help---
If this option is set, the controller will be waiting for the start
frame from a NxScope master device. This allows us to capture
controller data from the very beginning of its operation.
choice
prompt "FOC nxscope work caller"
default EXAMPLES_FOC_NXSCOPE_MAIN
config EXAMPLES_FOC_NXSCOPE_MAIN
bool "FOC nxscope uses foc_main()"
---help---
Use foc_main() for NxScope communication.
config EXAMPLES_FOC_NXSCOPE_CONTROL
bool "FOC nxscope uses control thread"
---help---
Use control thread for NxScope communication.
With this option enabled you should limit the number of nxscope channels.
Otherwise, handling incoming nxscope data may significantly delay the control
loop, and consequently, the control cycle may be missed.
config EXAMPLES_FOC_NXSCOPE_THREAD
bool "FOC nxscope uses separate thread"
---help---
Use a separate thread for NxScope communication.
endchoice # FOC nxscope work caller
if EXAMPLES_FOC_NXSCOPE_CONTROL
config EXAMPLES_FOC_NXSCOPE_WORK_PRESCALER
int "FOC nxscope work prescaler"
default 10
---help---
This option allows you to reduce the frequency of calling nxscope worker.
endif #EXAMPLES_FOC_NXSCOPE_CONTROL
if EXAMPLES_FOC_NXSCOPE_THREAD
config EXAMPLES_FOC_NXSCOPE_PRIO
int "FOC nxscope thread priority"
default 100
config EXAMPLES_FOC_NXSCOPE_STACKSIZE
int "FOC nxscope thread stack size"
default 2048
endif # EXAMPLES_FOC_NXSCOPE_THREAD
endif # EXAMPLES_FOC_NXSCOPE
endif # EXAMPLES_FOC