From ca65dd40470d7a417e82b691c423ce1c44143a95 Mon Sep 17 00:00:00 2001 From: seklyuts Date: Fri, 26 Jul 2024 16:32:52 +0300 Subject: [PATCH] =?UTF-8?q?=D0=B2=D1=80=D0=B0=D1=89=D0=B5=D0=BD=D0=B8?= =?UTF-8?q?=D0=B5=20=D0=BF=D0=BE=20=D0=B4=D0=B0=D1=82=D1=87=D0=B8=D0=BA?= =?UTF-8?q?=D1=83=20BISS-C=20=D1=82=D0=BE=D0=BB=D1=8C=D0=BA=D0=BE=20=D0=BA?= =?UTF-8?q?=D0=BE=D0=BD=D1=82=D1=83=D1=80=20=D1=82=D0=BE=D0=BA=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Projects/epwm_test_biss_c_cpu1/epwm_test.c | 2 - .../epwm_test_biss_c_cpu1/src/CLB/board.c | 16 ++++---- .../src/Peripherals/gpio_init.c | 3 +- .../src/Peripherals/spi_init.h | 2 +- Projects/epwm_test_biss_c_cpu1/src/biss.c | 6 +-- Projects/epwm_test_biss_c_cpu1/src/config.h | 2 +- .../epwm_test_biss_c_cpu1/src/init_perif.c | 11 ++++-- Projects/epwm_test_biss_c_cpu2/Start_rfm.pmp | Bin 48363 -> 51822 bytes Projects/epwm_test_biss_c_cpu2/epwm_test.c | 4 +- .../epwm_test_biss_c_cpu2/src/CLB/board.c | 16 ++++---- Projects/epwm_test_biss_c_cpu2/src/biss.c | 29 ++++++++++++-- Projects/epwm_test_biss_c_cpu2/src/biss.h | 6 ++- .../epwm_test_biss_c_cpu2/src/init_perif.c | 3 +- Projects/epwm_test_biss_c_cpu2/src/rele.c | 6 ++- Projects/epwm_test_biss_c_cpu2/src/vector.c | 37 +++++++++++++++--- .../Описание проекта freemaster.txt | 7 +++- 16 files changed, 103 insertions(+), 47 deletions(-) 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 e7a4e7468c032992747a7f4c56f7f0e1dd69afce..8e1d90c809fd86a3a79e58554039e695799f8231 100644 GIT binary patch delta 5351 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 V2c~=p%GX??d&|(-<%Mvw`hRg3CKdny 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 - в этом режиме можно включить ШИМ на любой транзистор.