完成速度、电流闭环
This commit is contained in:
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -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];
|
||||
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user