diff --git a/Projects/epwm_test_biss_c_cpu1/epwm_test.c b/Projects/epwm_test_biss_c_cpu1/epwm_test.c index c35188d..3e722b0 100644 --- a/Projects/epwm_test_biss_c_cpu1/epwm_test.c +++ b/Projects/epwm_test_biss_c_cpu1/epwm_test.c @@ -23,8 +23,6 @@ void main(void) { InitPerif(); - - for(;;) { diff --git a/Projects/epwm_test_biss_c_cpu1/src/CLB/board.c b/Projects/epwm_test_biss_c_cpu1/src/CLB/board.c index 8045be3..ee0cd6b 100644 --- a/Projects/epwm_test_biss_c_cpu1/src/CLB/board.c +++ b/Projects/epwm_test_biss_c_cpu1/src/CLB/board.c @@ -50,7 +50,7 @@ void Board_init() { EALLOW; - //PinMux_init(); +// PinMux_init(); CLB_init(); CLB_OUTPUTXBAR_init(); @@ -65,16 +65,16 @@ void Board_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); - // - // 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); } diff --git a/Projects/epwm_test_biss_c_cpu1/src/Peripherals/gpio_init.c b/Projects/epwm_test_biss_c_cpu1/src/Peripherals/gpio_init.c index 89e29b1..63c9c42 100644 --- a/Projects/epwm_test_biss_c_cpu1/src/Peripherals/gpio_init.c +++ b/Projects/epwm_test_biss_c_cpu1/src/Peripherals/gpio_init.c @@ -84,14 +84,13 @@ void GpioInit(void) GpioDataRegs.GPCDAT.bit.GPIO95 = 1; GpioCtrlRegs.GPCCSEL4.bit.GPIO95 = 2; #endif - GpioCtrlRegs.GPIO_FaultPWM_MUX.bit.GPIO_FaultPWM = 0;//FaultPWM GpioCtrlRegs.GPIO_FaultPWM_GMUX.bit.GPIO_FaultPWM = 0; GpioCtrlRegs.GPIO_FaultPWM_DIR.bit.GPIO_FaultPWM = 0; GpioDataRegs.GPIO_FaultPWM_DAT.bit.GPIO_FaultPWM = 0; GpioCtrlRegs.GPIO_FaultPWM_SEL.bit.GPIO_FaultPWM = 2; - InputXbarRegs.INPUT4SELECT = 64;//xint1 + InputXbarRegs.INPUT4SELECT = GPIO_FaultPWMpin;//xint1 GpioCtrlRegs.GPAMUX2.bit.GPIO20 = 1;//EQEP GpioCtrlRegs.GPAGMUX2.bit.GPIO20 = 0; diff --git a/Projects/epwm_test_biss_c_cpu1/src/Peripherals/spi_init.h b/Projects/epwm_test_biss_c_cpu1/src/Peripherals/spi_init.h index e2c6f40..efdff07 100644 --- a/Projects/epwm_test_biss_c_cpu1/src/Peripherals/spi_init.h +++ b/Projects/epwm_test_biss_c_cpu1/src/Peripherals/spi_init.h @@ -1,7 +1,7 @@ /* * spi_init.h * - * Created on: 5 . 2023 . + * Created on: 5 ����. 2023 �. * Author: seklyuts */ diff --git a/Projects/epwm_test_biss_c_cpu1/src/biss.c b/Projects/epwm_test_biss_c_cpu1/src/biss.c index 30642b2..355e81c 100644 --- a/Projects/epwm_test_biss_c_cpu1/src/biss.c +++ b/Projects/epwm_test_biss_c_cpu1/src/biss.c @@ -12,7 +12,7 @@ #include "crc.h" -#define DEVICE_SYSCLK_FREQ 200000000 +#define DEVICE_SYSCLK_FREQ 250000000 #define CLB_CLOCK_FREQ (DEVICE_SYSCLK_FREQ / 2) @@ -68,13 +68,13 @@ void BissGpioInit(void) { EALLOW; - GpioCtrlRegs.GPDMUX1.bit.GPIO96 = 2;//14 = 1110 + GpioCtrlRegs.GPDMUX1.bit.GPIO96 = 2;//14 = 1110 CLB_OUTPUTX BAR6 GpioCtrlRegs.GPDGMUX1.bit.GPIO96 = 3; GpioCtrlRegs.GPDDIR.bit.GPIO96 = 1; GpioDataRegs.GPDDAT.bit.GPIO96 = 0; 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.GPDDIR.bit.GPIO97 = 1; GpioDataRegs.GPDDAT.bit.GPIO97 = 0; diff --git a/Projects/epwm_test_biss_c_cpu1/src/config.h b/Projects/epwm_test_biss_c_cpu1/src/config.h index 3d46447..5fc602e 100644 --- a/Projects/epwm_test_biss_c_cpu1/src/config.h +++ b/Projects/epwm_test_biss_c_cpu1/src/config.h @@ -29,13 +29,13 @@ #define GPIO_LED_B GPIO7 #else - #define GPIO_FaultPWM GPIO99 #define GPIO_FaultPWM_SEL GPDCSEL1 #define GPIO_FaultPWM_DIR GPDDIR #define GPIO_FaultPWM_DAT GPDDAT #define GPIO_FaultPWM_GMUX GPDGMUX1 #define GPIO_FaultPWM_MUX GPDMUX1 +#define GPIO_FaultPWMpin 99 #define GPIO_RS485_DE 133 #define GPIO_RS485_RE 145 diff --git a/Projects/epwm_test_biss_c_cpu1/src/init_perif.c b/Projects/epwm_test_biss_c_cpu1/src/init_perif.c index 3e02179..59625d8 100644 --- a/Projects/epwm_test_biss_c_cpu1/src/init_perif.c +++ b/Projects/epwm_test_biss_c_cpu1/src/init_perif.c @@ -15,6 +15,8 @@ #include "gpio_init.h" #include "frm_uart.h" #include "i2c_init.h" +#include "spi_init.h" +#include "biss.h" #define TO_CPU1 0 @@ -43,10 +45,11 @@ #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_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_I2CA(x) EALLOW; DevCfgRegs.CPUSEL7.bit.I2C_A = 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) { @@ -102,6 +105,8 @@ void InitPerif(void) I2CMasterGpioInit(); SpiCGpioInit(); BissGpioInit(); + BissInit(); + // ConfigureADC(); @@ -119,9 +124,9 @@ void InitPerif(void) CONNECT_SCIA(TO_CPU2); CONNECT_EQEP1(TO_CPU2); CONNECT_I2CA(TO_CPU2); - CONNECT_SCIC(TO_CPU2); + CONNECT_SPIC(TO_CPU2); CONNECT_CLB1(TO_CPU2); - + CONNECT_CLB2(TO_CPU2); Cpu1toCpu2IpcRegs.CPU1TOCPU2IPCBOOTMODE = 0x5A00C803; //str 716 Cpu1toCpu2IpcRegs.CPU1TOCPU2IPCSET.bit.IPC0 = 1; diff --git a/Projects/epwm_test_biss_c_cpu2/Start_rfm.pmp b/Projects/epwm_test_biss_c_cpu2/Start_rfm.pmp index e7a4e74..8e1d90c 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/epwm_test.c b/Projects/epwm_test_biss_c_cpu2/epwm_test.c index c8aa77f..7a58f81 100644 --- a/Projects/epwm_test_biss_c_cpu2/epwm_test.c +++ b/Projects/epwm_test_biss_c_cpu2/epwm_test.c @@ -31,10 +31,10 @@ void main(void) // asm (" NOP"); frmmstr_run(); rele_run(); - BissClkgenRun(); + // Gpio_rainbow(diod); // AdcRun(); -// BissClkgenRun(); + BissClkgenRun(); } } diff --git a/Projects/epwm_test_biss_c_cpu2/src/CLB/board.c b/Projects/epwm_test_biss_c_cpu2/src/CLB/board.c index 8045be3..2be7010 100644 --- a/Projects/epwm_test_biss_c_cpu2/src/CLB/board.c +++ b/Projects/epwm_test_biss_c_cpu2/src/CLB/board.c @@ -52,7 +52,7 @@ void Board_init() //PinMux_init(); CLB_init(); - CLB_OUTPUTXBAR_init(); +// CLB_OUTPUTXBAR_init(); EDIS; } @@ -65,16 +65,16 @@ void Board_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); - // - // 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); } diff --git a/Projects/epwm_test_biss_c_cpu2/src/biss.c b/Projects/epwm_test_biss_c_cpu2/src/biss.c index cb0e7c8..fad9ba3 100644 --- a/Projects/epwm_test_biss_c_cpu2/src/biss.c +++ b/Projects/epwm_test_biss_c_cpu2/src/biss.c @@ -12,7 +12,7 @@ #include "crc.h" -#define DEVICE_SYSCLK_FREQ 200000000 +#define DEVICE_SYSCLK_FREQ 250000000 #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 BissErr = 0; uint16_t BissWarn = 0; -uint32_t Bissth1 = 0; +uint32_t Bissth1 = 0, Bissth1_ = 0; uint16_t Bissth2 = 0; +uint16_t Angle = 0, Angle_, dAngle; uint64_t BissAllCRC; uint16_t BissTestShift1[16]; uint16_t BissErrData = 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) { @@ -201,13 +202,33 @@ void BissCalc(uint64_t BissData) if(BissCRC2_ != BissCRC) { WrongCS++; + bisscErr++; + if(bisscErr < 3) Angle = Angle_ + dAngle; } else { RightCS++; + Angle = -Bissth2*5; + dAngle = Angle - Angle_; + Angle_ = Angle_; + bisscErr = 0; + + bissSpeed = Bissth1 - Bissth1_; + Bissth1_ = Bissth1; } BissErr = (BissAll & 0x0000000008000000) >> 27; BissWarn = (BissAll & 0x0000000004000000) >> 26; } } + +uint16_t biss_getAngle(void) +{ + return Angle; +} + +uint16_t biss_getErr(void) +{ + return bisscErr; +} + diff --git a/Projects/epwm_test_biss_c_cpu2/src/biss.h b/Projects/epwm_test_biss_c_cpu2/src/biss.h index 0eb459b..10c1e6d 100644 --- a/Projects/epwm_test_biss_c_cpu2/src/biss.h +++ b/Projects/epwm_test_biss_c_cpu2/src/biss.h @@ -1,14 +1,14 @@ /* * biss.h * - * Created on: 26 . 2023 . + * Created on: 26 ���. 2023 �. * Author: seklyuts */ #ifndef SRC_BISS_H_ #define SRC_BISS_H_ -#define BISS_C_BITS 4 //- 16- +#define BISS_C_BITS 4 //���-�� �������� 16-������ ���� #define BISS_CLK_POL 1 #define BISS_CLK_PHASE 1 @@ -27,6 +27,8 @@ void BissClkgenRun(void); void BissStartSet(void); void BissCalc(uint64_t BissData); +uint16_t biss_getAngle(void); +uint16_t biss_getErr(void); #endif /* SRC_BISS_H_ */ diff --git a/Projects/epwm_test_biss_c_cpu2/src/init_perif.c b/Projects/epwm_test_biss_c_cpu2/src/init_perif.c index 4c5aafe..6b51068 100644 --- a/Projects/epwm_test_biss_c_cpu2/src/init_perif.c +++ b/Projects/epwm_test_biss_c_cpu2/src/init_perif.c @@ -75,8 +75,7 @@ void InitPerif(void) PWMInitInterruptEn(); SpiCInit(); -// SpiCGpioInit(); -// BissGpioInit(); + BissInit(); vectorInitCurrLoop(); diff --git a/Projects/epwm_test_biss_c_cpu2/src/rele.c b/Projects/epwm_test_biss_c_cpu2/src/rele.c index e596e16..32a0608 100644 --- a/Projects/epwm_test_biss_c_cpu2/src/rele.c +++ b/Projects/epwm_test_biss_c_cpu2/src/rele.c @@ -20,10 +20,12 @@ void ReleOut(uint16_t out_bit) GpioDataRegs.GPCDAT.bit.GPIO95 = out_bit; } #else + +volatile uint16_t ReleErr1; + void ReleOut(uint16_t out_bit) { - uint16_t Err1; - Err1 = I2CWrite(I2C_FAULT_SLAVE_ADDRESS, 2, 1, true, &out_bit); + ReleErr1 = I2CWrite(I2C_FAULT_SLAVE_ADDRESS, 2, 1, true, &out_bit); } #endif diff --git a/Projects/epwm_test_biss_c_cpu2/src/vector.c b/Projects/epwm_test_biss_c_cpu2/src/vector.c index cf98ccb..9973d6c 100644 --- a/Projects/epwm_test_biss_c_cpu2/src/vector.c +++ b/Projects/epwm_test_biss_c_cpu2/src/vector.c @@ -74,7 +74,7 @@ float FactorCurrent = FACTOR_CURRENT_MOTOR; TvectorCurrentLoop CurrLoop; TMode Mode = OffMode; 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; float Udc; uint16_t SectorCheckOn=1; @@ -83,6 +83,8 @@ volatile int16_t Udc_rele = 0; float UdcVolt = 0; volatile float VdcFactor = FACTOR_VDC; 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) { Mode = OffMode; +#ifdef REF0 XintRegs.XINT2CR.bit.ENABLE = 1; +#endif } 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); 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; + 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++;} + UdcFiltered = Filter(sdfmUdc, &UdcFilter); 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; rele_control(UdcFiltered); - +#ifdef REF0 if(Mode) {XintRegs.XINT2CR.bit.ENABLE = 0; temperature_deInit();} +#endif + + vectorAngle = biss_getAngle() + AngleOffset; switch(Mode) { @@ -132,10 +139,16 @@ void vectorControl(int16_t CurrentA, int16_t CurrentB, int16_t CurrentC, int16_t case StepMode: PWM_ABC_StartOut(); vectorSinCos.Angle = Step; - CurrLoop.piIq.Ref = CurrentRegTuneAmpl; + if(Impuls > 0) + { + Impuls--; + CurrLoop.piIq.Ref = CurrentRegTuneAmplInpuls; + } + else CurrLoop.piIq.Ref = CurrentRegTuneAmpl; break; case StayMode: PWM_ABC_StartOut(); + CurrLoop.piIq.Ref = CurrentRegTuneAmpl; break; case CurrentRegTune: 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; PWM_ABC_Start(Num); 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: Mode = OffMode; PWM_ABC_StopAllClose(); diff --git a/Projects/epwm_test_biss_c_cpu2/Описание проекта freemaster.txt b/Projects/epwm_test_biss_c_cpu2/Описание проекта freemaster.txt index 31eca3d..f1e25a0 100644 --- a/Projects/epwm_test_biss_c_cpu2/Описание проекта freemaster.txt +++ b/Projects/epwm_test_biss_c_cpu2/Описание проекта freemaster.txt @@ -28,11 +28,11 @@ Rele.State - включение реле 1- включено, 0 - выключе Rele.Error - появляется если после включение реле напряжение не поднялось как минимум на 5 вольт. При низком напряжении эта ошибка всегда возникает, чтобы поехать её надо сбросить вручную -Mode - режим работы. 0 - стоим, всё выключено, 1 - шаговый режим, 2 - режим поворота на заданный угол, 3 - режим настройки регулятора тока, 4 - шим по одному транзистору +Mode - режим работы. 0 - стоим, всё выключено, 1 - шаговый режим, 2 - режим поворота на заданный угол, 3 - режим настройки регулятора тока, 4 - шим по одному транзистору, 6 - вращение по датчику с контуром тока CurrentRegTuneAmpl - заданный ток для формирования поля когда включен контур тока -Nstep - шаг на который инкрементируется угол поворота поля в синхронном режиме +Nstep - шаг на который инкрементируется угол поворота поля в синхронном режиме (скорость вращения) NoLoop - отключение контура тока (возможность задавать напряжение) @@ -40,6 +40,9 @@ vectorUdq.q - поперечная составляющая напряжения vectorUdq.d - продольная составляющая напряжения, при включенном регуляторе тока формируется регулятором, при отключенном можно задавать вручную +Impuls - время импульса тока в секундах (когда значение не равно нулю работает обратный отсчёт и ток = CurrentRegTuneAmplInpuls, когда равно нулю значение тока = CurrentRegTuneAmpl) + +CurrentRegTuneAmplInpuls - величина импульса тока в амперах ___________________________________________ в левом окне блок TestPWM - в этом режиме можно включить ШИМ на любой транзистор.