From 737689ba4b581bf99fa819acb7e2ff40fbb5bdda Mon Sep 17 00:00:00 2001 From: Felipe Neves Date: Sun, 7 Jul 2024 13:06:13 -0300 Subject: [PATCH] arch: refactor espFoC to be a motor control solution instead of a library Signed-off-by: Felipe Neves --- README.md | 14 +- app/CMakeLists.txt | 40 +++ app/boards/esp32s3_devkitm.conf | 1 + app/boards/esp32s3_devkitm.overlay | 19 ++ .../espfoc_app_core/esp_foc_app.c | 0 app/espfoc_app_core/esp_foc_app_shell.c | 0 app/espfoc_motor_core/CMakeLists.txt | 19 ++ .../boards/esp32s3_devkitm_appcpu.overlay | 172 +++++++++++ app/espfoc_motor_core/esp_foc_hardware_if.c | 268 ++++++++++++++++++ .../espfoc_motor_core/esp_foc_hardware_if.h | 13 +- app/espfoc_motor_core/esp_foc_motor.c | 82 ++++++ app/espfoc_motor_core/prj.conf | 13 + app/prj.conf | 6 + common/include/espFoC/ipc/esp_foc_ipc.h | 79 ++++++ .../include/espFoC/motor_control}/esp_foc.h | 16 +- .../motor_control}/esp_foc_motor_interface.h | 38 ++- .../espFoC/motor_control}/esp_foc_pid.h | 0 .../espFoC/motor_control}/esp_foc_svm.h | 0 common/ipc/esp_foc_ipc.c | 83 ++++++ {src => common/motor_control}/esp_foc.c | 51 +++- .../motor_control}/esp_foc_consts.c | 0 .../motor_control}/esp_foc_our_sin_cos.c | 0 {src => common/motor_control}/esp_foc_pid.c | 2 +- {src => common/motor_control}/esp_foc_svm.c | 2 +- doc/images/arch.png | Bin 0 -> 117374 bytes examples/stubs/main.cpp | 35 --- examples/stubs/motor_hardware_stub.c | 133 --------- 27 files changed, 886 insertions(+), 200 deletions(-) create mode 100644 app/CMakeLists.txt create mode 100644 app/boards/esp32s3_devkitm.conf create mode 100644 app/boards/esp32s3_devkitm.overlay rename CMakeLists.txt => app/espfoc_app_core/esp_foc_app.c (100%) create mode 100644 app/espfoc_app_core/esp_foc_app_shell.c create mode 100644 app/espfoc_motor_core/CMakeLists.txt create mode 100644 app/espfoc_motor_core/boards/esp32s3_devkitm_appcpu.overlay create mode 100644 app/espfoc_motor_core/esp_foc_hardware_if.c rename examples/stubs/motor_hardware_stub.h => app/espfoc_motor_core/esp_foc_hardware_if.h (82%) create mode 100644 app/espfoc_motor_core/esp_foc_motor.c create mode 100644 app/espfoc_motor_core/prj.conf create mode 100644 app/prj.conf create mode 100644 common/include/espFoC/ipc/esp_foc_ipc.h rename {include/espFoC => common/include/espFoC/motor_control}/esp_foc.h (86%) rename {include/espFoC => common/include/espFoC/motor_control}/esp_foc_motor_interface.h (72%) rename {include/espFoC => common/include/espFoC/motor_control}/esp_foc_pid.h (100%) rename {include/espFoC => common/include/espFoC/motor_control}/esp_foc_svm.h (100%) create mode 100644 common/ipc/esp_foc_ipc.c rename {src => common/motor_control}/esp_foc.c (85%) rename {src => common/motor_control}/esp_foc_consts.c (100%) rename {src => common/motor_control}/esp_foc_our_sin_cos.c (100%) rename {src => common/motor_control}/esp_foc_pid.c (98%) rename {src => common/motor_control}/esp_foc_svm.c (98%) create mode 100644 doc/images/arch.png delete mode 100644 examples/stubs/main.cpp delete mode 100644 examples/stubs/motor_hardware_stub.c diff --git a/README.md b/README.md index 268e95c..ae90190 100644 --- a/README.md +++ b/README.md @@ -3,22 +3,26 @@ ![Build](https://github.com/uLipe/espFoC/workflows/Build/badge.svg) [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT) -espFoC is a simple implementation of voltage mode, vector controller intended to be used with permanent-magnet synchronous motors (PMSM), and general brushless motors. This component was developed to be used with Zephyr RTOS for example and is aimed to transform -your esp32 chip into a dual axis PMSM motor controller chip +espFoC is a simple implementation of voltage mode, vector controller intended to be used with permanent-magnet synchronous motors (PMSM), and general brushless motors for ESP32S3 Espressif SoC, other SoC from espressif might be supported but the primary requirement is to be a dual +core variant. espFoC started as a library for motor control, but it suffered a goal change, and now it is intended to create a programmable +BLDC (FoC based) motor control-IC, the dual core capabillity splits the controller into application side and motor control core side +the former is intended for user to write it own application or exchange packets with external controller via CAN-Bus, the later is +100% focused on perform motor control algorithm achieving better control bandwidth. Up two axis are supported in this new variant, refer the +simplified architecture below: +![espFoC Simplified Architecture](/doc/images/arch.png) ## Features: * Voltage mode control, control a PMSM like a DC motor!; * Position and Speed closed-loop control; * Single-precision Floating point implementation; -* Sample inverter driver based on esp32 LEDC PWM (easy to wire!); -* Sample rotor position driver based on as5600 encoder (very popular!); +* Easy to wire motor using common drivers and I2C encoders out there! * Uses openAMP to offload motor control tasks to one of the core, and leave the other for communication; * support UART and CAN communication; ## Limitations: -* Support for esp32 and esp32s3 only; +* Support for esp32 and esp32s3(primary) only; * Requires and rotor position sensor, for example, incremental encoder. ## Getting started: diff --git a/app/CMakeLists.txt b/app/CMakeLists.txt new file mode 100644 index 0000000..6243673 --- /dev/null +++ b/app/CMakeLists.txt @@ -0,0 +1,40 @@ +# SPDX-License-Identifier: Apache-2.0 + +cmake_minimum_required(VERSION 3.20.0) + +set(REMOTE_ZEPHYR_DIR ${CMAKE_CURRENT_BINARY_DIR}/ipm_esp32_appcpu-prefix/src/ipm_esp32_appcpu-build/zephyr) + +if("${BOARD}" STREQUAL "esp32s3_devkitm/esp32s3/procpu") +set(BOARD_REMOTE "esp32s3_devkitm/esp32s3/appcpu") +else() + message(FATAL_ERROR "${BOARD} was not supported for this project yet!") +endif() + +find_package(Zephyr REQUIRED HINTS $ENV{ZEPHYR_BASE}) +project(espfoc) + +set(MOTOR_CONTROL_SRC ${APPLICATION_SOURCE_DIR}/../common) +set(MOTOR_CONTROL_INC ${APPLICATION_SOURCE_DIR}/../common/include/espFoC) + +FILE(GLOB ipc ${MOTOR_CONTROL_SRC}/ipc/*.c) + +set_source_files_properties(${REMOTE_ZEPHYR_DIR}/esp32_appcpu_firmware.c PROPERTIES GENERATED TRUE) +target_sources(app PRIVATE esp_foc_app_core/esp_foc_app.c + esp_foc_app_core/esp_foc_app_shell.c + ${ipc} + ${REMOTE_ZEPHYR_DIR}/esp32_appcpu_firmware.c) + +target_include_directories(app PRIVATE ${MOTOR_CONTROL_INC}) + +include(ExternalProject) + +ExternalProject_Add( + espfoc_remote + SOURCE_DIR ${APPLICATION_SOURCE_DIR}/espfoc_motor_core + INSTALL_COMMAND "" + CMAKE_CACHE_ARGS -DBOARD:STRING=${BOARD_REMOTE} + BUILD_BYPRODUCTS "${REMOTE_ZEPHYR_DIR}/${KERNEL_BIN_NAME}" + BUILD_ALWAYS True +) + +add_dependencies(app espfoc_remote) diff --git a/app/boards/esp32s3_devkitm.conf b/app/boards/esp32s3_devkitm.conf new file mode 100644 index 0000000..a8ee714 --- /dev/null +++ b/app/boards/esp32s3_devkitm.conf @@ -0,0 +1 @@ +CONFIG_SOC_ESP32S3_PROCPU=y diff --git a/app/boards/esp32s3_devkitm.overlay b/app/boards/esp32s3_devkitm.overlay new file mode 100644 index 0000000..ad437c1 --- /dev/null +++ b/app/boards/esp32s3_devkitm.overlay @@ -0,0 +1,19 @@ +/* + * Copyright (c) 2023 Felipe Neves + * + * SPDX-License-Identifier: Apache-2.0 + */ + +/ { + chosen { + /* + * shared memory reserved for the inter-processor communication + */ + zephyr,ipc_shm = &shm0; + zephyr,ipc = &ipm0; + }; +}; + +&ipm0 { + status = "okay"; +}; diff --git a/CMakeLists.txt b/app/espfoc_app_core/esp_foc_app.c similarity index 100% rename from CMakeLists.txt rename to app/espfoc_app_core/esp_foc_app.c diff --git a/app/espfoc_app_core/esp_foc_app_shell.c b/app/espfoc_app_core/esp_foc_app_shell.c new file mode 100644 index 0000000..e69de29 diff --git a/app/espfoc_motor_core/CMakeLists.txt b/app/espfoc_motor_core/CMakeLists.txt new file mode 100644 index 0000000..dceaa4b --- /dev/null +++ b/app/espfoc_motor_core/CMakeLists.txt @@ -0,0 +1,19 @@ +# SPDX-License-Identifier: Apache-2.0 + +cmake_minimum_required(VERSION 3.20.0) + +find_package(Zephyr REQUIRED HINTS $ENV{ZEPHYR_BASE}) +project(espfoc_remote) + +set(MOTOR_CONTROL_SRC ${APPLICATION_SOURCE_DIR}/../../common) +set(MOTOR_CONTROL_INC ${APPLICATION_SOURCE_DIR}/../../common/include/espFoC) + +FILE(GLOB ipc ${MOTOR_CONTROL_SRC}/ipc/*.c) +FILE(GLOB motor_control ${MOTOR_CONTROL_SRC}/motor_control/*.c) + +target_sources(app PRIVATE esp_foc_motor.c + esp_foc_hardware_if.c + ${ipc} + ${motor_control}) + +target_include_directories(app PRIVATE ${MOTOR_CONTROL_INC}) diff --git a/app/espfoc_motor_core/boards/esp32s3_devkitm_appcpu.overlay b/app/espfoc_motor_core/boards/esp32s3_devkitm_appcpu.overlay new file mode 100644 index 0000000..e82605e --- /dev/null +++ b/app/espfoc_motor_core/boards/esp32s3_devkitm_appcpu.overlay @@ -0,0 +1,172 @@ +/* + * Copyright (c) 2023 Felipe Neves + * + * SPDX-License-Identifier: Apache-2.0 + */ + #include + #include + #include + +/ { + chosen { + /* + * shared memory reserved for the inter-processor communication + */ + zephyr,ipc_shm = &shm0; + zephyr,ipc = &ipm0; + }; + + aliases { + motor-pwm-0 = &ledc0; + motor-pwm-1 = &ledc1; + angle-0 = &i2c0; + angle-0 = &i2c1; + }; + + gpio_enable { + compatible = "gpio-keys"; + inverter_enable_0: button { + label = "inverter_enable"; + gpios = <&gpio0 9 GPIO_ACTIVE_HIGH>; + }; + + inverter_enable_1: button { + label = "inverter_enable"; + gpios = <&gpio0 10 GPIO_ACTIVE_HIGH>; + }; + + }; +}; + +&pinctrl { + ledc0_default: ledc0_default { + group1 { + pinmux = ; + output-enable; + }; + group2 { + pinmux = ; + output-enable; + }; + group3 { + pinmux = ; + output-enable; + }; + + }; + + i2c0_default: i2c0_default { + group1 { + pinmux = , + ; + bias-pull-up; + drive-open-drain; + output-high; + }; + }; + + ledc1_default: ledc1_default { + group1 { + pinmux = ; + output-enable; + }; + group2 { + pinmux = ; + output-enable; + }; + group3 { + pinmux = ; + output-enable; + }; + + }; + + i2c1_default: i2c1_default { + group1 { + pinmux = , + ; + bias-pull-up; + drive-open-drain; + output-high; + }; + }; + +}; + +&ipm0 { + status = "okay"; +}; + +&ledc0 { + pinctrl-0 = <&ledc0_default>; + pinctrl-names = "default"; + status = "okay"; + #address-cells = <1>; + #size-cells = <0>; + channel0@0 { + reg = <0x0>; + timer = <0>; + }; + + channel1@0 { + reg = <0x0>; + timer = <0>; + }; + + channel2@0 { + reg = <0x0>; + timer = <0>; + }; +}; + +&i2c0 { + pinctrl-0 = <&i2c0_default>; + pinctrl-names = "default"; + status = "okay"; + clock-frequency = ; + + angle_sensor_0: as5600@36 { + compatible = "ams,as5600"; + status = "okay"; + reg = <0x36> + }; +}; + +&ledc1 { + pinctrl-0 = <&ledc1_default>; + pinctrl-names = "default"; + status = "okay"; + #address-cells = <1>; + #size-cells = <0>; + channel0@0 { + reg = <0x0>; + timer = <0>; + }; + + channel1@0 { + reg = <0x0>; + timer = <0>; + }; + + channel2@0 { + reg = <0x0>; + timer = <0>; + }; +}; + +&i2c1 { + pinctrl-0 = <&i2c1_default>; + pinctrl-names = "default"; + status = "okay"; + clock-frequency = ; + + angle_sensor_0: as5600@36 { + compatible = "ams,as5600"; + status = "okay"; + reg = <0x36> + }; +}; + +&timer3 { + status = "okay"; +}; \ No newline at end of file diff --git a/app/espfoc_motor_core/esp_foc_hardware_if.c b/app/espfoc_motor_core/esp_foc_hardware_if.c new file mode 100644 index 0000000..ad476ff --- /dev/null +++ b/app/espfoc_motor_core/esp_foc_hardware_if.c @@ -0,0 +1,268 @@ +/* + * MIT License + * + * Copyright (c) 2021 Felipe Neves + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include "esp_foc_hardware_if.h" + +#define PWM_PERIOD_NSEC 31250 +#define DC_BUS_VOLTAGE 24.0f + +struct z_esp_foc_motor_if { + struct device *pwm_device; + struct device *angle_sensor; + struct gpio_dt_spec enable_pins; + float accumulated_angle_deg; + float current_rotor_deg; + float prev_rotor_deg; + float current_rotor_speed_dps; + struct esp_foc_motor_interface interface; +}; + +static int reset(struct esp_foc_motor_interface *self) +{ + int ret; + + ret = esp_foc_motor_enable(self); + if (ret < 0) { + return ret; + } + + return esp_foc_motor_align_rotor(self); +} + +static int enable(struct esp_foc_motor_interface *self) +{ + struct z_esp_foc_motor_if *if = CONTAINER_OF(self, struct z_esp_foc_motor_if, interface); + + ret = esp_foc_motor_set_duty_cycles(self, 0.0f, 0.0f, 0.0f); + if (ret < 0) { + return ret; + } + + k_msleep(100); + + gpio_pin_configure_dt(&enable_pins, GPIO_OUTPUT); + gpio_pin_set_dt(&enable_pins, 1); + + k_msleep(100); + + return 0; +} + +static int disable(struct esp_foc_motor_interface *self) +{ + struct z_esp_foc_motor_if *if = CONTAINER_OF(self, struct z_esp_foc_motor_if, interface); + + gpio_pin_configure_dt(&enable_pins, GPIO_OUTPUT); + gpio_pin_set_dt(&enable_pins, 1); + esp_foc_motor_set_duty_cycles(self, 0.0f, 0.0f, 0.0f); + k_msleep(100); + + return 0; +} + +static int align_rotor(struct esp_foc_motor_interface *self) +{ + int ret; + + ret = esp_foc_motor_set_duty_cycles(self, 0.0f, 0.0f, 0.0f); + if (ret < 0) { + return ret; + } + + k_msleep(500); + + ret = esp_foc_motor_set_duty_cycles(self, 0.2f, 0.0f, 0.0f); + if (ret < 0) { + return ret; + } + + k_msleep(500); + + return esp_foc_motor_fetch_sensors(self); +} + +static int set_duty_cycles(struct esp_foc_motor_interface *self, float dc_a, float dc_b, float dc_c) +{ + struct z_esp_foc_motor_if *if = CONTAINER_OF(self, struct z_esp_foc_motor_if, interface); + + if(dc_a > 1.0f) { + dc_a = 1.0f; + } else if (dc_a < 0.0f) { + dc_a = 0.0f; + } + + if(dc_b > 1.0f) { + dc_b = 1.0f; + } else if (dc_b < 0.0f) { + dc_b = 0.0f; + } + + if(dc_c > 1.0f) { + dc_c = 1.0f; + } else if (dc_c < 0.0f) { + dc_c = 0.0f; + } + + dc_a *= PWM_PERIOD_NSEC - 1; + dc_b *= PWM_PERIOD_NSEC - 1; + dc_c *= PWM_PERIOD_NSEC - 1; + + pwm_set(pwm_device, 1 , PWM_PERIOD_NSEC, dc_a, 0); + pwm_set(pwm_device, 2 , PWM_PERIOD_NSEC, dc_b, 0); + pwm_set(pwm_device, 3 , PWM_PERIOD_NSEC, dc_c, 0); + + return 0; +} + +static int get_rotor_angle(struct esp_foc_motor_interface *self, float *angle) +{ + struct z_esp_foc_motor_if *if = CONTAINER_OF(self, struct z_esp_foc_motor_if, interface); + + if(!angle) + return -EINVAL; + + *angle = if->current_rotor_deg; + + return 0; +} + +static int get_rotor_speed_dps(struct esp_foc_motor_interface *self, float *speed_dps) +{ + struct z_esp_foc_motor_if *if = CONTAINER_OF(self, struct z_esp_foc_motor_if, interface); + + if(!speed_dps) + return -EINVAL; + + *speed_dps = if->current_rotor_speed_dps; + + return 0; +} + +static int get_acumulated_angle(struct esp_foc_motor_interface *self, float *angle) +{ + struct z_esp_foc_motor_if *if = CONTAINER_OF(self, struct z_esp_foc_motor_if, interface); + + if(!angle) + return -EINVAL; + + *angle = if->accumulated_angle_deg; + + return 0; +} + +static int get_dc_bus_voltage(struct esp_foc_motor_interface *self, float *vdc) +{ + if(!vdc) + return -EINVAL; + + *vdc = DC_BUS_VOLTAGE; + + return 0; +} + +static int fetch_sensors(struct esp_foc_motor_interface *self) +{ + struct z_esp_foc_motor_if *if = CONTAINER_OF(self, struct z_esp_foc_motor_if, interface); + struct sensor_value raw; + int ret; + + if->prev_rotor_deg = if->current_rotor_deg; + + ret = sensor_sample_fetch(if->angle_sensor); + if(ret) { + return ret; + } + + ret = sensor_channel_get(if->angle_sensor, SENSOR_CHAN_ROTATION, &raw); + if(ret) { + return ret; + } + + if->current_rotor_deg = sensor_value_to_float(&raw); + if->current_rotor_speed_dps = (if->current_rotor_deg - if->prev_rotor_deg); + if->accumulated_angle_deg += if->current_rotor_speed_dps; + + return ret; +} + +static struct z_esp_foc_motor_if z_esp_hw_if[Z_ESP_FOC_MAX] = { + { + .pwm_device = DEVICE_DT_GET(DT_NODELABEL(ledc0)), + .angle_sensor = DEVICE_DT_GET(DT_NODELABEL(angle_sensor_0)), + .enable_pins = GPIO_DT_SPEC_GET_BY_IDX(DT_NODELABEL(inverter_enable_0),gpios,0), + .reset = reset, + .enable = enable, + .disable = disable, + .set_duty_cycles = set_duty_cycles, + .get_rotor_angle = get_rotor_angle, + .get_rotor_speed_dps = get_rotor_speed_dps, + .align_rotor = align_rotor, + .get_acumulated_angle = get_acumulated_angle, + .get_encoder_ppr = NULL, + .get_dc_bus_voltage = get_dc_bus_voltage, + .get_currents = NULL, + .number_of_shunts = NULL, + .fetch_sensors = fetch_sensors, + .current_rotor_deg = 0.0f, + .current_rotor_speed_dps = 0.0f, + .accumulated_angle_deg = 0.0f, + }, + { + .pwm_device = DEVICE_DT_GET(DT_NODELABEL(ledc1)), + .angle_sensor = DEVICE_DT_GET(DT_NODELABEL(angle_sensor_1)), + .enable_pins = GPIO_DT_SPEC_GET_BY_IDX(DT_NODELABEL(inverter_enable_1),gpios,0), + .reset = reset, + .enable = enable, + .disable = disable, + .set_duty_cycles = set_duty_cycles, + .get_rotor_angle = get_rotor_angle, + .get_rotor_speed_dps = get_rotor_speed_dps, + .align_rotor = align_rotor, + .get_acumulated_angle = get_acumulated_angle, + .get_encoder_ppr = NULL, + .get_dc_bus_voltage = get_dc_bus_voltage, + .get_currents = NULL, + .number_of_shunts = NULL, + .fetch_sensors = fetch_sensors, + .current_rotor_deg = 0.0f, + .current_rotor_speed_dps = 0.0f, + .accumulated_angle_deg = 0.0f, + } +} + +struct esp_foc_motor_interface* z_esp_foc_get_interface(enum zephyr_esp_foc_instances instance) +{ + if(instance >= Z_ESP_FOC_MAX) + return NULL; + + return &z_esp_hw_if.self[instance]; +} diff --git a/examples/stubs/motor_hardware_stub.h b/app/espfoc_motor_core/esp_foc_hardware_if.h similarity index 82% rename from examples/stubs/motor_hardware_stub.h rename to app/espfoc_motor_core/esp_foc_hardware_if.h index cc544d8..abe7b4d 100644 --- a/examples/stubs/motor_hardware_stub.h +++ b/app/espfoc_motor_core/esp_foc_hardware_if.h @@ -21,13 +21,14 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ -#pragma once +#pragma once -#include +#include -struct motor_hardware_stub { - struct esp_foc_motor_interface self; +enum zephyr_esp_foc_instances { + Z_ESP_FOC_1 = 0, + Z_ESP_FOC_2, + Z_ESP_FOC_MAX; }; -int motor_hardware_stub_init(struct motor_hardware_stub *stub, - struct esp_foc_motor_interface **itf); +struct esp_foc_motor_interface* z_esp_foc_get_interface(enum zephyr_esp_foc_instances instance); \ No newline at end of file diff --git a/app/espfoc_motor_core/esp_foc_motor.c b/app/espfoc_motor_core/esp_foc_motor.c new file mode 100644 index 0000000..25624ea --- /dev/null +++ b/app/espfoc_motor_core/esp_foc_motor.c @@ -0,0 +1,82 @@ +/* + * MIT License + * + * Copyright (c) 2021 Felipe Neves + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +#include +#include +#include +#include + +#define ESP_FOC_INNER_CONTROL_US_PERIOD (250) + +static const struct device *timer_dev = DEVICE_DT_GET(DT_INST(3,espressif_esp32_timer)); +static float now_seconds = 0.0f; +static struct counter_alarm_cfg alarm_cfg; +static struct esp_foc_motor_control axis; + +static struct esp_foc_pid pid_vel_1; +static struct esp_foc_pid pid_pos_1; + +static void esp_foc_control_work_handler(struct k_work *work) +{ + esp_foc_run(&axis); +} + +K_WORK_DEFINE(esp_foc_work, motor_control_work_handler); + +static void esp_foc_timer_isr(const struct device *counter_dev, + uint8_t chan_id, uint32_t ticks, + void *user_data) +{ + k_work_submit(&esp_foc_work); + counter_set_channel_alarm(timer_dev, 0, &alarm_cfg); +} + +/* We don't actually need a main function*/ +static int esp_foc_early_init(void) +{ + float sample_time_seconds = (float)ESP_FOC_INNER_CONTROL_US_PERIOD * 0.000001f; + + esp_foc_pid_init(&pid_vel_1, + sample_time_seconds * ESP_FOC_SPEED_CONTROL_RATIO, + 10000.0f); + + esp_foc_pid_init(&pid_pos_1, + sample_time_seconds * ESP_FOC_POSITION_CONTROL_RATIO, + 10000.0f); + + esp_foc_init_controller(&axis, z_esp_foc_get_interface(Z_ESP_FOC_1)); + esp_foc_add_position_control(&axis, &pid_pos_1); + esp_foc_add_speed_control(&axis, &pid_vel_1); + + counter_start(timer_dev); + alarm_cfg.flags = 0; + alarm_cfg.ticks = counter_us_to_ticks(timer_dev, CONTROL_PIPELINE_US_PERIOD); + alarm_cfg.callback = esp_foc_timer_isr; + alarm_cfg.user_data = &alarm_cfg; + counter_set_channel_alarm(timer_dev, 0, &alarm_cfg); + + return 0; +} + +SYS_INIT(esp_foc_early_init, POST_KERNEL, CONFIG_APPLICATION_INIT_PRIORITY); diff --git a/app/espfoc_motor_core/prj.conf b/app/espfoc_motor_core/prj.conf new file mode 100644 index 0000000..7b505d2 --- /dev/null +++ b/app/espfoc_motor_core/prj.conf @@ -0,0 +1,13 @@ +CONFIG_STDOUT_CONSOLE=n +CONFIG_PRINTK=n +CONFIG_HEAP_MEM_POOL_SIZE=256 + +CONFIG_IPM=y +CONFIG_PWM=y +CONFIG_I2C=y +CONFIG_SENSOR=y +CONFIG_COUNTER=y + +CONFIG_SENSOR=y +CONFIG_AMS_AS5600=y +CONFIG_FLOAT=y \ No newline at end of file diff --git a/app/prj.conf b/app/prj.conf new file mode 100644 index 0000000..3393bef --- /dev/null +++ b/app/prj.conf @@ -0,0 +1,6 @@ +CONFIG_PRINTK=y +CONFIG_IPM=y +CONFIG_TIMESLICE_SIZE=1 +CONFIG_MAIN_STACK_SIZE=8192 +CONFIG_HEAP_MEM_POOL_SIZE=2048 +CONFIG_FLOAT=y \ No newline at end of file diff --git a/common/include/espFoC/ipc/esp_foc_ipc.h b/common/include/espFoC/ipc/esp_foc_ipc.h new file mode 100644 index 0000000..0eed4ef --- /dev/null +++ b/common/include/espFoC/ipc/esp_foc_ipc.h @@ -0,0 +1,79 @@ +/* + * MIT License + * + * Copyright (c) 2024 Felipe Neves + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +#pragma once + +#include +#include +#include + +#define MOTOR_CMD_TORQUE_MASK 0x00 +#define MOTOR_CMD_SPEED_MASK 0x02 +#define MOTOR_CMD_POSITION_MASK 0x04 +#define MOTOR_CMD_SHUTDOWN_MASK 0x08 +#define MOTOR_CMD_RESET_MASK 0x10 + +struct motor_state { + uint32_t timestamp_us; + uint32_t position_mdeg; + uint32_t speed_mdps; + uint32_t qvoltage_mvolts; + uint32_t dvoltage_mvolts; + uint32_t encoder; + uint8_t power_state; + uint8_t last_cmd_result; + uint8_t motor_number; + uint8_t direction; +}; + +struct motor_command { + uint32_t command_mask; + uint32_t speed_mdps; + uint32_t qvoltage_mvolts; + uint32_t dvoltage_mvolts; + uint8_t power_state; + uint8_t motor_number; + uint8_t direction; + uint8_t res3; +}; + +typedef void (*esp_foc_ipc_motor_state_callback_t) (const struct motor_state *state); +typedef void (*esp_foc_ipc_motor_cmd_callback_t) (const struct motor_command *cmd); + +struct motor_report_callback { + esp_foc_ipc_motor_state_callback_t cmd_cb; + esp_foc_ipc_motor_cmd_callback_t state_cb + sys_dnode_t node; +}; + +#define ESP_FOC_DEFINE_IPC_CALLBACK(name,cmd_callback, state_callback) \ +struct motor_report_callback cn_##name = { \ + .state_cb = state_callback, \ + .state_cb = cmd_callback, \ +} + +int esp_foc_ipc_init(void); +int esp_foc_ipc_send_command(const struct motor_command *cmd); +int esp_foc_ipc_send_state(const struct motor_state *state); +int esp_foc_ipc_register_callback(const struct motor_report_callback *cb); diff --git a/include/espFoC/esp_foc.h b/common/include/espFoC/motor_control/esp_foc.h similarity index 86% rename from include/espFoC/esp_foc.h rename to common/include/espFoC/motor_control/esp_foc.h index 0105b2a..90b22a4 100644 --- a/include/espFoC/esp_foc.h +++ b/common/include/espFoC/motor_control/esp_foc.h @@ -24,11 +24,12 @@ #pragma once +#include #include #include -#include -#include -#include +#include "esp_foc_motor_interface.h" +#include "esp_foc_svm.h" +#include "esp_foc_pid.h" struct esp_foc_motor_control { struct esp_foc_motor_interface *motor_hw; @@ -42,8 +43,13 @@ struct esp_foc_motor_control { float target_position_degrees; float current_speed_dps; float current_position_degrees; + + bool is_enabled; }; +extern const int ESP_FOC_SPEED_CONTROL_RATIO; +extern const int ESP_FOC_POSITION_CONTROL_RATIO; + int esp_foc_init_controller(struct esp_foc_motor_control *ctl, const struct esp_foc_motor_interface *hw); @@ -59,4 +65,8 @@ int esp_foc_add_position_control(struct esp_foc_motor_control *ctl, int esp_foc_add_speed_control(struct esp_foc_motor_control *ctl, const struct esp_foc_pid *speed_pid); +int esp_foc_enable_axis(struct esp_foc_motor_control *ctl); + +int esp_foc_disable_axis(struct esp_foc_motor_control *ctl); + int esp_foc_controller_run(struct esp_foc_motor_control *ctl); diff --git a/include/espFoC/esp_foc_motor_interface.h b/common/include/espFoC/motor_control/esp_foc_motor_interface.h similarity index 72% rename from include/espFoC/esp_foc_motor_interface.h rename to common/include/espFoC/motor_control/esp_foc_motor_interface.h index 3322acd..a103a23 100644 --- a/include/espFoC/esp_foc_motor_interface.h +++ b/common/include/espFoC/motor_control/esp_foc_motor_interface.h @@ -27,6 +27,7 @@ struct esp_foc_motor_interface { int (*reset)(struct esp_foc_motor_interface *self); int (*enable)(struct esp_foc_motor_interface *self); + int (*disable)(struct esp_foc_motor_interface *self); int (*set_duty_cycles)(struct esp_foc_motor_interface *self, float a, float b, float c); int (*get_rotor_angle)(struct esp_foc_motor_interface *self, float *angle); int (*get_rotor_speed_dps)(struct esp_foc_motor_interface *self, float *speed_dps); @@ -39,7 +40,7 @@ struct esp_foc_motor_interface { int (*fetch_sensors)(struct esp_foc_motor_interface *self); }; -int esp_foc_motor_reset(struct esp_foc_motor_interface *self) +static inline int esp_foc_motor_reset(struct esp_foc_motor_interface *self) { if(!self) return -EINVAL; @@ -51,7 +52,7 @@ int esp_foc_motor_reset(struct esp_foc_motor_interface *self) } -int esp_foc_motor_enable(struct esp_foc_motor_interface *self) +static inline int esp_foc_motor_enable(struct esp_foc_motor_interface *self) { if(!self) return -EINVAL; @@ -62,7 +63,18 @@ int esp_foc_motor_enable(struct esp_foc_motor_interface *self) return self->enable(self); } -int esp_foc_motor_set_duty_cycles(struct esp_foc_motor_interface *self, float a, float b, float c) +static inline int esp_foc_motor_disable(struct esp_foc_motor_interface *self) +{ + if(!self) + return -EINVAL; + + if(!self->disable) + return -ENOTSUP; + + return self->disable(self); +} + +static inline int esp_foc_motor_set_duty_cycles(struct esp_foc_motor_interface *self, float a, float b, float c) { if(!self) return -EINVAL; @@ -73,7 +85,7 @@ int esp_foc_motor_set_duty_cycles(struct esp_foc_motor_interface *self, float a, return self->set_duty_cycles(Self, a, b, c); } -int esp_foc_motor_get_rotor_angle(struct esp_foc_motor_interface *self, float *angle) +static inline int esp_foc_motor_get_rotor_angle(struct esp_foc_motor_interface *self, float *angle) { if(!self) return -EINVAL; @@ -84,7 +96,7 @@ int esp_foc_motor_get_rotor_angle(struct esp_foc_motor_interface *self, float *a return self->get_rotor_angle(self, angle); } -int esp_foc_motor_get_rotor_speed_dps(struct esp_foc_motor_interface *self, float *speed_dps) +static inline int esp_foc_motor_get_rotor_speed_dps(struct esp_foc_motor_interface *self, float *speed_dps) { if(!self) return -EINVAL; @@ -95,7 +107,7 @@ int esp_foc_motor_get_rotor_speed_dps(struct esp_foc_motor_interface *self, floa return self->get_rotor_speed_dps(self, speed_dps); } -int esp_foc_motor_align_rotor(struct esp_foc_motor_interface *self) +static inline int esp_foc_motor_align_rotor(struct esp_foc_motor_interface *self) { if(!self) return -EINVAL; @@ -106,7 +118,7 @@ int esp_foc_motor_align_rotor(struct esp_foc_motor_interface *self) return self->align_rotor(self); } -int esp_foc_motor_get_acumulated_angle(struct esp_foc_motor_interface *self, float *angle) +static inline int esp_foc_motor_get_acumulated_angle(struct esp_foc_motor_interface *self, float *angle) { if(!self) return -EINVAL; @@ -117,7 +129,7 @@ int esp_foc_motor_get_acumulated_angle(struct esp_foc_motor_interface *self, flo return self->get_acumulated_angle(self, angle); } -int esp_foc_motor_get_encoder_ppr(struct esp_foc_motor_interface *self, float *ppr) +static inline int esp_foc_motor_get_encoder_ppr(struct esp_foc_motor_interface *self, float *ppr) { if(!self) return -EINVAL; @@ -128,7 +140,7 @@ int esp_foc_motor_get_encoder_ppr(struct esp_foc_motor_interface *self, float *p return self->get_encoder_ppr(self, ppr); } -int esp_foc_motor_get_dc_bus_voltage(struct esp_foc_motor_interface *self, float *vdc) +static inline int esp_foc_motor_get_dc_bus_voltage(struct esp_foc_motor_interface *self, float *vdc) { if(!self) return -EINVAL; @@ -139,7 +151,7 @@ int esp_foc_motor_get_dc_bus_voltage(struct esp_foc_motor_interface *self, float return self->get_dc_bus_voltage(self, vdc); } -int esp_foc_motor_get_currents(struct esp_foc_motor_interface *self, float *ia, float *ib, float *ic) +static inline int esp_foc_motor_get_currents(struct esp_foc_motor_interface *self, float *ia, float *ib, float *ic) { if(!self) return -EINVAL; @@ -150,7 +162,7 @@ int esp_foc_motor_get_currents(struct esp_foc_motor_interface *self, float *ia, return self->get_currents(self, ia, ib, ic); } -int esp_foc_motor_number_of_shunts(struct esp_foc_motor_interface *self, int *shunts) +static inline int esp_foc_motor_number_of_shunts(struct esp_foc_motor_interface *self, int *shunts) { if(!self) return -EINVAL; @@ -161,7 +173,7 @@ int esp_foc_motor_number_of_shunts(struct esp_foc_motor_interface *self, int *sh return self->number_of_shunts(self, shunts); } -int esp_foc_motor_fetch_sensors(struct esp_foc_motor_interface *self) +static inline int esp_foc_motor_fetch_sensors(struct esp_foc_motor_interface *self) { if(!self) return -EINVAL; @@ -170,4 +182,4 @@ int esp_foc_motor_fetch_sensors(struct esp_foc_motor_interface *self) return -ENOTSUP; return self->fetch_sensors(self); -} \ No newline at end of file +} diff --git a/include/espFoC/esp_foc_pid.h b/common/include/espFoC/motor_control/esp_foc_pid.h similarity index 100% rename from include/espFoC/esp_foc_pid.h rename to common/include/espFoC/motor_control/esp_foc_pid.h diff --git a/include/espFoC/esp_foc_svm.h b/common/include/espFoC/motor_control/esp_foc_svm.h similarity index 100% rename from include/espFoC/esp_foc_svm.h rename to common/include/espFoC/motor_control/esp_foc_svm.h diff --git a/common/ipc/esp_foc_ipc.c b/common/ipc/esp_foc_ipc.c new file mode 100644 index 0000000..c0298b2 --- /dev/null +++ b/common/ipc/esp_foc_ipc.c @@ -0,0 +1,83 @@ +/* + * MIT License + * + * Copyright (c) 2024 Felipe Neves + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +#include +#include +#include + +#define DIRECTION_TX 0x01 +#define DIRECTION_RX 0x81 + +static const struct device *ipc_dev = DEVICE_DT_GET(espfoc_ipc_dev); +static uint8_t *ipc_shm = DT_REG_ADDR(DT_NODELABEL(espfoc_shm)); +const static uint32_t ipc_shm_size = DT_REG_SIZE(DT_NODELABEL(espfoc_shm)); + +static struct motor_command *tx_motor_cmd; +static struct motor_command *rx_motor_cmd; +static struct motor_state *tx_motor_state; +static struct motor_state *rx_motor_state; + +BUILD_ASSERT(ipc_shm_size >= (2 * sizeof(motor_command)) + + (2 * sizeof(motor_state)), "Not enough shared memory!"); + +#define TX_CMD_OFFSET 0 +#define RX_CMD_OFFSET (TX_CMD_OFFSET + sizeof(struct motor_command)) +#define TX_STATE_OFFSET (RX_CMD_OFFSET + sizeof(struct motor_command)) +#define RX_STATE_OFFSET (TX_STATE_OFFSET + sizeof(struct motor_state)) + +static sys_dlist_t ipc_callbacks; + +static void ipc_dev_callback(const struct device *dev, void *context, + uint32_t id, volatile void *data) +{ + +} + +int esp_foc_ipc_init(void) +{ + tx_motor_cmd = (struct motor_command *)&ipc_shm[TX_CMD_OFFSET]; + rx_motor_cmd = (struct motor_command *)&ipc_shm[RX_CMD_OFFSET]; + tx_motor_state = (struct motor_state *)&ipc_shm[TX_STATE_OFFSET]; + rx_motor_state = (struct motor_state *)&ipc_shm[RX_STATE_OFFSET]; + + sys_dlist_init(&ipc_callbacks); + ipm_register_callback(ipc_dev, ipc_dev_callback, NULL); + ipm_set_enabled(ipc_dev, 1); + + return 0; +} +int esp_foc_ipc_send_command(const struct motor_command *cmd) +{ + return 0; +} + +int esp_foc_ipc_send_state(const struct motor_state *state) +{ + return 0; +} + +int esp_foc_ipc_register_callback(const struct motor_report_callback *cb) +{ + return 0; +} diff --git a/src/esp_foc.c b/common/motor_control/esp_foc.c similarity index 85% rename from src/esp_foc.c rename to common/motor_control/esp_foc.c index dc33bfb..2dc9c3c 100644 --- a/src/esp_foc.c +++ b/common/motor_control/esp_foc.c @@ -23,7 +23,7 @@ */ #include -#include +#include extern const float ESP_FOC_M_PI; extern const float ESP_FOC_2_M_PI; @@ -78,11 +78,13 @@ int esp_foc_init_controller(struct esp_foc_motor_control *ctl, ctl->target_position = 0.0f; ctl->motor_hw = hw; - if(esp_foc_motor_enable(ctl->motor_hw)) { + if(esp_foc_motor_disable(ctl->motor_hw)) { return -ENODEV; } - return esp_foc_motor_reset(ctl->motor_hw); + ctl->is_enabled = false; + + return 0; } int esp_foc_controller_set_speed(struct esp_foc_motor_control *ctl, @@ -130,6 +132,46 @@ int esp_foc_add_speed_control(struct esp_foc_motor_control *ctl, return 0; } +int esp_foc_enable_axis(struct esp_foc_motor_control *ctl) +{ + if(!ctl) + return -EINVAL; + + if(ctl->is_enabled) + return EALREADY; + + int r = esp_foc_motor_enable(ctl->hw) + if(r) + return r; + + r = esp_foc_motor_reset(ctl->motor_hw); + if(r) + return r; + + ctl->is_enabled = true; + + return 0; +} + +int esp_foc_disable_axis(struct esp_foc_motor_control *ctl) +{ + if(!ctl) + return -EINVAL; + + if(!ctl->is_enabled) + return EALREADY; + + int r = esp_foc_motor_disable(ctl->hw) + if(r) + return r; + + ctl->target_speed = 0.0f; + ctl->target_position = 0.0f; + ctl->is_enabled = false; + + return 0; +} + int esp_foc_controller_run(struct esp_foc_motor_control *ctl) { float vd = 0.0f; @@ -141,6 +183,9 @@ int esp_foc_controller_run(struct esp_foc_motor_control *ctl) if(!ctl) return -EINVAL; + if(!ctl->is_enabled) + return -EIO; + esp_foc_motor_fetch_sensors(ctl->hw); if(ctl->pid_position) { diff --git a/src/esp_foc_consts.c b/common/motor_control/esp_foc_consts.c similarity index 100% rename from src/esp_foc_consts.c rename to common/motor_control/esp_foc_consts.c diff --git a/src/esp_foc_our_sin_cos.c b/common/motor_control/esp_foc_our_sin_cos.c similarity index 100% rename from src/esp_foc_our_sin_cos.c rename to common/motor_control/esp_foc_our_sin_cos.c diff --git a/src/esp_foc_pid.c b/common/motor_control/esp_foc_pid.c similarity index 98% rename from src/esp_foc_pid.c rename to common/motor_control/esp_foc_pid.c index 83085e6..f179afc 100644 --- a/src/esp_foc_pid.c +++ b/common/motor_control/esp_foc_pid.c @@ -22,7 +22,7 @@ * SOFTWARE. */ -#include +#include int esp_foc_pid_init(struct esp_foc_pid *p, float sample_time_seconds, float integral_limit) { diff --git a/src/esp_foc_svm.c b/common/motor_control/esp_foc_svm.c similarity index 98% rename from src/esp_foc_svm.c rename to common/motor_control/esp_foc_svm.c index 47861b7..39c9766 100644 --- a/src/esp_foc_svm.c +++ b/common/motor_control/esp_foc_svm.c @@ -2,7 +2,7 @@ * Copyright (c) 2021 Teslabs Engineering S.L. * SPDX-License-Identifier: Apache-2.0 */ -#include +#include extern const float ESP_FOC_SQRT3; extern const float ESP_FOC_1_SQRT3; diff --git a/doc/images/arch.png b/doc/images/arch.png new file mode 100644 index 0000000000000000000000000000000000000000..9ddd3099c4028e1333ecb1a86f29089f6b913f54 GIT binary patch literal 117374 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 -#include -#include -#include - -struct motor_hardware_stub stub; -struct esp_foc_motor_interface *hw; -struct esp_foc_motor_control control; -int should_stop = 0; - -using namespace std; - -int main(int argc, char **argv) -{ - int err; - - err = motor_hardware_stub_init(&stub, &hw); - if(err) - cout << "failed to initialize the motor hardware err:" << err << endl; - - err = esp_foc_init_controller(&control, hw); - if(err) - cout << "failed to initialize esp foc controller err:" << err << endl; - - err = esp_foc_controller_set_speed(&control, 360.0f); - if(err) - cout << "failed to set the initial speed err" << err << endl; - - while(!should_stop) { - err = esp_foc_controller_run(&ctl); - if(err) - cout << "error when running controller err:" << err << endl; - usleep(1000); - } -} diff --git a/examples/stubs/motor_hardware_stub.c b/examples/stubs/motor_hardware_stub.c deleted file mode 100644 index 44a46bc..0000000 --- a/examples/stubs/motor_hardware_stub.c +++ /dev/null @@ -1,133 +0,0 @@ -/* - * MIT License - * - * Copyright (c) 2021 Felipe Neves - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ -#include -#include "motor_hardware_stub.h" - -static const float pole_pairs = 12.0f; -static float erotor_angle = 0.0f; -static const float angle_step_per_ms = 0.36f; - -static int normalize_angle(float *angle) -{ - if(!angle) - return -EINVAL; - - float result = fmod(*angle, (2.0 * 3.141569f)); - if(result > 3.141569f) { - result -= 3.141569f; - } - - *angle = result; - - return 0; -} - -static int reset(struct esp_foc_motor_interface *self) -{ - if(!self) - return -EINVAL; - - return 0; -} - -static int enable(struct esp_foc_motor_interface *self) -{ - if(!self) - return -EINVAL; - - return 0; -} - -static int set_duty_cycles(struct esp_foc_motor_interface *self, float a, float b, float c) -{ - if(!self) - return -EINVAL; - - (void)a; - (void)b; - (void)c; - - return 0; -} - -static int get_rotor_angle(struct esp_foc_motor_interface *self, float *angle) -{ - if(!self || !angle) - return -EINVAL; - - *angle = erotor_angle * pole_pairs; - - return normalize_angle(angle); -} - -static int get_rotor_speed_dps(struct esp_foc_motor_interface *self, float *speed_dps) -{ - if(!self || speed_dps) - return -EINVAL; - - - //360 dps -> 1 RPS -> 1 RPM; - *speed_dps = 360.0f; - - return 0; -} - -static int align_rotor(struct esp_foc_motor_interface *self) -{ - if(!self) - return -EINVAL; - - return 0; -} - -static int fetch_sensors(struct esp_foc_motor_interface *self) -{ - if(!self) - return -EINVAL; - - erotor_angle += angle_step_per_ms; - if(e_angle > 360.0f) { - erotor_angle -= 360.0f; - } - - return 0; -} - -int motor_hardware_stub_init(struct motor_hardware_stub *stub, - struct esp_foc_motor_interface **itf) -{ - if(!stub) - return -EINVAL; - - stub->self->reset = reset; - stub->self->enable = enable; - stub->self->set_duty_cycles = set_duty_cycles; - stub->self->get_rotor_angle = get_rotor_angle; - stub->self->get_rotor_speed_dps = get_rotor_speed_dps; - stub->self->align_rotor = align_rotor; - stub->self->fetch_sensors = fetch_sensors; - - itf = stub->self; - return 0; -} \ No newline at end of file