完成速度、电流闭环

This commit is contained in:
2024-05-17 00:43:58 +08:00
parent d531b7cc09
commit f404369a32
11 changed files with 507 additions and 174 deletions

View File

@@ -3,26 +3,24 @@
//
#include "APP_Main.h"
#include "Angle.h"
#include "InteriorADC.h"
#include "Controller/Controller.h"
#include "PreDrive.h"
//float CurrA, CurrB, CurrC;
//float Current_Temp, V_Temp;
float32_t NowAngle;
tData Data;
void APP_Init() {
tData Data;
Data.Angle.EncoderModel = MT6816;
Data_Init(&Data);
NowAngle = Data.Angle.getAngle();
void APP_Init()
{
__HAL_SPI_ENABLE(&hspi1);
HAL_Delay(10);
Data.Angle.EncoderModel = MT6816;
Data_Init(&Data);
// NowAngle = Data.Angle.getAngle();
//开启内部运放
HAL_OPAMP_Start(&hopamp1);
@@ -43,8 +41,14 @@ void APP_Init() {
__HAL_TIM_ENABLE_IT(&htim1, TIM_IT_UPDATE);
HAL_Delay(10);
PreDrive_Init();
GPIOE->BSRR = 1 << 7;
HAL_Delay(10);
TIM1->CCR1 = 0;
TIM1->CCR2 = 0;
TIM1->CCR3 = 0;
}
uint16_t ADC_VAL1, ADC_VAL2;
@@ -123,12 +127,12 @@ void APP_Main() {
// SendCurrent_Vofa(ADC1->JDR1, FOC.dtc_a, 0 );
// CurrA = ia/4096*3.3/0.005f/7.33333;
SendCurrent_Vofa((ADC1->JDR1)/4096.0f*3.3f/0.005f/7.33333f, ADC2->JDR1, ADC1->JDR2);
// SendCurrent_Vofa((ADC1->JDR1)/4096.0f*3.3f/0.005f/7.33333f, ADC2->JDR1, ADC1->JDR2);
// usb_printf("PhaseVoltage:%d\r\n", (ADC1->JDR1-2048.0f)/4096.0f*3.3f/0.005f/7.33333f);
HAL_Delay(10);
// NowAngle = Data.Angle.getAngle();
// SendCurrent_Vofa(FOC.dtc_a, NowAngle, 0);
// HAL_Delay(10);
}

View File

@@ -26,7 +26,11 @@
#include "arm_math.h"
#include "Communication.h"
#include "InteriorADC.h"
#include "Angle.h"
extern tData Data;
static __IO uint16_t adc1_RegularBuf[10];

View File

@@ -7,13 +7,15 @@
#include "Angle.h"
#include "InteriorADC.h"
#include "Controller/Controller.h"
#include "Controller/SVPWM/SVPWM.h"
#define UTILS_LP_FAST(value, sample, filter_constant) (value -= (filter_constant) * ((value) - (sample)))
float CurrA, CurrB, CurrC;
float Current_Temp, V_Temp;
//float32_t NowAngle;
float Current_Temp1, ii = 0.0f, iii = 0.0f;
float Current_Temp1, ii = 0.0f, Test_Angle = 0.0f;
#define PWM_FREQUENCY 24000
#define CURRENT_MEASURE_HZ PWM_FREQUENCY
@@ -23,19 +25,51 @@ float Current_Temp1, ii = 0.0f, iii = 0.0f;
#define PWM_PERIOD_CYCLES (uint16_t)((TIMER0_CLK_MHz * (uint32_t) 1000000u / ((uint32_t) (PWM_FREQUENCY))) & 0xFFFE)
#define HALF_PWM_PERIOD_CYCLES (uint16_t)(PWM_PERIOD_CYCLES / 2U)
int up = 1;
float32_t A, Speedtarget;
int32_t number;
int32_t mode = 0;
void High_Frequency_Task() {
ii += 0.000001f;
// if (ii == 0.1f) { ii = 0.1f-0.00001f; }
iii += 0.1f;
if (iii >= 360.0f) { iii = 0.0f; }
if (mode < 10000) {
// HAL_Delay(1000);
mode++;
}
if (mode >= 10000) {
number++;
if (number >= 1 && number <= 50000) {
Speedtarget = 0.1;
} else if (number >= 50000 && number <= 100000) {
Speedtarget = -1.0;
} else if (number >= 100001) {
number = 0;
}
// Test_Angle += 0.01f;
// if (Test_Angle > 360.0f) {
// Test_Angle = 0.0f;
// }
//Data.Angle.getAngle()
// SendCurrent_Vofa(ADC1->JDR1, ADC2->JDR1, ADC1->JDR2);
// float test = 0;
// UTILS_LP_FAST(test, 12, 0.05f);
// usb_printf("%f\r\n", test);
// Generate_SVM(0.0f, 0.05f, Data.Angle.getAngle());
// float32_t Eangle = Data.Angle.getAngle();
SpeedControl(Speedtarget, MT_ReadAngle());
FOC_current(0, 5.0f, Data.Angle.getAngle(), 5000);
// SendCurrent_Vofa(Test_Angle,A, (FOC.dtc_a * (float) HALF_PWM_PERIOD_CYCLES));
Generate(0, 0.02f, iii);
// SendCurrent_Vofa(FOC.dtc_a, iii, (uint16_t) (FOC.dtc_a * (float) HALF_PWM_PERIOD_CYCLES));
TIM1->CCR1 = (uint16_t) (FOC.dtc_a * (float) HALF_PWM_PERIOD_CYCLES);
TIM1->CCR2 = (uint16_t) (FOC.dtc_b * (float) HALF_PWM_PERIOD_CYCLES);
TIM1->CCR3 = (uint16_t) (FOC.dtc_c * (float) HALF_PWM_PERIOD_CYCLES);
// SendCurrent_Vofa((ADC1->JDR1)/4096.0f*3.3f/0.005f/7.33333f, 0, 0);
}
}