вращение по датчику BISS-C только контур тока
This commit is contained in:
parent
ca562baf47
commit
ca65dd4047
@ -23,8 +23,6 @@
|
|||||||
void main(void)
|
void main(void)
|
||||||
{
|
{
|
||||||
InitPerif();
|
InitPerif();
|
||||||
|
|
||||||
|
|
||||||
for(;;)
|
for(;;)
|
||||||
{
|
{
|
||||||
|
|
||||||
|
|||||||
@ -50,7 +50,7 @@ void Board_init()
|
|||||||
{
|
{
|
||||||
EALLOW;
|
EALLOW;
|
||||||
|
|
||||||
//PinMux_init();
|
// PinMux_init();
|
||||||
CLB_init();
|
CLB_init();
|
||||||
CLB_OUTPUTXBAR_init();
|
CLB_OUTPUTXBAR_init();
|
||||||
|
|
||||||
@ -65,16 +65,16 @@ void Board_init()
|
|||||||
void PinMux_init()
|
void PinMux_init()
|
||||||
{
|
{
|
||||||
//
|
//
|
||||||
// PinMux for modules assigned to CPU1
|
// PinMux for modules assigned to CPU2
|
||||||
//
|
//
|
||||||
|
|
||||||
//
|
|
||||||
// CLB_OUTPUTXBAR6 -> CLB_OUTPUTXBAR_CLKGEN_CLK_M Pinmux
|
//CLB_OUTPUTXBAR6 -> CLB_OUTPUTXBAR_CLKGEN_CLK_M Pinmux
|
||||||
//
|
|
||||||
// GPIO_setPinConfig(CLB_OUTPUTXBAR_CLKGEN_CLK_M_CLBOUTPUTXBAR_PIN_CONFIG);
|
// GPIO_setPinConfig(CLB_OUTPUTXBAR_CLKGEN_CLK_M_CLBOUTPUTXBAR_PIN_CONFIG);
|
||||||
//
|
|
||||||
// CLB_OUTPUTXBAR7 -> CLB_OUTPUTXBAR_CLKGEN_CLK_S Pinmux
|
//CLB_OUTPUTXBAR7 -> CLB_OUTPUTXBAR_CLKGEN_CLK_S Pinmux
|
||||||
//
|
|
||||||
// GPIO_setPinConfig(CLB_OUTPUTXBAR_CLKGEN_CLK_S_CLBOUTPUTXBAR_PIN_CONFIG);
|
// GPIO_setPinConfig(CLB_OUTPUTXBAR_CLKGEN_CLK_S_CLBOUTPUTXBAR_PIN_CONFIG);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -84,14 +84,13 @@ void GpioInit(void)
|
|||||||
GpioDataRegs.GPCDAT.bit.GPIO95 = 1;
|
GpioDataRegs.GPCDAT.bit.GPIO95 = 1;
|
||||||
GpioCtrlRegs.GPCCSEL4.bit.GPIO95 = 2;
|
GpioCtrlRegs.GPCCSEL4.bit.GPIO95 = 2;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
GpioCtrlRegs.GPIO_FaultPWM_MUX.bit.GPIO_FaultPWM = 0;//FaultPWM
|
GpioCtrlRegs.GPIO_FaultPWM_MUX.bit.GPIO_FaultPWM = 0;//FaultPWM
|
||||||
GpioCtrlRegs.GPIO_FaultPWM_GMUX.bit.GPIO_FaultPWM = 0;
|
GpioCtrlRegs.GPIO_FaultPWM_GMUX.bit.GPIO_FaultPWM = 0;
|
||||||
GpioCtrlRegs.GPIO_FaultPWM_DIR.bit.GPIO_FaultPWM = 0;
|
GpioCtrlRegs.GPIO_FaultPWM_DIR.bit.GPIO_FaultPWM = 0;
|
||||||
GpioDataRegs.GPIO_FaultPWM_DAT.bit.GPIO_FaultPWM = 0;
|
GpioDataRegs.GPIO_FaultPWM_DAT.bit.GPIO_FaultPWM = 0;
|
||||||
GpioCtrlRegs.GPIO_FaultPWM_SEL.bit.GPIO_FaultPWM = 2;
|
GpioCtrlRegs.GPIO_FaultPWM_SEL.bit.GPIO_FaultPWM = 2;
|
||||||
|
|
||||||
InputXbarRegs.INPUT4SELECT = 64;//xint1
|
InputXbarRegs.INPUT4SELECT = GPIO_FaultPWMpin;//xint1
|
||||||
|
|
||||||
GpioCtrlRegs.GPAMUX2.bit.GPIO20 = 1;//EQEP
|
GpioCtrlRegs.GPAMUX2.bit.GPIO20 = 1;//EQEP
|
||||||
GpioCtrlRegs.GPAGMUX2.bit.GPIO20 = 0;
|
GpioCtrlRegs.GPAGMUX2.bit.GPIO20 = 0;
|
||||||
|
|||||||
@ -1,7 +1,7 @@
|
|||||||
/*
|
/*
|
||||||
* spi_init.h
|
* spi_init.h
|
||||||
*
|
*
|
||||||
* Created on: 5 ñåíò. 2023 ã.
|
* Created on: 5 <EFBFBD><EFBFBD><EFBFBD><EFBFBD>. 2023 <EFBFBD>.
|
||||||
* Author: seklyuts
|
* Author: seklyuts
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|||||||
@ -12,7 +12,7 @@
|
|||||||
#include "crc.h"
|
#include "crc.h"
|
||||||
|
|
||||||
|
|
||||||
#define DEVICE_SYSCLK_FREQ 200000000
|
#define DEVICE_SYSCLK_FREQ 250000000
|
||||||
#define CLB_CLOCK_FREQ (DEVICE_SYSCLK_FREQ / 2)
|
#define CLB_CLOCK_FREQ (DEVICE_SYSCLK_FREQ / 2)
|
||||||
|
|
||||||
|
|
||||||
@ -68,13 +68,13 @@ void BissGpioInit(void)
|
|||||||
{
|
{
|
||||||
EALLOW;
|
EALLOW;
|
||||||
|
|
||||||
GpioCtrlRegs.GPDMUX1.bit.GPIO96 = 2;//14 = 1110
|
GpioCtrlRegs.GPDMUX1.bit.GPIO96 = 2;//14 = 1110 CLB_OUTPUTX BAR6
|
||||||
GpioCtrlRegs.GPDGMUX1.bit.GPIO96 = 3;
|
GpioCtrlRegs.GPDGMUX1.bit.GPIO96 = 3;
|
||||||
GpioCtrlRegs.GPDDIR.bit.GPIO96 = 1;
|
GpioCtrlRegs.GPDDIR.bit.GPIO96 = 1;
|
||||||
GpioDataRegs.GPDDAT.bit.GPIO96 = 0;
|
GpioDataRegs.GPDDAT.bit.GPIO96 = 0;
|
||||||
GpioCtrlRegs.GPDCSEL1.bit.GPIO96 = 2;
|
GpioCtrlRegs.GPDCSEL1.bit.GPIO96 = 2;
|
||||||
|
|
||||||
GpioCtrlRegs.GPDMUX1.bit.GPIO97 = 2;//14 = 1110
|
GpioCtrlRegs.GPDMUX1.bit.GPIO97 = 2;//14 = 1110 CLB_OUTPUTX BAR7
|
||||||
GpioCtrlRegs.GPDGMUX1.bit.GPIO97 = 3;
|
GpioCtrlRegs.GPDGMUX1.bit.GPIO97 = 3;
|
||||||
GpioCtrlRegs.GPDDIR.bit.GPIO97 = 1;
|
GpioCtrlRegs.GPDDIR.bit.GPIO97 = 1;
|
||||||
GpioDataRegs.GPDDAT.bit.GPIO97 = 0;
|
GpioDataRegs.GPDDAT.bit.GPIO97 = 0;
|
||||||
|
|||||||
@ -29,13 +29,13 @@
|
|||||||
#define GPIO_LED_B GPIO7
|
#define GPIO_LED_B GPIO7
|
||||||
|
|
||||||
#else
|
#else
|
||||||
|
|
||||||
#define GPIO_FaultPWM GPIO99
|
#define GPIO_FaultPWM GPIO99
|
||||||
#define GPIO_FaultPWM_SEL GPDCSEL1
|
#define GPIO_FaultPWM_SEL GPDCSEL1
|
||||||
#define GPIO_FaultPWM_DIR GPDDIR
|
#define GPIO_FaultPWM_DIR GPDDIR
|
||||||
#define GPIO_FaultPWM_DAT GPDDAT
|
#define GPIO_FaultPWM_DAT GPDDAT
|
||||||
#define GPIO_FaultPWM_GMUX GPDGMUX1
|
#define GPIO_FaultPWM_GMUX GPDGMUX1
|
||||||
#define GPIO_FaultPWM_MUX GPDMUX1
|
#define GPIO_FaultPWM_MUX GPDMUX1
|
||||||
|
#define GPIO_FaultPWMpin 99
|
||||||
|
|
||||||
#define GPIO_RS485_DE 133
|
#define GPIO_RS485_DE 133
|
||||||
#define GPIO_RS485_RE 145
|
#define GPIO_RS485_RE 145
|
||||||
|
|||||||
@ -15,6 +15,8 @@
|
|||||||
#include "gpio_init.h"
|
#include "gpio_init.h"
|
||||||
#include "frm_uart.h"
|
#include "frm_uart.h"
|
||||||
#include "i2c_init.h"
|
#include "i2c_init.h"
|
||||||
|
#include "spi_init.h"
|
||||||
|
#include "biss.h"
|
||||||
|
|
||||||
|
|
||||||
#define TO_CPU1 0
|
#define TO_CPU1 0
|
||||||
@ -43,10 +45,11 @@
|
|||||||
#define CONNECT_PWM16(x) EALLOW; DevCfgRegs.CPUSEL0.bit.EPWM16 = x; EDIS
|
#define CONNECT_PWM16(x) EALLOW; DevCfgRegs.CPUSEL0.bit.EPWM16 = x; EDIS
|
||||||
|
|
||||||
#define CONNECT_SCIA(x) EALLOW; DevCfgRegs.CPUSEL5.bit.SCI_A = x; EDIS
|
#define CONNECT_SCIA(x) EALLOW; DevCfgRegs.CPUSEL5.bit.SCI_A = x; EDIS
|
||||||
#define CONNECT_SCIC(x) EALLOW; DevCfgRegs.CPUSEL5.bit.SCI_C = x; EDIS
|
#define CONNECT_SPIC(x) EALLOW; DevCfgRegs.CPUSEL6.bit.SPI_C = x; EDIS
|
||||||
#define CONNECT_EQEP1(x) EALLOW; DevCfgRegs.CPUSEL2.bit.EQEP1 = x; EDIS
|
#define CONNECT_EQEP1(x) EALLOW; DevCfgRegs.CPUSEL2.bit.EQEP1 = x; EDIS
|
||||||
#define CONNECT_I2CA(x) EALLOW; DevCfgRegs.CPUSEL7.bit.I2C_A = x; EDIS
|
#define CONNECT_I2CA(x) EALLOW; DevCfgRegs.CPUSEL7.bit.I2C_A = x; EDIS
|
||||||
#define CONNECT_CLB1(x) EALLOW; DevCfgRegs.CPUSEL15.bit.CLB1 = x; EDIS
|
#define CONNECT_CLB1(x) EALLOW; DevCfgRegs.CPUSEL15.bit.CLB1 = x; EDIS
|
||||||
|
#define CONNECT_CLB2(x) EALLOW; DevCfgRegs.CPUSEL15.bit.CLB2 = x; EDIS
|
||||||
|
|
||||||
void InitPerif(void)
|
void InitPerif(void)
|
||||||
{
|
{
|
||||||
@ -102,6 +105,8 @@ void InitPerif(void)
|
|||||||
I2CMasterGpioInit();
|
I2CMasterGpioInit();
|
||||||
SpiCGpioInit();
|
SpiCGpioInit();
|
||||||
BissGpioInit();
|
BissGpioInit();
|
||||||
|
BissInit();
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// ConfigureADC();
|
// ConfigureADC();
|
||||||
@ -119,9 +124,9 @@ void InitPerif(void)
|
|||||||
CONNECT_SCIA(TO_CPU2);
|
CONNECT_SCIA(TO_CPU2);
|
||||||
CONNECT_EQEP1(TO_CPU2);
|
CONNECT_EQEP1(TO_CPU2);
|
||||||
CONNECT_I2CA(TO_CPU2);
|
CONNECT_I2CA(TO_CPU2);
|
||||||
CONNECT_SCIC(TO_CPU2);
|
CONNECT_SPIC(TO_CPU2);
|
||||||
CONNECT_CLB1(TO_CPU2);
|
CONNECT_CLB1(TO_CPU2);
|
||||||
|
CONNECT_CLB2(TO_CPU2);
|
||||||
|
|
||||||
Cpu1toCpu2IpcRegs.CPU1TOCPU2IPCBOOTMODE = 0x5A00C803; //str 716
|
Cpu1toCpu2IpcRegs.CPU1TOCPU2IPCBOOTMODE = 0x5A00C803; //str 716
|
||||||
Cpu1toCpu2IpcRegs.CPU1TOCPU2IPCSET.bit.IPC0 = 1;
|
Cpu1toCpu2IpcRegs.CPU1TOCPU2IPCSET.bit.IPC0 = 1;
|
||||||
|
|||||||
Binary file not shown.
@ -31,10 +31,10 @@ void main(void)
|
|||||||
// asm (" NOP");
|
// asm (" NOP");
|
||||||
frmmstr_run();
|
frmmstr_run();
|
||||||
rele_run();
|
rele_run();
|
||||||
BissClkgenRun();
|
|
||||||
// Gpio_rainbow(diod);
|
// Gpio_rainbow(diod);
|
||||||
// AdcRun();
|
// AdcRun();
|
||||||
// BissClkgenRun();
|
BissClkgenRun();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -52,7 +52,7 @@ void Board_init()
|
|||||||
|
|
||||||
//PinMux_init();
|
//PinMux_init();
|
||||||
CLB_init();
|
CLB_init();
|
||||||
CLB_OUTPUTXBAR_init();
|
// CLB_OUTPUTXBAR_init();
|
||||||
|
|
||||||
EDIS;
|
EDIS;
|
||||||
}
|
}
|
||||||
@ -65,16 +65,16 @@ void Board_init()
|
|||||||
void PinMux_init()
|
void PinMux_init()
|
||||||
{
|
{
|
||||||
//
|
//
|
||||||
// PinMux for modules assigned to CPU1
|
// PinMux for modules assigned to CPU2
|
||||||
//
|
//
|
||||||
|
|
||||||
//
|
|
||||||
// CLB_OUTPUTXBAR6 -> CLB_OUTPUTXBAR_CLKGEN_CLK_M Pinmux
|
//CLB_OUTPUTXBAR6 -> CLB_OUTPUTXBAR_CLKGEN_CLK_M Pinmux
|
||||||
//
|
|
||||||
// GPIO_setPinConfig(CLB_OUTPUTXBAR_CLKGEN_CLK_M_CLBOUTPUTXBAR_PIN_CONFIG);
|
// GPIO_setPinConfig(CLB_OUTPUTXBAR_CLKGEN_CLK_M_CLBOUTPUTXBAR_PIN_CONFIG);
|
||||||
//
|
|
||||||
// CLB_OUTPUTXBAR7 -> CLB_OUTPUTXBAR_CLKGEN_CLK_S Pinmux
|
//CLB_OUTPUTXBAR7 -> CLB_OUTPUTXBAR_CLKGEN_CLK_S Pinmux
|
||||||
//
|
|
||||||
// GPIO_setPinConfig(CLB_OUTPUTXBAR_CLKGEN_CLK_S_CLBOUTPUTXBAR_PIN_CONFIG);
|
// GPIO_setPinConfig(CLB_OUTPUTXBAR_CLKGEN_CLK_S_CLBOUTPUTXBAR_PIN_CONFIG);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -12,7 +12,7 @@
|
|||||||
#include "crc.h"
|
#include "crc.h"
|
||||||
|
|
||||||
|
|
||||||
#define DEVICE_SYSCLK_FREQ 200000000
|
#define DEVICE_SYSCLK_FREQ 250000000
|
||||||
#define CLB_CLOCK_FREQ (DEVICE_SYSCLK_FREQ / 2)
|
#define CLB_CLOCK_FREQ (DEVICE_SYSCLK_FREQ / 2)
|
||||||
|
|
||||||
|
|
||||||
@ -160,15 +160,16 @@ uint64_t BiSStheta = 0;
|
|||||||
uint16_t BissCRC = 0, BissCRC_ = 0, BissCRC2_ = 0;
|
uint16_t BissCRC = 0, BissCRC_ = 0, BissCRC2_ = 0;
|
||||||
uint16_t BissErr = 0;
|
uint16_t BissErr = 0;
|
||||||
uint16_t BissWarn = 0;
|
uint16_t BissWarn = 0;
|
||||||
uint32_t Bissth1 = 0;
|
uint32_t Bissth1 = 0, Bissth1_ = 0;
|
||||||
uint16_t Bissth2 = 0;
|
uint16_t Bissth2 = 0;
|
||||||
|
uint16_t Angle = 0, Angle_, dAngle;
|
||||||
uint64_t BissAllCRC;
|
uint64_t BissAllCRC;
|
||||||
|
|
||||||
uint16_t BissTestShift1[16];
|
uint16_t BissTestShift1[16];
|
||||||
uint16_t BissErrData = 0;
|
uint16_t BissErrData = 0;
|
||||||
uint64_t BissAll = 0;
|
uint64_t BissAll = 0;
|
||||||
uint32_t WrongCS =0, RightCS = 0;
|
uint32_t WrongCS =0, RightCS = 0, bisscErr = 0;
|
||||||
|
int16_t bissSpeed;
|
||||||
|
|
||||||
void BissCalc(uint64_t BissData)
|
void BissCalc(uint64_t BissData)
|
||||||
{
|
{
|
||||||
@ -201,13 +202,33 @@ void BissCalc(uint64_t BissData)
|
|||||||
if(BissCRC2_ != BissCRC)
|
if(BissCRC2_ != BissCRC)
|
||||||
{
|
{
|
||||||
WrongCS++;
|
WrongCS++;
|
||||||
|
bisscErr++;
|
||||||
|
if(bisscErr < 3) Angle = Angle_ + dAngle;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
RightCS++;
|
RightCS++;
|
||||||
|
Angle = -Bissth2*5;
|
||||||
|
dAngle = Angle - Angle_;
|
||||||
|
Angle_ = Angle_;
|
||||||
|
bisscErr = 0;
|
||||||
|
|
||||||
|
bissSpeed = Bissth1 - Bissth1_;
|
||||||
|
Bissth1_ = Bissth1;
|
||||||
}
|
}
|
||||||
BissErr = (BissAll & 0x0000000008000000) >> 27;
|
BissErr = (BissAll & 0x0000000008000000) >> 27;
|
||||||
BissWarn = (BissAll & 0x0000000004000000) >> 26;
|
BissWarn = (BissAll & 0x0000000004000000) >> 26;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
uint16_t biss_getAngle(void)
|
||||||
|
{
|
||||||
|
return Angle;
|
||||||
|
}
|
||||||
|
|
||||||
|
uint16_t biss_getErr(void)
|
||||||
|
{
|
||||||
|
return bisscErr;
|
||||||
|
}
|
||||||
|
|
||||||
|
|||||||
@ -1,14 +1,14 @@
|
|||||||
/*
|
/*
|
||||||
* biss.h
|
* biss.h
|
||||||
*
|
*
|
||||||
* Created on: 26 дек. 2023 г.
|
* Created on: 26 <EFBFBD><EFBFBD><EFBFBD>. 2023 <EFBFBD>.
|
||||||
* Author: seklyuts
|
* Author: seklyuts
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef SRC_BISS_H_
|
#ifndef SRC_BISS_H_
|
||||||
#define SRC_BISS_H_
|
#define SRC_BISS_H_
|
||||||
|
|
||||||
#define BISS_C_BITS 4 //кол-во читаемых 16-битных слов
|
#define BISS_C_BITS 4 //<EFBFBD><EFBFBD><EFBFBD>-<2D><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 16-<2D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||||
|
|
||||||
#define BISS_CLK_POL 1
|
#define BISS_CLK_POL 1
|
||||||
#define BISS_CLK_PHASE 1
|
#define BISS_CLK_PHASE 1
|
||||||
@ -27,6 +27,8 @@ void BissClkgenRun(void);
|
|||||||
|
|
||||||
void BissStartSet(void);
|
void BissStartSet(void);
|
||||||
void BissCalc(uint64_t BissData);
|
void BissCalc(uint64_t BissData);
|
||||||
|
uint16_t biss_getAngle(void);
|
||||||
|
uint16_t biss_getErr(void);
|
||||||
|
|
||||||
#endif /* SRC_BISS_H_ */
|
#endif /* SRC_BISS_H_ */
|
||||||
|
|
||||||
|
|||||||
@ -75,8 +75,7 @@ void InitPerif(void)
|
|||||||
PWMInitInterruptEn();
|
PWMInitInterruptEn();
|
||||||
|
|
||||||
SpiCInit();
|
SpiCInit();
|
||||||
// SpiCGpioInit();
|
|
||||||
// BissGpioInit();
|
|
||||||
BissInit();
|
BissInit();
|
||||||
|
|
||||||
vectorInitCurrLoop();
|
vectorInitCurrLoop();
|
||||||
|
|||||||
@ -20,10 +20,12 @@ void ReleOut(uint16_t out_bit)
|
|||||||
GpioDataRegs.GPCDAT.bit.GPIO95 = out_bit;
|
GpioDataRegs.GPCDAT.bit.GPIO95 = out_bit;
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
|
|
||||||
|
volatile uint16_t ReleErr1;
|
||||||
|
|
||||||
void ReleOut(uint16_t out_bit)
|
void ReleOut(uint16_t out_bit)
|
||||||
{
|
{
|
||||||
uint16_t Err1;
|
ReleErr1 = I2CWrite(I2C_FAULT_SLAVE_ADDRESS, 2, 1, true, &out_bit);
|
||||||
Err1 = I2CWrite(I2C_FAULT_SLAVE_ADDRESS, 2, 1, true, &out_bit);
|
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|||||||
@ -74,7 +74,7 @@ float FactorCurrent = FACTOR_CURRENT_MOTOR;
|
|||||||
TvectorCurrentLoop CurrLoop;
|
TvectorCurrentLoop CurrLoop;
|
||||||
TMode Mode = OffMode;
|
TMode Mode = OffMode;
|
||||||
uint16_t Step = 0, StepS, Nstep = 2, NoLoop = 0, StepShift = 6;
|
uint16_t Step = 0, StepS, Nstep = 2, NoLoop = 0, StepShift = 6;
|
||||||
float CurrentRegTuneAmpl = 0, FRM_cur = 0;
|
float CurrentRegTuneAmpl = 0, FRM_cur = 0, CurrentRegTuneAmplInpuls = 0;
|
||||||
int16_t Angle_test=0,sin_int,cos_int, AngleErr;
|
int16_t Angle_test=0,sin_int,cos_int, AngleErr;
|
||||||
float Udc;
|
float Udc;
|
||||||
uint16_t SectorCheckOn=1;
|
uint16_t SectorCheckOn=1;
|
||||||
@ -83,6 +83,8 @@ volatile int16_t Udc_rele = 0;
|
|||||||
float UdcVolt = 0;
|
float UdcVolt = 0;
|
||||||
volatile float VdcFactor = FACTOR_VDC;
|
volatile float VdcFactor = FACTOR_VDC;
|
||||||
volatile uint16_t VoltProcImit = 0;
|
volatile uint16_t VoltProcImit = 0;
|
||||||
|
uint32_t Impuls = 0;
|
||||||
|
int16_t AngleOffset = 0xc000, vectorAngle;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@ -93,7 +95,9 @@ volatile uint16_t VoltProcImit = 0;
|
|||||||
void vectorFault(void)
|
void vectorFault(void)
|
||||||
{
|
{
|
||||||
Mode = OffMode;
|
Mode = OffMode;
|
||||||
|
#ifdef REF0
|
||||||
XintRegs.XINT2CR.bit.ENABLE = 1;
|
XintRegs.XINT2CR.bit.ENABLE = 1;
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
uint16_t Num = 0;
|
uint16_t Num = 0;
|
||||||
@ -106,8 +110,8 @@ void vectorControl(int16_t CurrentA, int16_t CurrentB, int16_t CurrentC, int16_t
|
|||||||
Ia = -CurrentA;//sdfm_get(6);
|
Ia = -CurrentA;//sdfm_get(6);
|
||||||
Ib = -CurrentB;//sdfm_get(3);
|
Ib = -CurrentB;//sdfm_get(3);
|
||||||
Ic = -CurrentC;//sdfm_get(4);
|
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++;}}
|
if((Ia > IMAX)||(Ib>IMAX)||(Ic>IMAX)||(Ia<-IMAX)||(Ib<-IMAX)||(Ic<-IMAX) ) {OverCur[0] = Ia; OverCur[1] = Ib; OverCur[2] = Ic; ErrCur++; Mode = OffMode; CurFault++;}
|
||||||
// else ErrCur = 0;
|
|
||||||
|
|
||||||
UdcFiltered = Filter(sdfmUdc, &UdcFilter);
|
UdcFiltered = Filter(sdfmUdc, &UdcFilter);
|
||||||
if(UdcFiltered < 0) UdcFiltered = 0;
|
if(UdcFiltered < 0) UdcFiltered = 0;
|
||||||
@ -120,8 +124,11 @@ void vectorControl(int16_t CurrentA, int16_t CurrentB, int16_t CurrentC, int16_t
|
|||||||
CurrLoop.piId.Ref = 0;
|
CurrLoop.piId.Ref = 0;
|
||||||
|
|
||||||
rele_control(UdcFiltered);
|
rele_control(UdcFiltered);
|
||||||
|
#ifdef REF0
|
||||||
if(Mode) {XintRegs.XINT2CR.bit.ENABLE = 0; temperature_deInit();}
|
if(Mode) {XintRegs.XINT2CR.bit.ENABLE = 0; temperature_deInit();}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
vectorAngle = biss_getAngle() + AngleOffset;
|
||||||
|
|
||||||
switch(Mode)
|
switch(Mode)
|
||||||
{
|
{
|
||||||
@ -132,10 +139,16 @@ void vectorControl(int16_t CurrentA, int16_t CurrentB, int16_t CurrentC, int16_t
|
|||||||
case StepMode:
|
case StepMode:
|
||||||
PWM_ABC_StartOut();
|
PWM_ABC_StartOut();
|
||||||
vectorSinCos.Angle = Step;
|
vectorSinCos.Angle = Step;
|
||||||
CurrLoop.piIq.Ref = CurrentRegTuneAmpl;
|
if(Impuls > 0)
|
||||||
|
{
|
||||||
|
Impuls--;
|
||||||
|
CurrLoop.piIq.Ref = CurrentRegTuneAmplInpuls;
|
||||||
|
}
|
||||||
|
else CurrLoop.piIq.Ref = CurrentRegTuneAmpl;
|
||||||
break;
|
break;
|
||||||
case StayMode:
|
case StayMode:
|
||||||
PWM_ABC_StartOut();
|
PWM_ABC_StartOut();
|
||||||
|
CurrLoop.piIq.Ref = CurrentRegTuneAmpl;
|
||||||
break;
|
break;
|
||||||
case CurrentRegTune:
|
case CurrentRegTune:
|
||||||
vectorSinCos.Angle = 0;
|
vectorSinCos.Angle = 0;
|
||||||
@ -149,6 +162,20 @@ void vectorControl(int16_t CurrentA, int16_t CurrentB, int16_t CurrentC, int16_t
|
|||||||
vectorUdq.d = vectorUdq.q = 0;
|
vectorUdq.d = vectorUdq.q = 0;
|
||||||
PWM_ABC_Start(Num);
|
PWM_ABC_Start(Num);
|
||||||
break;
|
break;
|
||||||
|
case VectorModeI:
|
||||||
|
if(biss_getErr()>=3)
|
||||||
|
{
|
||||||
|
PWM_ABC_StopAllClose();
|
||||||
|
Mode = OffMode;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
PWM_ABC_StartOut();
|
||||||
|
vectorSinCos.Angle = vectorAngle;
|
||||||
|
CurrLoop.piIq.Ref = CurrentRegTuneAmpl;
|
||||||
|
CurrLoop.piId.Ref = 0;
|
||||||
|
}
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
Mode = OffMode;
|
Mode = OffMode;
|
||||||
PWM_ABC_StopAllClose();
|
PWM_ABC_StopAllClose();
|
||||||
|
|||||||
@ -28,11 +28,11 @@ Rele.State - включение реле 1- включено, 0 - выключе
|
|||||||
|
|
||||||
Rele.Error - появляется если после включение реле напряжение не поднялось как минимум на 5 вольт. При низком напряжении эта ошибка всегда возникает, чтобы поехать её надо сбросить вручную
|
Rele.Error - появляется если после включение реле напряжение не поднялось как минимум на 5 вольт. При низком напряжении эта ошибка всегда возникает, чтобы поехать её надо сбросить вручную
|
||||||
|
|
||||||
Mode - режим работы. 0 - стоим, всё выключено, 1 - шаговый режим, 2 - режим поворота на заданный угол, 3 - режим настройки регулятора тока, 4 - шим по одному транзистору
|
Mode - режим работы. 0 - стоим, всё выключено, 1 - шаговый режим, 2 - режим поворота на заданный угол, 3 - режим настройки регулятора тока, 4 - шим по одному транзистору, 6 - вращение по датчику с контуром тока
|
||||||
|
|
||||||
CurrentRegTuneAmpl - заданный ток для формирования поля когда включен контур тока
|
CurrentRegTuneAmpl - заданный ток для формирования поля когда включен контур тока
|
||||||
|
|
||||||
Nstep - шаг на который инкрементируется угол поворота поля в синхронном режиме
|
Nstep - шаг на который инкрементируется угол поворота поля в синхронном режиме (скорость вращения)
|
||||||
|
|
||||||
NoLoop - отключение контура тока (возможность задавать напряжение)
|
NoLoop - отключение контура тока (возможность задавать напряжение)
|
||||||
|
|
||||||
@ -40,6 +40,9 @@ vectorUdq.q - поперечная составляющая напряжения
|
|||||||
|
|
||||||
vectorUdq.d - продольная составляющая напряжения, при включенном регуляторе тока формируется регулятором, при отключенном можно задавать вручную
|
vectorUdq.d - продольная составляющая напряжения, при включенном регуляторе тока формируется регулятором, при отключенном можно задавать вручную
|
||||||
|
|
||||||
|
Impuls - время импульса тока в секундах (когда значение не равно нулю работает обратный отсчёт и ток = CurrentRegTuneAmplInpuls, когда равно нулю значение тока = CurrentRegTuneAmpl)
|
||||||
|
|
||||||
|
CurrentRegTuneAmplInpuls - величина импульса тока в амперах
|
||||||
___________________________________________
|
___________________________________________
|
||||||
|
|
||||||
в левом окне блок TestPWM - в этом режиме можно включить ШИМ на любой транзистор.
|
в левом окне блок TestPWM - в этом режиме можно включить ШИМ на любой транзистор.
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user