From d007cf4c89217a6223026cde7c7b9a3a0fa866f8 Mon Sep 17 00:00:00 2001 From: seklyuts Date: Mon, 27 May 2024 09:09:31 +0300 Subject: [PATCH] =?UTF-8?q?=D0=A7=D0=B0=D1=81=D1=82=D0=BE=D1=82=D0=B0=20?= =?UTF-8?q?=D0=B2=D0=B5=D0=BD=D1=82=D0=B8=D0=BB=D1=8F=D1=82=D0=BE=D1=80?= =?UTF-8?q?=D0=B0=20=D0=BF=D0=BE=D0=BD=D0=B8=D0=B6=D0=B5=D0=BD=D0=B0=20?= =?UTF-8?q?=D0=B4=D0=BE=201=20=D0=BA=D0=93=D1=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Projects/epwm_test_biss_c_cpu2/Start_rfm.pmp | Bin 38548 -> 39012 bytes .../src/Peripherals/pwm_init.c | 3 +- .../src/Peripherals/pwm_init.h | 6 ++- .../epwm_test_biss_c_cpu2/src/frmmstr_run.c | 3 ++ Projects/epwm_test_biss_c_cpu2/src/vector.c | 38 +++++++++--------- 5 files changed, 29 insertions(+), 21 deletions(-) diff --git a/Projects/epwm_test_biss_c_cpu2/Start_rfm.pmp b/Projects/epwm_test_biss_c_cpu2/Start_rfm.pmp index 452971496c076b8c42c53203d6e5ebebbc9fbdea..442b45245bb514fc3f101f3b4e7c2c120c524814 100644 GIT binary patch delta 3909 zcmb7_dr*|u6~OPFU18<@T6P!MU0{QNAP?D)8Wkmg3W|!b;v>F*1&IW<0-e-q_(+VV zCL!W68S;WySd+0`P}ka;NmOh)%@||aiM6ydowhSc+WJQy|8&~^;q>0`?svX*hMClz z+3)+E$G!L5bMCp{=^%W09*holc+^-3Yo_s^?!f35F1Q}VeJca_h9L`PgIrmHUl|%< zhpT*++BdBMd{dYUIAItp$le@0nEZ9fG@}7L)kR?y(Rd^mUXD?D#abK zR``jG(H3Wck7WpV;_UEKsXZNUhbt0W672AS#I!^UToX8nw-YPCIgJ<0Q}{}99EOtY z@axDJC*f|SsNjm!SX5Fhh9BYRva?*uRp~v9N-N}4?)Ky6WD^cOQG}nT37eStv$O=9 zve+V|zI070wz|Ule-K@=S>QPts^9M9W|3G=h68>smH*C25043Dig`pN2eWcuk)FRV zvd%z`5GOFny%3$wbjTIrd-!{fZq0EF%W`Aznkx++(N$u=cy>DEX(}@+O-cB#Y!{pk z@{-sMe3TQiHS-u>!Ug$4yb1-P;GaODcwNArJS!}gSh>gwMJk@kw?eU0-sHGM;^_h_ zlt|oNXoXTy^hwNE?1HsIdk()^oGt1vPsm45q2UyMP;3W}CXV52OETdXqH1gKdP$jj zP+CiJ;1f-C2tJc}{8MRGIJuK$sqnn82XI$;DU1ZwoKAQWv1X|~oa@gkQZTi`8qW8x zD)PfL;VB4vyyHp6BadqS%PU1~#FYQ3OyVR1AH$oEMM`gdD?$qOEDIXo1sUD--d+!!ofO z*16z#kf&h+T=IK8s=a$dD%8uE z-Hmzhq73x!jSk2VXGPTAgxfYg3%8`@$fk0*9mMmS?!qs{D}YOya^U+S7;)W*^Bsgo zwWx)-jW+f5mV99nOMjW2f+w47c(QR1-fFhPsi4~4FSX>s3As?K*QSQ~TlIMZ<66Zg z{N7n~l`g=0t?6)6IG)A#w`E2q^o8wCJ)vXh+u@8%V%<(Bcptp^VxDxuRxRK$yvN1X zNRI~iR7Uje-42)z;>q1t;r$?P-g6bEWI2Ak*AC}|Cg6^(?&+!T?H;J@>-CuiIsC=Q zSftV}vKq*bZ|Q#8cTha~1_%1d^Fj4xG5sX=@4IN2!bNR${Mpmi#h-WD8u-)IULQ53 zz}EG9QE9j1@%95k+_Jtx6_Yy@!x?Nc*zt!Q0|pyr`$`QHxY1`b%wU&qyW^r_V2nM( z|KhDnASAp$T4X%0%wTNi<3+lSo5G&wIL$ZC-|4Y@s4$ku?deP-EBg@dzvhnTGqR|y zzV?B>gDeyO+F2g&X9aA8`WN+@YS0KxuRHM5{i%l8&>!}{0>(LI zHq>`uM1_mJCn1I_*n;Zbt{xv=8>|Y=`8Pnc&>6iQcy(}9=&AkV??b)-y?d2h^oOh%F_`m&Z?=oc1fzyCk^F4j(=_=r{!6%&mUEhVbbXo#)WkS!xxPSi%U zmPk)|BI#0yN{LnwJx=r-QJG2yMDlA$*+Eo7R7bRrsG8_8qN7BeL@SB*QVY*u!th2T z8_o;u8U9GLL0-sply{NP%pCh#E6JN`K^~?gj);EPObhG%@D%CvF6bd0-9^s@C$f=eJA`enNu1JLaBDe{+A9ylimlS3cB=7SCWy>sofw0M9)OjzG=k5OWqvn z9=QxV^@$&D854VpCV!LY9iq1*7JPTKV&3neX!&`zqkc!{l$lWRsVmx1yeXpNKN)Tc zA2rXw2R>~!mQ2B<66qJRg>-c6B2L|iW*uTN8nPlH{b1?+znHB0O^`vlN}>s(H;7C` Y(L@VX$`c1rKTfe^E+k4&Q~mn?0K_^lmH+?% delta 3875 zcmbW2Yfw~I5`fR`8HeGaJcpSPW(Fb1%P=6b7^C6?FruO$B0eDq14vW|A&(N3sXW|l zViass!6#9~j8>804yJ0|Rn+81%5u%_#*moTCcDPnn5sPfBr#j5>^b+$?K^H+Wx2O% z=6>CM&gnkgea^i;410&b;9y&N4OzfW;P+{Rz3;hTwIAze4dOl}8P@o@G8ey8${|A7 z2k-;f1E3DY7^4N&iUEUo+30|EV%h-i8kY`{a=`A`2y8T2VY6K2aCJOJ$NI1+EC()& z!N)PyoC-Jnn4gx3?wmw?%sdnR;t!lMdldMSjACa*23+@Jdvz{;zI*}t*12(Yq!j|v zYKyW!tqkF6lpRK-cJFvQoR+wJf*szJm=JA&KMEYcE71k;H$R>-AH$boqc9L-hqlld z2cSJv^x@3-Nc6>7ln=3Y`f)C$s`MI~60$hur?q26tP#8C<>0#s!X{S!bHW5XX0e4x zZHbyR#p(*`zatv4S>QeyYP;RZ%_6a$i4Lff%AY1C2ImBl#5y99j^s)3k)FTzl8?aq zLhQ$wv~YAf6JbnX0KhOsDVP0wkj=B=yLtP~%98O7uYnsZ8zRDQk5(_6=;qNN$$*{ubQhABv7ZUeoTHzlO zYqPBIPg$Rd*)C8-51qs>vr|OcvX)@qBKc+9)-- zlVH83+5*iok6*ZxgUKDpi-&Y!AH;R}ZpibiIqmmEWARjbFxT%E#9@4aHJII96nVQHcjZw6L1N}y3tW`=4ac`6j?A;b+X4r% zz1RVn5Y2oW6&yIgLr@CB*@WPM)da(d=)CLq)pve zmLW{S_4SlE?5VV2Pk9|)uCjwiUK}qjPlqYeQBAc?4fC4%e-Wc<#3tISFQCgk4sX^Z zLZcXX9Q`YkLKFJjDyN>%KJ>13h9vSSi|p?qj;vFR5`k*v6*8_<3j!)Xe{IZzcl{N zbkqmS78T%JuMZGRwVr?#*KuTS#keAZjN~YwYTuI`5ZoE6nY@==+Sm>)I@U$Bif9tiPNFoTI*qzns)iw{swQ0q(ep%ls!~W- zOSFZ^MdTs!5xt;Ny6C?eQm!LfLUf<(g-Fqp#;TI}<;;m&x@Pf?1UBZo6*%8@7?fLq zy6rc#Y>G1^9=&Vs)|pN=gZwoSJxk;!nn~0^G)JRuHdjM7ji{06L8942PZK>%R7#Xb z6iqah=pmvwmFh({*ORh{sGdkKMKS575X~Z*PUI!ZrBgYCSD#*D{EyG2;DxR^fu?7+ zf^kffChy>_E^NlK`t`Ea|M2`#tvLJD(%egN9Bdhd&`PAY`cl%ZA<_@~MorhvmTSly zM0aZSD6;;RNWU}g)btfJPH+0nq^nY?=Jr-^A+z4}{Mz%$D_L*TNkeRs)A0G2xG|Z2B)Emn!Q3 diff --git a/Projects/epwm_test_biss_c_cpu2/src/Peripherals/pwm_init.c b/Projects/epwm_test_biss_c_cpu2/src/Peripherals/pwm_init.c index 4d97ec3..f59015a 100644 --- a/Projects/epwm_test_biss_c_cpu2/src/Peripherals/pwm_init.c +++ b/Projects/epwm_test_biss_c_cpu2/src/Peripherals/pwm_init.c @@ -23,6 +23,7 @@ uint32_t EPwmTimerIntCount[17]; uint16_t EPwm_DB_Direction[17]; volatile uint16_t PwmBrake100 = PERIOD_BRAKE; volatile uint16_t PwmMotor100 = PERIOD_MOTOR; +volatile uint16_t PwmFan100 = PERIOD_FAN;// от 20 до 100% регулировать @@ -70,7 +71,7 @@ void PWMAllInit(void) PWMInit(PWM_B, PwmMotor100, COMPLIMENTARY);//��� PWMInit(PWM_C, PwmMotor100, COMPLIMENTARY);//��� PWMInit(PWM_BRAKE, PwmBrake100, INDEPENDED);//������ - PWMInit(3, PwmMotor100, INDEPENDED);//���������� � ������ + PWMInit(3, PwmFan100, INDEPENDED);//���������� � ������ //11 � 12 ��� SDFM PWMInit(11, PwmMotor100, INDEPENDED); 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 8696822..e742b39 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 @@ -1,7 +1,7 @@ /* * pwm_init.h * - * Created on: 21 . 2023 . + * Created on: 21 ���. 2023 �. * Author: seklyuts */ #include "f28x_project.h" @@ -15,6 +15,10 @@ #define FREQUENCY_BRAKE 200000.0 //Hz #define FREQUENCY_MOTOR 10000.0 //Hz #define EPWM_DB_mkS 3.0 //mkS +#define FREQUENCY_FAN 1000.0 //Hz + + +#define PERIOD_FAN (SYS_PWM_FREQUENCY/2.0/FREQUENCY_FAN) #define PERIOD_BRAKE (SYS_PWM_FREQUENCY/2.0/FREQUENCY_BRAKE) //Tic #define PERIOD_MOTOR (SYS_PWM_FREQUENCY/2.0/FREQUENCY_MOTOR) //Tic 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 518a957..ecc36d8 100644 --- a/Projects/epwm_test_biss_c_cpu2/src/frmmstr_run.c +++ b/Projects/epwm_test_biss_c_cpu2/src/frmmstr_run.c @@ -15,6 +15,8 @@ volatile uint16_t counter2=0 ; volatile uint16_t Rele=0; volatile uint16_t testMode = 0; +//uint16_t PWM_Vent1; + void frmmstr_run(void) { static uint16_t diod = 0; @@ -52,5 +54,6 @@ static uint16_t diod = 0; FMSTR_Recorder(); FMSTREnableClr(); Gpio95out(Rele); +// EPwm3Regs.CMPA.bit.CMPA = PWM_Vent1; } } diff --git a/Projects/epwm_test_biss_c_cpu2/src/vector.c b/Projects/epwm_test_biss_c_cpu2/src/vector.c index 5d43f58..cfeb919 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 */ @@ -23,9 +23,9 @@ #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; @@ -145,7 +145,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 @@ -159,7 +159,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 @@ -174,13 +174,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) @@ -250,14 +250,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; }*/ @@ -292,7 +292,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)); @@ -303,7 +303,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); @@ -312,7 +312,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) { @@ -328,7 +328,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); @@ -348,7 +348,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); @@ -356,7 +356,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) { @@ -402,7 +402,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);