mirror of
https://github.com/apache/nuttx-apps.git
synced 2025-07-04 19:07:16 +08:00

If the controller frequency is high, system timer interrupts will eventually interrupt the controller function, thereby increasing the execution time. This may lead to skipping the control cycle, which negatively affects the control algorithm. With this option enabled, interrupts are disabled for the duration of the controller function execution. Here example results from CONFIG_EXAMPLES_FOC_PERF output for b-g431b-esc1 board with CONFIG_EXAMPLES_FOC_NOTIFIER_FREQ=10000: 1. CONFIG_EXAMPLES_FOC_CONTROL_CRITSEC=n exec ticks=5258 nsec=30929 per ticks=21268 nsec=125105 2. CONFIG_EXAMPLES_FOC_CONTROL_CRITSEC=y exec ticks=3428 nsec=20164 per ticks=19203 nsec=112958 The difference is ~12us!
821 lines
19 KiB
Plaintext
821 lines
19 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
|
|
|
|
config EXAMPLES_FOC_CONTROL_CRITSEC
|
|
bool "Protect controller thread with critical section"
|
|
default y
|
|
depends on BUILD_FLAT
|
|
---help---
|
|
Protect controller thread with critical section.
|
|
|
|
If the controller frequency is high, system timer interrupts will
|
|
eventually interrupt the controller function, thereby increasing the
|
|
execution time. This may lead to skipping the control cycle, which
|
|
negatively affects the control algorithm.
|
|
|
|
With this option enabled, interrupts are disabled for the duration
|
|
of the controller function execution.
|
|
|
|
This option uses the kernel internal API directly, which means
|
|
it won't work outside of FLAT build.
|
|
|
|
if EXAMPLES_FOC_PERF
|
|
|
|
config EXAMPLES_FOC_PERF_LIVE
|
|
bool "Print FOC perf results on each max value change"
|
|
default n
|
|
---help---
|
|
With this option perf results are printed every time the maximum value
|
|
changes. The disadvantage of this method is that printing can directly
|
|
affect the pref result but it gives results in real time.
|
|
|
|
config EXAMPLES_FOC_PERF_EXIT
|
|
bool "Print FOC perf results on thread exit"
|
|
default y
|
|
---help---
|
|
With this option perf results are printed on control thread exit.
|
|
|
|
endif # EXAMPLES_FOC_PERF
|
|
|
|
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 motor controller type"
|
|
default EXAMPLES_FOC_SENSORLESS
|
|
|
|
config EXAMPLES_FOC_SENSORLESS
|
|
bool "FOC example sensorless motor controller"
|
|
select EXAMPLES_FOC_ANGOBS
|
|
---help---
|
|
Use sensorless controller, no angle sensor required.
|
|
|
|
config EXAMPLES_FOC_SENSORED
|
|
bool "FOC example sensored motor controller"
|
|
select EXAMPLES_FOC_HAVE_ALIGN
|
|
---help---
|
|
Use sensored controller, angle sensor for motor required.
|
|
|
|
endchoice #
|
|
|
|
config EXAMPLES_FOC_RUN_DISABLE
|
|
bool "FOC Disable motor controller"
|
|
---help---
|
|
Disable motor controller logic. Requested dq is always [0, 0].
|
|
Useful for testing and benchmarking.
|
|
|
|
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_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
|
|
|