fix
This commit is contained in:
parent
fa67d84a46
commit
cfde78e9dc
@ -28,6 +28,19 @@ elseif(UNIX)
|
|||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
|
||||||
|
# set(MCU_FLAGS "-mcpu=cortex-m4 -mthumb -mthumb-interwork -mfpu=fpv4-sp-d16 -mfloat-abi=hard -ffunction-sections -fdata-sections")
|
||||||
|
#
|
||||||
|
# set(CMAKE_ASM_FLAGS "-c ${MCU_FLAGS} -x assembler-with-cpp -Wa,-mimplicit-it=thumb -gdwarf-2")
|
||||||
|
#
|
||||||
|
# set(CMAKE_C_FLAGS "${MCU_FLAGS} -Dgcc -w -Wno-unknown-pragmas -O0 -gdwarf-2 -g")
|
||||||
|
# set(CMAKE_C_FLAGS_DEBUG "-O0 -gdwarf-2 -g")
|
||||||
|
# set(CMAKE_C_FLAGS_RELEASE "-O3")
|
||||||
|
#
|
||||||
|
# set(LINKER_SCRIPT STM32F407ZGTX_FLASH.ld)
|
||||||
|
# set(CMAKE_EXE_LINKER_FLAGS "${MCU_FLAGS} -Wl,--gc-sections,-Map=${PROJECT_NAME}.map,--cref,-u,Reset_Handler -T${LINKER_SCRIPT}")
|
||||||
|
# set(CMAKE_EXE_LINKER_FLAGS "--specs=nano.specs -specs=nosys.specs -nostartfiles -T${LINKER_SCRIPT} -Wl,-Map=${PROJECT_BINARY_DIR}/${PROJECT_NAME}.map,--cref -Wl,--gc-sections")
|
||||||
|
|
||||||
|
|
||||||
# find additional toolchain executables
|
# find additional toolchain executables
|
||||||
find_program(ARM_SIZE_EXECUTABLE arm-none-eabi-size)
|
find_program(ARM_SIZE_EXECUTABLE arm-none-eabi-size)
|
||||||
find_program(ARM_GDB_EXECUTABLE arm-none-eabi-gdb)
|
find_program(ARM_GDB_EXECUTABLE arm-none-eabi-gdb)
|
||||||
|
@ -12,7 +12,7 @@
|
|||||||
#include "main.h"
|
#include "main.h"
|
||||||
|
|
||||||
hall_handle_t hall_handle;
|
hall_handle_t hall_handle;
|
||||||
|
foc_handle_t foc_handle;
|
||||||
|
|
||||||
/* Function ------------------------------------------------------------------*/
|
/* Function ------------------------------------------------------------------*/
|
||||||
|
|
||||||
@ -23,7 +23,16 @@ hall_handle_t hall_handle;
|
|||||||
int main(void)
|
int main(void)
|
||||||
{
|
{
|
||||||
board_init();
|
board_init();
|
||||||
|
// // FOC控制流程
|
||||||
|
// foc_handle.Vqd.d = 0;
|
||||||
|
// foc_handle.Vqd.q = 1;
|
||||||
|
// // 获取电角度
|
||||||
|
// // int16_t control_elec_angle = hall_handle.control_elec_angle;
|
||||||
|
// hall_handle.control_elec_angle++;
|
||||||
|
// // 计算Valpha Vbeta
|
||||||
|
// alphabeta_t Valphabeta = math_rev_park(foc_handle.Vqd, hall_handle.control_elec_angle);
|
||||||
|
// // 计算SVPWM输出
|
||||||
|
// // svmpw()
|
||||||
while (1)
|
while (1)
|
||||||
{
|
{
|
||||||
led_ctrl(1);
|
led_ctrl(1);
|
||||||
|
@ -20,10 +20,11 @@ extern "C"
|
|||||||
|
|
||||||
#include "stm32f4xx_hal.h"
|
#include "stm32f4xx_hal.h"
|
||||||
|
|
||||||
|
|
||||||
#include "usart.h"
|
#include "usart.h"
|
||||||
#include "gpio.h"
|
#include "gpio.h"
|
||||||
|
|
||||||
#include "hall.h"
|
#include "foc.h"
|
||||||
|
|
||||||
/* Functions ----------------------------------------------------------------*/
|
/* Functions ----------------------------------------------------------------*/
|
||||||
|
|
||||||
|
29
src/Foc/foc.h
Normal file
29
src/Foc/foc.h
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
/**
|
||||||
|
* @file foc.h
|
||||||
|
* @author jimingqing
|
||||||
|
* @date 2023-08-29
|
||||||
|
* @version 0.0.1
|
||||||
|
* @copyright XiazhiTech Copyright (c) 2023
|
||||||
|
*
|
||||||
|
* @brief
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "stm32f407xx.h"
|
||||||
|
|
||||||
|
#include "type.h"
|
||||||
|
#include "math.h"
|
||||||
|
#include "hall.h"
|
||||||
|
#include "svpwm.h"
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
uint8_t sector; // 扇区
|
||||||
|
|
||||||
|
qd_t Vqd;
|
||||||
|
|
||||||
|
uint16_t pwmA;
|
||||||
|
uint16_t pwmB;
|
||||||
|
uint16_t pwmC;
|
||||||
|
uint16_t pwm_period;
|
||||||
|
|
||||||
|
} foc_handle_t;
|
@ -1,11 +1,12 @@
|
|||||||
#include "svpwm.h"
|
#include "foc.h"
|
||||||
|
|
||||||
void svpwm(foc_handle_t *handle, int16_t alpha, int16_t beta)
|
void svpwm(foc_handle_t *handle, alphabeta_t v)
|
||||||
{
|
{
|
||||||
int32_t wX, wY, wZ, wUAlpha, wUBeta, wTimePhA, wTimePhB, wTimePhC;
|
int32_t wX, wY, wZ, wUAlpha, wUBeta, wTimePhA, wTimePhB, wTimePhC;
|
||||||
|
|
||||||
wUAlpha = alpha * (int32_t)handle->hT_Sqrt3;
|
// 后续还要根据该变量算三相占空比,所以这里乘以了周期T
|
||||||
wUBeta = -(beta * (int32_t)(handle->PWMperiod)) * 2;
|
wUAlpha = v.alpha * (int32_t)(1.732051f * handle->pwm_period) * 2;
|
||||||
|
wUBeta = -(v.beta * (int32_t)(handle->pwm_period)) * 2;
|
||||||
|
|
||||||
wX = wUBeta;
|
wX = wUBeta;
|
||||||
wY = (wUBeta + wUAlpha) / 2;
|
wY = (wUBeta + wUAlpha) / 2;
|
||||||
@ -17,33 +18,24 @@ void svpwm(foc_handle_t *handle, int16_t alpha, int16_t beta)
|
|||||||
if (wZ < 0)
|
if (wZ < 0)
|
||||||
{
|
{
|
||||||
handle->sector = SECTOR_5;
|
handle->sector = SECTOR_5;
|
||||||
wTimePhA = (int32_t)(pHandle->PWMperiod) / 4 + ((wY - wZ) / (int32_t)262144);
|
wTimePhA = (int32_t)(handle->pwm_period) / 4 + ((wY - wZ) / (int32_t)262144);
|
||||||
wTimePhB = wTimePhA + wZ / 131072;
|
wTimePhB = wTimePhA + wZ / 131072;
|
||||||
wTimePhC = wTimePhA - wY / 131072;
|
wTimePhC = wTimePhA - wY / 131072;
|
||||||
pHandle->lowDuty = wTimePhC;
|
|
||||||
pHandle->midDuty = wTimePhA;
|
|
||||||
pHandle->highDuty = wTimePhB;
|
|
||||||
}
|
}
|
||||||
else /* wZ >= 0 */
|
else /* wZ >= 0 */
|
||||||
if (wX <= 0)
|
if (wX <= 0)
|
||||||
{
|
{
|
||||||
handle->sector = SECTOR_4;
|
handle->sector = SECTOR_4;
|
||||||
wTimePhA = (int32_t)(pHandle->PWMperiod) / 4 + ((wX - wZ) / (int32_t)262144);
|
wTimePhA = (int32_t)(handle->pwm_period) / 4 + ((wX - wZ) / (int32_t)262144);
|
||||||
wTimePhB = wTimePhA + wZ / 131072;
|
wTimePhB = wTimePhA + wZ / 131072;
|
||||||
wTimePhC = wTimePhB - wX / 131072;
|
wTimePhC = wTimePhB - wX / 131072;
|
||||||
pHandle->lowDuty = wTimePhC;
|
|
||||||
pHandle->midDuty = wTimePhB;
|
|
||||||
pHandle->highDuty = wTimePhA;
|
|
||||||
}
|
}
|
||||||
else /* wX > 0 */
|
else /* wX > 0 */
|
||||||
{
|
{
|
||||||
handle->sector = SECTOR_3;
|
handle->sector = SECTOR_3;
|
||||||
wTimePhA = (int32_t)(pHandle->PWMperiod) / 4 + ((wY - wX) / (int32_t)262144);
|
wTimePhA = (int32_t)(handle->pwm_period) / 4 + ((wY - wX) / (int32_t)262144);
|
||||||
wTimePhC = wTimePhA - wY / 131072;
|
wTimePhC = wTimePhA - wY / 131072;
|
||||||
wTimePhB = wTimePhC + wX / 131072;
|
wTimePhB = wTimePhC + wX / 131072;
|
||||||
pHandle->lowDuty = wTimePhB;
|
|
||||||
pHandle->midDuty = wTimePhC;
|
|
||||||
pHandle->highDuty = wTimePhA;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else /* wY > 0 */
|
else /* wY > 0 */
|
||||||
@ -51,33 +43,24 @@ void svpwm(foc_handle_t *handle, int16_t alpha, int16_t beta)
|
|||||||
if (wZ >= 0)
|
if (wZ >= 0)
|
||||||
{
|
{
|
||||||
handle->sector = SECTOR_2;
|
handle->sector = SECTOR_2;
|
||||||
wTimePhA = (int32_t)(pHandle->PWMperiod) / 4 + ((wY - wZ) / (int32_t)262144);
|
wTimePhA = (int32_t)(handle->pwm_period) / 4 + ((wY - wZ) / (int32_t)262144);
|
||||||
wTimePhB = wTimePhA + wZ / 131072;
|
wTimePhB = wTimePhA + wZ / 131072;
|
||||||
wTimePhC = wTimePhA - wY / 131072;
|
wTimePhC = wTimePhA - wY / 131072;
|
||||||
pHandle->lowDuty = wTimePhB;
|
|
||||||
pHandle->midDuty = wTimePhA;
|
|
||||||
pHandle->highDuty = wTimePhC;
|
|
||||||
}
|
}
|
||||||
else /* wZ < 0 */
|
else /* wZ < 0 */
|
||||||
if (wX <= 0)
|
if (wX <= 0)
|
||||||
{
|
{
|
||||||
handle->sector = SECTOR_6;
|
handle->sector = SECTOR_6;
|
||||||
wTimePhA = (int32_t)(pHandle->PWMperiod) / 4 + ((wY - wX) / (int32_t)262144);
|
wTimePhA = (int32_t)(handle->pwm_period) / 4 + ((wY - wX) / (int32_t)262144);
|
||||||
wTimePhC = wTimePhA - wY / 131072;
|
wTimePhC = wTimePhA - wY / 131072;
|
||||||
wTimePhB = wTimePhC + wX / 131072;
|
wTimePhB = wTimePhC + wX / 131072;
|
||||||
pHandle->lowDuty = wTimePhA;
|
|
||||||
pHandle->midDuty = wTimePhC;
|
|
||||||
pHandle->highDuty = wTimePhB;
|
|
||||||
}
|
}
|
||||||
else /* wX > 0 */
|
else /* wX > 0 */
|
||||||
{
|
{
|
||||||
handle->sector = SECTOR_1;
|
handle->sector = SECTOR_1;
|
||||||
wTimePhA = (int32_t)(pHandle->PWMperiod) / 4 + ((wX - wZ) / (int32_t)262144);
|
wTimePhA = (int32_t)(handle->pwm_period) / 4 + ((wX - wZ) / (int32_t)262144);
|
||||||
wTimePhB = wTimePhA + wZ / 131072;
|
wTimePhB = wTimePhA + wZ / 131072;
|
||||||
wTimePhC = wTimePhB - wX / 131072;
|
wTimePhC = wTimePhB - wX / 131072;
|
||||||
pHandle->lowDuty = wTimePhA;
|
|
||||||
pHandle->midDuty = wTimePhB;
|
|
||||||
pHandle->highDuty = wTimePhC;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -17,12 +17,3 @@
|
|||||||
#define SECTOR_5 4u
|
#define SECTOR_5 4u
|
||||||
#define SECTOR_6 5u
|
#define SECTOR_6 5u
|
||||||
|
|
||||||
typedef struct
|
|
||||||
{
|
|
||||||
uint8_t sector; // 扇区
|
|
||||||
|
|
||||||
uint16_t pwmA;
|
|
||||||
uint16_t pwmB;
|
|
||||||
uint16_t pwmC;
|
|
||||||
|
|
||||||
} foc_handle_t;
|
|
Loading…
Reference in New Issue
Block a user