diff --git a/Projects/epwm_test_biss_c_cpu2/.ccsproject b/Projects/epwm_test_biss_c_cpu2/.ccsproject
index 6f67268..0c26e71 100644
--- a/Projects/epwm_test_biss_c_cpu2/.ccsproject
+++ b/Projects/epwm_test_biss_c_cpu2/.ccsproject
@@ -10,7 +10,7 @@
-
+
diff --git a/Projects/epwm_test_biss_c_cpu2/Start_rfm.pmp b/Projects/epwm_test_biss_c_cpu2/Start_rfm.pmp
index a57e5ef..4386c8e 100644
Binary files a/Projects/epwm_test_biss_c_cpu2/Start_rfm.pmp and b/Projects/epwm_test_biss_c_cpu2/Start_rfm.pmp differ
diff --git a/Projects/epwm_test_biss_c_cpu2/src/Peripherals/pwm_init.h b/Projects/epwm_test_biss_c_cpu2/src/Peripherals/pwm_init.h
index e742b39..2de0fb3 100644
--- a/Projects/epwm_test_biss_c_cpu2/src/Peripherals/pwm_init.h
+++ b/Projects/epwm_test_biss_c_cpu2/src/Peripherals/pwm_init.h
@@ -14,7 +14,7 @@
#define FREQUENCY_BRAKE 200000.0 //Hz
#define FREQUENCY_MOTOR 10000.0 //Hz
-#define EPWM_DB_mkS 3.0 //mkS
+#define EPWM_DB_mkS 4.0 //mkS
#define FREQUENCY_FAN 1000.0 //Hz
diff --git a/Projects/epwm_test_biss_c_cpu2/src/frm_uart.c b/Projects/epwm_test_biss_c_cpu2/src/frm_uart.c
index 8523ba7..0ff47c7 100644
--- a/Projects/epwm_test_biss_c_cpu2/src/frm_uart.c
+++ b/Projects/epwm_test_biss_c_cpu2/src/frm_uart.c
@@ -9,7 +9,7 @@
#include "frm_uart.h"
#define LSPCLK_HZ 50000000.0
-#define BAUD 19200.0
+#define BAUD 57600.0
#define BRR LSPCLK_HZ/(BAUD*8) + 1
uint16_t frmEn = 0;
diff --git a/Projects/epwm_test_biss_c_cpu2/src/frmmstr_run.c b/Projects/epwm_test_biss_c_cpu2/src/frmmstr_run.c
index 7f10054..11e120c 100644
--- a/Projects/epwm_test_biss_c_cpu2/src/frmmstr_run.c
+++ b/Projects/epwm_test_biss_c_cpu2/src/frmmstr_run.c
@@ -22,27 +22,24 @@ void frmmstr_run(void)
{
static uint16_t diod = 0;
- if(SciaRegs.SCIRXST.bit.RXERROR)
- {
- EALLOW;
- SciaRegs.SCICTL1.bit.SWRESET = 0;
- EDIS;
- }
- else
- {
- EALLOW;
- SciaRegs.SCICTL1.bit.SWRESET = 1;
- EDIS;
- }
- Gpio95out(Rele);
+// if(SciaRegs.SCIRXST.bit.RXERROR)
+// {
+// EALLOW;
+// SciaRegs.SCICTL1.bit.SWRESET = 0;
+// EDIS;
+// }
+// else
+// {
+// EALLOW;
+// SciaRegs.SCICTL1.bit.SWRESET = 1;
+// EDIS;
+// }
- if(fault_read_check())
+ if(FMSTRIsEnable())
{
- fault_read_clr();
- fault_read_ports();
- }
-
- if(FMSTRIsEnable()) {
+ FMSTR_Poll();
+ FMSTR_Recorder();
+ FMSTREnableClr();
if(counter < 100) counter++;
else
{
@@ -55,12 +52,20 @@ static uint16_t diod = 0;
diod++;
if(diod > 7) diod = 0;
Gpio_rainbow(diod);
- if(testMode) FMSTR_SCI_PUTCHAR(0xA5);
+ //if(testMode) FMSTR_SCI_PUTCHAR(0xA5);
}
}
- FMSTR_Poll();
- FMSTR_Recorder();
- FMSTREnableClr();
+
// EPwm3Regs.CMPA.bit.CMPA = PWM_Vent1;
}
+ else
+ {
+ Gpio95out(Rele);
+ if(fault_read_check())
+ {
+ fault_read_clr();
+ fault_read_ports();
+ }
+ }
}
+
diff --git a/Projects/epwm_test_biss_c_cpu2/src/vector.c b/Projects/epwm_test_biss_c_cpu2/src/vector.c
index ea42096..df9c9fb 100644
--- a/Projects/epwm_test_biss_c_cpu2/src/vector.c
+++ b/Projects/epwm_test_biss_c_cpu2/src/vector.c
@@ -1,7 +1,7 @@
/*
* vector.c
*
- * Created on: 20 сент. 2023 г.
+ * Created on: 20 сент. 2023 г.
* Author: seklyuts
*/
@@ -20,13 +20,13 @@
#include "biss.h"
#include "temperature.h"
-#define IMAX_A 25.0 //A
+#define IMAX_A 35.0 //A
#define IMAX (IMAX_A*BIT_MAX/FACTOR_CURRENT_MOTOR_A)
typedef struct {
- int16_t Value16in; // Нефильрованное значение
- int16_t Value16filtered; // Фильрованное значение
- int32_t Value32; // Конечное напряжение тренировки
+ int16_t Value16in; // Нефильрованное значение
+ int16_t Value16filtered; // Фильрованное значение
+ int32_t Value32; // Конечное напряжение тренировки
int16_t ShiftFilter; // Filters
} Filtered;
@@ -98,7 +98,7 @@ void vectorControl(int16_t CurrentA, int16_t CurrentB, int16_t CurrentC, int16_t
Ib = -CurrentB;//sdfm_get(3);
Ic = -CurrentC;//sdfm_get(4);
if((Ia > IMAX)||(Ib>IMAX)||(Ic>IMAX)||(Ia<-IMAX)||(Ib<-IMAX)||(Ic<-IMAX) ) {OverCur[0] = Ia; OverCur[1] = Ib; OverCur[2] = Ic; ErrCur++; if(ErrCur >= 3) {Mode = OffMode; CurFault++;}}
- else ErrCur = 0;
+// else ErrCur = 0;
UdcFiltered = Filter(sdfmUdc, &UdcFilter);
if(UdcFiltered < 0) UdcFiltered = 0;
@@ -151,7 +151,7 @@ void vectorInitCurrLoop(void)
CurrLoop.piId.Ref = 0; // Input: reference set-point
CurrLoop.piId.Fbk = 0; // Input: feedback
- CurrLoop.piId.uCorr = 0; // Input: Коррекция выхода, для устранения перекретных связей
+ CurrLoop.piId.uCorr = 0; // Input: Коррекция выхода, для устранения перекретных связей
CurrLoop.piId.Out = 0; // Output: controller output
CurrLoop.piId.Kp = PI_REG_I_PROPOR; // Parameter: proportional loop gain
CurrLoop.piId.Ki = PI_REG_I_INTEGR; // Parameter: integral gain
@@ -165,7 +165,7 @@ void vectorInitCurrLoop(void)
CurrLoop.piIq.Ref = 0; // Input: reference set-point
CurrLoop.piIq.Fbk = 0; // Input: feedback
- CurrLoop.piIq.uCorr = 0; // Input: Коррекция выхода, для устранения перекретных связей
+ CurrLoop.piIq.uCorr = 0; // Input: Коррекция выхода, для устранения перекретных связей
CurrLoop.piIq.Out = 0; // Output: controller output
CurrLoop.piIq.Kp = PI_REG_I_PROPOR; // Parameter: proportional loop gain
CurrLoop.piIq.Ki = PI_REG_I_INTEGR; // Parameter: integral gain
@@ -180,13 +180,13 @@ void vectorInitCurrLoop(void)
void vectorResCurrLoop(void)
{
CurrLoop.piId.Ref = 0; // Input: reference set-point
- CurrLoop.piId.uCorr = 0; // Input: Коррекция выхода, для устранения перекретных связей
+ CurrLoop.piId.uCorr = 0; // Input: Коррекция выхода, для устранения перекретных связей
CurrLoop.piId.Out = 0; // Output: controller output
CurrLoop.piId.v1 = 0; // Data: pre-saturated controller output
CurrLoop.piId.i1 = 0; // Data: integrator storage: ui(k-1)
CurrLoop.piIq.Ref = 0; // Input: reference set-point
- CurrLoop.piIq.uCorr = 0; // Input: Коррекция выхода, для устранения перекретных связей
+ CurrLoop.piIq.uCorr = 0; // Input: Коррекция выхода, для устранения перекретных связей
CurrLoop.piIq.Out = 0; // Output: controller output
CurrLoop.piIq.v1 = 0; // Data: pre-saturated controller output
CurrLoop.piIq.i1 = 0; // Data: integrator storage: ui(k-1)
@@ -256,14 +256,14 @@ void vector_klark_park(uint16_t SectorOn, int16_t CurrentA, int16_t CurrentB, in
/* if (Inputs->UpdateUdc)
{
- //Запоминаем Udc для контура тока(ограничение Umax и Umin в ПИ-регуляторе)
+ //Запоминаем Udc для контура тока(ограничение Umax и Umin в П�-регуляторе)
Outputs->Udc = PmsmVect.UdcFilter.Output;
- //Защита от деления на 0 и отрицательных чисел
+ //Защита от деления на 0 и отрицательных чисел
if (Outputs->Udc <= 0.0f)
Outputs->Udc = VOLTAGE_UDC;
- //Расчет коэффициента для расчета скважности ШИМ(один раз делим, потом каждый цикл ШИМ умножаем, это эффективнее)
+ //Расчет коэффициента для расчета скважности Ш�М(один раз делим, потом каждый цикл Ш�М умножаем, это эффективнее)
PmsmVect.UdcPwmFactor = 1.0f/Outputs->Udc;
- //Сброс флага
+ //Сброс флага
Inputs->UpdateUdc = false;
}*/
@@ -298,7 +298,7 @@ void vector_klark_park(uint16_t SectorOn, int16_t CurrentA, int16_t CurrentB, in
vectorIabc.c = (float)CurrentC * FactorCurrent;
}
- // преобразование Кларк
+ // преобразование Кларк
vectorI2ph.Alfa = vectorIabc.a;
vectorI2ph.Beta = _IQmpy((vectorIabc.a +_IQmpy2(vectorIabc.b)),_IQ(ONEbySQRT3)); //vectorI2ph.Beta = _IQmpy((vectorIabc.b - vectorIabc.c),_IQ(ONEbySQRT3));
@@ -309,7 +309,7 @@ void vector_klark_park(uint16_t SectorOn, int16_t CurrentA, int16_t CurrentB, in
vectorSinCos.sin = ((float)sin_int)/32768.0;
vectorSinCos.cos = ((float)cos_int)/32768.0;
- // преобразование Парка
+ // преобразование Парка
vectorIdq.d = _IQmpy(vectorI2ph.Alfa,vectorSinCos.cos) + _IQmpy(vectorI2ph.Beta,vectorSinCos.sin);
vectorIdq.q = _IQmpy(vectorI2ph.Beta,vectorSinCos.cos) - _IQmpy(vectorI2ph.Alfa,vectorSinCos.sin);
@@ -318,7 +318,7 @@ void vector_klark_park(uint16_t SectorOn, int16_t CurrentA, int16_t CurrentB, in
// AngleErr = Angle_test - vectorSinCos.Angle;
-// CurrLoop.piIq.Ref = Inputs->IqRef;//Заданное
+// CurrLoop.piIq.Ref = Inputs->IqRef;//Заданное
if (FABS(CurrLoop.piIq.Ref) > CurrLoop.CurrentLimit)
{
@@ -334,7 +334,7 @@ void vector_klark_park(uint16_t SectorOn, int16_t CurrentA, int16_t CurrentB, in
// CurrLoop.piId.Umax = CurrLoop.piIq.Umax = Inputs->Udc;
// CurrLoop.piId.Umin = CurrLoop.piIq.Umin = -CurrLoop.piIq.Umax;
#ifdef UCORR_ENABLE
- //Перекрестные связи
+ //Перекрестные связи
float Velectr = VFbk * CurrLoop.VelElectrFactor;
CurrLoop.piId.uCorr = Velectr * CurrLoop.PhaseInduct * CurrLoop.piIq.Fbk;
CurrLoop.piIq.uCorr = -Velectr * (CurrLoop.FluxLinkage + CurrLoop.PhaseInduct * CurrLoop.piId.Fbk);
@@ -354,7 +354,7 @@ void vector_klark_park(uint16_t SectorOn, int16_t CurrentA, int16_t CurrentB, in
PI_MACRO(CurrLoop.piIq);
PI_MACRO(CurrLoop.piId);
- /*Пропорциональное ограничение напряжений Uq и Ud*/
+ /*Пропорциональное ограничение напряжений Uq и Ud*/
// Test1 = my_sqrtf(Test2);
@@ -362,7 +362,7 @@ void vector_klark_park(uint16_t SectorOn, int16_t CurrentA, int16_t CurrentB, in
- if (Ulim > UmaxVolt)// максимальное напряжение в вольтах
+ if (Ulim > UmaxVolt)// максимальное напряжение в вольтах
{
if(Ulim > ZERO_LVL)
{
@@ -408,7 +408,7 @@ float my_sqrtf(float x)
return x * x0;
}
-// Фильтр сигнала
+// Фильтр сигнала
int16_t Filter(int16_t inValue, Filtered *Struct) {
(*Struct).Value16in = inValue;
(*Struct).Value32+=(int32_t)((*Struct).Value16in)-(int32_t)((*Struct).Value16filtered);
diff --git a/Projects/epwm_test_biss_c_cpu2/src/vector.h b/Projects/epwm_test_biss_c_cpu2/src/vector.h
index 09bf202..1dfe43e 100644
--- a/Projects/epwm_test_biss_c_cpu2/src/vector.h
+++ b/Projects/epwm_test_biss_c_cpu2/src/vector.h
@@ -1,7 +1,7 @@
/*
* vector.h
*
- * Created on: 20 . 2023 .
+ * Created on: 20 ����. 2023 �.
* Author: seklyuts
*/
@@ -35,8 +35,8 @@
#define VOLT_MAX_PROC 94.0
#define VOLT_MAX_FACTOR VOLT_MAX_PROC/100.0
-#define PI_REG_I_PROPOR 30.0
-#define PI_REG_I_INTEGR 0.04
+#define PI_REG_I_PROPOR 17.0 // 30
+#define PI_REG_I_INTEGR 0.02 // 0.04
#define CURRENT_MAX 40.0 //A
#define ZERO_LVL 0.00001f
@@ -76,7 +76,7 @@ typedef struct
typedef enum
{
- OffMode, //
+ OffMode, //����� ����������
StepMode, //
StayMode,
CurrentRegTune,