From 6882d6d014df2eb6de892b4646147f09ea770ddf Mon Sep 17 00:00:00 2001 From: Razvalyaev Date: Tue, 18 Nov 2025 14:16:20 +0300 Subject: [PATCH] =?UTF-8?q?=D0=A0=D0=B5=D1=84=D0=B0=D0=BA=D1=82=D0=BE?= =?UTF-8?q?=D1=80=D0=B8=D0=BD=D0=B3=20=D0=B8=20=D0=B4=D0=BE=D1=80=D0=B0?= =?UTF-8?q?=D0=B1=D0=BE=D1=82=D0=BA=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Drivers/STM32_SIMULINK/stm32_matlab_tim.c | 89 +++-- .../Drivers/STM32_SIMULINK/stm32_matlab_tim.h | 2 + MATLAB/upp_r2023.slx | Bin 72988 -> 73930 bytes UPP/Core/Configs/modbus_data.h | 2 +- UPP/Core/Configs/upp_config.h | 9 + UPP/Core/Configs/upp_defs.h | 3 + UPP/Core/PowerMonitor/power_monitor.c | 28 +- UPP/Core/PowerMonitor/power_monitor.h | 2 + UPP/Core/PowerMonitor/power_protect.c | 10 +- UPP/Core/PowerMonitor/zero_cross.h | 16 +- UPP/Core/UPP/angle_control.c | 311 ++++++++++-------- UPP/Core/UPP/angle_control.h | 37 ++- UPP/Core/UPP/pwm_thyristors.c | 8 +- UPP/Core/UPP/pwm_thyristors.h | 6 +- UPP/Core/UPP/upp_errors.c | 2 +- UPP/Core/UPP/upp_main.c | 6 +- UPP/Core/UPP/upp_main.h | 2 +- UPP/Core/UPP/{upp_control.c => upp_params.c} | 107 +++--- UPP/Core/UPP/{upp_control.h => upp_params.h} | 10 +- UPP/MDK-ARM/UPP.uvoptx | 54 +-- UPP/MDK-ARM/UPP.uvprojx | 20 +- 21 files changed, 421 insertions(+), 303 deletions(-) rename UPP/Core/UPP/{upp_control.c => upp_params.c} (67%) rename UPP/Core/UPP/{upp_control.h => upp_params.h} (96%) diff --git a/MATLAB/MCU_STM32_Matlab/Drivers/STM32_SIMULINK/stm32_matlab_tim.c b/MATLAB/MCU_STM32_Matlab/Drivers/STM32_SIMULINK/stm32_matlab_tim.c index 4c2c92a..4e4ea46 100644 --- a/MATLAB/MCU_STM32_Matlab/Drivers/STM32_SIMULINK/stm32_matlab_tim.c +++ b/MATLAB/MCU_STM32_Matlab/Drivers/STM32_SIMULINK/stm32_matlab_tim.c @@ -18,24 +18,33 @@ void TIM_Simulation(TIM_TypeDef *TIMx, struct TIM_Sim *TIMS) // Выбор режима работы таймера -switch (TIMx->SMCR & TIM_SMCR_SMS) // TIMER MODE -{ - // обычный счет - case(TIM_SLAVEMODE_DISABLE):// NORMAL MODE counting - TIMx_Count(TIMx, TIMS); - Channels_Simulation(TIMx, TIMS); // CaptureCompare and PWM channels simulation - Write_TRGO(TIMx, TIMS); - break; + switch (TIMx->SMCR & TIM_SMCR_SMS) // TIMER MODE + { + // обычный счет + case(TIM_SLAVEMODE_DISABLE):// NORMAL MODE counting + TIMx_Count(TIMx, TIMS); + Channels_Simulation(TIMx, TIMS); // CaptureCompare and PWM channels simulation + Write_TRGO(TIMx, TIMS); + break; - // включение слейв таймера по ивенту - case(TIM_SLAVEMODE_TRIGGER): // SLAVE MODE: TRIGGER MODE - Slave_Mode_Check_Source(TIMx, TIMS); - TIMx_Count(TIMx, TIMS); - Channels_Simulation(TIMx, TIMS); // CaptureCompare and PWM channels simulation - Write_TRGO(TIMx, TIMS); - break; -} + // включение слейв таймера по ивенту + case(TIM_SLAVEMODE_TRIGGER): // SLAVE MODE: TRIGGER MODE + Slave_Mode_Check_Source(TIMx, TIMS); + TIMx_Count(TIMx, TIMS); + Channels_Simulation(TIMx, TIMS); // CaptureCompare and PWM channels simulation + Write_TRGO(TIMx, TIMS); + break; + } + + // EGR + TIM_EGR_Simulation(TIMx); + + // Прерывание если какое-то выставлено + if (TIMx->SR & (TIM_SR_UIF | TIM_SR_CC1IF | TIM_SR_CC2IF | TIM_SR_CC3IF | TIM_SR_CC4IF)) + { + TIM_Call_IRQHandller(TIMx); // call HANDLER + } } /* Счет таймера за один такт */ @@ -68,7 +77,9 @@ void Overflow_Check(TIM_TypeDef* TIMx, struct TIM_Sim* TIMS) if(TIMS->tx_step > TIMS->RELOAD) TIMS->tx_cnt = 0; - TIM_Call_IRQHandller(TIMx); // call HANDLER + if (TIMx->DIER & TIM_DIER_UIE) { + TIMx->SR |= TIM_SR_UIF; + } } } } @@ -134,12 +145,10 @@ void CC_PWM_Ch1_Simulation(TIM_TypeDef *TIMx, struct TIM_Sim *TIMS) if (((TIMS->tx_cnt - TIMS->tx_step) < TIMx->CCR1) && (TIMS->tx_cnt >= TIMx->CCR1)) { TIMx->SR |= TIM_SR_CC1IF; - TIM_Call_IRQHandller(TIMx); } else if (((TIMS->tx_cnt - TIMS->tx_step) > TIMx->CCR1) && (TIMS->tx_cnt <= TIMx->CCR1)) { TIMx->SR |= TIM_SR_CC1IF; - TIM_Call_IRQHandller(TIMx); } } } @@ -188,12 +197,10 @@ void CC_PWM_Ch2_Simulation(TIM_TypeDef *TIMx, struct TIM_Sim *TIMS) if (((TIMS->tx_cnt - TIMS->tx_step) < TIMx->CCR2) && (TIMS->tx_cnt >= TIMx->CCR2)) { TIMx->SR |= TIM_SR_CC2IF; - TIM_Call_IRQHandller(TIMx); } else if (((TIMS->tx_cnt - TIMS->tx_step) > TIMx->CCR2) && (TIMS->tx_cnt <= TIMx->CCR2)) { TIMx->SR |= TIM_SR_CC2IF; - TIM_Call_IRQHandller(TIMx); } } } @@ -242,12 +249,10 @@ void CC_PWM_Ch3_Simulation(TIM_TypeDef *TIMx, struct TIM_Sim *TIMS) if (((TIMS->tx_cnt - TIMS->tx_step) < TIMx->CCR3) && (TIMS->tx_cnt >= TIMx->CCR3)) { TIMx->SR |= TIM_SR_CC3IF; - TIM_Call_IRQHandller(TIMx); } else if (((TIMS->tx_cnt - TIMS->tx_step) > TIMx->CCR3) && (TIMS->tx_cnt <= TIMx->CCR3)) { TIMx->SR |= TIM_SR_CC3IF; - TIM_Call_IRQHandller(TIMx); } } } @@ -296,12 +301,10 @@ void CC_PWM_Ch4_Simulation(TIM_TypeDef *TIMx, struct TIM_Sim *TIMS) if (((TIMS->tx_cnt - TIMS->tx_step) < TIMx->CCR4) && (TIMS->tx_cnt >= TIMx->CCR4)) { TIMx->SR |= TIM_SR_CC4IF; - TIM_Call_IRQHandller(TIMx); } else if (((TIMS->tx_cnt - TIMS->tx_step) > TIMx->CCR4) && (TIMS->tx_cnt <= TIMx->CCR4)) { TIMx->SR |= TIM_SR_CC4IF; - TIM_Call_IRQHandller(TIMx); } } } @@ -456,6 +459,42 @@ void Write_TRGO(TIM_TypeDef* TIMx, struct TIM_Sim* TIMS) //--------------------MISC (temporary) FUNCTIONS--------------------// +void TIM_EGR_Simulation(TIM_TypeDef* TIMx, struct TIM_Sim* TIMS) +{ + // Update + if (TIMx->EGR & TIM_EGR_UG) { + TIMx->EGR &= ~TIM_EGR_UG; + if (TIMx->DIER & TIM_DIER_UIE) { + TIMx->SR |= TIM_SR_UIF; + } + } + // Channels + if (TIMx->EGR & TIM_EGR_CC1G) { + TIMx->EGR &= ~TIM_EGR_CC1G; + if (TIMx->DIER & TIM_IT_CC1) { + TIMx->SR |= TIM_SR_CC1IF; + } + } + if (TIMx->EGR & TIM_EGR_CC2G) { + TIMx->EGR &= ~TIM_EGR_CC2G; + if (TIMx->DIER & TIM_IT_CC2) { + TIMx->SR |= TIM_SR_CC2IF; + } + } + if (TIMx->EGR & TIM_EGR_CC3G) { + TIMx->EGR &= ~TIM_EGR_CC3G; + if (TIMx->DIER & TIM_IT_CC3) { + TIMx->SR |= TIM_SR_CC3IF; + } + } + if (TIMx->EGR & TIM_EGR_CC4G) { + TIMx->EGR &= ~TIM_EGR_CC4G; + if (TIMx->DIER & TIM_IT_CC4) { + TIMx->SR |= TIM_SR_CC4IF; + } + } +} + /* Определение источника для запуска таймера в SLAVE MODE */ void Slave_Mode_Check_Source(TIM_TypeDef* TIMx, struct TIM_Sim* TIMS) { diff --git a/MATLAB/MCU_STM32_Matlab/Drivers/STM32_SIMULINK/stm32_matlab_tim.h b/MATLAB/MCU_STM32_Matlab/Drivers/STM32_SIMULINK/stm32_matlab_tim.h index bca554e..9314aec 100644 --- a/MATLAB/MCU_STM32_Matlab/Drivers/STM32_SIMULINK/stm32_matlab_tim.h +++ b/MATLAB/MCU_STM32_Matlab/Drivers/STM32_SIMULINK/stm32_matlab_tim.h @@ -108,6 +108,8 @@ void Write_TRGO(TIM_TypeDef* TIMx, struct TIM_Sim* TIMS); //--------------------MISC (temporary) FUNCTIONS--------------------// + +void TIM_Call_IRQHandller(TIM_TypeDef* TIMx); /* Определение источника для запуска таймера в SLAVE MODE */ void Slave_Mode_Check_Source(TIM_TypeDef* TIMx, struct TIM_Sim* TIMS); //------------------------------------------------------------------// diff --git a/MATLAB/upp_r2023.slx b/MATLAB/upp_r2023.slx index aa05084dadd7cec04ab0cdfc9d7b840f9833cde9..0af314147d072a4c451098f218ec695b36c65344 100644 GIT binary patch delta 58266 zcmV)7K*ztFx&+F>1RYRI0|YGq000O8001EXi)6^cTT=i4tXlv87625Nz7qi#ku(*5 z`}JEC@B7D%qksrVN~cIFCEcM2h?K-icY`e5B_g08?2B%YZWg3lq@=+GmPT^vMp*K` zcz^Ei|M30c_Bi&K!QGj;;yj<{<2iH9*LP})1b8%f7#J7?N^f3kVqn}mx%)hP0RCrS zaxnsIaGl@ixnW@355N1|!^K4tVPHIe!BBerQrkOyXWq-(a4qBZ`Yc5{w?d%Vu>HU&w~G%>|xi>Pf@DQ`$lzZ zPX~VZCKZgNA75HXT0{xOvKkEK?r%3W{AV+q?go?09BFLMu}cjje)W)v$G)k5gXiP_ z_R_JMz?KA)Wi*ud)fcKK!91UdUv**Nx-)$ye){0ecYLtrlf7^Bkm>W6d!!rSkk^m? zlcfY(^N;`Eq5t2Z|9^3)Stb6HizJg!{WH^~R~S=6rjtaT&ps1Zy}d6Lwp$in4|`SZ zRjK?GWBHNu0F`dC&=f1ltFEVicCIjuK!OEnHZ$pX(W`^r+|fPSomg1CWtBg65%+dkOg<@Ls??^fya#K=pe-*~J--gb;G&>qfZ?kmD)m=v9UY%CF;Qm_mQ9M@560l;R<%v-`5lwX z!71^|$Vez9g;~t!h^n!F(PB(6;nSzSkgM4*0lX~-EFK;nU=FB6NjEw_=4`xCANgKe zOZ|?6larN|l{{%c-oOCgw>5KT$FRTu?IGG{yM?epQE6#*ZEec z^0`%2_cGMNhZ1G=^~Lk^SwY{qDDXj_AB2#oB9dQZe<>(n`|-o|8CUwRzBntDRBaWd zKI3l+h$lB}VK^Z#+w{AC#;MQ0h{?>9_w*#hC@!{}+TE0WVc7L^V2GaJC%KM4E`}=N zR}f_!J7q2hUalg4DjcS)R27$*N$oP%$YtoQcRp2G(M0m`*RN**=RB{2K*L8w16w{+ zMv_!(YHBu|PNtdfU8>&?NZvT_P*onF>WckhD}HnRIgl_^OxD-ex^TtUP0hu{XRk3y zw`RlDj(VG&xAo+?$;BTb-SWf^p0`=CAXvXJ^_cSs1YW&=US1}}#kvBGv`tk2UFrEo zt*)ubPe5>*mzVd~UA(WKCU~08U}-#S!Eb-4gXdNIfB!rB4MGt7bi^jBJTE^VH)%l0 z!2urvA*Yk@d6KT>-OYC>H*SUR4I3SBNx=oOmH`N(L7?n@_lm?`1SW#V_bw!)6 z+4+dN%(Wnq%$0K&-)!BkzuBcrGh6tj>JdD;*g<{B2p z_GCcU@rX?K?ahA4z2f5g!6M2mAz|2ec z?Mzqe{jkKv@bM8#7p)2{H$dhhv!>Bjh=QR1l0;I!KCYf_50de0&LCk{cwrTxV(_@b z&Y--1oO_<(_}?s?-|i1truVW5dIG+{A|P=2sY1+S%aVfEcxsm~%m2sbr;5Xy%XW+Y z_&v(w;v(CI?+%Zw{x?JsITk~y9&;|eNQ~e8{n)Y)Gw`Rkq_j$b<@!i_1;Rn6Vs3D6 zK8=Hi$9ikLSW}?=jaUZZbIt+3tFxqxjL0E>3S_PY1Y$K?M_?p)(8*=5P%9v)uL@wUlr1S%`24dLeK=(xJR z{=yEy&hg2A3`otFf}PJCvdLtXwJ#W$!0LwTvH2?YrMZ(zqnq1Ucaz);_d3{TIkUAf1$HGi;PLI+CK6rM98~U zCs7Mfc+G5dFWKUJZ)&1xmJ%&0DK5r^BNYPzZbigs9)%syoXqzP4Rt`1y0w~e5StBq zP1{o~J_1NXHv)L;KN@vuG|Mq+gk4A|A?OAbv|cw0&8@8bFE*AG+O)}rAq<^=8>Dq= zQ8!!q_Jy|T&mYp8V;RPkuk3-rB_(uo^%#D+l7g+Wabm;1Lo z7?0V=a7q{_! zmgd9hdUJmJtyf1$?W+ch7Zfso=stDtlQBi~K_}6@gUjode=}*8*6S8kx}EUW>wlcy z2OU97+`DfV0?v&5r5OdR2TgmU12`f`N^5O~exO#Ssyb_GYe5u`Llq0N#33(T4qt=5 zDYv%u^h9OFW@b7wb?@XgPWP7SMP8hw2bf)7oMQNc3xcDn%)29;--P#nXkw@&zX-;} zA=ETB4jHmW?KQX0ZW`t)L|Gj!bJ{{HUKb+xs!T~sMVvaILO-kqD8aFRkI}l7e>E5U zj~@e()T^;&Iy}T(vIxYq8L{=QR{Qq&}V`j$xxV~;r*dW9Pb3iTFN>pa5mxPPVc~!tB>7 z0*)K_{^l&m#Qb=j*I6``kA~ptU;V!EsNeS2Q5zY-X6BP=-e+PeFJJO8D@H%~d$H|g zvE21EH8nchPJg_Az$0ylqP9^c5zr3b>-<94-%g@t!W7vjvMz_QMVBQ(=m8TekVm$u z6o(B38Pg9HG{^)A$god*u~oI+L1e6}abNuPY#yt@h{)+ReRqJqqKabsw>#TCUMw)( z>POq%T|Fwu{nn&SVZ=70pGt2bGm~97KX2-?d_oo>_?(k}^99w3b|RzIpS9BIp@yZma_%gBKz;XNT21ejC^)~wDIu$bhNx0)8i8vHcz~jl{w4H@j^opoiJ`a zS5^#F)m{v9>4xT~!8~2W`6V4QZaV&L7{MQ9?7!pKX*`&~#?&rEWZTh{(BOH|KL}xf z5IpePNblf($HLD>;-rlfs^I<`P|FZMK2hzM&MpgeqH7|u+;yjJVmKF>!)$FA6dcb* z(o%_3V1#u11T^rCDrVpdNuyC)L0w%$PmiylYA5R0L*i9iuIx|sSFcFLGoo{Hau{H) zS<(Saj*jIS(Y5+<)MEVQibw|NU9{!U(3B{t3BL$`xNsk|b}K|dAZyhlH}_ax_#6#> zK?UAkE^6wEer;+J2aW3fjQjW@)_w2R1!qKK&iUabWY8K@IxDPqg^BpUtXBWwnr*M_ ze({3kLF4__W>gp2pygbd%lIl^P3VY#cG9yk>9WGeptz*u=aRFjAWgE6Lm;ezT)d*j zot~V3oLmF;RoH6CzEm?>sfYocAb{u0vNlL?cV85fyd2;K5KN+=YKJQw!P8RByINEeAGF*x0hZ%8`(j*-@g|zDhEKz z%Wt5~#TcZdnh%NuG1c!IePQZH9ao!mvIU-ZGTy6noF$xt^17`L<~DeXm+AyXBXD(p zjD2hh^-tD^dPSX0B}z(;Cg6cWSLZj^`TmF9s4|1IZl5I1ah#xkw{rJ`e{KePJ2x9G z`HV1ippQ*oY%tqz7{ik+dZV*BI@oRjE?o?Lk{i^2oqTXM^+CHN^4{L+HaJu7w_URDHKMX|8Fb!z z#*gLp$_G@yhf=EJfryY&QmQK`2uDSof*dP*&l%XB1XU=vP`R^bTjnDW6 zKT-aKs`py*3s|d+D0rr+SPPcB#d#i->Mbe5oyTXN6UZMVUYp`;{#Rbpb4 zTpqWcxXkD>C|%TL=fqTuUOG!;IgI(dnyA%Su{ZDrbWZrg)X(2B%wvKCaec2fHSwCg zoba=nbC$7S(icx)GB=A;AD-h7(wUxYj1|IEwON;$~!H? zicf@gLDkKcyS@Ucf6T~e$da3r^C>-@&U0_Bzf4c+HitmyYbO0hM9zPIX=#d3C<@Zm z^!VYq21Mk&105PoopE1ERFs#hsjsg%K7l@}!Ma!DAh7-R#8iegCk$FY+jzOx%v|C3 zR~EOsTdOlNY!#)xdVAv}F*KCGW!&;#cO>Q6R)FD$=g*_vCLl?#cai@tudjBUZhKEQ zlgz7hHONBC$}D4J{Q*XQQb2?>v<2ChYv~QN0Qn$If(*LEn)O9~qK>P)_M_FRsTl%J zB!Fe0#%OHJO%bbhYrn97U9*RVYKeJ%u-IR?^3iWPDY@4;{Ep==4F1c=pkHXn$;-dJYPfc%5$xUmeLt%WMZ@WTlAX(Gc`4Tb%P-fs9@4rFeyJz zFdX3>rd=O|v)ugtjE)Pon{@7<9Sk`w^eOYUdNi>)M$ecq_^LoKsUF!-wDM7XV&0%9 zM2cOG3UMDbuC8jw#%bBvm(Y!p9F&y&@H;Cg!oE>o25|7%;i#(RvcA?tz%R=eAit(Co#Lc9J_j2B`|Q6?kt?aH+~a=dZ*un z6UlmEE-x>S$d%@~$h%KIA*Bn9x@iUIIjqHF5WCpAPN~{e5b^+G7 z6vmmOM)CoF3bjU7xU#8iwBIuuNa98HbHXhr%k(5~&R4h$sanvb<>j5`O2BEy0OJ@u zlqRzjjKlC3(5(4vU502zAe(xos-GVx5QuYsX=uaJKj$Q6D=SMKb+3SV>uT(3G1u(x z+ZC7m7yyLE#1=bmu5obFEiRgRnX74d{zrGTr9 zpe|vtsY@R>_4IfqayNfkU9CA-=9e9xulc4xo~r?y-Tk$O_Z_i0wjH&Kg4ry0DNfaF zGOA=sl2=c^eezdP!(X?YCa|3da=PLwrleH0a%h__#lEnA7K$^TvB=@I>#h~_QT7S3 zh8rP&b~SQa9*zuG+z(HUoQH}$2nqi8&-2j(xdy+L54YEgGV8+<`-M3Hv4S6VCTwFFzFAjdT{=Ga3y}Zqxe^;ho z8yin1F+zSaKEX>!> zxDF_+jlfDV+gT*-bmLT9uqPC0bVyY&G`w#Nr-VR8nhp^w zXE;3H!_*qW_Kwj{q3=}K9+#AuS7XZzFu+hJeh()L2KxJp;Ba=}JWD4c`YiDl4P~7h zCsG7Zhr<%37`Bd%plR>jhJ*%xo>nmGoA`4$_Dv&Rg#Z2CkRovDDRt$h*M1{#bjmYDSPS1(_Vpw@c2^$vWmy<6LgXv4aC4T{US6cK`L=jK9eS}5|p;g-Uc z)itYA`*()nHsY#D__!JBkO{Ssm(I%5gM%t{(D}E9hIF;HwT7;Jtm)z&r1H~bd^{LW z`1n%zEUXXe+sk{*H?IPJB^ii(d?=0m=-&t%JO`zH@T18YNID$Te>>Q+&Ut}$oA>bW z3kkjT%ww>c9vaka9DR}5pKmTl@F5CRBhQZqQ;u`giuGE3i4qd5uC{b;r|U!M3XYC? z_#O2}9JJDe=~q_!n8_%j^D7TjOx05bQ^LY}@HxIRhTQv5S1}2HJLB`(6C{&Is#4*o zW{78M6PRh=*<55;MQKA_WQRXX$U;o)G_BIW(=(JwO9V zd#}f7+(mYG2>@cilCrLkz}j#-O>QrApzYUbn1&@&+FEYks09i<(EdJXjX#KL-++Zk zsmfuY{#FSaqDeujM<9bvd;=Pu-I(8AKODOoP)<&Xh=DbK%dRhUAlV{vD&03VL5_Vb z>V+F1J)(}%7F!Yqcxc-=g-<8Pi{%Hi7(eW_-rij5Rhr&AoA3d{l zYU*1MnF^qPlK8gX%jLUpuZeD=Axrx2KQiMAt&?F+c*~#7ss+Lb<+pD;?4xpj{2-Or zIN!*H6_uA;jTdQXYiqx7S$<7JORJ==&dzGJu_x_Op|SVsivW<2skz3;WC0s9?~|hn zqqH%>DA1~+UfQSv9-Qu>RG}=RW?!9By5WC2(~4ey=<(T?F4fjUHnVlS99)ABOt;31 zGd$(-srx&;JqcQyF31e(p-%(^5+Wk-K**k+p6YT@0G@fwuC}wRBGs5UKHA-_df({v z#(Ahyy$!$Tj`sVCE6J^@`UPM0@sGrbI(U6 z#{nB#o{Y@!{76p+jk^R(x<3@$jILPvv8cG+WLB+$6`J|zIAo6#Kvlh zJFdE9lRl2qZ8~`lZA0_aL9f5rA%<0Y)A+64o};qomY=*1ij`%wj;5DTv9Q35AT?w| zn2sVw-@&@gK_6WH{$v2^7)fa|wpmNxDVbL)eF6{IRR$bXf4L_0C3s>=SKZ#8CY*?W z@$bRX_0$KKWEE?DgR~TJ54Q4hZV<2f`l$e4LCCYIZe=xgXQvGW&!x+Mi44WMc!6*^ zOpc9h1vLC^>Sc+AjDwrowb%#}!gw+36!fV8?X#Y8yA`4t*&zrVozl$L$C0`Huo9MH2pM@t)+=sv$V-R{m}J9cFLF;tIUEQ7EImPPV-mIpff4_n;m zB+w25=^Nk_g|C@d#HiVrBP&9G0(^(h&j+QYvWPKNL0_8IQ`3U~4r@_U8#x&@I3TS( zccwx+O#jj@o>NG8?nHRE0q*C7U+Is(bP2jZ*tBlR$@rgR93J9Y+Mp`kP`;#(Pv@LF z^GO0Oviy&5bqrmwg@lBb8ha)tCg@}qNFN6?Fv6WT^JDySM1+JwbzEnE+XC1P>JwkM zt;d=z4gqP7?cn)DEEf$X+q0q^UoncNH(SoHiEfCFF>5|IW;j2eRZz&I-3oPa>fn8Q zEpzk}^HxSVaWJPr)b;1W3QT7BXl(!uzrEn)qQD1ZeIN$+tMWaa&}rN(NCRoMc03}3 zDoBIgH(ejx?CPdpp7&aR+&JBHsQNB~=okK=8)~TYPBzJb$vYywhJ{&nVd{K7y+Tc4>dfC{PvAjBpA2^ zvQ}et`EHl@6^7kcXo1dJ#M(d-<^fPN6E-GQGIF z-D1ouFF$r>**-;oM$TQ3&pNtxtX06Z>)I3irN(^|0)W)IzCBWGaCSz2x-Ecwb5qWu z>2G(x^S%(HZ-K1AJWsg{Jh?%d<>gyd_7rNV{r}bic_8lV(!Efe>oBqtPPeL z=Qrl&cv(RUr@#0M)gb)#<2yyQJs_9lDH2JRpDrDv-$BUbHGZv_lgW#z4Iy|Lfyk4>69tQ)E`}iVKnRW+*WV_}UfE=0k5uV3)wzd6Mu81sV?G5u2~!NDDz4 zB~?{cUS6Wo3Gu0J3Y!?3rZ4Y|0`S6f>ETGZqWtTB=EZ9sB_$;cItkBjhbz6|uzh>8 z6dhwUdHvjxI;Q4&WYh!ygAT^&X0Jz$zOkZ{ID8Tf%D7Yw;yDR|BW~hbd zaBQ6Vp7=@`!|Mm!L^ITY6AzZfi0k`2WQ{L_I`n>;_;qsow5a6m6JpsyL^g6eH@cgo zmAU*jVxO-T@$5el|i?J@5^+h zUtqU?F$}mw9;ELCp0qVIsHVCTxvdY zG4Km@O!5%RxzUisjId)L9|8fY2j~Yh)X~v@acP@ieK?@%^?f7vXChu)`|Yx}8^5#Q;R&{rmT# zqi4IbiW(Xk=Tj#qk5W@P7E+xK`VcMA*=H3zCTy{Oy-=JEQ4L(#at*H4Haip+;g=cX2ajLpnM zOxSmuSG{rbV+5X+-W<8R~?GS!{zgenWeFV8EbW-8nx^NI*w|6lj7cwiJ$fv#jF0N^D zpGahvHcA1&yL6V*lZBp2rvK9<$8!|3BH_Wb&35xuxZ!)x^wNqZ&aGo2sS`Op-2z%4 zABz;>@@-a!$cO?BZNaFfCYnD8ffS+b*aN`u(-`AOq0jq5gNjgkLrZ`7FWQ)XrdaQQBIbx7^YO*kR8x2><9ZEd~m6Ip+MNoalZ z?B)kK<(+!6x8L!Zx`>hUv8C6~YTnLGXVdF1N@)x83BLK?7b0Y-bKRrtck5>4l7}c1 zRV^|&3NZD{M^mc+#CNRAe z9^H0QO8m4=PI=0D3_`ojt$->5QKpiA*ANBZv$>gKn;O<(`b0`9 zE{0i=!1FL18$kPSOMalnp}ezAW+BW7eB;e`a5vsyRJGq{{#{SwMMd(yWf=|Kz=riITUp6_v!LH40<#_v zFl0)Zt0S3znSJXg#RzbA4kTVjIAh@N+pCe=14PzMd{2+UomT%rAbbwHDM2Oa0RH0r zdj)&@=K|J)-y0iKLh(bqwn5Eay8a_^(XYdUT2FIg+^A=MtpY3*g;UF6nY+zt+^=6> zlT~`$7`O#=dX>)*1L-YYC9nj&%b1HY|+IHY6$>^NMeB^0sA#>W@zbG-h@ zGsb+zDd=*`r+pHtz6Q=<_1lB{&G$$(#{ThfZ4A=KkMA`-a{CD4^>ul+%)!sI5eJ!* z$w}*fz|+z!x5a?P{H6=4l^!d%AtB{^=ZCPML1vibD_7T(^-GwvK5}~-mk+qd^krDk z6@LBV&1nZuglM>qu}=yuw1KenbdEeKm<2?zk)0i`s%n&!cwKpU=$}8NcPo5ce_%ID z30=(rWEYsMFdC>ZYWCj94)?x3MJg#PTcD4B)^-+Jo7*FJyFT^}GbjNY4;^{J>+}dP zTS0+B*?Ufk$b`W`lH?&d&evhN?N@6=Ax58z?r{I}XTkRsEeA7Yh)ot=xSN~A&k_h{ zrdv7LZ|h0w!3Yk~o&~bvnuWa=)3mx4A(>0xz1x)XrD5J(gKyHq zGh@wd)(3sc^r~Tx+25ik;F%47w>ctzNNclgLw#|*mzD<_zP`d=zba)g=s*%I zdI>X-LV~ImJ5#tCIAIYtS|%n@-R8{F(ubc$@)6j#+ixHtw?-dU4P2>a>zx>PcXtQV zMBqAbw?;$V@<}L6NvR64u+V?G4}Z$XxArRHSyr zl`m!a&6|z6`v?IV_EMsl)YwlG$+B-Fxa|q9SNpc`pZf*HfxH~HVesXD7`#VEi1VN` zrJJ`vC52CxmD1+&d_|;hq`mT`76Ad_`moWYA}ftQ=lim|maL*s$0N5_a&u6fLW?>l z`1jh{Z@}!tW@W*~Z2z~2qfjkl`F9L+!#uP=J!|;i?yS%GQn;Aw>O*y@Q!*bPAIu{L zZAgB8KA(Nk#{#>&ygY(`H)3I*Qd6Hl=Y;*2l?7Zrse~8Q=Het}b$!NJbjHrMsLQkx zSQOvAxO>}^<<^7Ae0h0Y*~Rxtwo6A1g~%w>)_{RCUGD1B<$7OIqQ)0+Q5G2JMX7e* z$Z%BhWGuH=>GmISrFpk{!^Kv9@{qVf6b-1qG^qs|Iy${yNSJ+p{WBq@zU`i}K{Hhr z0*Hb&*OLv6o+w(c;gtYsMqojKPMO#0>$Um&oFBK^jNmFnZOxglI@eeTvK^knaZo`r z*C&Xgl76SaV_F7au_GcQ^;&&}kj8%8v?9>epTU?{7s&SYKK87gS&`W_zaw*D2NqV3 zih#+93Botj!@Wy?oj7mQ_Vg=DU_|7`6X(P=P zQr3f1>w_tsb&j**Qb}=-=NM`V3T~0SA~XOWb2)@R2s4-91zoKe%=vC-U{F1h^Fsew zUDf92|8a4WPED<+%k|f}=KEI5xP(0)mP(CCZA@mSvcCR)lPsX6&XDC6WAbLHd)3ns z1tb+Qs5K*h$@wr)lirz|KVS^!NeveJc`Md}S2q18A!PPCVJFwtMiu?CZSW|Q7{90Ot&8=%Nc~sSALpQGP zn_8iq2AMWQ9)igc@oCH!uboXWWMX2gXB+?Tgg*eCwPk{tv$wZ@qpprpl(`@Qk!QI(Q@h0Whtk+PczM|z4-e0KGrths zBXW{apg%c5Z~5!<*D{m#Oi=V00!}o5+XJ|Nc4iBODnKBhYT7wD73SxMf^Xkf7=8uW zjcgAL+lJpNw6`PI>%{Lj9Qs^uoW=z8*4ElQu*b$BvBnsk(p5G&3qxQ3mzqj)+6XCK zSn20b#M@PUrLb14W=rpcSS*iti_nf#pMvp*PlQ9MHLlYmi*a& zh|MZ}M~;YB`uYmq_TNWvhK3k^Dx~v?F3(vjZ^WG;5p8GLZ|@dUm=7e@Qbmp3DisvM zSlA11Q*W$?QoBKk`2rg;KU&?Wz2r6!hx34f#=$EyxkCGO)l$OK?*cnPXf->WA*Z>);N|zOd=bW5+jjmQ*e78rux1=|J=(I)uWNHDPO?QTHi|0H#)OX^A!KqV`S624z z7M*pw6fSdR<{jjuiU8x?yX5>%Te~ZafY$qDjPbP3PmEH&@ZEk9>q0VB#aNj8hsiyv zz0`u(go%39g+eutc^f##+b+~k`@58o_w}uO#H<*-H74ZyXCGRx*j`MvcefsY=PBu9 z0z+TB6YL<*y}8a9=F7g3eMy~}{j)4LQ}d$tG#9^4eOn9D_<75S>RPU-rl)&&Li_WE)!*^Fd(3Ck8%=L%V{@F#c>QG)QRsT`*G$+^zcZOHW_wxYatE))Sj20= zhZ9;)8_DV#^SFHxR#E~=#Gti+LM}=DY?NAI=UvBQzVBhB$sv5{GHsH7%0*r=PYDPJ z0AGK#F4Ar`lqv+IKcsoDDbi~(AjxVVG3LMjJ{rRdv$L04DjqX3syjMz6G4w~eBaJTl9NjZrJ+q6IanJyQF^>8{a7EU?6=)1SZ z#x8|pf4jQ{QY3w7R8@Pux6A7r&KCTbGl4hEP@^PdfPjm2(Mh>><=|)$Hu3MdsZV;c#-A4k$l1&YM>BdRk3g-BBmw&3{1Bk`GsU zk2edm6y^j$a+Q>peucqM(>AwhI>wuG_ce8sexTg8c=-FNKU!VK( z@>neRpB0rTI68h@wUlC3)c>XW&zM&m;&UlDilgtGAQH8{{(zr9mXGR@5znmek!3kn z6S27|ow&QGIhmWMCt*T@koNn@cSiHSS(6Ou`DR2|M7#ulG5r3GYv_tf=fEcR&%CJk z==>$ek;QiU-mk01Y$dN-CO5B`K&APx$RH-M3=-OEu`Qs%umXxHCAd-1;4LhkQI7EO z{edPVcDZ{Re{eLwdwj7C7YMxa2Bsg(wn_>=tN$RNG&?BNda_K<&}*Li!(v+%;(J5Z z%?b4!RK(GL(GiRu#$GdTL)9oIkt7Cj?V1J058Y3*Wo+z)e@5S_zIx@{WUl!q1%5I5 zmmfkf+ySqEVv&6iHW;tn3oqd|nB?R!#BpZ~1K*b58}m6Wd}M$qkLv;U^D z2$8E2PW0VF%hn6t)wQUdI5&DJ{T_(UX&c4lSd~S8xU=Y%uYZf0jn&a=3Z?r{hx?im9tTwNOdc|_(m9UGs* zc`@LBjN~Df_gaFE_r+#mC%pCKkAOoxj6q6z>wCl9n+?m6UVQ_!LpRsq)9ts;uz~mb z`uz|cRk5?+kh0oZ*5!iY+S-&12`|Ll4yynn!r1A1em-to-{8q+HIjI2jAwKMdqU2$HKJeqpY@66$|v>Q$B=wWzlir zO1>~ubFcl@`sN^9q^P`{0Ox`z@BlNKPVCoMu43QNkQMM`fcB2A_k(U*DE#(bbr8N26F{;}9;`)k)Wo4>I-#PA; zlnzwQA}V#uzR^oa)Ab+?-8#ia9?ztIvx+8E(C2EvkhB4A6!iwI%(*B|UP3`!_p!qJ z!5CInRsn%+d#P?x4C)Og9-;`rD7kP#zCi!VMh(csm*UqYG>`lX5nln4{O>+3NI*eB zLEs`pi-IdS@C0lW7T&cT4;K!mQ#V!)`t7$;-k?J%jsJSJU(&DiM6Fyd-bzD%Adr^Z zo6Ds%nxp}FIXO(>w5SS@6l`jP`NhS2=5C3ZQ$MU|gMT*KP(KP&O=~k9%L(O(_(iT` zi21Y5F|AVH5lo@=N{@%74eSXM6A2`=zaI}&+++!_dy3I?)&q$IgK5Z1$HWXZ9709f z)Ca1n1bO*Z-%IYz%;;C?uK;v^B{}Zr{ao@%t&pABLQqxJqo!Wu@x#}QWHwdq#$*MJ zjWIPf+J-zhQM=@MY=!2NX-XY$!~J=+dq_RHG1 z(%ZNH{+^x9Cv{ejNDmu%1w`d462+#aMfO?Z;rJF&Fg(NpjRp8VGdl}{XUY03HkK4a z`f|r@!EYZ-3r^|rEo^q&HSXJ83#B> z=3X2|f8w#hCi8AQXdBvpdS+$@WTMSz%`pA|8QB!jEJCMYQvJ&tV8OFh7+U=gGe*;#t6n(Q4LAac!!DGs2z=j-j z67}`>n@^Ty?g|Q8C^*;G3OP(3X5FG^LKC0(x9tJ>^#D?&6_>TVoZZN*dDOfg$LGUf zT}^E;{TvU!kl%5CW=C4$c0cfpuh|Q3-to!wv4t(MVNsuewieOEIiCFjFM?^9^Sh1@oR{5TWTUuLtHSHB^`B6!DauE;^fEmx03s-~l-SU;{1ogD| zWH|gPR7*J9l9D-Aaegri3%as+`}S>7S=lP^Zk9)@eITlTJ&;C}Rbm6zXF>4DP^%dw zwSS=^Hq$LW0(Va>!9O}t=Z~L1W8DDzKQ=yo2Zf@ZJ5=qL^ZR!%WcWfBI_mt+2qPkG ze%K*=6S*48w36kVU?7@QGK69Zgi!>D2Bf z;Jox0m71@_C?fxW%7bysefe|YCE$ekfU-kev+97 zKO3S|kH!=lQR~r!usoUBv0OVT8nSxRj!y`r&_CaIhB|f7`F>7#%dfk8k3mC+Qzoaqi983_gl}7fYXWXW$^p<>C^r9aN{9B2A>AjmQ!pp?_iJ; z@*Ssta6iKw82`MyJOI}oGR_JLY}C{#|GR(n$>14`o|f*>ru#)_u#uM5SH!02Y#jj$ z3(JzL$3m)bUU6|uVj|n1_1&9efVCtUh=8pI`AH_P7!bhCthm1HT!WcT=qe&?AQ}8I zVsT#{F7jt)=Cz^WeKi}2&`_;Iv_GAc@0XK*6BT{^RK7HBtouWPA|mGXg)3+EpLGzk zl}lO_+)ei%KJeAl#4Ev5$c@s-WgDBE{M5U`PCS|;JgeyUfg?tiQUju`T?t6~=Db(t z2nfK@awPB3?Bb1QWh84;ww-;U?EX~!tV>gBw>d7d?5ScSk!=j`@2!bay;^(n$80Kp ze@~GnHaA!34|5Gw>d=Evn2nNmuhpDi2Lk&Z(qZ~UKp@U0(-)G zrQ4-WJ{uj$j9ouQKg7Df6lx`?8mW78YL4e#KRZ;5G#-$-M#vogQRdY!HXa6laoO|3 zYT#F|_WSoaCC@>T>I^4(VWEI}Y0T( zy3MPIA7W9-1WNKGMN0YoJD4@_n-C2~$meky22g0PG4Y>!pjhQDIuy z$aPW~N5_b=*T8R@M-P@)9#hGGNKdisp8DcA&*&?|qu)cwo28_-WLu&Ulb_0UXEtxe zvlQXTvp&9Uvi9l$BqIeh{VwROsZtLMwT7&?zV+lwI=N!^6nwJ^xf}oYwCl zf}7@strC@+E0oCB$jFs{-!bcMZFN;uF=b^W-jaJfIC2VZ75OFs(!7L<627hXN+&25 zG;4FCMMyeED#8k|ou0g^-I4vtXuN~k*@fgPsS}ZE^EP8(&??-m1&F4cs>(ff%eHgi zNy3Djn(|ZU-ZbB{{oo#(l7c|9$bH6Y`ci25d@3TQKmO z8Ro9f?J(Ei0y0(b$|k%s7`bh=(4yRMJUr`tdwq&BN(87!+j6lr06b&Ptn6Zy1x~I) z6wPGroKu6@J>HfB{&2!wm@ZG9g{c>r{!1P~QyzDJFZ=;_z&>9~Np8ERY z1Oy&H{jxdmK-zx({2GXsIxv^zx zSFgzafNlDNFk)&-*1m*3++ri3-kk+R@SNwY9JrZQy8AdReDik?UsuLF*`wNIu z=cP*4K&sGxHt-GgyhU7huLj~%@;nOi@nqH3YCfHW6U=JtB_z-o)RnD<(N++MRC|et zhzk;3?^s_{+;45U60NO;6t>%rOx5qZC35Nc4+l;IA7Ngrk6w)7>DB zKz;2o`4+WXmN7Sb1Mg2d>6>#*AlC67+moaZ&-+HQh!2}AdZU4!JfPs#?{D(Razn4_ zoNYCs>|J%pSPfTTk&!Y+!kj!waSaVvIRW25`8YiMy2OJK*&Q*0inJ9IMG7`_hM#3Y z)rkIox{4j5Kj9NQ&Nl^AT~m}MFq3Ut)3$Bfwr$(?H$83Jw!5co+qP}nJOAQg&q-3z zQ%+Dx)xDu0-}g6(Yd2W02Ev_|XhX2{{CK(^HEh@P#O-KzA+RaBDJMX~I2&F_cy#3! zh8Ww?K3C2c#E5`pY0*s};nDqe%4)Ma*Os&i7TwXrIzM$?UTq7XY54oM!RE~S#_H0{ zVVf@-<~I#%eM8;dhE>h?zQh)Qu4$2j5$F=}@78u-{+i@VU+MGcoEv=}K222138%5K zG5o{qQF5}yOfJI+B{L(R&-2sgrVj8hV~_JAMAJWy^g%D!y2Oa@Y40cZe#N3@A_k<{7(qNKS5Y_T4^0QO<0*i&3Zv&&Ob{xzun*9-79 zK$o_@r@A73B%)`h+o~7feH6|Q(<#3mFV6y9XpknJU%ZZ?^YIaz!-AB|UXWO8KS>dE zx~~ON(=wA}G62OHAHHezhhIXV_69r!r6bo?JVW>B_beCih6cpbY`8b0)w*b_l<5a| zAxV=xC0k>UYuh%{+!Krm(mjly`}q~1xy9z>g(200f3)Yywr>WYmUPX<@e%~u$)*r* z)X=0Xrc}ok6{dm5?d#EVyhZH2O7jgb6FpP+v}Ko7GSPLcA~*HC#)_@8StuIIs7phX@Bi;v+Ss_>xS&)2s%vRo zp;cVbZcq1NpBNNSHCyCpKPcKjRP7;F;YF_ZE4mpOvGw)y*>3e&HJNJC@YDY`q19n( z0?2-gvng~Rqw;#cG!Ljdr42I>S{qSW>MOIJ(wy*U%>D1SOt1adoe0ZvSL!!rfm@aX z+=R7-Q`yhcMCWE+ce4gK-Wtc|GV<@qVz!`1GcYvV+MR+C~Q|$A>3#x&s+MNujHaO-j`4grrm5G?TOaO?;P*70RDjzC9@sF}dBq%79Bn4rZsUKXRLD|3W@cGk zXI7_$KLh^BjOURg9xl7+PqwzDtj^o@b$F50<`XbLzz@jXn!Lm;>k#BM@cl^U?zn`z z2h4<2Yq|NTr8#jg8QuDtt|%rZCI@aO+BJe1H}WXzXpwu44(da|c-VT@U@1T{EoPvM zzHWO-LVSF4Y`zg;O;>mnI>ukxU5W}Ghzevvy}Z2o3rrmie>z@H-T*VREFSswkX(v9 z)QKLT0LixOiQpo2x{E$y1-tTTevZiJMhNcZSP4aLVah#fax(}{z2(cpzujbZsD2oi zVoq1n!hpS%ausuS<+a3aM?@j{#f1|ht(Purzimkfo`=u%t)!w+O1RS@Oe$9;?sBS1lOUH5{mHWcBKIH1h9ud4vzYp2-cJ*Ab^2u~QC;z3VIXo5KX; zFG;=uzJJcewxrUUeL+c*a#Tqfu~{)5+CUDf6UkB#*n$C{^vc z4yr0R{0JM?i&-S7csB|&2I6xwEgXEE+GrH!j-bNvi-%y&W@Z}161W3u`=Nz=#*9Jw zxL$_xg)-s4S!A5z`Nf$5e?@kzgE`JXi(+C2K5=@OP9IYZdW@Kw3{n#}?&AQS1-?=$ zWklsl?F^nn6Au3R=%swvCI6;=Q>aE29Lvte*7B?S({m$(kw=f4yip}2c4vKRH^&%n zF~9``Y^dAb%uPlGQRWcI-oW?spjJL78vN0;tBng-p1c7qISs3{q?=b5Y7mo9$|Kjm z@wc^PaSQyiB>3AaVQrR+n;qbwFU87~lpI2c?G}BPrwEWr&0N$s`1rM2K(A{mCP;ELt#bV(*8e_2^Wwy0|;)AhbnRfMLQzW*mt0*~+ z&X!gPcx!RBIQp4&NFVppByf{V#SVKR(YQ<%nM0ZIY5j6~l<1kWsRA(L_xcu(bv!ZH$P`LaO$@1LdCoT-McL&JKCscXo0)vQJIx3XHK9 zpjsG7634s!I`|tDJ`3=Y&^?@=5g9InjS5g`HzMtZ!Kq4WmTW`QEDk?e7JMK;wfe)49cYePJThuCB zfrWS|I!PVpBz>SdH%ep3Wj6Bk%@?U-X4h!O^=a`>_7e-@zy=uM(86b`qefGpV{D+I zwy^)k@2vr(Il5l(R02n0#t2V-kY9EzWFt3{bg+=b;}Asuxu#=25c;N<8Z;e zdE?>ST|+x{L+%_x(;dKi|k3A8g{W*;}SrniI7_dK3+}VRkcU z$h00f1AXV-cti!0z;!OitSUofMWt}ncCKk{k4J}trF|=o^AZsuc+6CLC5&`xV;!Bm z6PxXxDm#Jp=?jTu{umDQI16lTT#>|H@N7m4Y9azOGXN%BZo4KRTADcx+zfKTnap=z zBnd>p`*4y!F7QIRd)t@3vK;WxGUr2Yj3$pm*8y2bI6KtX7<+H<1fjP*JgCzjU{LIDR&?Rj? z#09~CU?bJ(1*I%dLENpc`ba*pnaK7uFF?34!2{?H4F~5etYtvY%#b&?EHkF&@gzb* zJ7c+E(Es`<3kg9?(g`Yq^uoxiVjnc~hws??&(EcGb;SJj9)4Oz!#(Tqhdv zx;Nl`%!_zv(jUwckcSHOWv{QRY5DjNZ_+nKio+#D=#kRosPSL~{N3+6ytLiS^!=?h z=nPgt#5zB4D$Q<&KHsAS z2BsQ(zE43;UbDZ`qrr3BB2fV~aS>`YGGFfE0DUj|eL)$^ADj3FZd5rEJ4Seb zhKANshd6g?R@NHE@UBW&bh_Jt@qu02c+-_0q~rYN_@E*$lWEYdHjyAw?9yo!Bsz2NAOEpUsfy-z(2Y1WY$N z1VVtq#Gy2INpd2oT}^NK`LSyZRomI>2Tnf-L#s$eGJ37mxV7H{r7_tB(x%$F2zw|f zP+MQM4kjKLTrirPwmY22H0KEn#}Q4$XA5rGf0uilMbrDpL#5bFZ*L%`S_2+4*qe&}|Et(i+?Ds~@8>GI4`hu48Vr5vaj`88)m5K8G2&v&%XIZ}PHU;8EQwh`iIa zJx$f7%}2mIfclFNyCC?xbpm*mOonku*06B|ZX^?k{cPZ#A%xNhA(8sm_$X^<9Oyl! z#BJ60&_oaT)+!%hJ}eE^67HSP<;wqh$frj1Ej|(~*gX^A4?@(HjPuoiggZU{R=^HS z301y1PXWpV_XR^Lo|_td%?7UFU|3jy7W6<(P2Q?0FHbM~B&i5)7y;btr;}QgwNXUm z@^#EbLWhFVR0paijERm;T2-(@>13K9~q!s~Y! z9~!#N3ULb^Gh#JWP2nF zWKJq4C+BB!9XNh6!T~d_=jr{1%zLSqE(f6)zcg*-;=S18GbIf1N~`mYGPAR*pFE#{ z%TW%SW}`b(+0ER&qG{lzFOOYSU%PTvF!rvmgJ@kqG@#?*&!T?^eee|P^Y=)b!^Th@x#xQ5qx+j5l z9;E|1Vk8xmaR7u~-1xRRUa+;J@`>8%5E>|c>2gd^gJ8Tq8y3vz3Q^uOX0!HQ$5TAu zX!_H)F~gevYok{&AM4h$OTd`G|F%cAH@niGC4@YYDIBoW`XYnR_4p{nw)ed8c`@JS zro!0}6a)rD``7+<+~*Yu$s7w(A|GQz{ye((<{Z_32%zY?`rLBRntdrJYmCU}N8F+$ zz&^Zw|E(RlEfNu#qfSpt3zmt92o0^Zq{I%bd0Gh4hwN-&e!avdDH!O}MqNLK5G}ru z_ysGLeC7PadHEd@oE2xiftGI00}{S`b|)44NrdwY9Qbp2TLu>(9v8wHAV^D`8Y{9cC)o?B zrlxE?C-Rabd^iXhuhbIL3D0p7D5S*|G;O$=Kj60)C9Usj3CoN^BdH|WA z?!LYrVq#*V^~PZ<_+X>f7z=6z5;5Z8!2yV8;_u(%awvJsOI_mqqEV|sqwouq4S-3~ zm$1Q9{h(+7NoXrVFSMbN!BI+HOimmL91W=(dZ%X}a<6MRRma<@k`tM#@ z4oM{bJ4s-x#_4HgG<*K3W^6^+R`_=rvQu6M5OHkviS~Vb&MsrHS9O|4 z4YO}UCvowRWcjj0a9PG>#Sm<8FTi{~t5nUouZBZ{xBs0FxjE|48vepi;qL99QxxNf z1gT;IeoZxCLO>3G(X9PBWI5x;>S~&0Zwfwcu}+E7%7W1$cQ0L~Yj*%YyC zh*zRR6j=YT50k2Iiri8coC`7{e`Ru~E~>aV9+X*2+nbV@{P^qa2p~;b3+P1U4TFtY z>I?>A!5KdcI05bfp_WagX{lwhgENoz_qs8*v(vNGGTdzX>rU-hU;oVoCE^YSU^(UQ z+?l4xIT}KA?COB}>^@ceuzEgupT-c(c`1~4q8r}f8=Z_D@B67Go9hYr83`fa+GNL4 zC~+>GZWiht7#!XFyC0%*hz$V#|2(0XL|Q-#I6y%2!-@DRJpatY&Nw5vf}2p@uc1lWxaP}MoY63|DKR5RyMrY>M+@v$*ecGkiHg< zhTMN9ZZ%+?hMIuH88QBRRx;w^wRMq3ar-p08N7!@4N&&oWOuFN$oVpOwrx>>dhAp1 z%yFiN-ry7XU&GhpcR+`W+dm?&H%7yq<`6vVOFuq*ngifwA&rnI?BiVL*FXAZDN3*1 zB>uSbU#(Uw^+gmv&-Aa#SS_QO$jr;S$;`uJb!)kcyQH^=D&+#1MMVA3r5so=#qeVt zqFyQUX6{~rb8SB>cV6K-SQLAv8q(_mKo-bvDBUc*MIlH*rb)Pz?&M}WBKirl2ItE+ zI_^OdkO5`X-~qk(kb9((#$zJiSCV_A`G7Bd%wCl01{!==F%Ba}I9Ptvf!_)XtlCk- zLY&y~ghXG+fvMm_9Z{R7B{=d0`1z!uEU^a|-5zZ|I}}}{_ue(RbC@^xlsyZ4Dcx|L zr0DE`KGW8Q6WTwM9(vbAS9w0NnW4iO&okH~T7b*Ty9#u+7^;ou(frKTOC_zv8G_sd zrPRk5a-kc{c5cXD*Oz#Z8l?BgR!G4lR;bV6xh)hGzCRg{DNUN(vL`h+8y zqyX}DJJZ{Nagff^-WvA5qkNFtXV1Ja{rHIH-@+g_yI>3m5(b}udYIEeWLeZ4QI&=i zm`;F|L%^J4-k{p=NQo)aUdUHh40}O+kYae#>X_AMP^nK7D#jCt1WuOPp}xR|uYXYs z&cfIRRo`T$~eCfv~1C9 z0~jy#IMPMSw|>c5VS%agMwRbbM!=veG`ZV~vB2wrD-6xL(@HGJ>UcDh%4{*&Z2;o& zHr5kxZAR+M)*A6p-~#PM;*HaoTiGj&FEtf6823WSD}hRBA|O&g@vk*g%xp@?wvtuh z@Fgn({ka-*gp}xc?Aaj0Q{Yb$ z5fG|c^`d&X9P>b_1Zh_|u9B;Yb;1YO8!thq|ER>=s7X!XAGQ;^oDE zVuy4yVs}KU2Wo#cP~s+1-bw1RLd23C%m2ohjgJZBZxgp53`|pU+FQi~5qav^MnVOG zyNxzIw_=jTUhvC6ig;{m`5gFiNxk9F^U8b+G<$T<7eaY;iX0k-@DaCb3b7yiSaLA#; zly3=vs_<`jjf<}gh|Y!}W&Z~!?9Z@Ht+Jv>HF}&~LRXZhmBd_X+vQkD#-6g4Mow7w(dIk_bpF&)GB8k<4 zHNt)B?n9WwRU=!(B8w+tIbJE-8eCHl0av9tI$N<25=~{i#dPKc8cR3fnm7s@f`nH* zVa~(!XOQP)J5141db!WA^)8c5UWcekhl=~_#THs8#=ll4X>#p z7%JEAf7u`t1o>kYo6TtAYE$#Q2&$VC5>m3N!O|iIMPw9KC`VIhMK+RA&uO{9fGsk5 zA5Q|%5iFJPi~))pgW_saig;l>bSjV=^i&>o_RkxC?I>4v!;QyNs%;|7%R{aOb+mA( zq=AeritG2&nDvO$E)XlUjzZLQa}_Oq6yWQ+N2c*1o8fjh>X0rM58xf4=l8HgLiZanT27 zhHee4?F1ODdC@q{4dh8YC)y*&aPf+I{OXsA!l`fl!?D21@5{WQ1=B4c)!%wDJ@<8J zC2mFnBW?41NBn+i29>-PyHt}{79GKh3w_Ov4EO=*e4d;EY_@afVOq07x zcWR!J$4W3>F4drFL(z3l|2ZT6ar*ghnoLhc@X=e}lsd=LIGWk4imNOWP89iSSvA1D z*gWKA6xJN#CY5LS&ACdY>puJ<8-baz3GBWa^OZ0h8^N9=;eJS0%YZu3oIY{6T9W(w zhd5EZTUo!n|7>^tZI`$)xE=l#$w3&w+eftuR*PATL6-TU zI_DrQg_cHrmT6%$?!ifY)?tO}rfY*`DpS?qbEV@2KZB$$LwlkCMstqEKK4I&GHWd1 zr|}x_N9)YM+IXf&%s)n?2fozuhB6`wH;PAIYygKY9rdlo>*FnLh* zL^HsZ4+-GMjrI=o*W~)9U)J48?^AbcWJmYJ7{vLzcpxkMwvQGt+PP ztR7X(Vo*#jXLbo!pKrAmiKbT|DD^WkaCn3%%Q)BfqZkv>o{H zl?(^5jGIQuajvO{NLnpdQc1c{{nDE`>Q-Q()Qm@V93<9Y+vBd6PRgl!UrzHcz4oSM z6LTs$_TWdIA$r#UMK;U(U$7?IBE}C*@+wJIYKfYOCCG}#R@4z+_{f>1zG=r-VP-lX zNt&jXa{d6s@To*0Trt5aJso2hh(~hcmgigIJ-w z+L%5TtB%xd0^9gnoz_|yE$#Sk3`X}pjV%G*(R<_INEY+#J*Qb3HMYqFHC5dwR$vjBnNlAs`}v6^aiRK2_) zejvcb1Ji<}?dQX%M*s;7VDw=t441y&I)7c-#ut^vE7vkcrl1>UL4e}s*v23W&i4jfS& zwzZC;p6%dMA3IsbpxQRwqC7|S9v-4UrNc^HPl=Vv@5E~>@xMm@??I%B04_FHUPCY^<*2h zw@Bq=?;2_^oP;OUV(AsnyCO@)%t!k_>QbLJ|I_1Nx0}ieR%f*}Zv z-T!TU18Az1IAmJflsg)f)g~5K*5TPtS~i>wA=xR5o_Essgnf*&VbG+jX!cKwYFp#` zXD{ifz2R9r0nA(T!3n!mD_ztW7WQ0WhFUm}GVo*Tb}KNd6mG^)HscbTZ;i9uA7$AD zp^pe=JPv9LO+^keG7Iin%NS%fkVd6?)K$CJsj$LHfamifV?G9-RFVlhZ^H0D{9Sml z6Zx4Nk#2v5^9?_|3g=yw#jNHqQVwl0+15`r@odp70wnbpGd;(ky@EBqpj`$j^F1y7mZ)$aei zDw6Q3nQg$fvfK@gc3od4!)jOwPm^$j-SH|SE6sGIDV;5XYg}aH?2AOQTk=8gfDS%z zaXcIX1Dd9Nh?i1P=G>xKccfD`N`9$&&!3J-dYaa|?pUDvYA_;syaqa2_yeiicS>`j zQZm9J0mGy{@jL9R|LGaUPr*(_$ChxE+I(Jj{|2?A*p5`nk>A15lQtrS?`^RV@CNFu zOrI{QUpz1QeGW&caZwVt?kvem)jsGVOrthK0GPS9Gp(CsSpu7AAPX3oK-`s=?;S4C zslqJVR3e${X(yk(r_u`^i(31NN(-VX2At)dZ1&y@g#iyRwOt2@7uD{#ToHrvJPdG_ zI3`8K0%`A{1zDI?euTBkT3YE1A~-M(6Q&@wQmMMvVryImmq7EmKF=OEt z0#vL-Nh_g8sW|Vc{VkRK?*Dqr@640uP*ST)de!}`%GBW7go5#=X?5FKHe=N9U~JDW zK1Q_oWOS8TEu?0^bM@R_0SpYK~h^E_N6+gjBgG+qCsb${PvW=0F!&otzytCwc9zp9pIX7c^b#n_ivunoQ}TT}$JGe1Z!DB}U0KsCzqLH)W43EB~7c3_Uz z2?HoEIRl+(lvQK#jnSvp`R zEyx1OoS~PK4rJ!0d&h>)UEZlTRXz$ZXLYp5x6`8SgU!pC9ydeBdQOVild80jOg2kqum* z_4T1-2t1zU2_B>wD4Y%TOm{;o#mfO&|jb`KmoB5Sv+?c8=gl`v9l*^3mylWeSh>B%w0C6eX=Ct(Lk(;v>- zngxh~3nvALPAu@9Nx@nB0$y@9eBRch-{-%=6^N}4KDYhsuThhioK7Px4lTGEG5%R5k7qZFqV3QKg?QTu1{po==Qkk>TTzY9Wnw z18J_sXCWkMWIB<yN z3ML4I%8VVSF!*@ckz$}To(hP=>wC?!9cOQ*$IE+S=~v_&VPqJljL`4&^1#@<-DthK z179`@w7tFL#lE6qfa8Xxtnx6F{bvU-O+M_Qt%`eolBzL#?%~P@`{GE@$hl9y&RLwv zMjkjQOL}NbY{%s3@W#8{!Z~vBSG4J@<6Gt##@-@|T{|bl-V5=r>6{8q0zt(Grjf#b zC_ie~iSJ%metLR?(X!q6#61)3<}x0=k}apKiH2F&)d0T+fK+(HYne2SFD}vBv)!H3 z`GJb;OCgejdE`jYV{!C~%!!5*Cuqh@t+t7OB~;_@?v6B=_NlJX(7S*VRsxU7Ow`@t zi4rJ=WrL$u>DTz3*LVth=)a6;2p%f5v}>=w$%|EEW|~#t;^Ka>>irOASe>VEUdT8d zgBgHNN2HU`0kRfBEZo>QasJg!ib7kk4W#?n%;8RJi|8+k>i+K38;eYt6Cdt#Er@$b zt0nTfgVk7HHK-ZqT3DA%cEJpdH=3vtk+)4U8@&}7cd#~&i+;}x*i(t>aVJIaz9+smXVimDGSrA5;PMl?AJlb z785(P#VBJ{g)JdA53?4SNYHs*Nc-nNF{6F0Xwzm>0Ogm6TIX%u9h7GISl4wPV3|iC z^98L3kSW$)C`wp$El|tXDO2TPvI2N7dcvil*3q#34L!oqm1|+IFbXRH$$&miLjP<7Jxtvu;gj!Ue#9SsPj|OEoAWF*_t=ZljPoR3cPkxi%Uq zv8vhu1{bajIl3gWM$BVp)(crvlb|4JvCAxsW?d@b=Z=ILjTntU#`d5b$vM*n?eH8e z?TvPty=v@k$FkdzDt!2cC0pnvRc;-%)iW|c zU_?VP?MUsNEp&1am8-56K%C~fDLAISnG|_x!xBRVkmn5fh`B=e0lg=ijzUDC?U*0%DT+Qh_gv$!mbw+SRU+0*)869PCj zu|l<=SRP|$0kN}zty(3Y&>zbRDrx|6wrXCz?;o%Lbrn_73n*~v35qf!IP*x2hOG0Y zDpd=%#jzCfMqqh2I6E#oUbD!Sf?R}ifo6pIS^wD6VF#*K-xsXzTW@03cqLN{+UtW>+8MB840JvJm_}-LY zA?GDx;29qb22^y;+ClNPf0(xkbrcv?PT~#%Fe71<^m!5xR2O{c&&$hfV|yS6)d&+1 zR$i1D#k*cb9K^zw)`7&M_?-5+S=jpOv^SAl=UbASj7I?qPfyApXFizQ)e8!ZKlhBp zm%1|V#K3&ze~ynA4yfxL05CpyS)st>TU!+Y1C+QPwVVF08L>u8khE(v(P1C`Qv~$t zqpSV1UP|{$n523)IFq*2p0%feJXaaUccp&ssb@PSJ6&H3k345rxuri3&l~?Pwg0ql z#DyLOfbWOH{9`T9U8;2V-`i_dwdS+*dQaDaVIF3aDRdfB*llV}08aBPyj(B(4+8J4 z`FkQ*)*T7sP^`lb)XsKq3&+Aus!QPXb%mh4CQZ1<3_PwvGa5%4G1(nK8OHYa#N)`B z!U91mCUmE!<`7K?+C;%i;6qG`{>%^cN$vqpV>&=)0sP@-#cP7`D?b62wKF6j18kyR z5weP|zvCEK-nBl743dA%tW@!8>&@W*n+c7uHfmdtfPf}Xfq)1SiBxbBtsHbgxdajt zM;(L!Kt_fJJcb|GKS1rk{9T^xw1?ljUJWQVxZeIZNP;QkKMv>7KZ^xDsU9u7JC@&M zB}+2;yzTAph9CH~E2odIX0ez>6x*m`KK`7y$M%?(F=ajq56AhhzA5IC5t!ZqiA#&K zVq(93MBu+i@~qSzlKrj>)|ABRy0f@%H)q`e1NjaBx62-Xw`vBJj|z{|wihiE^v0d5 zi_|W{_irs#-ip;oi(egAtB_P5o_LocDfNgnZ4$P2n+Nop13^A8PuH6w8H^5j)W>dj z4fM}qLmCzYWS1-hr_=m~R6j_z3P1(tm9RjiAiak0SFuLaK>f`WKychpy^`R)%Z5Mz z+9QHfox@zV`rmaPHWr;7%Zr(orPo)yaLB-zRg++fXa^8Tm(GhUj6cFOO0_{(W!8l{ zK9{;YP9q#Je%mt72olq_{BD~99|5Dtj||!Acta`B_vxl5sCQYe+~X0gHSE~gXj6Vb2;N-y zhN&ceIhg|NDT8tS`k{(eXXQ#rP=u@d5*r80ibk^*_J2cox@V*Mm&KiYUG(k_g$olg z=Y<33fvIF$?zVYyeC-%Um6CjeA!Rd10Ts;lk~7fIk(49P^v|o}rHNuFpr75XSaus) z-pl@t8#`p%Whgn565|wc8ZyO2#m`enmkU}bNdHRQb4CYj6cBKC!dKtPY4-|<=}@ue z=&t8Fo5l2Z1XtkF&iP&F26K$5(36oYc>K&%866<5xI_kvad!*$(olQqPKE^v-ltt% zrMfK2D!Jzl#O8i~aY%iW{QWZd$j~^jb~I_L;X|X$BH9zs8jgIERb`h8;DU&7AicGp zIo`<$$c+T7Ch`a0^=R!C;@s4l3K9jP+1SopC-w@XBm*~Yb1<6!{UtciZ4Xi}9&{`M zZ^$ZSxq5Od6sd(KN)x7zq=#U*A;dr!$}o%8V<__ZM>mz>ekGyYy#Eq_cQTTpFwiIsu4`%BtJ9ckW@k{U zovJO*(xf*>-fsD!Une$G#p8gF&(paihD2sJ7aOJkMg4`In$xn|gfvy8r)iKawat}e zGqQ5M$`2!v??GcVG)i(Z1^UaH>!l_lg%ZD;23e+_U`m7mQwKKXwL%@6%T^RE=o&Yl zGw9q*+BpP~Z*9g#PRLq^t43%ysYJSCV4u&@WDq!%k*lsEMhtYLc5`BT|A}s`n2-2W z&DNm6Z6fVyC+4Rr#`|UOl@+Vox;l#Y)os?QK-8A>FWWIpy9n%>e}Q2(ae@neV!HF=bZDo^>Cg!T;{!psuw0Y`MzF*zCmqV z%flnYimb!@5-6-o<|R{-fcX6g=Qp4sX9E<-6$T2#kMb#>{zJgE1hhG+3$~&Ohz;cz zKQ-&$e%4^CSoj6?(RMn~0q6e?fPZ2Osk)ru<+qKa2rZ}#7g`h*rV8UfKM*Tagg^I= zNSD|M-f-P}c4>w8>?f|GUYQSHS{M!w+Sv(KN=({#!NSB|6sI7Ld}XjII63&G_Oi;y z!$E5HvUQ$mHhzsuCI$ol)~34uWazC)KZN@;(uEat$P_y7sb63{q?QtZrmzZP%sQ^~ zBJdC|`(g#Y%Zs9k@f=;Dx!zxOa?Netak=J2&V;EpqlHFNIqq>w2)QhvsPOD6dI|h@ zUdCM|)=#_nr{jtF=S}1w{zlXf5Ka~Ne%t@|G1W5G80j6cQbQ>sCKcF);EANz3ePjpu&%lJv> zYi%N_;h&ZAy3FmB`$E7>qNefbGwSGy#POy4!HNsST3s(FF1cV>8kYe#ff>$0h@!hr zn!=Ycf*Uu2a}Q)%L>(@Rc}G%Sv{g+x)CWQXw}hER&EwM-WC0xhHXj9^iUZAK9z*n{{W`ZFj&nrYUT{TQ@5P8cgRgy1&%gEqi4b#mc_iMQsB`Lu6rc5h7^V4F-`u~+WgbPkLpsm1?vxN-FK&Pt{xC6g|rK}f;Cs8*w-V*J*xa+@d# z&{|l;lhX6T?*|T=3*QuNjOHxF0N$)~dUYUim{BABxux!WHnSp&CF!UhJtej{U%iN9-WU7g)?rV)FYOei7`r9vg zq4uGkZwqfO$6mIcFwqtbUo;Ioj#FAci^8D10iM*So+p8CEzPuH0{5>{X@hu015Ng7 zPU_{+wItx#*(9N>hoS)AipZR5QFvaeT_P7UaK}TmQv#!Q+MjOGVvBjYrhw49Iw~OD z%|h`e2;QNJ;Q;TK6O!Lrnr}lUeT4+<94h$G%4?W|ImI2m-*jxZhfwf@1?ZNTEb}i7 zcx>b}Lo8XsE*z*HJ_m|DciFilD(xkMKu={F?n}U`poUUr00)YH$dHUe&ZT0wSwZdj ztjXMf?4xC3fdIE1Pm}dXeR^G#wbn4!#F9s}+e&jOV`k8rZN2n;9Rm?w>dF)uS!Q)^ zmgbXep;WbaqHN(=NOUWif3pdf3qw8iX2eHdD^66*&E+zDMEqv>0ea)n9m0vCd9|8I z^e8|(dQn>{x=DKTL}BJ3kfl#Oorb*tL2}avJ>BL>6w!FBB)Zdb2Ef<8inoVu-C%xK z(tu>F9?o$Gp_1VhD0LJaft2|Vzdj{NuB%?$LD^Q1$TFAe;i6>g&MC?*48L`@+v7#GjHI3+fMWqnp)GX#iBf5WX5kB*=DRm4AHPyHe}5*>UMJm7Lg z*Ht-M93(@9YC>_6R%d$oy{lg)YA&5OQ78;e#!A&ww?f}S#po?z&uT(9c>5DH*R z7azE|Z@qFB(c1t4xNVez_=3N70EOyoY0V;WD@^1+G~#kAbck3S*yXe$LK~WsoQhV( zMm6cNt{ay{eL$$TmODOtbXl<0T~0XjwoV@OE%3?dU%h(iTJ#9)%kkO>JvT^aQ(tT6lzBsNCj{@gn(z!tbu(bz-NE14@%O{*yzi{<9;uS}uTU2(eF4WfXCeg$ z`&4pfP=;~*{iD8N;DRt9s9=}uV5}F*xu0zo)aLo}R2$O23p=C!cm?sd)b-}9A22Sg z3PTvpq<@hGha9vKcy>4TdVtP6)Z(tdut2?1PKPeL2ncgvk`I!G364T(1TXS$%l!LJ zmEKcC-;^BnmqIU9DG}$??Q$ZeuMmI(=qy28XA<=JdD)L?&V4#h2hKq3HQkP6sB*A& z--M;00dKGlLD7KBU#+1>HMj+zxHA|VsAQcc?-{0S?2mJD#qDy;zv?-CU_FiuuTUid zI&-ynCh!-S>mG;JopPS*L^EJz2JX{l+*YSSxJRbF@iizEv294Lz2eRz7{D)&4V~@_ zpFbJHGp~Z+Cd+ULh6WtKN^>m1kT8hq=kEcXH;{Tf05lC1CpI*VjpbpYZyRAf(DrY| z_|z74&Tc7U1_-(ipt5@;a?1!gk^My)rxcANGFl{Q`W;0jv?eRc?=W>ktRPlw;RrNM za>#Z_Oc80RN~0od@#}fUdca=eeUY!Wmok4f?^?l$9vD-+7Oz(+^`i8gh++S{+c69x zD!y;1=dEFUD>@FFVT0X}40(B+AW?wupAyMiBSi#osSH%ugvJ>Dlbap*;+m%IUnA)4 z29Ak`vX6`o8U+8$AOAvURPstvpxVFqf7+8It>yJU?FsNd>eE?g0q$mHoVJqw;^b9s z2&rm`t5M5f&uOer=pd{6TtSnq=^V+P-=IgS3d+pf_o1XzsZ$0dZ$*(-L zLpd3M7*GWpbZwqgRaBZ%bu+ZZRagMCwdzV`Ia6U5b%62^n-+>SofnNA`+}`-b#{!P zlvN$6Q8_8g5}RX5dx>p>ba%i;IBrUK*1q+Y+~0!iQ6ntPTVP!_O~Y0Y2Qy0{CpHA~ zMQwJ+bZ#YG_&eyPl&^4FZgdlQHaJC>V0RIK*%n4MlPv$dc7S%dJozGN=Sg{!4Tow) zA~YNHjhFS6D{}I=sjytXPY$-dM71nMy3!UGi~U#i27IazF3m`SPgo$lw}tudXL#GB zaukv!KTH;NMg2nAY*DMFMRlY$rS)F6LI!>cdwIFfD?Dk3+G%QHEJ{&+^tt9vC9|%7 zJP&i$uBJu7n)?y>at;nv5f#$cBQ|PF%CAH;mK0QM85w=tB>%}>u!~wXfm%8Rnj04u zO^a{z5yv-5=`v`Wu%Wi3g3x8YGiet_F*T($1kR(EEa|!Z8!b{RE7*l|U_Ie#JxGxW z2#BbqMx1|pg@jCe)>3Rf)p!y{9#Z?;P64VuFU}TtJ|EBL-cQ3GU>61~+}#N_(J_P! zgp)DxZXGkRHUtSEl8=|KjH4E@$S#@AUcP|OyKlA}7Hz9Sw$pt=N>~DOP~&M`)_C`iL?+qP|M zdfGOoZQGi!F>TwnZQHhO+uhr{+1+IK$4x4^$w}_1liZxQ>a8an;ko)9=84|8uwk&c zq7Va@nE4O=5o-n+SbM=#X)DX#0MZL8nqte22R`SUj(?%9Q?ZefwrOf!<#AV@q@Zme5t-{7l zr5pDBIMHe`2`}n_>>)QVrVSQj7INQnKH#2=jBt$0SkSrdu8b%GsO^cC4CL>QQmqMkBQ#I5m;36|=_0fb75k}D_ z>VfEqJBUiXDKzt>xG)!&zvvIjcjJAs&>PR9Y4`qyJ&o zJVf+BR_SRvWb0>!(|c~-V;0ieYAd#ITN=-Tv(x;PYFPrOWV@P2P3rcjjbRjatn6eA zzJA{n$Lcs~kxgCqaZVcjw+7%^TH|ReOW8FE0~cJZb)Kir0nJGmD=I@Dbo3B3_Q2I? z+$~+>!Vd}DNE9cc3P0otG0efvZF>-EZ){D19iGIf(+YdN#eEg#HV_VE$~|-(7cY7AAplHBjd3TbAPHMqFxDhJ<=DD{mlW`q zRBdd23Msdr8(7{a{`-bD#;kBdPh6~Ulb@@gjCq#hZtC&Q=@G9zLZ7bfr&2x{v26G|04sG<9H__xjtry)q;%ATwf2jCaB} zZ^gmC%BUINo8IpT&rXSuhneXtP#l*jLn)hWD^j-nf_cr zZq*JE6Rr`9Rx451QZ;8(A?{VBBFs||(8yhbL8obfxeTUJu?L{j1W~C#sg=|V2Zlun zw+|`=mPogRZwq@1=VDdNWCTm=73*jfe+n_Gw@CMw^3Rm|?y3+IRw&10(@qZZo?0~= zTcW8*Cy9Zp=Wpsqh7r^bM~Kz;Vzi50E)zyB5P(~TmnF-OlrkXX(mIha5?`ZwK)W8O zLWOlWiYfr)djL{{V$G;{9+w{Ou}_7rCNBMJudjDD;-Iw9JI`1YAv_=K27JvPGt7Ka z_Qom&xp|v#WQ!G6KHVVYW$r~1h~i>iYz6xS*T$FP{Eem!va<1>=ERMBUXC~tXJ?Zr!H8t7!`WY9Djcg0W!VWzC1o2U%)>;|9(V7 z0Q{pzhvVfbzY&%Nvb;f_Z@yStZXG}TBf9+s^&$bj)7iU6up|~W3&+eSD=x$uWU@M9K@Ane`QreB#g5%xnfpW_& zDK-F}rbDBT|23j#*~}gh#SSjVGkRJ8=)uN=37};BC<$T3=R};Uh1prp`^>>{;6#Eu zr*FPxt)ny6IbP{z1A_m8{kyfPs}pdHpp6T6JsVwP9niIBx}HPfSam7_LD$N;Fe{|g zRP?aru&?`!Q;@#(-3gbmYr~0;^a5L1SdAy}*N;%}2XTNb@n(F-UFu71i7C-lMXfM9 z0I>O26_Zs;s}MDbQpb{P0dq6e>EU~ys@*G%y`kN6C&=q> z1r97KP=xt6FUYPGtTF6zhqqW1X&m)oHljD?BHJlX_S5vLIp1|?^o$MFd`u2ERhl-f zbDSJnR|%6W82Sm*mf4Z~tgJ%UTGM0r8vtvKZ~4Z}1VRrC^@8^YXypYlUa*zDYXxJ( z4zA9GotiD`c%@+Hi?ip)8ZWVrl+yUM<$zPAKFIq`*4VxK?Dh0+ov7?l-7rP%zo_z7 zaiZr^xv%#Ij&BpAR|^9c>;VQ{N$46|FBYIw#PK`xS?RMhoNV5h4I{lWqSY8d8&K2p zo#HK4dER;`s~3?Cy1vwGcY$z1j#YH2B}fRcdhBcH_UFklyr3z^#Z<^*UNBkYb32HBPBsmn>rl9G+uYx{_LS+8kuxYE_}QNmbIy5yC-D4tN!qi9!~ihK1j=nq-nIz*I}!K zuRYbxhUc5}0aTD!tLK#SsRcSUFTbOj+RxmGX(itnU^okZ@ykDX|N3j)3*ed=CquEX z>39Eqq4aGSU7u5tZNbjhTy8+)bw^p!Xk$pOIrM@{8ed^9ZO~5bfe=EOZP>i?5DixI z>C68reZt2+)SFMSyFrHk*`t1v3<4t3i)@RF+p-BLV>0G z*P?wz7n-jSyi{A&sn21b0|0X-5oa$@WUApDyjE^3H7`?_Kr1gek?*%*QRB;?cFfU- z6I~Z0Zhz&5usu^clLz0)$9*)c*?7na*ycg6L!Q=XJwY#mM+U$uujpI9UrYY_LANUU z%~`3sjnltRhq1Z~t99}fqS~W^vxk-|s$F+-MUDTria9S#qx5n%FM#^i=0Vh{OF<#_->{|YP&eL7dLh_`nk`E0H>1;v;bpNWToK8TSK*|&dDmu&d z^xASU^fm}^9DB2+kBfrwvHrh+e9Yq+@ILG|)aI@ndjU@7B3i4WcIvcbWa|2`u?|RW z=SvUApgZ!lIGVZD6F?tzw;T0imM`KX(NNSsb4NV^dsan5KK&SzLrICx9h6_1^W;iJ zTqe@%c+4^uC)K-CQ-G*!*Tl2*%PEI?tuLF` zlC>)V9$Od1U8VZboKh1u{4&OuM5v&7oKlrSKdJyT;yNi2EN7#A7IH)6V>|g4-P#fz zO_c=J+UJ9wPzikbCSUl?l?+(%VpqX)Q@w+7mpLKFwnwGPSs&*)DmUKXO3Tu|2{q9; z)rLTYvWkBT+W;x!oJaD&kYg$vON7~UT`pxc2M3EX6|2ZU#cDidoywO<1TJNjw(V+W zM3QQ_`Ms&XqnQ&_?Od7AjpwE$W$~kA{9*mSsx(8yAkpKn;otQmp%{2@=@mO;5Vj^w zT$?1B1Ky7+XhX41_WtN{F01B0XD7K9N_iB9Q7G?AT><2I*`sk9fxKQ0)g!b+^ne?O za4eA{zc=1gg#;QvLhxs{v(84m)Wt(ctTea-yL-o|KPpw^ZtZFu!l4kgiEuAhscy$#fksEJ0qId}MsPeMEyROjh7aq_+riOTtg4XQW z;Pe#jDQB~7I1Y0J3?o&$bKv)ohd%XzHx$(*jCxkzd|l4Qox zcsBBxjf&%*@`vV7>BWzlj=o4+)n~M)L`k1~!vL~p**olpr%$Srm%b{Koi9JrPdVDU zBf2+6OgR;ht~&C=SO3}GzF;(0%6u9mlX^`*1Em;atX2;h#0nYU$i-uWCeCNr(8{v>IX63}6<+tPKV z8z$wZ57*BU@~Nv47oJ-o%Barqdwz};yv;VL=AnoWN_vhkyvUY(3nqxSReb3_uwS zVliytQZt>b4+XIrLg)TYEV)-Wz{Q>`PkJR*Y0icvRtcxbJPJfPiTzQ#i)jnj{IfoG zHc)}Q4H}M7^fyae5kuKfYY}8xGUVlN9oE7utK)-g!-v}_%8+)VC#Z~=-iEKi6F;J` z5HThF!?*2=77olm$INN@gqD;p%7D4U-9sbEL}x{4S)Jl04q1%yqfDF-t$QrO`h|~? z80V8yxFx6~umhn67l!h$tiSF_h!I`~MtNIs74@)K$uQ>7Dv`e!I9ZMR61^QjxDW-=T|WyiOl>yzJi zQ*lbWDP9b1iWCPS zop-F@&G(PRze;7B$Y(>h8GxK{wJV`!?}pkM*Xy$y%{_j$KfeirHLefU8zR><_Vo2V zA=dfEaoXzw&UJ!nv~VsNQLBZJ>%<7%Z+DZA)WZwYY^2r|7;H89ER~1*ilT8G>d6&Wbl5 z_x!WqZ|>9WG`*EUh?hNYf3N6AEX=sP-ssvqXG>8OB=utv>OnF=o8c}PjECjMP`x_Y zIeBUEm@~&G#NWM^dMr`9c5RQwr98B~Z_e!B7i%8xp{$HOKTl!(nQJD?N@j>(y*HVq zv)H%w=)%LcCP5m91z?%B%U{nu`JkLUPLS|f!V7BQ`d({H zy!C=Q(+YKxURi=>D+sc8OPXQi@)F%k=V>w| z|FPEAAZe*HKySqn&=}pB9FQ{SGA`JSVTBL=S>Iy}aKu0?INgF0rUedL$)cqJ{pwK% zG+6mB5P=jHzpIx$p&15e%{nS~a+$F~eGlWzg+tl*LtFFbyNqBel`>~>gh0#!d{NYe z#X7<0qu7%i3vb8=sa?ni*j7zTi3Ign(r8l)ELoe;uVhU`=?j&ONPqSfjxwi3wZuBq#tVO~K`NAvwj+ zp0E})ZGNL~QO>D#OEuJ0iy~;+65)1h56)Xtzqu@xTyY#k(t;!0!sw+mv=@^qRpd5Y ztCNoAFks^K%U^|tGo`Fa+mwuV?Cv*rjl$|OZH5v^U6m~?FmUz2s2_J?Yv&7CJ=6qD zR?T~E&=W3G-*Stsr^ln)`dUP0d^}2+2Epdd)eM4!(_;wRFpE;a!VQhw*%P^R(;ZRT zvvc_k4*YYDC>t?U5sgBq8qrr4U6S)1EV|RSp_w*Res#9COdc$9_24PffyiGoc|4*M zQ{Ayt0msOvDKJv;q7!Qzo-cXAim(JkFQ(UHsm7KoqH9K!r9>%S)?+OS3~$+G_ZB^A zc5;WyUOG0G>R_a=$qpA?)vYY(WJR4Z1SoF)*P4yPizQDQ5tfYj`D2$%vh7zlY_ynG zd9n8h<>Jl9_)gZOz1ZB^k&~bRl59a*3UpB8^k>BE7x{Uh)S@r!7Xt)k2#z-4@B|F{C7}t*ayHV)~OSmgbj8BQ(Y$<0IN{E{lH$*8VNzyx(zVutt+r5Hnb_+YJPL}T30r9O|83S z^4Vm*WwYv8O$M18)$@DYT4i`$nBD#X zzkSF#oR7|Vp;%}tsq0_8xs%;bC&=e#Z}W*M^2RLBd>V{K z8w$u?ta-|P8l8^81ObF^SAnD&qp1j;jv)pTNM4cfTW(QEiaX8lyQ8JQun_PM7>6Id z?k1hsN}~5W#4oH$cqiX2t3yGdmQCUmUn07#ZJ?THyn~swgm*^I=iR&I&w`_ z?0k36MYNVD14~CbLXIe^KI&YWl(%!`i#`c9?20b0@rG+MwsVymQkNC1lc>*Ah1+oC zoEydRyz^oMP|h-cL;X~`L^sBLY+qcio!oW6>TZ3KT1u-^EDD$9I5`H#pT--J=C&;l zZC~0O(Y&w&**s?L?moxP+45j)W;(DGxSYHlpJXxNp@eCF5Y^TLxM|ACB+!~rWE{~MCgio3-#FN71ljgJp>=fkw4B;4te=+u z%N(BtP{{SiE;038i7$rT#PC7a-vVwVfr1&|)sW{$z2b0kvc9*9eB@zmc0ZvOwACu) z;q7$aBjFsG!p@ke*(4Qd{bk33ICm2xZ)-na1D{niTgto-j%?xOtxPcR{1QVg8XZlk zRLAl=diFpy{$WMJbigJnMqU}KJo65xoVh6huu?f-wvS_jbFs$6pfRXhaW@-Or69Uc zL=qn6YQRXdor|6gNMLR_;C}r6lz3_&_2 zmM@Y2>;5J9c6$GM^yT#>coft4WBz6JV1JY{K6>ZOZU1_har6bV zV0?G`a`-YlTAX5WSABy&_X!2)Dt_(`{sz>|e*t}W_IzO1F@Mo&zqo#|>t=cT?LmEb zLzoB#gijLwDB#@p*LyeH@E}ft%iRpR_pl-ZhVI-xbzdY+TwJSJ}v$QomRvMzpXHpN6 z-=eVrR#V&eE_k{*7ap?6Y}RvA8wrIuO&Yyj8kTY?csvmZfJ_f_?#fXIs+`T8e?kR+ zpRq6}pyw8jtT{t<9+#dCCY@hU5no&bdKOU7i5$dfO011@Kj&zU%-q7B$=q}XkhaUP z+HSTs8`vmSt6PM@XHTA0l&MtzR;~Ta6V>hi#TqI)wBB1R8(PkJJ?)6!)r&^z<-q&feeId<&@yR!Z>n<5S zCuQE%%HbcRqWO1vE(9z~MuobNeNH70`wW}|V-|QKyC`yS0u7J z7+Mn%u%K^n%D8a^vcc1;iguCYzeDy8cZ@Omci19+SS(-0gQ-aKfBpQ3 zWdnC@C2G#VVi|{~p}jvSN&0#olta{snWkcHzrk`ELPn4G?RML=LeM4p6ZOoo-r2(% zNL5Dsg>uPoi~s_!sFCWw>Tdxc&S+8QUH4Gctk3lb(g0fKCxl8f%}36cC5ghsu+94= ze3EhzvY>y8Db&d0GIK0K-A`2I`YB&xAP~)@!+Md?#Ds{LK58zAcgLzoB0zK>#6DM*0A8GKsH#nAV34C?&Lk8oWvAer zN*~V*$1kJZ>*lLecexsDopVHM;m3IVDR)NjNn?V2&3zDWBolw7ZADc4jplnRt~|Qy zshUvZABJKpEehRSl6Oa2Qu1L_TJk|(R?-JUQwFftqA9Zvrzvak52M*i3Zv;d3zI^* zp*zWoocI~IgU?>&a{<943cF>BCPnY*1pBQTWXHNz-Hqzh`$YrVf_-VHsQO9s`+tIf z{|Wm4Gcds8>{c)gktfGV1{dMAk@ziTnVkXmo`>yL`A=$E`?QXF7l0D#lUS7#QPRO9 z=RBm%uX*&WFn@^X5GiGm-UjB6f$>J7n6zj3I^nEt8ReL&pHv{mvd+ta#U)iqMce1}`W5QG}yvxFK5DeAPZi*d?YjuAeK&9k)U z^xGwCo{|{o;!WG}R%Pk&+K0u&6@`$CDz$E@RYC5KrPz2;pDWsh<<^nCW z7-toTA49eUK7exeSH_yVYgauV>!MQk_ENGD6HN~`3E<)VD;j@-W@lNmZE%3_tWXf@ zsm_TQvqdK$3r<2@oEodGqN+1@J?(1}+jG*W<`?(`R@?V#Ts;n$mZz+ao-`&1U8nHz z;ojQI9uPDySIhx>Wy8#5VDhlgn5E}6fzDk&?AB&;Bbh|n1Dca0rjP&Gzj-dNuH5wo zA+zVsP5@7;yTGtVzEEFlhQ(9j{mrSLSGc{rrePZS4N+XWFXJC%47B#ih z1r}O%98?X?n^=H8?6Z{#?7CBV~~9~ zX(YR=blKDf9ib1%;~S3xYWeN{)P*W5Y>_A-1)xdK2GvhjBD2FP%nybTCMpU>sk)>e z&My8(cJrl>M4Xn%|G`3H1P>y<5WSV14-1%ZNeyxpLkBkwKKSlJcPhrt&U-Hp%DU4i zTZ$|dE@;@Pmc_zD$O9jlGd+N9kE~SO|6NWyRdX)V+Lh^+Ql%*zDcgzd{)i}2Vibi? z129&y4=+v`sHomxZM&!iX073>VxNcT{iO(id=R6+LA=*7E4n4yDjAzm_FC3VO+#88 z-?{DhkSU^Q$OpBm<{Yk+GLDu+Jk_x>k)w?!r40xczGY1va-gMQ;VW~?)Evt9AU*dV zeyOTwS<3BHT&#_LIW*&#bcC}$pL{TI2B;z|YbPFA91KMS1KqPGt8qI_%bhzkdutaz9Oj`4B->PKGKv^?_C&i7(@gjMVbzKlv5qCIe=V6fT25Qt44JsP zGipLgT>W{~jv2ek|91i-pG8aC%Ji9(rF}Yjb+csRs*1hdjg-YJnXujqpqRR;Wo1e{ z5W%&uvO9d)#p*aB8ii_FSHZa*8|;cV?D{@+LhN|MG+Dc4Esno&$Q5<WqKi#Nf3C1%ns$o7P!wmDgE!u0jLRFL>i>xDvKZysa%y4O1PKksp#{6vn+GrZ{ zW*E_=TwBwr1L9_qIYd98b`Du)m;-sjd_4J~(90dI|8764-u(yhWgtA4B%`dxXo%-> z{%M#x753yP{@Fe=s zOEJY{wrxd-Zn^{Tx=;tHci0FEMV;O9fbEcqNkwkv_Qzk~3= zB0L~=iK85=fZ=rEOBu9D-|t3EInzTSH$CocS^PP?bI zQ7aqxG4*n>H3{OtVaRXliE#4wdwAe8Eg+=jApm5j_kCVF$OmyFhu{7x72UGf3D#|cpr4b-q8t1Fc5 z#vN@lj&ahw1mtA;?9_htWM@-_Oo@jXc8V-v#;qm4J*7K!W@s7v8}9P`lh=t|q-0P? z_haZh34E+IZsYR+edHZ>mvcP`h}frYaA)wCF53qHUD?p;SKhwX=XeoG>8|*((#LFt z4`^77{%Nj|Jr(=A*Cz$d#rK2 zuXdY3bg}AY7K`U+^*E}yv8st7zO9+CJ^Go+!LmI+rGl&`Zu{~Pm_5OG1htt~9 zA@4vnRoqfUQT{@*>E`z9JJSnHAe?|qqvQzyJFB>ReDte+i~qK`p+#A{%Y!US5{5)r zh(LiZ5=OX0EHJMbsBGL;0HVK&;W{B8Vbw%MOrlCAF3bb1V4NVIfuIOWHF*=PZNcAp z)oh_KMmxC^tj*cqxpllGTs$DWZ2T{X&e@_8sZeHz_zxA@Pl6Y-C`vp&ykyFj*)JF{ z`OfV;+z-KFu-uRFp+k3)2$Tc~?^NUeCx54J?DB1{u^Bi2sknu&VzMt0)@{30dlvY~ za|<(NQyGSNqHe+6Tji3&DiNrkj*MM~jHbkFJ9_(C!+rcv4M`WVKl}g_uj5zHyQjkM zwP`Pog7?*@NCT;WfXHve|L#qzC#}81hAvz6k2?Ya0xFCr7#9P?%UbWq>t&GC5l?r0J` zpETMaLH9YFKrsstmKV3n0oo=LqEq3H^Cu^gByIUj+ppz}$*{wOdzf{bkK$09+o!EY zVT+g4g5&z!8k2z`+^6;<6!f*(_f1p?pUNIUg925Cu)v6~i&*;`F5HhwNz)=`SD+21z z7o&YxNT+r}zWxGxfIV(JMMG{77^NT6EN3RIOQ~()zEB2XBmJY~#8K=%!dzBVqDH`P z`{`5I|8t(Kob%UIKLda)M*wO->?KCPG4wU3==v*j^`fInnkQb(H34U3tRvh(Fkli^ zOz>1+rlJ>2#bY?KY)^b?vb=Me|J38af`vNIz1$9KvfPxjv%{ELhxytD{ZnI5{F zB&N9vZz(W|zZ(aXOGV#+pqF z@h^cF6 zQYRz=sz4YwBT;2%G2#}@O>$^Mp6)Kh#bMowm-p5;jiW;x79toq;9n^wTL>d2UA|B$ zZ}mEM%@y$Yn?qSbZ3K~f04B-vF(@bG%Yf6G$qV68yZLV>ML6wCQJCJ5k(lY@l51Ry zl$;P&C2BWc7bBd{7zxc8`PFDoTZ#R1$$?Z1oxewGy1mU3<1#ER%SGQ3|4u(x;K7c| zb_{@fSpf}Ccv#9s0u3_5o+~1c|A@+k^@+2e3z~rh_xWxW^9Xd@0n4U@eKTwjXr&`O z1B8?Q>pZ0jd3{=+)&8eqhVRCDeADoXq2C3A`APjM+ih=$-%c0w;Xe} zu2DUM^C;z!{2_L=e+DcE0v$Dh#_?L^5)oa_Yjo%gHxr*rYNHh6O#}W45Q9Wuw||8i zAl8)38FZgp-eaj>k2((27LTBGEY?LUGE*2LoKa*=3h9$m0f5Q+^Mb) zZ-mkHYOLBOa9bD$5Zy)0>wa_h47i3C_ZSNtXI_So$S3e)zBMIYezomiyU`e-5ZpDd zQ(2IEt(!C}vOBjo!v*83$n81D4Eyio8R?E2bKVm{q zj19Eq?2Mdwx17|dO^3v~x84V*M4SMx<};C%%61PS3h-bIaFEA<&7>P-s~MlqiM})Z zf$||EmwO^#!@n1DBa6>U394ae@6y%xIFPvgiQQ^XsEp4trUXWD}eV|$6-tq;d`R~qC8nm&Dj@SoX}y4e^C4&qT= z+=bZwG!q|PR@!RUAy1l5Gh-eyoIiTI5+kpqQFvJ95F$mqs)<^#)L>Fxb6_}!2WX!m zp{5HV$uB^5hVwu#Kfm!8f@KbgUP)74JNY6x)ZP*0UXvNw`tqHEhOY3ka(c;fJ9!Kq z{nXM*y$HL;Ugc$+IzE!4K| zDFhK#zJKMUf0+w!PwAweQU-^9>1QU{HOGEFk$X{n$PIZs3;y4p_|B(aORI!HKv20r zK$t*iKu#7mF4h*dR*Z4GlmL#n?Pv88ZDlR5Rgcws3CDDI>7)znOQ|NQ1b+3^wRC?; ziJ>$yGy%RP-AzFE6@)}A+HDNw=;62qsmuQC2`5euBEUyxuNQRMk$9dkI!dog0Oy7+ zAy#5pkRWmJY|u>{!2j8gNSazTz_T-WN(d1^SY`V?*l%dBoSWI<0eHn>7H1y6mrlAN zj0TBKsFk?ZTS^fRff>2?^T!I$*c{?ZGjoi$+8~T3(d*f|%>R+7{`%H~6;1U0; z3~LORfE#&Ml*Pik41m+><}^EAHCCvp(CFKUmNOusz-m<_8iokjwdqQ@ou#IQwea=T z^N$(q07q z%s5Ny;VSvJ(ulLtO@u;?!#-0+14=0*H*S0>GMvv6*&gE-)=_#M*u+>1l62B`fEaL* zMkU+@>hPU3Jg+3DiGwP}O*J^A7;cg##GWr#YwBS_&fanUeA;J_m@w5%cdfz}OwyFQ z110H6`N#zdfXS3^x<56d1)iqG2v-2I>R=VLT5ItPq(pzmIBQgq;=W_3W$IPMzr)Xz z-nRh)qVhKA_K#^^i*%G6qsbUaQ?DpTg()^|=4gg-pBK$#|V9miA{^oOepQxlWAYrJ2r$l|hMLb-Mv=I&$#fXs zM?|@g*0NE*7F#E-oD|%bBvCKm$HBrH3_miu;tK3&!@{wL430S{y3Al}VRla=*8Frw=`R4w&YT`oD=mBXF$su?Y3SJ=t0{GDD z7n0mi^=f$KW>%|_pkYlV9uQ4w4#nLM%PtLm?V>xZ+3oXW4zhIU-IT!L+t!#WC3qY- z*DnGW^P#L@h3{X!l0s}`c%z1coI5&B8oOcy!{y%wtU~@65roPFVfi8tr)foc2}kZ z640__Y(nG3HqU)dPj(9SazG%~y{v;cGG2=;<#uWZIuTOs_0&9jZF|JN*mn>bV{3m6 z$d1Ws5_+RQt|gY?Q%IUhKd=0_h;;Q{fOHTN=$PxxM1~Wq#@~Bu`lBrjjLRR;ij|tOFe-$kgrE^NA5#(_jWaCICqa8?Hk|2U)103aA5P;2ul2w$h=C1Zo zA5rQ3K(La4n+HX-8Od7(D>H|S3V1) zv9PzHv8?O(K4M{ryNc{$N?hI~tbzudFSC>FqB!56In!3F10f4WA{~X9Df&1g!s=Pu z$Y$5Z?iTO%2SqnM^}vUTVW*LL1tgzSVxAtI<3uX>4f#>+Gk`RCn+-;T?pR*{yd{)x zyx`aUeiKjxj?9It^YHJ+!$e_uh)CalO4ayxU)pY`xGDzCGjKiQl>Ct~HkAwAeT||V z9?cr(NuM_jpyupb^pXsDA|LOhY9F^EsJ|^B;m^)87oR`_OI;YdJ_edFH${ikU{bi@ zh#~{pYm^Eui2w4o7ZgvYb0siQtYecn6v}jNTNNoiwG^ zw&(ANOf989ZTA9uITL;@mYWOZj;pBlI%2c)Jb(d%=ZQ6zvI6Ql!wH65u3YH1<|-L2 zEgKV#=>#UYbyu(m?x*qlMXcq{mw%x$-5H6a7>?{-nju_Gu;uAF54vD-d(Ofv>c0XS zE(`j|04P}MQAHrxwjIG_kl%Wn5##OSwG_uf!G2{6{x*)ZM!*nkwIzgl}0 z*8m_Aoyz%+&hfO#Avs0mgRM(+qP zM?2A;nOnvBpfh$YpoSh?2$fwilMlM)o2$Sl$tV}hbY)Z}75hPhh2aM4@KjYjdRcS) zi$S_l3&1ViG3zERWgWdMk5{Ml|GT4#Jv;YhNH~CEnLzK##YWD*$Z@D z{OA=(;BdhY&7PydkP`ab8(XiD5Bx%5VHK3XJflbpWRi)~p?zNrLLSq^i(3}@*#LiT z;8BA@dr5$!w(|a%;+67GOxF<1@2Os~rLDoe7ZmNJz`h}=mqR$pNs{IrDQlTmOKyhA z;^3?##?RRnj%p?aJ=p4?t_jzLpEpb-YJo{Re)+DFiMUh>?%WQ;uX=2x($=W_xYNrP z?e`&!=@MXtH-pR*C{Lm20DcuGi-6BUGWq;9-zBdSG_Q~_jVQkh-`t%wK7Nhz#=%rL@s)MZA0xudJxh;0bITb*)-f>n&wdcj>Levq+BCoEUpJako~ATm zAl3pt24XK{^%6Ea>qR&lp{lh==e!Y?67s3&0BIt6z zWvb^r?Ph{% z2t;Xs({=2fV_OHm2i}xz-uRhmAa`Z@AmQbT&$Rdfa7U1>l-r(dl$X|v*Bg?GTdrOs zme77(@#x%LMisZ?Wor@`0U^a!^K$r!YeLG$(dpq#nW7FzTencu^=cMu(gyUG?T>JU zQz(D%j_=!sAORo)Et@cjF{^mbf7!;kbP9QrnUb60-#+Olg2qp8;HKwuuu;@hmq%-p zBolL|T=d06NB48_0KYXkZ@Q7pSW5@?@6ahrK{XPSh-4pQY$A5hL z)OyILQGS?7HvU>A<)9>EutsOEF{{0vW|p>}c{#r*EU=PO;-)L~X(H`VXyMr?hWnwE zYD>!sI{_i9YrtXXifTd!_4hYZO7;;p=$d?W!X>DeDoU1qWpSYN7OVjQ|IyV~0M*en z?Vf{6;Nb2OBsc_j5+r!A;1)uH2ls=!+d+a$a0~A4?(Xh>a4zqc|9<~{?^JDVJ=0y? zwY^ibHM8?{e;Tf*JHm)-zgb<9jR3l{4sV9udjF37Fq`Fd3U_EC zTJ5N_k0e9Ya5JdIg=2HMktblya$uHeNqxJeoZoILDRG;rtwDZb`6F5cY-gid37&Uc zTikm6GORsa?$dF&w;?Nu=T)gUe@DJnN0GWw@g#d{#qv5M%Rr!uzd*e$`NKk{@e`$) zyqJI&uKB_v7G0?rteOJv^ac3x!064w3{IwUTOkFe@!@#-%Mu7`=(%h)oka+6?BQ>6 zGHL*dwNEA?#nkdyy*G&G*GsW63hKwj;tQ<~G*_X#JWM5HMHMz8)&-hm(HPzCJ)Wzo zC>|4#rv{kBB{OiQZRoXC%0VOjk^~8t{NM3tS(#azR6N49eCiy&TLDiFD+h&-3)L$< zYis1XS1;DD*?Ync$~KS8n;kx5Dshrr()iR*Q%;^ms{x6Za7snC*=^L zCcn-9^PBXC@(1j7gLchFm?!`C3EL`p%O*x72mNmTcY1gg?FNJa3q={)G7Ks0XeV3v zr0i;M?f+EF<9L-JYy?*PikLd4e9D894#4gRkvXguht~Z}DaQeSi){l7oBFTQs51iq z)t_s<2qx**g|s!U=|jppxw1BCnX1U7r}J;qS2PVt#g>TRn2vX)`J~fByQYeVP<5$P zhG#@Mi7K#67iqZ%74HqQkFWUCej`Zt#xnrK3Q8hBuaH-<245n+E&qcAFXI>$?Ynb9_|@V3;eIp%Y9}#x(MIfZ)jIHLqx&wZ*~3fd;4X z$HI}!Vk7t_tY}kMq9Y&x_Pb_6feQm){#j~0aPr%#FiYL7(pLDv(cfQsWO{%Qtv!j594&6S*c zLj>{#+fNQOhk_r-nO~+9e0Uy?px>rTjc|$<)I3tU;^&jprF_4imh@fgii9sk^MT+v zE}hbHf1z{lVV^aZZaiuowi^01<5Y?CDBTn>zlGYa{D zV)Ln2ML%`3_MrOSV7VrAsM&Fpp~b7IOc3&a={?nN;f~5g78xo>spi6M6g>aw9qYJZ zW!-xPzO6Q8iKglv&Wl$(B2BbbINxeikbSxnyE|-M-PWF|cP;C~)#hCSW)LF6wx-*~V$Kx>%x$*>? zc%7GB>}M$(n3*MvoJAq{N=tXeYtGq8Xh}DI??%*;fbYgbY=pK*qRv>v9DCRwpSAGJ z!yxKgVae}TD%j9O4tq_*zKu(&shx+Lo+UnS(LU3bj(drOryW0wM!MD5#)ClO=R_*i5 z1St`)=|~!WBF$IzQ{BSDg}8E34tFmf@*JAxcgSQDzpf3^pR+Uk)3mYujOuJ+etE>V ztRus`0? zsWlYJ8X5t~$>TG**0Uq#da0z@PTKnBn<7@W_-91Dg-1x%oeB3H9D;Y?@aT_WfdfyR zWF|eECBod!V>(yL=m#;-rUXMN;*|;bL{%LRXUK5JrbI=%){hcD{LnjWeR!Z#hL~-` z^A3i3F1CdJS9P_bhq7B0Onkv;kWQ#T<)C-smHWDwv)Y&{u@EC#`&{-6Q=lw;d=atz zz>79T>ET3&J)>2mLWL3d#jYYmL`Au6m+Gz(dZ7&B&Oq2M{KGR1%QL#Sj}4Hr)iQI%6i+BUG|t3w}2mGJRG#{*eM2kx0(Jwbg%%5OW5g$7*Rx=uh@ zzN{h47c(a<)EXR_?+_`5RjGLQ1gMuHHR03f%2u_E6g@tR-`#)@I-DIMPPdlbIMusL z@l8mITxp~tU_tQT4$eY~tTO!P>>RTENpHe`W#4%|Y+Yz9B3iz~{`wp6UB!kNAUliT zLP)J2_k2X3$ZM&Akp+q_@K_Sb^g_TaV5@Qbd+1Lm74V8k3Uz zjJYd}ucn4nda~Yy=CmYZ)=8cY#^r^mZQ;LGuFD_415$N@RIi$>#t}=J*%aqS>X~^y z^_o_09@UeLycS%vxsCo^2#dNmE!TOde(bP!Yh4%7zd~IOwnQ+T@s=kz>6k}-Q;Y-xvQImfM7Ya%^MP#s0b{BGw7R>bg(GA?1!6*E&-T5dJPo!+EL>|Bwf6=nUq>Q1u zBB~id>5P02Mo!z@r5jxp1V21(4?+^Yl|tn0#Y;{Sa?MRDh;ZPJ?=*Ynn->yX6q?EA zc3>6Rb)~ef#t^i71*HtgW3E2>KykJ4M26#Qlw1dGmd#P&!xC)Q#y+j3qL?-A&2J=i zgAr)rO9e2H!yWOrIeF16$cs|?l(%bg05E!Mi@J>9jtkG80Ig%>7~jj-PT!J)_rLG! z1tA0Z* z2=Ty!Yn94l?0M5~lWfrBh;h@(w-ntvCU6;rdh4{ytDleqF0mo-7ArQTC^W%Iqs_KG zq|tWz=CL~7m_&`j3r}!eh(8egC~G1J^9U$ zBsLa9NKcQ={*Z5>WtkPK5Px_}qRj77X}0RCpL{6`=OT*!Gp2GLhKBW} z^LKAi*StTX4*vSWr@V#rw6cF^p~YivheUo@0pww8mgQ@TQ^DXA%41B!M~-&``m&#Oh9q2nY8sfIJJv zdK>+7$L+QkQIVU172*J;l3^~gqWhZq!rq4w88%ns8v)S#4o`jYc`zbvgf1eOmc%-4 zhf0Q5Nf_7gxpEtKd^j;cK3L+L)y`f>6YPbowMo^o)Z@pINCN52x-U&1lb2)h>a!+< zU0NbOeB*fEP-9G5<1r_$R=L6>BS6NqUYr%(f^jLiMH~8aMX>WJyTyF7E2=uF$K2omo~8U4d^cNt={*Q1IC-p+A|8qP#zJc^dp0l@L7lee;lqSO zbNk0ww~6mvS|2K0g)~6qUe7MdgW49h_Dq zV!{|QGb(Yt3r-iQ_SR1D09#@kUaZo!iV|DvZR;-%Jgw?2m$f!TE9x(bKUSmZcsjtY z(&#UCgXp0oZ3BFc4ZO{g~5zH<_z~~;*^F3_KRs}Fz z4g)PU!KkGiyge+=a_FQz;SP#Yzqa{Cm=)3_iU|s z8Ls6;yoWymT$4-lxu&zo+&f3dBHs2pJGqi=ubd!>JAn z0L&9WR)Ii8@E8kG73P?NTk_Htz&v=Eq){F^J1T=T+(ve+8jq6Z)p*JR^$ckC6YJ?T_nC`I1+DJU{CyhZGtNzygbwG~Xq1R93z$;_-nkzFHjSp~+35CB?7>IKFIRZHeYZMRYBAGNv>*wU; z^G^lNRURI$2&a5gbY(1ABVFSyQN~>MU@?VuA-;%z zW<};^2ID=(_=&*cdG9U5PP6RelkmkM`M_Qfe~u&LLLkEm@yFb>nV}gb+2>fqr&0GoPOQx}C=#VR=$4t?(aK43K$fA0 z6$eLb=~lEY6-Qf_?4of%jr^5EUBqDMYdkII!IN5DpL&^&6G(@%quc!SVc;X+H$7}M z6qs{!WhO_#@1JP3rNVxdnvkb{UwA*6b!s1QybdK#eZIb%HJKy|eF1505+d4|^7?3- z0(fIcune(13l1r+sy5ae4PI1JY56{5&NqEBIb0!fSgOea@5B(_$~9X}WtCUm zoK}q$KZ}QEH&136PHi~9LJ~Yw=9TUhKBE}7aw_0JG3&Zzh;;qTYVQ`;PNL*N6v(^i zF!TyeJrRiat4oHR;fy%5pOjroEe8Xv?TR9)$@Qs2mRv<}fYaSI*xmn1I-Sf?p_Mm~ ztMNkn$1?nTbHp{)!2AzAuRE4nmg;ZQ+tYA=U4K!r<2c2#o?KJ5KDqTt$qRF}3&oz* z#^4FZxz5}1TBhB|yUScz+L%6M4oV5|f0e>kZ^EKWf<8F^@w2_hG)dPNy;+qsoF8sz z=w^Pr)=cI;l5_}tm^qx}vK$RRz;i0#a{~y+)2t`9u6B)v$=*#7l{vcfXP4EN6?@)y zny>$!DE_HsvYd_$2GmBw15tqRI3u~(dyotSpfFgWlMUk|^a;iMCIWl+M_f+hC#EQj zvG>Wh;~&Cf=^eeEg{)A6hNY#F`Rrcl3J}u%K)q!)MKl`aHy;#j)jRFY)@~g$aE}&s zpX`HPtZ7B#xa-273AYIq8-P6MD1ElQoBVYMuBQ;ho?l1R-F;c7BD>c|RD9as zj{MDg1-qeaE;?r@3#63Shutog!L3Z~?uZnN-1!J`1MKfpvq;~P4mvIwT+uSQ^iBw9Mwb9K>0%_uwy|Xl7_P?}LUO zMOaz=`n@HEH~v%8Zdh~EddkP_YmG%c=r`1$t|mQqAnd`SpDygtuz2cu=Qvri)az?F zaoW6^1$^a0G=FQ2zv4fwJ&`;voWD1L4maw@>J^EQkzFr5E%U?=G=enrU&|)h^6#yJ zpM@HNSFQa^lBl%fub!0Aq^;C$8pdrB@dRY8P8wuR`H{^3Y)5~?nx zSd!x(5m3ta>10!87^=PON%uo?xkUHg>cPI?_Gc?$xG1e+xAs$GkyTUmLnNab!qipG z=l9NmibEp7RlvJlrV`p83il;-#OR_KVCQmrtWmrl1q0OAgnA;hop3I0>Xk_s)t;C4 zRU&dbTjrj@2-=OkKi%SV_h)n7-(RTm?}zg)F2vI`o*DkKZwU)YSW#@qb}s+2@C{#B z#`^otSSCg+o(cPQ-bMy2f=sGFriwV1AG8_ zn9~ixsy2n_h1pbV_{Pfjx+RZ-sg_lgce{;;I@hC5&%>Tm zaJsC@6yC}UBhSHtjN}W)hJso<-e3kyq_??i6VihW#%m&6s8wtWHeyNZIs-a8BgsEm zpMw&PGtCAk0#DyuH$)}F4M`U=(8@6|9=k7wMh%N6YT+8z=RL3>2{bkm3BS?k!KV`e z7;>@2nad)x$4F;ZY2q5F$-+=EsLXsH!KEY$c-IY^QQ-A!Edk}Dg^M4q#TwYM8&HJ= zRQ8J=z_84qfTh7zvuz*`;0-jO>7bMz(* zUQUa)&Z}=8sb~hE*p3I#2m{Z1eU=P1TuT?twtn{sa8%DOC!I$-OS=@cEY}oIc=a|D zjv|j~WorPy8HVtS;2kYKTT7b_+)gbU%CKH?39#IUnW8N}9if8)KYu>7EQ0Y9H!^iTeqDj9WCIvfgKdAMMAv?yG2fC}0| zWc-43P`V#xB$!qZKbJU|-D@ynn6%)+um}FU84{14p$^rXfzyiFr!|zz8f|Y9RZWw? z;>X}+7IteVW|2vv2(1kFi-;+-kISX^5L#jj3a{s80~<{Q3fQky8leH6C@s_XuBcNf zT%SpqfwV12N?0#}6W}5V84H>?3OIT++8>`JWY~g)k%q$jsxf@GM?~zRKep#262_41 z7<_0aWoug(K>ET(sl%SZG$TWTV*yl>3`XIl#>sO|c&9LoN@=y7bN>Rj5l5eX;cl{P z;xqMU4sxaC@66-jc)P8RXJG$q-(Q`z@55Xi{uM4S^eQ3Ck zybLad$yNn1mQs^4%;KA4GLf>ad60|-Huj>r-#@Yz*J^K}f@5)LsG2$UL6g|9$PG*-l8-^1zxMe@R&KYA|GcQU zoRok3hacZ&k_Yk4fwfHA1NunPDM_^mtSu5UNnghnz7K#7F4w-gP?+-AuWjT5O^pcr zdHrqk;HUEh6GO&(zsMkqBtiJ;EAmFUIVt5Yp%#zz0YZ}F0&AXc0?2#~2!`-Anr8^F zL*Ac}A~u7E<+MUM7T>A3GiYJy)6iF>e-8DM4KgS2#y||9l|$iRgw0NDf8?MOCvG13 zQ2GVci%noYBuX_;1H%@YQ}P%M_Z#B{YuNN)^uNvI`fStinkHxE!&x~IiJmH`8MWs0!6T4^lxIY(zy^k>EqH?R8DZf~Ld)7*bEJ4FA zLt;R(CsYYT{ghN?Fk6e;1H)e{+%S@;R_tvdEmKjRm8a2*zd96Fvt?diqR~w-GVPzR zpp;OmkrR4mM_^z+w2H!g#zEj#dklgT@z4<@3;SIQz2~WYBGaO{j62hbF7E6YO~c*c z)4X{D4kIPepPEO%zynEwq?*?)!z72hp;Ucj=IYPoX6>9OobPWCesYCCv#g+uW_qJM zO{tojMg$=cotEjQsnPbuSJ|k>& z56@xX1)0&RQ}?jNbBdGqn=_sh;dZ1mSOIz9YsOLap^r+XdU_~gjW5rGtta={tu;@l zB)>fNBfU*uI?+3?x)tsT&`vh4T5Ab$$0G5WpEGAY@@dB^nk0A3sb6}f3FjJ;Ba&X>@X6?<$LuTSc&8&Tk+X(=`g*I8&@&Zh{;pnd zS?P+6#^za(06~M|=GhD>*V69KIfpKxN`=j;&iOSeg6WM^v5lV^$vn|jge`m?W!RG7x0O!er(BkxyO`PVaxBA0(l)}5M3 zo%H#4k&@MqqOGCP)R7o3cD)w@!L+u5CDI~$w-4l9#PGz(pTSegydPYZspX&Ocm6PFrN!Z}4?H_wx0 zL+nGR==50h?~PG9>wE{lr;*B{S4BsA_AhIDvT5F{imI2h!o1A9$ z1!EtE-6V3wdT1gHzyB3vp*rdpem?8is;S~^ousf8{XuJeSD9OYe&CgLG})f%-t{Ch zV(E+%Io-XPp@8VA1f8IShvx}6$NkO`)Fe1t>KW`vkaq(wbn*b@!G3ak(#sO`!jF1r ztK}R&bq6m9oY!5u&-@-r%kx;N7D{8)X%2RM-a5di|84tVmBj-&z`p{zz7W@-x{^?n zL&(4gKRwfR$$-=fb6<$ zE9<~W&Vc5+#ncqysPsLqDouiOmXnxnv8m5Q^9fjLMAe#ViH?8FR7o_d!(X}YCHZ`* z!^4qfid~&r2!>Y3kxZG>JMrN~;`2oZY9s}W*c$wJa&~!(*c~dAm8Uhkp1DV@O0qy0 z!0U1S*Ms}77bPI{YhQ=93II?HDZ~Z}5ED>p0w#$8fQcRefZ|o*pY}?ndu`bXI6zL4 zf7LGhPyhdw_gO=LI6xxE4;&yn%$V0-Q1cJC^Z5^m74<=cpx^=-VQBpSN|kV5rSgG) zLFzxiKKL&$%5dfuNOeY|ugg_Y>zsY~@#IasuXpktv*O>WF{ig#mO9zrJy|AS}c{30NLD zAcPzUB!)y112IVccYEglkNzVZq>&gX3!9Augp|U+F1RR2UiJU8;(RsB_xeC2f6f2T z$Vo?r$dLf0VW&}mkaa{L1ElRA{r_E{0RRO5(yu^;9FYL2&?#SsX9qF>aDn$vjQ$TQ CA%H{x delta 57452 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 MSO7pQ(O=vB57r;KAOHXW diff --git a/UPP/Core/Configs/modbus_data.h b/UPP/Core/Configs/modbus_data.h index 985af13..34d385c 100644 --- a/UPP/Core/Configs/modbus_data.h +++ b/UPP/Core/Configs/modbus_data.h @@ -52,7 +52,7 @@ #define _MODBUS_DATA_H_ #include "upp_defs.h" -#include "upp_control.h" +#include "upp_params.h" #include "stdint.h" diff --git a/UPP/Core/Configs/upp_config.h b/UPP/Core/Configs/upp_config.h index 97f0a05..af6a373 100644 --- a/UPP/Core/Configs/upp_config.h +++ b/UPP/Core/Configs/upp_config.h @@ -97,6 +97,12 @@ * @brief Параметры устанавливаемые на этапе компиляции. Без перепрошивки их не поменять * @{ */ + +//#if defined(STM32F417xx) + +//#endif + + /* Периоды вызова всякого */ #define PM_ADC_PERIOD_US 10 ///< Период опроса АЦП в мкс #define PM_SLOW_PERIOD_CNT 50 ///< Период обновления медленных расчетов тиках @ref PM_ADC_PERIOD_US @@ -109,4 +115,7 @@ #define PWM_TIM3_FREQ_MHZ 90 ///< Частота тиков таймера ШИМ (5-6 каналы) #define ANGLE_TIM2_FREQ_MHZ 90 ///< Частота тиков таймера отсчета угла открытия тиристоров +/** //UPP_COMPILED_PARAMS + * @} + */ #endif //_UPP_CONFIG_H_ diff --git a/UPP/Core/Configs/upp_defs.h b/UPP/Core/Configs/upp_defs.h index cd82f8c..dad89f5 100644 --- a/UPP/Core/Configs/upp_defs.h +++ b/UPP/Core/Configs/upp_defs.h @@ -151,6 +151,9 @@ typedef struct { #define PM_SLOW_PERIOD_US (PM_ADC_PERIOD_US*PM_SLOW_PERIOD_CNT) #define ANGLE_PERIOD_MS(_freq_) (((float)1/(_freq_*2))*1000) +#define PARAM_INTERNAL MB_INTERNAL.param +#define PARAM_PUI MB_DATA.HoldRegs.pui_params + /** * @brief Состояния полуволны */ diff --git a/UPP/Core/PowerMonitor/power_monitor.c b/UPP/Core/PowerMonitor/power_monitor.c index 5f11c17..489d7a5 100644 --- a/UPP/Core/PowerMonitor/power_monitor.c +++ b/UPP/Core/PowerMonitor/power_monitor.c @@ -32,32 +32,32 @@ HAL_StatusTypeDef PowerMonitor_Init(PowerMonitor_t *hpm) /* Инициализация каналов АЦП */ if(ADC_ConfigChannel(&hpm->adc, ADC_CHANNEL_UBA, - MB_INTERNAL.param.adc.ADC_Zero[ADC_CHANNEL_UBA], - to_float(MB_INTERNAL.param.adc.ADC_Max[ADC_CHANNEL_UBA], 10), + PARAM_INTERNAL.adc.ADC_Zero[ADC_CHANNEL_UBA], + to_float(PARAM_INTERNAL.adc.ADC_Max[ADC_CHANNEL_UBA], 10), 4095) != HAL_OK) return HAL_ERROR; if(ADC_ConfigChannel(&hpm->adc, ADC_CHANNEL_UAC, - MB_INTERNAL.param.adc.ADC_Zero[ADC_CHANNEL_UAC], - to_float(MB_INTERNAL.param.adc.ADC_Max[ADC_CHANNEL_UAC], 10), + PARAM_INTERNAL.adc.ADC_Zero[ADC_CHANNEL_UAC], + to_float(PARAM_INTERNAL.adc.ADC_Max[ADC_CHANNEL_UAC], 10), 4095) != HAL_OK) return HAL_ERROR; if(ADC_ConfigChannel(&hpm->adc, ADC_CHANNEL_IC, - MB_INTERNAL.param.adc.ADC_Zero[ADC_CHANNEL_IC], - to_float(MB_INTERNAL.param.adc.ADC_Max[ADC_CHANNEL_IC], 10), + PARAM_INTERNAL.adc.ADC_Zero[ADC_CHANNEL_IC], + to_float(PARAM_INTERNAL.adc.ADC_Max[ADC_CHANNEL_IC], 10), 4095) != HAL_OK) return HAL_ERROR; if(ADC_ConfigChannel(&hpm->adc, ADC_CHANNEL_IA, - MB_INTERNAL.param.adc.ADC_Zero[ADC_CHANNEL_IA], - to_float(MB_INTERNAL.param.adc.ADC_Max[ADC_CHANNEL_IA], 10), + PARAM_INTERNAL.adc.ADC_Zero[ADC_CHANNEL_IA], + to_float(PARAM_INTERNAL.adc.ADC_Max[ADC_CHANNEL_IA], 10), 4095) != HAL_OK) return HAL_ERROR; /* Инициализация алгоритма перехода через ноль */ - if(ZC_Init(&hpm->zc, 3, to_float(MB_INTERNAL.param.zc.Hysteresis, 100), MB_INTERNAL.param.zc.DebouneCouner) != HAL_OK) + if(ZC_Init(&hpm->zc, 3, to_float(PARAM_INTERNAL.zc.Hysteresis, 100), PARAM_INTERNAL.zc.DebouneCouner) != HAL_OK) return HAL_ERROR; /* Инициализация каналов алгоритма перехода через ноль */ @@ -72,7 +72,7 @@ HAL_StatusTypeDef PowerMonitor_Init(PowerMonitor_t *hpm) /* Инициализация экпоненциального фильтра медленного алга */ for(int i = 0; i < EXP_ALL; i++) { - if(FilterExp_Init(&hpm->exp[i], to_float(MB_INTERNAL.param.pm.mean_alpha,65535))) + if(FilterExp_Init(&hpm->exp[i], to_float(PARAM_INTERNAL.pm.mean_alpha,65535))) return HAL_ERROR; Filter_Start(&hpm->exp[i]); } @@ -195,8 +195,8 @@ void PowerMonitor_FastCalc(PowerMonitor_t *hpm) /* Преобразуем в относительные единицы (о.е.) */ for(int i = 0; i < 3; i++) { - meas->fast.U[i] = 10*meas->real.U[i]/MB_INTERNAL.param.nominal.U; - meas->fast.I[i] = 10*meas->real.I[i]/MB_INTERNAL.param.nominal.I; + meas->fast.U[i] = 10*meas->real.U[i]/PARAM_INTERNAL.nominal.U; + meas->fast.I[i] = 10*meas->real.I[i]/PARAM_INTERNAL.nominal.I; } /* Ищем переход через ноль */ @@ -250,8 +250,8 @@ int PowerMonitor_Protect(PowerMonitor_t *hpm, uint8_t Running) return 1; PowerMonitor_Measured_t *measure = &hpm->measured; - UPP_PUI_Params_t *protect = &MB_DATA.HoldRegs.pui_params; - UPP_ParamsNominal_t *nominal = &MB_INTERNAL.param.nominal; + UPP_PUI_Params_t *protect = &PARAM_PUI; + UPP_ParamsNominal_t *nominal = &PARAM_INTERNAL.nominal; /*=============== ЗАЩИТЫ ПО НАПРЯЖЕНИЮ ==================*/ hpm->f.isU = Protect_Voltages(measure, protect, nominal); diff --git a/UPP/Core/PowerMonitor/power_monitor.h b/UPP/Core/PowerMonitor/power_monitor.h index 2b9ef4a..c0e97a9 100644 --- a/UPP/Core/PowerMonitor/power_monitor.h +++ b/UPP/Core/PowerMonitor/power_monitor.h @@ -92,11 +92,13 @@ typedef struct }PowerMonitor_t; extern PowerMonitor_t pm; +// ====== ИНИЦИАЛИЗАЦИЯ ========== /* Инициализация мониторинга сети */ HAL_StatusTypeDef PowerMonitor_Init(PowerMonitor_t *hpm); /* Запустить мониторинг сети */ HAL_StatusTypeDef PowerMonitor_Start(PowerMonitor_t *hpm); +// ====== РАСЧЕТЫ ========== /* Медленные расчеты АЦП */ void PowerMonitor_SlowCalc(PowerMonitor_t *hpm); /* Считывание АЦП и быстрые расчеты */ diff --git a/UPP/Core/PowerMonitor/power_protect.c b/UPP/Core/PowerMonitor/power_protect.c index b67dae8..2bf7206 100644 --- a/UPP/Core/PowerMonitor/power_protect.c +++ b/UPP/Core/PowerMonitor/power_protect.c @@ -133,12 +133,12 @@ int Protect_Currents(PowerMonitor_Measured_t *measure, UPP_PUI_Params_t *protect void Protect_Misc(PowerMonitor_Measured_t *measure, UPP_PUI_Params_t *protect, UPP_ParamsNominal_t *nominal) { /* Переводим внутренние уставки в удобный вид */ - float lFnom = to_float(MB_INTERNAL.param.nominal.F, 100); - float lFmin = lFnom - lFnom*to_float(MB_INTERNAL.param.nominal.F_deviation_minus, 100); - float lFmax = lFnom + lFnom*to_float(MB_INTERNAL.param.nominal.F_deviation_plus, 100); + float lFnom = to_float(PARAM_INTERNAL.nominal.F, 100); + float lFmin = lFnom - lFnom*to_float(PARAM_INTERNAL.nominal.F_deviation_minus, 100); + float lFmax = lFnom + lFnom*to_float(PARAM_INTERNAL.nominal.F_deviation_plus, 100); - float lTwarn = to_float(MB_INTERNAL.param.setpoints.TemperatureWarn, 100); - float lTerr = to_float(MB_INTERNAL.param.setpoints.TemperatureWarn, 100); + float lTwarn = to_float(PARAM_INTERNAL.setpoints.TemperatureWarn, 100); + float lTerr = to_float(PARAM_INTERNAL.setpoints.TemperatureWarn, 100); /*=============== ЗАЩИТЫ ПО ЧАСТОТЕ ==================*/ diff --git a/UPP/Core/PowerMonitor/zero_cross.h b/UPP/Core/PowerMonitor/zero_cross.h index cb75130..ae0ab6f 100644 --- a/UPP/Core/PowerMonitor/zero_cross.h +++ b/UPP/Core/PowerMonitor/zero_cross.h @@ -124,32 +124,36 @@ typedef struct { uint32_t LastTick; ///< Послднее время вызова } ZeroCross_Handle_t; +// ====== ИНИЦИАЛИЗАЦИЯ ========== /* Инициализация детектора нуля с индивидуальными настройками */ HAL_StatusTypeDef ZC_Init(ZeroCross_Handle_t *zc, uint8_t num_channels, float hysteresis, uint16_t debounce_samples); - /* Настройка канала детектора */ HAL_StatusTypeDef ZC_ConfigChannel(ZeroCross_Handle_t *zc, uint8_t channel, ZC_EdgeType_t edgeType); +// ====== УПРАВЛЕНИЕ ========== +/* Включение/выключение мониторинга */ +void ZC_EnableMonitoring(ZeroCross_Handle_t *zc, uint8_t enable); +/* Сброс статистики канала */ +void ZC_Reset(ZeroCross_Handle_t *zc, uint8_t channel); + + +// ====== РАСЧЕТЫ ========== /* Обработка значения отдельного канала */ void ZC_ProcessChannel(ZeroCross_Handle_t *zc, uint8_t channel, float value, uint32_t timestamp); - /* Пакетная обработка всех каналов */ void ZC_ProcessAllChannels(ZeroCross_Handle_t *zc, float *values, uint32_t timestamp); +// ====== API ========== /* Полученить флаг - переход произошел. */ int ZC_isOccurred(ZeroCross_Handle_t *zc, uint8_t channel); /* Получение частоты сигнала */ float ZC_GetFrequency(ZeroCross_Handle_t *zc, uint8_t channel); /* Получение полуволны (после последнего zero-cross) */ UPP_HalfWave_t ZC_GetHalfWave(ZeroCross_Handle_t *zc, uint8_t channel); -/* Включение/выключение мониторинга */ -void ZC_EnableMonitoring(ZeroCross_Handle_t *zc, uint8_t enable); -/* Сброс статистики канала */ -void ZC_Reset(ZeroCross_Handle_t *zc, uint8_t channel); #endif /* _ZERO_CROSS_H_ */ diff --git a/UPP/Core/UPP/angle_control.c b/UPP/Core/UPP/angle_control.c index 1fd8a2e..ef16bb1 100644 --- a/UPP/Core/UPP/angle_control.c +++ b/UPP/Core/UPP/angle_control.c @@ -22,9 +22,9 @@ HAL_StatusTypeDef Angle_Init(Angle_Handle_t *hangle) hangle->htim = &angletim; // Инициализация ПИД - float kp = to_float(MB_INTERNAL.param.angle.PID_Kp, 10000); - float ki = to_float(MB_INTERNAL.param.angle.PID_Ki, 10000); - float kd = to_float(MB_INTERNAL.param.angle.PID_Kd, 10000); + float kp = to_float(PARAM_INTERNAL.angle.PID_Kp, 10000); + float ki = to_float(PARAM_INTERNAL.angle.PID_Ki, 10000); + float kd = to_float(PARAM_INTERNAL.angle.PID_Kd, 10000); Angle_PID_Init(hangle, kp, ki, kd); // Инициализация каналов @@ -39,8 +39,8 @@ HAL_StatusTypeDef Angle_Init(Angle_Handle_t *hangle) // Инициализация углов - float angle_max = to_float(MB_INTERNAL.param.angle.Angle_Max, 65535); - float angle_min = to_float(MB_INTERNAL.param.angle.Angle_Min, 65535); + float angle_max = to_float(PARAM_INTERNAL.angle.Angle_Max, 65535); + float angle_min = to_float(PARAM_INTERNAL.angle.Angle_Min, 65535); hangle->f.Initialized = 1; @@ -48,50 +48,6 @@ HAL_StatusTypeDef Angle_Init(Angle_Handle_t *hangle) } -/** - * @brief Управление углом через ПИД регулятор. - * @param hangle Указатель на таймер - * @param setpoint Уставка куда регулировать - * @param measurement Измеренные регулируемые величины - */ -void Angle_PID(Angle_Handle_t *hangle, float setpoint, float measurement) -{ - if(assert_upp(hangle)) - return; - - - /* Ошибка регулирования = уставка - измеренное */ - float err = setpoint - measurement; - - /* ПИД регулирование */ - float reverse_angle = arm_pid_f32(&hangle->pid, err); // 0 - открыть максимально поздно, 1 - открыть макситмально рано - - /* Ограничиваем диапазон и сохраняем в alpha */ - float angle = hangle->Config.AngleMax - reverse_angle; - if (angle > hangle->Config.AngleMax) angle = hangle->Config.AngleMax; - if(angle < hangle->Config.AngleMin) angle = hangle->Config.AngleMin; - - Angle_SetAngle(hangle, angle); -} - -/** - * @brief Сброс ПИД регулятора. - * @param hangle Указатель на таймер - */ -void Angle_PID_Reset(Angle_Handle_t *hangle) -{ - if(assert_upp(hangle)) - return; - - /* Вычисляем выход PID */ - arm_pid_reset_f32(&hangle->pid); - - Angle_SetAngle(hangle, hangle->Config.AngleLimit); - Angle_Reset(hangle, UPP_PHASE_A); - Angle_Reset(hangle, UPP_PHASE_B); - Angle_Reset(hangle, UPP_PHASE_C); -} - /** * @brief Инициализация ПИД регулятора. * @param hangle Указатель на таймер @@ -109,118 +65,89 @@ void Angle_PID_Init(Angle_Handle_t *hangle, float kp, float ki, float kd) } /** - * @brief Инициализация углов открытия. + * @brief Управление углом через ПИД регулятор. * @param hangle Указатель на таймер - * @param AngleLimit Лимит AngleMax, рассчитывается от параметров ШИМ - * @param AngleMin Минимально возможный угол открытия - * @param AngleMax Максимально возможный угол открытия - * @return HAL Status. + * @param setpoint Уставка куда регулировать + * @param measurement Измеренные регулируемые величины */ -HAL_StatusTypeDef Angle_SetRange(Angle_Handle_t *hangle, float AngleMin, float AngleMax) +void Angle_PID(Angle_Handle_t *hangle, float setpoint, float measurement) { if(assert_upp(hangle)) - return HAL_ERROR; - if(hangle->f.Running) - return HAL_BUSY; - if(AngleMax < 0 || AngleMax > 1) - return HAL_ERROR; - if(AngleMin < 0 || AngleMin > 1) - return HAL_ERROR; + return; + + /* Ошибка регулирования = уставка - измеренное */ + float err = setpoint - measurement; - if(AngleMax > hangle->Config.AngleLimit) - AngleMax = hangle->Config.AngleLimit; - if(AngleMin > hangle->Config.AngleLimit) - AngleMin = hangle->Config.AngleLimit; - - if(AngleMin >= AngleMax) - return HAL_ERROR; - - hangle->Config.AngleMax = AngleMax; - hangle->Config.AngleMin = AngleMin; - - return HAL_OK; + /* ПИД регулирование */ + float open_control = arm_pid_f32(&hangle->pid, err); // 0 - открыть максимально поздно, 1 - открыть макситмально рано + + /* Ограничиваем диапазон */ + if (open_control > 1) open_control = 1; + if(open_control < 0) open_control = 0; + + /* Выставляем заданный уровень открытия */ + Angle_SetAngle(hangle, open_control); } - /** - * @brief Выставление текущего угла открытия тиристоров. + * @brief Сброс ПИД регулятора. * @param hangle Указатель на таймер - * @param AngleLimit Лимит AngleMax, рассчитывается от параметров ШИМ - * @param AngleMin Минимально возможный угол открытия - * @param AngleMax Максимально возможный угол открытия - * @return HAL Status. */ -HAL_StatusTypeDef Angle_SetAngle(Angle_Handle_t *hangle, float Angle) +void Angle_PID_Reset(Angle_Handle_t *hangle) { if(assert_upp(hangle)) - return HAL_ERROR; + return; - if(Angle > hangle->Config.AngleLimit) - Angle = hangle->Config.AngleLimit; - - hangle->alpha = Angle; - - return HAL_OK; + /* Вычисляем выход PID */ + arm_pid_reset_f32(&hangle->pid); + + Angle_SetAngle(hangle, 0); + Angle_Reset(hangle, UPP_PHASE_A); + Angle_Reset(hangle, UPP_PHASE_B); + Angle_Reset(hangle, UPP_PHASE_C); } + /** - * @brief Инициализация предельного угла открытия. + * @brief Выставление степени открытия тиристоров. * @param hangle Указатель на таймер - * @param AngleLimit Лимит AngleMax, рассчитывается от параметров ШИМ - * @param AngleMin Минимально возможный угол открытия - * @param AngleMax Максимально возможный угол открытия + * @param OpenLevel Насколько открыть тиристор: + - 0 - полностбю закрыт, + - 1 - полностью открыт * @return HAL Status. */ -HAL_StatusTypeDef Angle_SetLimit(Angle_Handle_t *hangle, float AngleLimit) +HAL_StatusTypeDef Angle_SetAngle(Angle_Handle_t *hangle, float OpenLevel) { if(assert_upp(hangle)) return HAL_ERROR; - if(hangle->f.Running) - return HAL_BUSY; + + /* Приводим уровень открытия к косинусу [-1:1]*/ + float OpenLevelForCos = (OpenLevel*2)-1; + + float alpha_rad = acosf(OpenLevelForCos); // угол в радианах + float alpha = alpha_rad/PI; // время открытие в процентах от периода - когда открыть + + if(alpha > hangle->Config.AngleMax) + alpha = hangle->Config.AngleMax; + if(alpha < hangle->Config.AngleMin) + alpha = hangle->Config.AngleMin; +// if(alpha > hangle->Config.PeriodLimit) +// { +// alpha = hangle->Config.PeriodLimit; +// } + +// float alpha_degree = alpha*180;// угол в градусах +// hangle->alpha_degree = alpha_degree; + + hangle->alpha = alpha; - if(AngleLimit < 0 || AngleLimit > 1) - return HAL_ERROR; - hangle->Config.AngleLimit = AngleLimit; return HAL_OK; } -/** - * @brief Хендл таймера для рассчета угла открытия. - * @param hangle Указатель на таймер - * @return HAL Status. - */ -UPP_Phase_t Angle_Handle(Angle_Handle_t *hangle) -{ - if(assert_upp(hangle)) - return UPP_PHASE_UNKNOWN; - - - switch(hangle->htim->Channel) - { - case HAL_TIM_ACTIVE_CHANNEL_1: - return UPP_PHASE_A; - break; - - case HAL_TIM_ACTIVE_CHANNEL_2: - return UPP_PHASE_B; - break; - - case HAL_TIM_ACTIVE_CHANNEL_3: - return UPP_PHASE_C; - break; - - default: - return UPP_PHASE_UNKNOWN; - break; - } - - - return UPP_PHASE_UNKNOWN; -} /** - * @brief Установка угла открытия в таймер. + * @brief Запуск отсчета угла открытия. * @param hangle Указатель на таймер * @param Phase Для какой фазы надо установить угол открытия * @return HAL Status. @@ -235,6 +162,7 @@ HAL_StatusTypeDef Angle_Start(Angle_Handle_t *hangle, UPP_Phase_t Phase, float P { return HAL_ERROR; } + // Дополнительно проверяем на соответствие альфа диапазону if(hangle->alpha > hangle->Config.AngleMax) { hangle->alpha = hangle->Config.AngleMax; @@ -244,25 +172,47 @@ HAL_StatusTypeDef Angle_Start(Angle_Handle_t *hangle, UPP_Phase_t Phase, float P hangle->alpha = hangle->Config.AngleMin; } + // сколько тиков надо выждать для угла uint32_t timer_ticks = TIM_MillisToTick(PeriodMs*hangle->alpha, ANGLE_TIM2_FREQ_MHZ); + // сколько тиков будет в таймере когда угол отсчитается (пойдет в CCRx регистр) uint32_t ccr_ticks = __HAL_TIM_GET_COUNTER(hangle->htim) + timer_ticks; + // Выставялем switch(Phase) { case UPP_PHASE_A: __HAL_TIM_SET_COMPARE(hangle->htim, ANGLE_CHANNEL_1, ccr_ticks); + // Если слишком маленький timer_tick и счетчик уже перевалил за ccr, но не сгенерил прервыание: + if (__HAL_TIM_GET_COMPARE(hangle->htim, ANGLE_CHANNEL_1) <= __HAL_TIM_GET_COUNTER(hangle->htim)) + { + // включаем прерывание вручную + HAL_TIM_GenerateEvent(hangle->htim, TIM_EVENTSOURCE_CC1); + } + __HAL_TIM_ENABLE_IT(hangle->htim, TIM_IT_CC1); hangle->f.Running++; break; case UPP_PHASE_B: __HAL_TIM_SET_COMPARE(hangle->htim, ANGLE_CHANNEL_2, ccr_ticks); + // Если слишком маленький timer_tick и счетчик уже перевалил за ccr, но не сгенерил прервыание: + if (__HAL_TIM_GET_COMPARE(hangle->htim, ANGLE_CHANNEL_2) <= __HAL_TIM_GET_COUNTER(hangle->htim)) + { + // включаем прерывание вручную + HAL_TIM_GenerateEvent(hangle->htim, TIM_EVENTSOURCE_CC2); + } __HAL_TIM_ENABLE_IT(hangle->htim, TIM_IT_CC2); hangle->f.Running++; break; case UPP_PHASE_C: __HAL_TIM_SET_COMPARE(hangle->htim, ANGLE_CHANNEL_3, ccr_ticks); + // Если слишком маленький timer_tick и счетчик уже перевалил за ccr, но не сгенерил прервыание: + if (__HAL_TIM_GET_COMPARE(hangle->htim, ANGLE_CHANNEL_3) <= __HAL_TIM_GET_COUNTER(hangle->htim)) + { + // включаем прерывание вручную + HAL_TIM_GenerateEvent(hangle->htim, TIM_EVENTSOURCE_CC3); + } __HAL_TIM_ENABLE_IT(hangle->htim, TIM_IT_CC3); hangle->f.Running++; break; @@ -319,4 +269,99 @@ HAL_StatusTypeDef Angle_Reset(Angle_Handle_t *hangle, UPP_Phase_t Phase) break; } return HAL_OK; -} \ No newline at end of file +} + + + + +/** + * @brief Инициализация предельного угла открытия. + * @param hangle Указатель на таймер + * @param PeriodLimit Лимит AngleMax, рассчитывается от параметров ШИМ + * @param AngleMin Минимально возможный угол открытия + * @param AngleMax Максимально возможный угол открытия + * @return HAL Status. + */ +HAL_StatusTypeDef Angle_SetLimit(Angle_Handle_t *hangle, float PeriodLimit) +{ + if(assert_upp(hangle)) + return HAL_ERROR; + if(hangle->f.Running) + return HAL_BUSY; + + if(PeriodLimit < 0 || PeriodLimit > 1) + return HAL_ERROR; + + hangle->Config.PeriodLimit = PeriodLimit; + + return HAL_OK; +} + + +/** + * @brief Инициализация углов открытия. + * @param hangle Указатель на таймер + * @param PeriodLimit Лимит AngleMax, рассчитывается от параметров ШИМ + * @param AngleMin Минимально возможный угол открытия + * @param AngleMax Максимально возможный угол открытия + * @return HAL Status. + */ +HAL_StatusTypeDef Angle_SetRange(Angle_Handle_t *hangle, float AngleMin, float AngleMax) +{ + if(assert_upp(hangle)) + return HAL_ERROR; + if(hangle->f.Running) + return HAL_BUSY; + if(AngleMax < 0 || AngleMax > 1) + return HAL_ERROR; + if(AngleMin < 0 || AngleMin > 1) + return HAL_ERROR; + + if(AngleMax > hangle->Config.PeriodLimit) + AngleMax = hangle->Config.PeriodLimit; + if(AngleMin > hangle->Config.PeriodLimit) + AngleMin = hangle->Config.PeriodLimit; + + if(AngleMin >= AngleMax) + return HAL_ERROR; + + hangle->Config.AngleMax = AngleMax; + hangle->Config.AngleMin = AngleMin; + + return HAL_OK; +} + + + +/** + * @brief Хендл таймера для рассчета угла открытия. + * @param hangle Указатель на таймер + * @return HAL Status. + * @details Просто возвращает фазу, у которой закончился отсчет угла + */ +UPP_Phase_t Angle_Handle(Angle_Handle_t *hangle) +{ + if(assert_upp(hangle)) + return UPP_PHASE_UNKNOWN; + + + switch(hangle->htim->Channel) + { + case HAL_TIM_ACTIVE_CHANNEL_1: + return UPP_PHASE_A; + break; + + case HAL_TIM_ACTIVE_CHANNEL_2: + return UPP_PHASE_B; + break; + + case HAL_TIM_ACTIVE_CHANNEL_3: + return UPP_PHASE_C; + break; + + default: + return UPP_PHASE_UNKNOWN; + break; + } + return UPP_PHASE_UNKNOWN; +} diff --git a/UPP/Core/UPP/angle_control.h b/UPP/Core/UPP/angle_control.h index 527394a..89e3902 100644 --- a/UPP/Core/UPP/angle_control.h +++ b/UPP/Core/UPP/angle_control.h @@ -13,9 +13,9 @@ */ typedef struct { - float AngleLimit; ///< Лимит AngleMax, рассчитывается от параметров ШИМ - float AngleMin; ///< Минимально возможный угол открытия - float AngleMax; ///< Максимально возможный угол открытия + float PeriodLimit; ///< Лимит периода, выше которого нельзя выставить рассчитывается от параметров ШИМ + float AngleMin; ///< Минимально возможный угол открытия + float AngleMax; ///< Максимально возможный угол открытия }Angle_Config_t; /** @@ -23,10 +23,12 @@ typedef struct */ typedef struct { - TIM_HandleTypeDef *htim; ///< Указатель на таймер для расчета угла - Angle_Config_t Config; ///< Конфигурации алгоритма расчета угла открытия тиристоров + TIM_HandleTypeDef *htim; ///< Указатель на таймер для расчета угла + Angle_Config_t Config; ///< Конфигурации алгоритма расчета угла открытия тиристоров + + //float alpha_degree; ///< текущий угол открытия в градусах [0..180] + float alpha; ///< текущий угол открытия в процентах от периода [0..1] - float alpha; ///< текущий угол открытия arm_pid_instance_f32 pid; ///< ПИД регулятор для управления углом struct { @@ -35,25 +37,32 @@ typedef struct } f; ///< Флаги }Angle_Handle_t; + +// ====== ИНИЦИАЛИЗАЦИЯ ========== /* Инициализация Таймера для рассчета угла открытия. */ HAL_StatusTypeDef Angle_Init(Angle_Handle_t *hangle); -/* Управление углом через ПИД регулятор */ -void Angle_PID(Angle_Handle_t *hangle, float setpoint, float measurement); -/* Сброс ПИД регулятора. */ -void Angle_PID_Reset(Angle_Handle_t *hangle); /* Инициализация ПИД регулятора. */ void Angle_PID_Init(Angle_Handle_t *hangle, float kp, float ki, float kd); + +// ====== УПРАВЛЕНИЕ ========== +/* Управление углом через ПИД регулятор */ +void Angle_PID(Angle_Handle_t *hangle, float setpoint, float measurement); /* Выставление текущего угла открытия тиристоров. */ HAL_StatusTypeDef Angle_SetAngle(Angle_Handle_t *hangle, float Angle); -/* Инициализация углов открытия. */ -HAL_StatusTypeDef Angle_SetRange(Angle_Handle_t *hangle, float AngleMin, float AngleMax); -/* Инициализация предельного угла открытия. */ -HAL_StatusTypeDef Angle_SetLimit(Angle_Handle_t *hangle, float AngleLimit); /* Установка угла открытия в таймер. */ HAL_StatusTypeDef Angle_Start(Angle_Handle_t *hangle, UPP_Phase_t Phase, float PeriodMs); + +// ====== СБРОС ========== /* Сброс угла открытия у таймера. */ HAL_StatusTypeDef Angle_Reset(Angle_Handle_t *hangle, UPP_Phase_t Phase); +/* Сброс ПИД регулятора. */ +void Angle_PID_Reset(Angle_Handle_t *hangle); +// ====== СЕРВИС ========== +/* Инициализация предельного угла открытия. */ +HAL_StatusTypeDef Angle_SetLimit(Angle_Handle_t *hangle, float PeriodLimit); +/* Инициализация углов открытия. */ +HAL_StatusTypeDef Angle_SetRange(Angle_Handle_t *hangle, float AngleMin, float AngleMax); /* Хендл таймера для рассчета угла открытия. */ UPP_Phase_t Angle_Handle(Angle_Handle_t *hangle); #endif /* _ANGLE_CONTROL_H_ */ diff --git a/UPP/Core/UPP/pwm_thyristors.c b/UPP/Core/UPP/pwm_thyristors.c index b978b5e..383645b 100644 --- a/UPP/Core/UPP/pwm_thyristors.c +++ b/UPP/Core/UPP/pwm_thyristors.c @@ -58,7 +58,7 @@ HAL_StatusTypeDef PWM_Init(PWM_Handle_t *hpwm) PWM_SetHalfWave(hpwm, UPP_PHASE_B, UPP_WAVE_UNKNOWED); PWM_SetHalfWave(hpwm, UPP_PHASE_C, UPP_WAVE_UNKNOWED); - PWM_SetConfig(hpwm, MB_INTERNAL.param.pwm.PhaseMask, MB_INTERNAL.param.pwm.Frequency, MB_INTERNAL.param.pwm.PulseNumber); + PWM_SetConfig(hpwm, PARAM_INTERNAL.pwm.PhaseMask, PARAM_INTERNAL.pwm.Frequency, PARAM_INTERNAL.pwm.PulseNumber); HAL_TIM_PWM_Start(&hpwm1, PWM_CHANNEL_1); HAL_TIM_PWM_Start(&hpwm1, PWM_CHANNEL_2); @@ -77,7 +77,7 @@ HAL_StatusTypeDef PWM_Init(PWM_Handle_t *hpwm) * @param hpwm Указатель на хендл ШИМ тиристоров * @param Phase На какой фазе надо запустить ШИМ * @return HAL Status. - * @details Переводит автомат канала ШИМ в состояние запуска ШИМ. + * @details Переводит автомат состояний канала ШИМ в состояние запуска ШИМ. */ HAL_StatusTypeDef PWM_Start(PWM_Handle_t *hpwm, UPP_Phase_t Phase) { @@ -184,14 +184,14 @@ HAL_StatusTypeDef PWM_Handle(PWM_Handle_t *hpwm) case PWM_THYR_TIM_START: // начать ШИМ (пачка импульсов) __PWM_SetOutputState(hPhase, PWM_ENABLE); - hPhase->PulseCnt = hpwm->Config.PulseNumber; + hPhase->PulseCnt = hpwm->Config.PulseNumber - 1; // 1 импульс уже прошел hPhase->State = PWM_THYR_TIM_ACTIVE; hpwm->f.Running++; break; case PWM_THYR_TIM_ACTIVE: // управление пачкой импульсов ШИМ hPhase->PulseCnt--; - if (hPhase->PulseCnt <= 0) + if (hPhase->PulseCnt <= 1) // если остался один импльс в след раз идем в PWM_THYR_TIM_DONE { hPhase->PulseCnt = 0; hPhase->State = PWM_THYR_TIM_DONE; diff --git a/UPP/Core/UPP/pwm_thyristors.h b/UPP/Core/UPP/pwm_thyristors.h index 8780a92..5e01dae 100644 --- a/UPP/Core/UPP/pwm_thyristors.h +++ b/UPP/Core/UPP/pwm_thyristors.h @@ -85,9 +85,12 @@ typedef struct { } f; } PWM_Handle_t; -/* ---- API ---- */ + +// ====== ИНИЦИАЛИЗАЦИЯ ========== /* Инициализация ШИМ тиристоров. */ HAL_StatusTypeDef PWM_Init(PWM_Handle_t *hpwm); + +// ====== УПРАВЛЕНИЕ ========== /* Запуск ШИМ. */ HAL_StatusTypeDef PWM_Start(PWM_Handle_t *hpwm, UPP_Phase_t Phase); /* Остановить ШИМ. */ @@ -97,6 +100,7 @@ HAL_StatusTypeDef PWM_SetConfig(PWM_Handle_t *hpwm, uint8_t PhaseMask, uint16_t /* Установка полуволны для слежения. */ HAL_StatusTypeDef PWM_SetHalfWave(PWM_Handle_t *hpwm, UPP_Phase_t Phase, UPP_HalfWave_t halfwave); +// ====== СЕРВИС ========== /* Хендл ШИМ тиристоров. */ HAL_StatusTypeDef PWM_Handle(PWM_Handle_t *hpwm); #endif /* _PWM_THYRISTORS_H */ diff --git a/UPP/Core/UPP/upp_errors.c b/UPP/Core/UPP/upp_errors.c index ad9b482..1ad798e 100644 --- a/UPP/Core/UPP/upp_errors.c +++ b/UPP/Core/UPP/upp_errors.c @@ -52,7 +52,7 @@ void UPP_Errors_Power(void) void UPP_Errors_Ranges(void) { /* Преобразуем уставки в нормальные тики */ - float ticksTiMax = to_float(MB_DATA.HoldRegs.pui_params.TiMax, 1)/PM_SLOW_PERIOD_US; + float ticksTiMax = to_float(PARAM_PUI.TiMax, 1)/PM_SLOW_PERIOD_US; /* Счетчики для отсчитывания задержки выставления ошибки */ static int IMaxCnt = 0; static int UMaxCnt = 0; diff --git a/UPP/Core/UPP/upp_main.c b/UPP/Core/UPP/upp_main.c index c039738..54158dc 100644 --- a/UPP/Core/UPP/upp_main.c +++ b/UPP/Core/UPP/upp_main.c @@ -21,7 +21,7 @@ int UPP_Init(void) BenchTime_Init(); // Подключение указателей upp.errors = &errors; - upp.PUI.params = &MB_DATA.HoldRegs.pui_params; + upp.PUI.params = &PARAM_PUI; upp.PUI.values = &MB_DATA.InRegs.pui; upp.call = &MB_INTERNAL.FuncCalls; @@ -40,7 +40,7 @@ int UPP_Init(void) */ int UPP_PreWhile(void) { - UPP_Control_InternalParams(); + UPP_Params_InternalControl(); Angle_SetRange(&upp.hangle, 0.0, 0.8); PowerMonitor_Start(&upp.pm); return 0; @@ -143,7 +143,7 @@ void UPP_Tick(void) if(upp.workmode == WM_Not_Init) return; UPP_Errors_Handle(); - UPP_Control_InternalParams(); + UPP_Params_InternalControl(); } diff --git a/UPP/Core/UPP/upp_main.h b/UPP/Core/UPP/upp_main.h index c5c45c8..d134455 100644 --- a/UPP/Core/UPP/upp_main.h +++ b/UPP/Core/UPP/upp_main.h @@ -15,7 +15,7 @@ #include "angle_control.h" // Управление углом открытия #include "upp_status.h" // статус упп -#include "upp_control.h" // управление упп +#include "upp_params.h" // управление упп typedef struct diff --git a/UPP/Core/UPP/upp_control.c b/UPP/Core/UPP/upp_params.c similarity index 67% rename from UPP/Core/UPP/upp_control.c rename to UPP/Core/UPP/upp_params.c index 67d727d..54cef43 100644 --- a/UPP/Core/UPP/upp_control.c +++ b/UPP/Core/UPP/upp_params.c @@ -1,6 +1,6 @@ /** ****************************************************************************** -* @file upp_control.c +* @file upp_params.c * @brief Модуль определябщий поведение УПП ****************************************************************************** * @details @@ -18,7 +18,7 @@ static void __AngleSetLimit(void); * @brief Контроль внутренних параметров УПП. * @return HAL Status. */ -void UPP_Control_InternalParams(void) +void UPP_Params_InternalControl(void) { if(upp.call->go) // при запущеном УПП ничего не меняем return; @@ -51,23 +51,23 @@ void UPP_Control_InternalParams(void) // Параметры регулятора Угла открытия - if(__CheckSimpleParamF(&angle_max, MB_INTERNAL.param.angle.Angle_Max, 65535)) + if(__CheckSimpleParamF(&angle_max, PARAM_INTERNAL.angle.Angle_Max, 65535)) { alpha_update = 1; } - if(__CheckSimpleParamF(&angle_min, MB_INTERNAL.param.angle.Angle_Min, 65535)) + if(__CheckSimpleParamF(&angle_min, PARAM_INTERNAL.angle.Angle_Min, 65535)) { alpha_update = 1; } - if(__CheckSimpleParamF(&angle_pid_kp, MB_INTERNAL.param.angle.PID_Kp, 10000)) + if(__CheckSimpleParamF(&angle_pid_kp, PARAM_INTERNAL.angle.PID_Kp, 10000)) { alpha_update = 1; } - if(__CheckSimpleParamF(&angle_pid_ki, MB_INTERNAL.param.angle.PID_Ki, 10000)) + if(__CheckSimpleParamF(&angle_pid_ki, PARAM_INTERNAL.angle.PID_Ki, 10000)) { alpha_update = 1; } - if(__CheckSimpleParamF(&angle_pid_kd, MB_INTERNAL.param.angle.PID_Kd, 10000)) + if(__CheckSimpleParamF(&angle_pid_kd, PARAM_INTERNAL.angle.PID_Kd, 10000)) { alpha_update = 1; } @@ -81,42 +81,42 @@ void UPP_Control_InternalParams(void) adc_channel_zero[i] = upp.pm.adc.Coefs[i].lZero; // Максимальное измеряемое напряжение - if(__CheckSimpleParamF(&adc_channel_max[i], MB_INTERNAL.param.adc.ADC_Max[i], 10)) + if(__CheckSimpleParamF(&adc_channel_max[i], PARAM_INTERNAL.adc.ADC_Max[i], 10)) { adc_channel_update[i] = 1; } // Значение АЦП при нулевом входе - if(__CheckSimpleParamU16(&adc_channel_zero[i], MB_INTERNAL.param.adc.ADC_Zero[i])) + if(__CheckSimpleParamU16(&adc_channel_zero[i], PARAM_INTERNAL.adc.ADC_Zero[i])) { adc_channel_update[i] = 1; } } // Параметры алгоритма перехода через ноль - if(__CheckSimpleParamF(&zc_hysteresis, MB_INTERNAL.param.zc.Hysteresis, 10000)) + if(__CheckSimpleParamF(&zc_hysteresis, PARAM_INTERNAL.zc.Hysteresis, 10000)) { zc_update = 1; } - if(__CheckSimpleParamU16(&zc_debounce, MB_INTERNAL.param.zc.DebouneCouner)) + if(__CheckSimpleParamU16(&zc_debounce, PARAM_INTERNAL.zc.DebouneCouner)) { zc_update = 1; } // Параметры ШИМ токов - if(__CheckSimpleParamU8(&pwm_phase_mask, MB_INTERNAL.param.pwm.PhaseMask, 1)) + if(__CheckSimpleParamU8(&pwm_phase_mask, PARAM_INTERNAL.pwm.PhaseMask, 1)) { pwm_update = 1; } - if(__CheckSimpleParamU16(&pwm_freq, MB_INTERNAL.param.pwm.Frequency)) + if(__CheckSimpleParamU16(&pwm_freq, PARAM_INTERNAL.pwm.Frequency)) { pwm_update = 1; } - if(__CheckSimpleParamU8(&pwm_pulse_num, MB_INTERNAL.param.pwm.PulseNumber, 1)) + if(__CheckSimpleParamU8(&pwm_pulse_num, PARAM_INTERNAL.pwm.PulseNumber, 1)) { pwm_update = 1; } // Параметры мониторинга - if(__CheckSimpleParamF(&pm_alpha, MB_INTERNAL.param.pm.mean_alpha, 65535)) + if(__CheckSimpleParamF(&pm_alpha, PARAM_INTERNAL.pm.mean_alpha, 65535)) { for(int i = 0; i < EXP_ALL; i++) { @@ -162,7 +162,7 @@ void UPP_Control_InternalParams(void) else errors.prvt.cnt.pwm_reinit_err++; } - if (upp.hangle.Config.AngleLimit == 0) + if ((upp.hangle.Config.PeriodLimit == 0) || (upp.hangle.Config.PeriodLimit >= 0.999)) { __AngleSetLimit(); } @@ -179,59 +179,60 @@ void UPP_SetDefault(int pui_default, int internal_default) { if(pui_default) { - MB_DATA.HoldRegs.pui_params.Iref = PUI_Iref_PERCENT_DEFAULT; - MB_DATA.HoldRegs.pui_params.Tnt = PUI_Tnt_MS_DEFAULT; - MB_DATA.HoldRegs.pui_params.Umin = PUI_Umin_PERCENT_DEFAULT; - MB_DATA.HoldRegs.pui_params.Umax = PUI_Umax_PERCENT_DEFAULT; - MB_DATA.HoldRegs.pui_params.Imax = PUI_Imax_PERCENT_DEFAULT; - MB_DATA.HoldRegs.pui_params.Imin = PUI_Imin_PERCENT_DEFAULT; - MB_DATA.HoldRegs.pui_params.TiMax = PUI_TiMax_US_DEFAULT; - MB_DATA.HoldRegs.pui_params.Tdelay = PUI_Tdelay_SECONDS_DEFAULT; - MB_DATA.HoldRegs.pui_params.Interlace = PUI_Interlace_EN_DEFAULT; + PARAM_PUI.Iref = PUI_Iref_PERCENT_DEFAULT; + PARAM_PUI.Tnt = PUI_Tnt_MS_DEFAULT; + PARAM_PUI.Umin = PUI_Umin_PERCENT_DEFAULT; + PARAM_PUI.Umax = PUI_Umax_PERCENT_DEFAULT; + PARAM_PUI.Imax = PUI_Imax_PERCENT_DEFAULT; + PARAM_PUI.Imin = PUI_Imin_PERCENT_DEFAULT; + PARAM_PUI.TiMax = PUI_TiMax_US_DEFAULT; + PARAM_PUI.Tdelay = PUI_Tdelay_SECONDS_DEFAULT; + PARAM_PUI.Interlace = PUI_Interlace_EN_DEFAULT; } if(internal_default) { - MB_INTERNAL.param.setpoints.TemperatureWarn = SETPOINT_TEMP_WARN*10; - MB_INTERNAL.param.setpoints.TemperatureErr = SETPOINT_TEMP_ERR*10; + PARAM_INTERNAL.setpoints.TemperatureWarn = SETPOINT_TEMP_WARN*10; + PARAM_INTERNAL.setpoints.TemperatureErr = SETPOINT_TEMP_ERR*10; - MB_INTERNAL.param.nominal.PhaseNumber = NOM_PHASE_NUMB; - MB_INTERNAL.param.nominal.U = NOM_U_V_DEFAULT*10; - MB_INTERNAL.param.nominal.U_deviation_plus = NOM_U_DEVIATION_PLUS_PERCENT_DEFAULT*100; - MB_INTERNAL.param.nominal.U_deviation_minus = NOM_U_DEVIATION_MINUS_PERCENT_DEFAULT*100; - MB_INTERNAL.param.nominal.F = NOM_F_HZ_DEFAULT*100; - MB_INTERNAL.param.nominal.F_deviation_plus = NOM_F_DEVIATION_PLUS_PERCENT_DEFAULT*100; - MB_INTERNAL.param.nominal.F_deviation_minus = NOM_F_DEVIATION_MINUS_PERCENT_DEFAULT*100; - MB_INTERNAL.param.nominal.I = NOM_I_A_DEFAULT*10; + PARAM_INTERNAL.nominal.PhaseNumber = NOM_PHASE_NUMB; + PARAM_INTERNAL.nominal.U = NOM_U_V_DEFAULT*10; + PARAM_INTERNAL.nominal.U_deviation_plus = NOM_U_DEVIATION_PLUS_PERCENT_DEFAULT*100; + PARAM_INTERNAL.nominal.U_deviation_minus = NOM_U_DEVIATION_MINUS_PERCENT_DEFAULT*100; + PARAM_INTERNAL.nominal.F = NOM_F_HZ_DEFAULT*100; + PARAM_INTERNAL.nominal.F_deviation_plus = NOM_F_DEVIATION_PLUS_PERCENT_DEFAULT*100; + PARAM_INTERNAL.nominal.F_deviation_minus = NOM_F_DEVIATION_MINUS_PERCENT_DEFAULT*100; + PARAM_INTERNAL.nominal.I = NOM_I_A_DEFAULT*10; - MB_INTERNAL.param.pm.mean_alpha = PM_EXP_ALPHA_COEF_DEFAULT*65535; + PARAM_INTERNAL.pm.mean_alpha = PM_EXP_ALPHA_COEF_DEFAULT*65535; - MB_INTERNAL.param.adc.ADC_Max[ADC_CHANNEL_UBA] = ADC_U_MAX_V_DEFAULT*10; - MB_INTERNAL.param.adc.ADC_Max[ADC_CHANNEL_UAC] = ADC_U_MAX_V_DEFAULT*10; - MB_INTERNAL.param.adc.ADC_Max[ADC_CHANNEL_IC] = ADC_I_MAX_A_DEFAULT*10; - MB_INTERNAL.param.adc.ADC_Max[ADC_CHANNEL_IA] = ADC_I_MAX_A_DEFAULT*10; - MB_INTERNAL.param.adc.ADC_Zero[ADC_CHANNEL_UBA] = ADC_U_ZERO_DEFAULT; - MB_INTERNAL.param.adc.ADC_Zero[ADC_CHANNEL_UAC] = ADC_U_ZERO_DEFAULT; - MB_INTERNAL.param.adc.ADC_Zero[ADC_CHANNEL_IC] = ADC_I_ZERO_DEFAULT; - MB_INTERNAL.param.adc.ADC_Zero[ADC_CHANNEL_IA] = ADC_I_ZERO_DEFAULT; + PARAM_INTERNAL.adc.ADC_Max[ADC_CHANNEL_UBA] = ADC_U_MAX_V_DEFAULT*10; + PARAM_INTERNAL.adc.ADC_Max[ADC_CHANNEL_UAC] = ADC_U_MAX_V_DEFAULT*10; + PARAM_INTERNAL.adc.ADC_Max[ADC_CHANNEL_IC] = ADC_I_MAX_A_DEFAULT*10; + PARAM_INTERNAL.adc.ADC_Max[ADC_CHANNEL_IA] = ADC_I_MAX_A_DEFAULT*10; + PARAM_INTERNAL.adc.ADC_Zero[ADC_CHANNEL_UBA] = ADC_U_ZERO_DEFAULT; + PARAM_INTERNAL.adc.ADC_Zero[ADC_CHANNEL_UAC] = ADC_U_ZERO_DEFAULT; + PARAM_INTERNAL.adc.ADC_Zero[ADC_CHANNEL_IC] = ADC_I_ZERO_DEFAULT; + PARAM_INTERNAL.adc.ADC_Zero[ADC_CHANNEL_IA] = ADC_I_ZERO_DEFAULT; - MB_INTERNAL.param.pwm.PhaseMask = 0x7; // (все три фазы) - MB_INTERNAL.param.pwm.Frequency = (float)PWM_THYR_FREQUENCY_HZ_DEFAULT; - MB_INTERNAL.param.pwm.PulseNumber = PWM_THYR_PULSE_NUMBER_DEFAULT; + PARAM_INTERNAL.pwm.PhaseMask = 0x7; // (все три фазы) + PARAM_INTERNAL.pwm.Frequency = (float)PWM_THYR_FREQUENCY_HZ_DEFAULT; + PARAM_INTERNAL.pwm.PulseNumber = PWM_THYR_PULSE_NUMBER_DEFAULT; - MB_INTERNAL.param.zc.Hysteresis = ZERO_CROSS_HYSTERESIS_PERCENT_DEFAULT*100; - MB_INTERNAL.param.zc.DebouneCouner = ZERO_CROSS_DEBOUNCE_CNT_DEFAULT; + PARAM_INTERNAL.zc.Hysteresis = ZERO_CROSS_HYSTERESIS_PERCENT_DEFAULT*100; + PARAM_INTERNAL.zc.DebouneCouner = ZERO_CROSS_DEBOUNCE_CNT_DEFAULT; //__AngleSetLimit(); } } +// Перерасчет максимально допустимого угла static void __AngleSetLimit(void) -{ - // Перерасчет максимально допустимого угла - float pulses_percent_of_period = ((MB_INTERNAL.param.pwm.PulseNumber / MB_INTERNAL.param.pwm.Frequency) * 1000) / ANGLE_PERIOD_MS(NOM_F_HZ_DEFAULT); - float angle_limit = 1 - pulses_percent_of_period; +{ // Сколько пачка ипульсов занимает процентов от всего периода + float pulses_percent_of_period = (((float)PARAM_INTERNAL.pwm.PulseNumber / PARAM_INTERNAL.pwm.Frequency) * 1000) / ANGLE_PERIOD_MS(NOM_F_HZ_DEFAULT); + // Вычитаем этот процент из 1 - получаем максимально безопасный угол + float angle_limit = 1 - pulses_percent_of_period*1.5; // добавляем запас в половину пачки импульсов Angle_SetLimit(&upp.hangle, angle_limit); } diff --git a/UPP/Core/UPP/upp_control.h b/UPP/Core/UPP/upp_params.h similarity index 96% rename from UPP/Core/UPP/upp_control.h rename to UPP/Core/UPP/upp_params.h index 5836033..d57e813 100644 --- a/UPP/Core/UPP/upp_control.h +++ b/UPP/Core/UPP/upp_params.h @@ -1,13 +1,13 @@ /** ****************************************************************************** -* @file upp_control.h +* @file upp_params.h * @brief Модуль определябщий поведение УПП ****************************************************************************** * @details ******************************************************************************/ -#ifndef _UPP_CONTROL_H -#define _UPP_CONTROL_H +#ifndef _UPP_PARAMS_H +#define _UPP_PARAMS_H #include "upp_defs.h" #define to_float(_u16_, _coef_) ((float)_u16_/_coef_) @@ -93,8 +93,8 @@ typedef struct /* Контроль внутренних параметров УПП. */ -void UPP_Control_InternalParams(void); +void UPP_Params_InternalControl(void); /* Установка параметров на дефолтные значения */ void UPP_SetDefault(int pui_default, int internal_default); -#endif //_UPP_CONTROL_H \ No newline at end of file +#endif //_UPP_PARAMS_H \ No newline at end of file diff --git a/UPP/MDK-ARM/UPP.uvoptx b/UPP/MDK-ARM/UPP.uvoptx index fd4f4c5..a772821 100644 --- a/UPP/MDK-ARM/UPP.uvoptx +++ b/UPP/MDK-ARM/UPP.uvoptx @@ -411,30 +411,6 @@ 0 0 0 - ..\Core\UPP\upp_control.c - upp_control.c - 0 - 0 - - - 2 - 18 - 5 - 0 - 0 - 0 - ..\Core\UPP\upp_control.h - upp_control.h - 0 - 0 - - - 2 - 19 - 1 - 0 - 0 - 0 ..\Core\UPP\upp_status.c upp_status.c 0 @@ -442,7 +418,7 @@ 2 - 20 + 18 5 0 0 @@ -454,7 +430,7 @@ 2 - 21 + 19 1 0 0 @@ -466,7 +442,7 @@ 2 - 22 + 20 5 0 0 @@ -476,6 +452,30 @@ 0 0 + + 2 + 21 + 1 + 0 + 0 + 0 + ..\Core\UPP\upp_params.c + upp_params.c + 0 + 0 + + + 2 + 22 + 5 + 0 + 0 + 0 + ..\Core\UPP\upp_params.h + upp_params.h + 0 + 0 + diff --git a/UPP/MDK-ARM/UPP.uvprojx b/UPP/MDK-ARM/UPP.uvprojx index 24baab7..3da23b5 100644 --- a/UPP/MDK-ARM/UPP.uvprojx +++ b/UPP/MDK-ARM/UPP.uvprojx @@ -470,16 +470,6 @@ 5 ..\Core\UPP\angle_control.h - - upp_control.c - 1 - ..\Core\UPP\upp_control.c - - - upp_control.h - 5 - ..\Core\UPP\upp_control.h - upp_status.c 1 @@ -500,6 +490,16 @@ 5 ..\Core\UPP\upp_errors.h + + upp_params.c + 1 + ..\Core\UPP\upp_params.c + + + upp_params.h + 5 + ..\Core\UPP\upp_params.h +