измерение температуры по прерываниям только когда не вращается двигатель

This commit is contained in:
seklyuts 2024-06-03 09:04:31 +03:00
parent d888b2bebd
commit 61f79dd914
6 changed files with 32 additions and 12 deletions

View File

@ -12,7 +12,7 @@
uint16_t Fault1, Fault2, faultCounter = 0, fault_read = 0;
uint16_t Fault1[16], Fault2[16], faultCounter = 0, fault_read = 0;
__interrupt void fault_isr(void)
{
@ -40,10 +40,10 @@ void fault_read_ports(void)
uint16_t Fault_Bytes;
I2CWrite(I2C_FAULT_SLAVE_ADDRESS, 0, 0, false, &Fault_Bytes);
I2CRead(I2C_FAULT_SLAVE_ADDRESS, 1, true, &Fault_Bytes);
Fault1 = Fault_Bytes;
Fault1[faultCounter&0xF] = Fault_Bytes;
I2CWrite(I2C_FAULT_SLAVE_ADDRESS, 1, 0, false, &Fault_Bytes);
I2CRead(I2C_FAULT_SLAVE_ADDRESS, 1, true, &Fault_Bytes);
Fault2 = Fault_Bytes;
Fault2[faultCounter&0xF] = Fault_Bytes;
}
@ -60,10 +60,10 @@ void faultInit(void)
I2CWrite(I2C_FAULT_SLAVE_ADDRESS, 0, 0, false, &Fault_Bytes);
I2CRead(I2C_FAULT_SLAVE_ADDRESS, 1, true, &Fault_Bytes);
Fault1 = Fault_Bytes;
Fault1[0] = Fault_Bytes;
I2CWrite(I2C_FAULT_SLAVE_ADDRESS, 1, 0, false, &Fault_Bytes);
I2CRead(I2C_FAULT_SLAVE_ADDRESS, 1, true, &Fault_Bytes);
Fault2 = Fault_Bytes;
Fault2[0] = Fault_Bytes;
EALLOW; // This is needed to write to EALLOW protected registers
PieVectTable.XINT1_INT = &fault_isr;

View File

@ -34,6 +34,13 @@ static uint16_t diod = 0;
SciaRegs.SCICTL1.bit.SWRESET = 1;
EDIS;
}
Gpio95out(Rele);
if(fault_read_check())
{
fault_read_clr();
fault_read_ports();
}
if(FMSTRIsEnable()) {
if(counter < 100) counter++;
@ -54,12 +61,6 @@ static uint16_t diod = 0;
FMSTR_Poll();
FMSTR_Recorder();
FMSTREnableClr();
Gpio95out(Rele);
if(fault_read_check())
{
fault_read_clr();
fault_read_ports();
}
// EPwm3Regs.CMPA.bit.CMPA = PWM_Vent1;
}
}

View File

@ -14,6 +14,9 @@ uint16_t TemperatureInitDone = 0;
uint16_t temperatureTic[3] = {0,0,0};
uint16_t Temperature_TimeMax = 160; //16mS
__interrupt void temperature_isr(void)
{
PieCtrlRegs.PIEACK.all = PIEACK_GROUP1;
@ -21,6 +24,12 @@ __interrupt void temperature_isr(void)
}
void temperature_deInit(void)
{
TemperatureInitDone = 0;
}
uint16_t temperature_calc(uint16_t Imp)
{
@ -41,7 +50,8 @@ void temperatureTest(void)
if(temperatureTic[2] > Temperature_TimeMax)
{
Temperature = ((temperatureTic[0]-1)>>4) - 50;
if(TemperatureInitDone) Temperature = ((temperatureTic[0]-1)>>4) - 50;
else TemperatureInitDone = 1;
temperatureTic[1] = TemperatureImpCount = 0;
}
}

View File

@ -10,5 +10,7 @@
void temperatureTest(void);
uint16_t temperature_calc(uint16_t Imp);
void temperatureInit(void);
void temperature_deInit(void);
#endif /* SRC_TEMPERATURE_H_ */

View File

@ -18,6 +18,7 @@
#include "skvt.h"
#include "adc_init.h"
#include "biss.h"
#include "temperature.h"
#define IMAX_A 25.0 //A
#define IMAX (IMAX_A*BIT_MAX/FACTOR_CURRENT_MOTOR_A)
@ -81,9 +82,11 @@ float UdcVolt = 0;
volatile float VdcFactor = FACTOR_VDC;
volatile uint16_t VoltProcImit = 0;
void vectorFault(void)
{
Mode = OffMode;
XintRegs.XINT2CR.bit.ENABLE = 1;
}
void vectorControl(int16_t CurrentA, int16_t CurrentB, int16_t CurrentC, int16_t sdfmUdc)
@ -105,6 +108,10 @@ void vectorControl(int16_t CurrentA, int16_t CurrentB, int16_t CurrentC, int16_t
Step = Step + Nstep;
CurrLoop.piId.Ref = 0;
if(Mode) {XintRegs.XINT2CR.bit.ENABLE = 0; temperature_deInit();}
else {XintRegs.XINT2CR.bit.ENABLE = 1;}
switch(Mode)
{
case OffMode: