1/*
2 * File: PMSM_Controller.c
3 *
4 * Code generated for Simulink model 'PMSM_Controller'.
5 *
6 * Model version : 1.1460
7 * Simulink Coder version : 9.4 (R2020b) 29-Jul-2020
8 * C/C++ source code generated on : Sat May 28 14:25:47 2022
9 *
10 * Target selection: ert.tlc
11 * Embedded hardware selection: ARM Compatible->ARM Cortex-M
12 * Code generation objectives:
13 * 1. Execution efficiency
14 * 2. RAM efficiency
15 * Validation result: Not run
16 */
17
18#include "PMSM_Controller.h"
19
20/* Named constants for Chart: '<S4>/Control_Mode_Manager' */
21#define IN_ACTIVE ((uint8_T)1U)
22#define IN_NO_ACTIVE_CHILD ((uint8_T)0U)
23#define IN_OPEN ((uint8_T)2U)
24#define IN_SPEED_MODE ((uint8_T)1U)
25#define IN_TORQUE_MODE ((uint8_T)2U)
26#define OPEN_MODE ((uint8_T)0U)
27#define SPD_MODE ((uint8_T)1U)
28#define TRQ_MODE ((uint8_T)2U)
29#ifndef UCHAR_MAX
30#include <limits.h>
31#endif
32
33#if ( UCHAR_MAX != (0xFFU) ) || ( SCHAR_MAX != (0x7F) )
34#error Code was generated for compiler with different sized uchar/char. \
35Consider adjusting Test hardware word size settings on the \
36Hardware Implementation pane to match your compiler word sizes as \
37defined in limits.h of the compiler. Alternatively, you can \
38select the Test hardware is the same as production hardware option and \
39select the Enable portable word sizes option on the Code Generation > \
40Verification pane for ERT based targets, which will disable the \
41preprocessor word size checks.
42#endif
43
44#if ( USHRT_MAX != (0xFFFFU) ) || ( SHRT_MAX != (0x7FFF) )
45#error Code was generated for compiler with different sized ushort/short. \
46Consider adjusting Test hardware word size settings on the \
47Hardware Implementation pane to match your compiler word sizes as \
48defined in limits.h of the compiler. Alternatively, you can \
49select the Test hardware is the same as production hardware option and \
50select the Enable portable word sizes option on the Code Generation > \
51Verification pane for ERT based targets, which will disable the \
52preprocessor word size checks.
53#endif
54
55#if ( UINT_MAX != (0xFFFFFFFFU) ) || ( INT_MAX != (0x7FFFFFFF) )
56#error Code was generated for compiler with different sized uint/int. \
57Consider adjusting Test hardware word size settings on the \
58Hardware Implementation pane to match your compiler word sizes as \
59defined in limits.h of the compiler. Alternatively, you can \
60select the Test hardware is the same as production hardware option and \
61select the Enable portable word sizes option on the Code Generation > \
62Verification pane for ERT based targets, which will disable the \
63preprocessor word size checks.
64#endif
65
66#if ( ULONG_MAX != (0xFFFFFFFFU) ) || ( LONG_MAX != (0x7FFFFFFF) )
67#error Code was generated for compiler with different sized ulong/long. \
68Consider adjusting Test hardware word size settings on the \
69Hardware Implementation pane to match your compiler word sizes as \
70defined in limits.h of the compiler. Alternatively, you can \
71select the Test hardware is the same as production hardware option and \
72select the Enable portable word sizes option on the Code Generation > \
73Verification pane for ERT based targets, which will disable the \
74preprocessor word size checks.
75#endif
76
77/* Skipping ulong_long/long_long check: insufficient preprocessor integer range. */
78extern int16_T rt_sqrt_Us32En6_Ys16En_1bhh77n4(int32_T u);
79extern int16_T rt_sqrt_Us32En10_Ys16E_7VJYwqF9(int32_T u);
80extern uint16_T rt_sqrt_Uu16En14_Yu16E_WMwW1mku(uint16_T u);
81uint16_T plook_u16s16_evencka(int16_T u, int16_T bp0, uint16_T bpSpace, uint32_T
82 maxIndex);
83int32_T div_nde_s32_floor(int32_T numerator, int32_T denominator);
84extern void Low_Pass_Filter(const int16_T rtu_u[2], uint16_T rtu_coef, int16_T
85 rty_y[2], DW_Low_Pass_Filter *localDW);
86extern void PI_backCalc_fixdt_Init(DW_PI_backCalc_fixdt *localDW);
87extern int32_T PI_backCalc_fixdt(int32_T rtu_err, int16_T rtu_P, int16_T rtu_I,
88 int16_T rtu_Kb, int16_T rtu_satMax, int16_T rtu_satMin, int16_T rtu_init,
89 uint8_T rtu_reset, DW_PI_backCalc_fixdt *localDW, ZCE_PI_backCalc_fixdt
90 *localZCE);
91extern void PI_backCalc_fixdt_p_Init(DW_PI_backCalc_fixdt_i *localDW);
92extern int32_T PI_backCalc_fixdt_o(int16_T rtu_err, int16_T rtu_P, int16_T rtu_I,
93 int16_T rtu_Kb, int16_T rtu_satMax, int16_T rtu_satMin, int16_T rtu_init,
94 uint8_T rtu_reset, DW_PI_backCalc_fixdt_i *localDW, ZCE_PI_backCalc_fixdt_e
95 *localZCE);
96extern void RateInit(int16_T rtu_initVal, int16_T rtu_target, int16_T rtu_step,
97 int16_T *rty_s_step, int16_T *rty_High, int16_T *rty_Low);
98uint16_T plook_u16s16_evencka(int16_T u, int16_T bp0, uint16_T bpSpace, uint32_T
99 maxIndex)
100{
101 uint16_T bpIndex;
102
103 /* Prelookup - Index only
104 Index Search method: 'even'
105 Extrapolation method: 'Clip'
106 Use previous index: 'off'
107 Use last breakpoint for index at or above upper limit: 'on'
108 Remove protection against out-of-range input in generated code: 'off'
109 */
110 if (u <= bp0) {
111 bpIndex = 0U;
112 } else {
113 bpIndex = (uint16_T)((uint32_T)(uint16_T)(u - bp0) / bpSpace);
114 if (bpIndex < maxIndex) {
115 } else {
116 bpIndex = (uint16_T)maxIndex;
117 }
118 }
119
120 return bpIndex;
121}
122
123int32_T div_nde_s32_floor(int32_T numerator, int32_T denominator)
124{
125 return (((numerator < 0) != (denominator < 0)) && (numerator % denominator !=
126 0) ? -1 : 0) + numerator / denominator;
127}
128
129/*
130 * Output and update for atomic system:
131 * '<S48>/Low_Pass_Filter'
132 * '<S76>/Low_Pass_Filter'
133 */
134void Low_Pass_Filter(const int16_T rtu_u[2], uint16_T rtu_coef, int16_T rty_y[2],
135 DW_Low_Pass_Filter *localDW)
136{
137 int32_T rtb_Sum3_m;
138
139 /* Sum: '<S56>/Sum2' incorporates:
140 * UnitDelay: '<S56>/UnitDelay1'
141 */
142 rtb_Sum3_m = rtu_u[0] - (localDW->UnitDelay1_DSTATE[0] >> 16);
143 if (rtb_Sum3_m > 32767) {
144 rtb_Sum3_m = 32767;
145 } else {
146 if (rtb_Sum3_m < -32768) {
147 rtb_Sum3_m = -32768;
148 }
149 }
150
151 /* Sum: '<S56>/Sum3' incorporates:
152 * Product: '<S56>/Divide3'
153 * Sum: '<S56>/Sum2'
154 * UnitDelay: '<S56>/UnitDelay1'
155 */
156 rtb_Sum3_m = rtu_coef * rtb_Sum3_m + localDW->UnitDelay1_DSTATE[0];
157
158 /* DataTypeConversion: '<S56>/Data Type Conversion' */
159 rty_y[0] = (int16_T)(rtb_Sum3_m >> 16);
160
161 /* Update for UnitDelay: '<S56>/UnitDelay1' */
162 localDW->UnitDelay1_DSTATE[0] = rtb_Sum3_m;
163
164 /* Sum: '<S56>/Sum2' incorporates:
165 * UnitDelay: '<S56>/UnitDelay1'
166 */
167 rtb_Sum3_m = rtu_u[1] - (localDW->UnitDelay1_DSTATE[1] >> 16);
168 if (rtb_Sum3_m > 32767) {
169 rtb_Sum3_m = 32767;
170 } else {
171 if (rtb_Sum3_m < -32768) {
172 rtb_Sum3_m = -32768;
173 }
174 }
175
176 /* Sum: '<S56>/Sum3' incorporates:
177 * Product: '<S56>/Divide3'
178 * Sum: '<S56>/Sum2'
179 * UnitDelay: '<S56>/UnitDelay1'
180 */
181 rtb_Sum3_m = rtu_coef * rtb_Sum3_m + localDW->UnitDelay1_DSTATE[1];
182
183 /* DataTypeConversion: '<S56>/Data Type Conversion' */
184 rty_y[1] = (int16_T)(rtb_Sum3_m >> 16);
185
186 /* Update for UnitDelay: '<S56>/UnitDelay1' */
187 localDW->UnitDelay1_DSTATE[1] = rtb_Sum3_m;
188}
189
190/* System initialize for atomic system: '<S87>/PI_Speed' */
191void PI_backCalc_fixdt_Init(DW_PI_backCalc_fixdt *localDW)
192{
193 /* InitializeConditions for Delay: '<S90>/Resettable Delay' */
194 localDW->icLoad = 1U;
195}
196
197/* Output and update for atomic system: '<S87>/PI_Speed' */
198int32_T PI_backCalc_fixdt(int32_T rtu_err, int16_T rtu_P, int16_T rtu_I, int16_T
199 rtu_Kb, int16_T rtu_satMax, int16_T rtu_satMin, int16_T rtu_init, uint8_T
200 rtu_reset, DW_PI_backCalc_fixdt *localDW, ZCE_PI_backCalc_fixdt *localZCE)
201{
202 int32_T rty_pi_out_0;
203 int64_T tmp;
204 int64_T tmp_0;
205
206 /* Product: '<S89>/Divide4' */
207 tmp_0 = (int64_T)rtu_err * rtu_P;
208 if (tmp_0 > 2147483647LL) {
209 tmp_0 = 2147483647LL;
210 } else {
211 if (tmp_0 < -2147483648LL) {
212 tmp_0 = -2147483648LL;
213 }
214 }
215
216 /* Delay: '<S90>/Resettable Delay' incorporates:
217 * DataTypeConversion: '<S90>/Data Type Conversion2'
218 */
219 if ((rtu_reset > 0) && (localZCE->ResettableDelay_Reset_ZCE_f != POS_ZCSIG)) {
220 localDW->icLoad = 1U;
221 }
222
223 localZCE->ResettableDelay_Reset_ZCE_f = (ZCSigState)(rtu_reset > 0);
224 if (localDW->icLoad != 0) {
225 localDW->ResettableDelay_DSTATE = rtu_init << 7;
226 }
227
228 /* Product: '<S89>/Divide1' incorporates:
229 * Product: '<S89>/Divide4'
230 */
231 tmp = ((int64_T)(int32_T)tmp_0 * rtu_I) >> 14;
232 if (tmp > 2147483647LL) {
233 tmp = 2147483647LL;
234 } else {
235 if (tmp < -2147483648LL) {
236 tmp = -2147483648LL;
237 }
238 }
239
240 /* Sum: '<S89>/Sum2' incorporates:
241 * Product: '<S89>/Divide1'
242 * UnitDelay: '<S89>/UnitDelay'
243 */
244 tmp = (int64_T)(int32_T)tmp + localDW->UnitDelay_DSTATE;
245 if (tmp > 2147483647LL) {
246 tmp = 2147483647LL;
247 } else {
248 if (tmp < -2147483648LL) {
249 tmp = -2147483648LL;
250 }
251 }
252
253 /* Sum: '<S90>/Sum1' incorporates:
254 * Delay: '<S90>/Resettable Delay'
255 * Sum: '<S89>/Sum2'
256 */
257 tmp = (((int64_T)localDW->ResettableDelay_DSTATE << 2) + (int32_T)tmp) >> 2;
258 if (tmp > 2147483647LL) {
259 tmp = 2147483647LL;
260 } else {
261 if (tmp < -2147483648LL) {
262 tmp = -2147483648LL;
263 }
264 }
265
266 /* Sum: '<S89>/Sum6' incorporates:
267 * DataTypeConversion: '<S90>/Data Type Conversion1'
268 * Product: '<S89>/Divide4'
269 * Sum: '<S90>/Sum1'
270 */
271 tmp_0 = (int64_T)((int32_T)tmp << 2) + (int32_T)tmp_0;
272 if (tmp_0 > 2147483647LL) {
273 tmp_0 = 2147483647LL;
274 } else {
275 if (tmp_0 < -2147483648LL) {
276 tmp_0 = -2147483648LL;
277 }
278 }
279
280 /* RelationalOperator: '<S91>/LowerRelop1' incorporates:
281 * Switch: '<S91>/Switch2'
282 */
283 rty_pi_out_0 = rtu_satMax << 9;
284
285 /* Switch: '<S91>/Switch2' incorporates:
286 * RelationalOperator: '<S91>/LowerRelop1'
287 * Sum: '<S89>/Sum6'
288 */
289 if ((int32_T)tmp_0 <= rty_pi_out_0) {
290 /* RelationalOperator: '<S91>/UpperRelop' incorporates:
291 * Switch: '<S91>/Switch'
292 */
293 rty_pi_out_0 = rtu_satMin << 9;
294
295 /* Switch: '<S91>/Switch' incorporates:
296 * RelationalOperator: '<S91>/UpperRelop'
297 */
298 if ((int32_T)tmp_0 >= rty_pi_out_0) {
299 rty_pi_out_0 = (int32_T)tmp_0;
300 }
301 }
302
303 /* Update for UnitDelay: '<S89>/UnitDelay' incorporates:
304 * Product: '<S89>/Divide2'
305 * Sum: '<S89>/Sum3'
306 * Sum: '<S89>/Sum6'
307 */
308 localDW->UnitDelay_DSTATE = (int32_T)(((int64_T)(rty_pi_out_0 - (int32_T)tmp_0)
309 * rtu_Kb) >> 14);
310
311 /* Update for Delay: '<S90>/Resettable Delay' incorporates:
312 * Sum: '<S90>/Sum1'
313 */
314 localDW->icLoad = 0U;
315 localDW->ResettableDelay_DSTATE = (int32_T)tmp;
316 return rty_pi_out_0;
317}
318
319/*
320 * System initialize for atomic system:
321 * '<S95>/PI_backCalc_fixdt'
322 * '<S95>/PI_backCalc_fixdt1'
323 */
324void PI_backCalc_fixdt_p_Init(DW_PI_backCalc_fixdt_i *localDW)
325{
326 /* InitializeConditions for Delay: '<S102>/Resettable Delay' */
327 localDW->icLoad = 1U;
328}
329
330/*
331 * Output and update for atomic system:
332 * '<S95>/PI_backCalc_fixdt'
333 * '<S95>/PI_backCalc_fixdt1'
334 */
335int32_T PI_backCalc_fixdt_o(int16_T rtu_err, int16_T rtu_P, int16_T rtu_I,
336 int16_T rtu_Kb, int16_T rtu_satMax, int16_T rtu_satMin, int16_T rtu_init,
337 uint8_T rtu_reset, DW_PI_backCalc_fixdt_i *localDW, ZCE_PI_backCalc_fixdt_e
338 *localZCE)
339{
340 int32_T rty_pi_out_0;
341 int64_T tmp;
342 int64_T tmp_0;
343 int32_T rtb_Divide4_n;
344
345 /* Product: '<S100>/Divide4' */
346 rtb_Divide4_n = (rtu_err * rtu_P) >> 1;
347
348 /* Delay: '<S102>/Resettable Delay' incorporates:
349 * DataTypeConversion: '<S102>/Data Type Conversion2'
350 */
351 if ((rtu_reset > 0) && (localZCE->ResettableDelay_Reset_ZCE != POS_ZCSIG)) {
352 localDW->icLoad = 1U;
353 }
354
355 localZCE->ResettableDelay_Reset_ZCE = (ZCSigState)(rtu_reset > 0);
356 if (localDW->icLoad != 0) {
357 localDW->ResettableDelay_DSTATE = rtu_init << 7;
358 }
359
360 /* Product: '<S100>/Divide1' incorporates:
361 * Product: '<S100>/Divide4'
362 */
363 tmp_0 = ((int64_T)rtb_Divide4_n * rtu_I) >> 14;
364 if (tmp_0 > 2147483647LL) {
365 tmp_0 = 2147483647LL;
366 } else {
367 if (tmp_0 < -2147483648LL) {
368 tmp_0 = -2147483648LL;
369 }
370 }
371
372 /* Sum: '<S100>/Sum2' incorporates:
373 * Product: '<S100>/Divide1'
374 * UnitDelay: '<S100>/UnitDelay'
375 */
376 tmp_0 = (int64_T)(int32_T)tmp_0 + localDW->UnitDelay_DSTATE;
377 if (tmp_0 > 2147483647LL) {
378 tmp_0 = 2147483647LL;
379 } else {
380 if (tmp_0 < -2147483648LL) {
381 tmp_0 = -2147483648LL;
382 }
383 }
384
385 /* Sum: '<S102>/Sum1' incorporates:
386 * Delay: '<S102>/Resettable Delay'
387 * Sum: '<S100>/Sum2'
388 */
389 tmp_0 = (((int64_T)localDW->ResettableDelay_DSTATE << 2) + (int32_T)tmp_0) >>
390 2;
391 if (tmp_0 > 2147483647LL) {
392 tmp_0 = 2147483647LL;
393 } else {
394 if (tmp_0 < -2147483648LL) {
395 tmp_0 = -2147483648LL;
396 }
397 }
398
399 /* Sum: '<S100>/Sum6' incorporates:
400 * DataTypeConversion: '<S102>/Data Type Conversion1'
401 * Product: '<S100>/Divide4'
402 * Sum: '<S102>/Sum1'
403 */
404 tmp = (int64_T)((int32_T)tmp_0 << 2) + rtb_Divide4_n;
405 if (tmp > 2147483647LL) {
406 tmp = 2147483647LL;
407 } else {
408 if (tmp < -2147483648LL) {
409 tmp = -2147483648LL;
410 }
411 }
412
413 /* RelationalOperator: '<S103>/LowerRelop1' incorporates:
414 * Switch: '<S103>/Switch2'
415 */
416 rty_pi_out_0 = rtu_satMax << 9;
417
418 /* Switch: '<S103>/Switch2' incorporates:
419 * RelationalOperator: '<S103>/LowerRelop1'
420 * Sum: '<S100>/Sum6'
421 */
422 if ((int32_T)tmp <= rty_pi_out_0) {
423 /* RelationalOperator: '<S103>/UpperRelop' incorporates:
424 * Switch: '<S103>/Switch'
425 */
426 rty_pi_out_0 = rtu_satMin << 9;
427
428 /* Switch: '<S103>/Switch' incorporates:
429 * RelationalOperator: '<S103>/UpperRelop'
430 */
431 if ((int32_T)tmp >= rty_pi_out_0) {
432 rty_pi_out_0 = (int32_T)tmp;
433 }
434 }
435
436 /* Update for UnitDelay: '<S100>/UnitDelay' incorporates:
437 * Product: '<S100>/Divide2'
438 * Sum: '<S100>/Sum3'
439 * Sum: '<S100>/Sum6'
440 */
441 localDW->UnitDelay_DSTATE = (int32_T)(((int64_T)(rty_pi_out_0 - (int32_T)tmp) *
442 rtu_Kb) >> 14);
443
444 /* Update for Delay: '<S102>/Resettable Delay' incorporates:
445 * Sum: '<S102>/Sum1'
446 */
447 localDW->icLoad = 0U;
448 localDW->ResettableDelay_DSTATE = (int32_T)tmp_0;
449 return rty_pi_out_0;
450}
451
452/*
453 * Output and update for action system:
454 * '<S108>/RateInit'
455 * '<S115>/RateInit'
456 */
457void RateInit(int16_T rtu_initVal, int16_T rtu_target, int16_T rtu_step, int16_T
458 *rty_s_step, int16_T *rty_High, int16_T *rty_Low)
459{
460 int16_T rtb_Add_b;
461
462 /* Sum: '<S109>/Add' */
463 rtb_Add_b = (int16_T)((rtu_target - rtu_initVal) >> 1);
464
465 /* Signum: '<S109>/Sign' incorporates:
466 * Sum: '<S109>/Add'
467 */
468 if (rtb_Add_b < 0) {
469 rtb_Add_b = -1;
470 } else {
471 rtb_Add_b = (int16_T)(rtb_Add_b > 0);
472 }
473
474 /* End of Signum: '<S109>/Sign' */
475
476 /* Product: '<S109>/Divide' */
477 *rty_s_step = (int16_T)(rtu_step * rtb_Add_b);
478
479 /* MinMax: '<S109>/Max' */
480 if (rtu_target > rtu_initVal) {
481 *rty_High = rtu_target;
482 } else {
483 *rty_High = rtu_initVal;
484 }
485
486 /* End of MinMax: '<S109>/Max' */
487
488 /* MinMax: '<S109>/Max1' */
489 if (rtu_initVal < rtu_target) {
490 *rty_Low = rtu_initVal;
491 } else {
492 *rty_Low = rtu_target;
493 }
494
495 /* End of MinMax: '<S109>/Max1' */
496}
497
498int16_T rt_sqrt_Us32En6_Ys16En_1bhh77n4(int32_T u)
499{
500 int64_T tmp03_u;
501 int32_T iBit;
502 int16_T shiftMask;
503 int16_T tmp01_y;
504 int16_T y;
505
506 /* Fixed-Point Sqrt Computation by the bisection method. */
507 if (u > 0) {
508 y = 0;
509 shiftMask = 16384;
510 tmp03_u = (int64_T)u << 4;
511 for (iBit = 0; iBit < 15; iBit++) {
512 tmp01_y = (int16_T)(y | shiftMask);
513 if (tmp01_y * tmp01_y <= tmp03_u) {
514 y = tmp01_y;
515 }
516
517 shiftMask = (int16_T)((uint32_T)shiftMask >> 1U);
518 }
519 } else {
520 y = 0;
521 }
522
523 return y;
524}
525
526int16_T rt_sqrt_Us32En10_Ys16E_7VJYwqF9(int32_T u)
527{
528 int32_T iBit;
529 int16_T shiftMask;
530 int16_T tmp01_y;
531 int16_T y;
532
533 /* Fixed-Point Sqrt Computation by the bisection method. */
534 if (u > 0) {
535 y = 0;
536 shiftMask = 16384;
537 for (iBit = 0; iBit < 15; iBit++) {
538 tmp01_y = (int16_T)(y | shiftMask);
539 if (tmp01_y * tmp01_y <= u) {
540 y = tmp01_y;
541 }
542
543 shiftMask = (int16_T)((uint32_T)shiftMask >> 1U);
544 }
545 } else {
546 y = 0;
547 }
548
549 return y;
550}
551
552uint16_T rt_sqrt_Uu16En14_Yu16E_WMwW1mku(uint16_T u)
553{
554 int32_T iBit;
555 uint32_T tmp03_u;
556 uint16_T shiftMask;
557 uint16_T tmp01_y;
558 uint16_T y;
559
560 /* Fixed-Point Sqrt Computation by the bisection method. */
561 if (u > 0) {
562 y = 0U;
563 shiftMask = 32768U;
564 tmp03_u = (uint32_T)u << 14;
565 for (iBit = 0; iBit < 16; iBit++) {
566 tmp01_y = (uint16_T)(y | shiftMask);
567 if ((uint32_T)tmp01_y * tmp01_y <= tmp03_u) {
568 y = tmp01_y;
569 }
570
571 shiftMask = (uint16_T)((uint32_T)shiftMask >> 1U);
572 }
573 } else {
574 y = 0U;
575 }
576
577 return y;
578}
579
580/* Model step function */
581void PMSM_Controller_step(RT_MODEL *const rtM)
582{
583 DW *rtDW = rtM->dwork;
584 PrevZCX *rtPrevZCX = rtM->prevZCSigState;
585 ExtU *rtU = (ExtU *) rtM->inputs;
586 ExtY *rtY = (ExtY *) rtM->outputs;
587 int64_T tmp_1;
588 int64_T tmp_2;
589 uint64_T tmp_3;
590 int32_T rtb_Divide_idx_0;
591 int32_T rtb_Divide_idx_1;
592 int32_T rtb_Gain_b0;
593 int32_T rtb_Gain_p2;
594 int32_T rtb_MathFunction2_p;
595 int32_T rtb_Sum1_f;
596 int32_T rtb_Switch3;
597 int32_T rtb_Switch_np;
598 int32_T tmp;
599 int32_T tmp_0;
600 uint32_T qY;
601 uint32_T rtb_Switch2;
602 int16_T rtb_TmpSignalConversionAtLow_Pa[2];
603 int16_T rtb_UnitDelay1_m[2];
604 int16_T rtb_Divide1_m;
605 int16_T rtb_Divide3_k;
606 int16_T rtb_Min;
607 int16_T rtb_Sum1_a;
608 int16_T rtb_Sum3_jm;
609 int16_T rtb_Sum6_k;
610 int16_T rtb_Sum6_p;
611 int16_T rtb_Switch_f2_idx_0;
612 int16_T rtb_Switch_f2_idx_1;
613 int16_T rtb_r_cos_M1;
614 uint16_T rtb_BitwiseOperator2;
615 uint16_T rtb_LogicalOperator3;
616 int8_T UnitDelay3;
617 int8_T rtb_Sum2;
618 int8_T rtb_Sum2_tmp;
619 uint8_T rtb_Add_gf;
620 uint8_T rtb_DataTypeConversion_j;
621 uint8_T rtb_Sum_i;
622 uint8_T rtb_UnitDelay;
623 uint8_T rtb_z_ctrlMod;
624 boolean_T rtb_Equal_k;
625 boolean_T rtb_LogicalOperator12;
626 boolean_T rtb_LogicalOperator2_h;
627 boolean_T rtb_LogicalOperator4_e;
628 boolean_T rtb_RelationalOperator4_f;
629 boolean_T rtb_n_commDeacv;
630
631 /* Outputs for Atomic SubSystem: '<Root>/PMSM_Controller' */
632 /* UnitDelay: '<S6>/UnitDelay1' */
633 rtb_UnitDelay1_m[0] = rtDW->UnitDelay1_DSTATE_f[0];
634 rtb_UnitDelay1_m[1] = rtDW->UnitDelay1_DSTATE_f[1];
635
636 /* S-Function (sfix_bitop): '<S4>/Bitwise Operator2' incorporates:
637 * Inport: '<Root>/FOC_Flags'
638 */
639 rtb_BitwiseOperator2 = (uint16_T)(rtU->FOC_Flags & 1);
640
641 /* UnitDelay: '<S37>/UnitDelay' */
642 rtb_UnitDelay = rtDW->UnitDelay_DSTATE_j;
643
644 /* Logic: '<S9>/Edge_Detect' incorporates:
645 * Delay: '<S9>/Delay'
646 * Delay: '<S9>/Delay1'
647 * Delay: '<S9>/Delay2'
648 * Inport: '<Root>/hall_A'
649 * Inport: '<Root>/hall_B'
650 * Inport: '<Root>/hall_C'
651 */
652 rtb_Equal_k = (boolean_T)((rtU->hall_A != 0) ^ (rtDW->Delay_DSTATE_d != 0) ^
653 (rtU->hall_B != 0) ^ (rtDW->Delay1_DSTATE != 0) ^ (rtU->hall_C != 0)) ^
654 (rtDW->Delay2_DSTATE != 0);
655
656 /* Sum: '<S11>/Add' incorporates:
657 * Gain: '<S11>/Gain'
658 * Gain: '<S11>/Gain1'
659 * Inport: '<Root>/hall_A'
660 * Inport: '<Root>/hall_B'
661 * Inport: '<Root>/hall_C'
662 */
663 rtb_Add_gf = (uint8_T)((uint32_T)(uint8_T)((uint32_T)(uint8_T)(rtU->hall_C <<
664 2) + (uint8_T)(rtU->hall_B << 1)) + rtU->hall_A);
665
666 /* If: '<S3>/If2' incorporates:
667 * If: '<S14>/If2'
668 * Inport: '<S20>/z_counterRawPrev'
669 * UnitDelay: '<S14>/UnitDelay3'
670 */
671 if (rtb_Equal_k) {
672 /* Outputs for IfAction SubSystem: '<S3>/Direction_Detection' incorporates:
673 * ActionPort: '<S8>/Action Port'
674 */
675 /* UnitDelay: '<S8>/UnitDelay3' */
676 UnitDelay3 = rtDW->Switch2_i;
677
678 /* End of Outputs for SubSystem: '<S3>/Direction_Detection' */
679
680 /* Selector: '<S11>/Selector' incorporates:
681 * Constant: '<S11>/vec_hallToPos'
682 */
683 rtb_Sum2_tmp = rtConstP.vec_hallToPos_Value[rtb_Add_gf];
684
685 /* Outputs for IfAction SubSystem: '<S3>/Direction_Detection' incorporates:
686 * ActionPort: '<S8>/Action Port'
687 */
688 /* Sum: '<S8>/Sum2' incorporates:
689 * Constant: '<S11>/vec_hallToPos'
690 * Selector: '<S11>/Selector'
691 * UnitDelay: '<S8>/UnitDelay2'
692 */
693 rtb_Sum2 = (int8_T)(rtb_Sum2_tmp - rtDW->UnitDelay2_DSTATE_j);
694
695 /* Switch: '<S8>/Switch2' incorporates:
696 * Constant: '<S8>/Constant20'
697 * Constant: '<S8>/Constant8'
698 * Logic: '<S8>/Logical Operator3'
699 * RelationalOperator: '<S8>/Relational Operator1'
700 * RelationalOperator: '<S8>/Relational Operator6'
701 */
702 if ((rtb_Sum2 == 1) || (rtb_Sum2 == -5)) {
703 /* Switch: '<S8>/Switch2' incorporates:
704 * Constant: '<S8>/Constant24'
705 */
706 rtDW->Switch2_i = 1;
707 } else {
708 /* Switch: '<S8>/Switch2' incorporates:
709 * Constant: '<S8>/Constant23'
710 */
711 rtDW->Switch2_i = -1;
712 }
713
714 /* End of Switch: '<S8>/Switch2' */
715
716 /* Update for UnitDelay: '<S8>/UnitDelay2' */
717 rtDW->UnitDelay2_DSTATE_j = rtb_Sum2_tmp;
718
719 /* End of Outputs for SubSystem: '<S3>/Direction_Detection' */
720
721 /* Outputs for IfAction SubSystem: '<S14>/Raw_Motor_Speed_Estimation' incorporates:
722 * ActionPort: '<S20>/Action Port'
723 */
724 /* RelationalOperator: '<S20>/Relational Operator4' */
725 rtb_RelationalOperator4_f = (rtDW->Switch2_i != UnitDelay3);
726 rtDW->z_counterRawPrev = rtDW->UnitDelay3_DSTATE;
727
728 /* Switch: '<S20>/Switch3' incorporates:
729 * Constant: '<S20>/Constant4'
730 * Inport: '<S20>/z_counterRawPrev'
731 * Logic: '<S20>/Logical Operator1'
732 * Switch: '<S20>/Switch2'
733 * UnitDelay: '<S14>/UnitDelay3'
734 * UnitDelay: '<S20>/UnitDelay1'
735 */
736 if (rtb_RelationalOperator4_f && rtDW->UnitDelay1_DSTATE_iv) {
737 rtb_Switch3 = 0;
738 } else {
739 if (rtb_RelationalOperator4_f) {
740 /* Switch: '<S20>/Switch2' incorporates:
741 * UnitDelay: '<S14>/UnitDelay4'
742 */
743 rtb_Switch2 = rtDW->UnitDelay4_DSTATE;
744 } else {
745 /* Sum: '<S20>/Sum13' incorporates:
746 * Switch: '<S20>/Switch2'
747 * UnitDelay: '<S20>/UnitDelay2'
748 * UnitDelay: '<S20>/UnitDelay3'
749 * UnitDelay: '<S20>/UnitDelay5'
750 */
751 tmp_3 = (((uint64_T)rtDW->UnitDelay2_DSTATE + rtDW->UnitDelay3_DSTATE_l)
752 + rtDW->UnitDelay5_DSTATE) + rtDW->z_counterRawPrev;
753 if (tmp_3 > 4294967295ULL) {
754 tmp_3 = 4294967295ULL;
755 }
756
757 /* Product: '<S20>/Divide13' incorporates:
758 * Constant: '<S20>/cf_speedCoef'
759 * Constant: '<S20>/cf_speedCoef1'
760 * Gain: '<S20>/g_Ha'
761 * Product: '<S20>/Divide'
762 * Sum: '<S20>/Sum13'
763 * Switch: '<S20>/Switch2'
764 */
765 tmp_3 = ((uint64_T)((10000000U / rtP.n_polePairs) << 2) << 4) /
766 (uint32_T)tmp_3;
767 if (tmp_3 > 4294967295ULL) {
768 tmp_3 = 4294967295ULL;
769 }
770
771 /* Switch: '<S20>/Switch2' incorporates:
772 * Product: '<S20>/Divide13'
773 */
774 rtb_Switch2 = (uint32_T)tmp_3;
775 }
776
777 rtb_Switch3 = (int32_T)rtb_Switch2;
778 }
779
780 /* End of Switch: '<S20>/Switch3' */
781
782 /* Product: '<S20>/Divide11' incorporates:
783 * Switch: '<S20>/Switch3'
784 */
785 rtDW->Divide11 = rtb_Switch3 * rtDW->Switch2_i;
786
787 /* Update for UnitDelay: '<S20>/UnitDelay1' */
788 rtDW->UnitDelay1_DSTATE_iv = rtb_RelationalOperator4_f;
789
790 /* Update for UnitDelay: '<S20>/UnitDelay2' incorporates:
791 * UnitDelay: '<S20>/UnitDelay3'
792 */
793 rtDW->UnitDelay2_DSTATE = rtDW->UnitDelay3_DSTATE_l;
794
795 /* Update for UnitDelay: '<S20>/UnitDelay3' incorporates:
796 * UnitDelay: '<S20>/UnitDelay5'
797 */
798 rtDW->UnitDelay3_DSTATE_l = rtDW->UnitDelay5_DSTATE;
799
800 /* Update for UnitDelay: '<S20>/UnitDelay5' */
801 rtDW->UnitDelay5_DSTATE = rtDW->z_counterRawPrev;
802
803 /* End of Outputs for SubSystem: '<S14>/Raw_Motor_Speed_Estimation' */
804 }
805
806 /* End of If: '<S3>/If2' */
807
808 /* Switch: '<S14>/Switch2' incorporates:
809 * Constant: '<S14>/Constant4'
810 * Constant: '<S14>/z_maxCntRst'
811 * Gain: '<S14>/Gain'
812 * Inport: '<Root>/us_Count'
813 * Product: '<S20>/Divide11'
814 * RelationalOperator: '<S14>/Relational Operator2'
815 */
816 if (rtU->us_Count >= (rtP.n_hall_count_ps << 1)) {
817 rtb_Switch3 = 0;
818 } else {
819 rtb_Switch3 = rtDW->Divide11;
820 }
821
822 /* End of Switch: '<S14>/Switch2' */
823
824 /* Abs: '<S14>/Abs5' incorporates:
825 * Switch: '<S14>/Switch2'
826 */
827 if (rtb_Switch3 < 0) {
828 rtb_Switch2 = (uint32_T)-rtb_Switch3;
829 } else {
830 rtb_Switch2 = (uint32_T)rtb_Switch3;
831 }
832
833 /* End of Abs: '<S14>/Abs5' */
834
835 /* If: '<S14>/If1' */
836 if (rtb_Equal_k) {
837 /* Outputs for IfAction SubSystem: '<S14>/AdvCtrlDetect' incorporates:
838 * ActionPort: '<S19>/Action Port'
839 */
840 /* Relay: '<S19>/n_commDeacv' incorporates:
841 * Abs: '<S14>/Abs5'
842 */
843 rtDW->n_commDeacv_Mode = ((rtb_Switch2 >= 480U) || ((rtb_Switch2 > 240U) &&
844 rtDW->n_commDeacv_Mode));
845
846 /* RelationalOperator: '<S21>/Compare' incorporates:
847 * Constant: '<S21>/Constant'
848 * Relay: '<S19>/n_commDeacv'
849 * Sum: '<S19>/Sum13'
850 * UnitDelay: '<S19>/UnitDelay2'
851 * UnitDelay: '<S19>/UnitDelay3'
852 * UnitDelay: '<S19>/UnitDelay5'
853 */
854 rtDW->Compare = ((uint16_T)((uint32_T)(uint16_T)((uint32_T)(uint16_T)
855 ((uint32_T)rtDW->UnitDelay2_DSTATE_f + rtDW->UnitDelay3_DSTATE_lh) +
856 rtDW->UnitDelay5_DSTATE_f) + rtDW->n_commDeacv_Mode) >= 4);
857
858 /* Update for UnitDelay: '<S19>/UnitDelay2' incorporates:
859 * UnitDelay: '<S19>/UnitDelay3'
860 */
861 rtDW->UnitDelay2_DSTATE_f = rtDW->UnitDelay3_DSTATE_lh;
862
863 /* Update for UnitDelay: '<S19>/UnitDelay3' incorporates:
864 * UnitDelay: '<S19>/UnitDelay5'
865 */
866 rtDW->UnitDelay3_DSTATE_lh = rtDW->UnitDelay5_DSTATE_f;
867
868 /* Update for UnitDelay: '<S19>/UnitDelay5' incorporates:
869 * Logic: '<S19>/Logical Operator3'
870 * Relay: '<S19>/n_commDeacv'
871 */
872 rtDW->UnitDelay5_DSTATE_f = rtDW->n_commDeacv_Mode;
873
874 /* End of Outputs for SubSystem: '<S14>/AdvCtrlDetect' */
875 }
876
877 /* End of If: '<S14>/If1' */
878
879 /* Switch: '<S37>/Switch3' incorporates:
880 * Abs: '<S14>/Abs5'
881 * Abs: '<S37>/Abs4'
882 * Constant: '<S37>/CTRL_COMM4'
883 * Inport: '<Root>/b_motEna'
884 * Logic: '<S37>/Logical Operator1'
885 * RelationalOperator: '<S14>/Relational Operator9'
886 * RelationalOperator: '<S37>/Relational Operator7'
887 * S-Function (sfix_bitop): '<S37>/Bitwise Operator1'
888 * UnitDelay: '<S6>/UnitDelay1'
889 */
890 if ((rtb_UnitDelay & 4U) != 0U) {
891 rtb_Equal_k = true;
892 } else {
893 if (rtDW->UnitDelay1_DSTATE_f[1] < 0) {
894 /* Abs: '<S37>/Abs4' incorporates:
895 * UnitDelay: '<S6>/UnitDelay1'
896 */
897 rtb_Switch_f2_idx_1 = (int16_T)-rtDW->UnitDelay1_DSTATE_f[1];
898 } else {
899 /* Abs: '<S37>/Abs4' incorporates:
900 * UnitDelay: '<S6>/UnitDelay1'
901 */
902 rtb_Switch_f2_idx_1 = rtDW->UnitDelay1_DSTATE_f[1];
903 }
904
905 rtb_Equal_k = (rtU->b_motEna && (rtb_Switch2 < 48U) && (rtb_Switch_f2_idx_1 >
906 9920));
907 }
908
909 /* End of Switch: '<S37>/Switch3' */
910
911 /* Sum: '<S37>/Sum' incorporates:
912 * Constant: '<S37>/CTRL_COMM'
913 * Constant: '<S37>/CTRL_COMM1'
914 * DataTypeConversion: '<S37>/Data Type Conversion3'
915 * Gain: '<S37>/g_Hb'
916 * Gain: '<S37>/g_Hb1'
917 * RelationalOperator: '<S37>/Relational Operator1'
918 * RelationalOperator: '<S37>/Relational Operator3'
919 */
920 rtb_Sum_i = (uint8_T)(((uint32_T)((rtb_Add_gf == 7) << 1) + (rtb_Add_gf == 0))
921 + (rtb_Equal_k << 2));
922
923 /* RelationalOperator: '<S37>/Relational Operator2' incorporates:
924 * Constant: '<S37>/CTRL_COMM2'
925 */
926 rtb_RelationalOperator4_f = (rtb_Sum_i != 0);
927
928 /* RelationalOperator: '<S42>/Relational Operator' incorporates:
929 * UnitDelay: '<S42>/UnitDelay'
930 */
931 rtb_n_commDeacv = (rtb_RelationalOperator4_f != rtDW->UnitDelay_DSTATE_nx);
932
933 /* If: '<S38>/If2' incorporates:
934 * Inport: '<S40>/yPrev'
935 * Logic: '<S38>/Logical Operator1'
936 * Logic: '<S38>/Logical Operator2'
937 * Logic: '<S38>/Logical Operator3'
938 * Logic: '<S38>/Logical Operator4'
939 * UnitDelay: '<S38>/UnitDelay'
940 */
941 if (rtb_RelationalOperator4_f && (!rtDW->UnitDelay_DSTATE_k)) {
942 /* Outputs for IfAction SubSystem: '<S38>/Qualification' incorporates:
943 * ActionPort: '<S43>/Action Port'
944 */
945 /* Switch: '<S47>/Switch1' incorporates:
946 * Constant: '<S47>/Constant23'
947 * UnitDelay: '<S47>/UnitDelay'
948 */
949 if (rtb_n_commDeacv) {
950 rtb_LogicalOperator3 = 0U;
951 } else {
952 rtb_LogicalOperator3 = rtDW->UnitDelay_DSTATE_p;
953 }
954
955 /* End of Switch: '<S47>/Switch1' */
956
957 /* Switch: '<S43>/Switch2' incorporates:
958 * Constant: '<S37>/t_errQual'
959 * Constant: '<S43>/Constant6'
960 * RelationalOperator: '<S43>/Relational Operator2'
961 * Sum: '<S46>/Sum1'
962 */
963 rtb_n_commDeacv = (((uint16_T)(rtb_LogicalOperator3 + 1U) > 1600) ||
964 rtDW->UnitDelay_DSTATE_k);
965
966 /* MinMax: '<S46>/MinMax' incorporates:
967 * Constant: '<S43>/Constant6'
968 * Sum: '<S46>/Sum1'
969 */
970 if ((uint16_T)(rtb_LogicalOperator3 + 1U) < 1600) {
971 /* Update for UnitDelay: '<S47>/UnitDelay' */
972 rtDW->UnitDelay_DSTATE_p = (uint16_T)(rtb_LogicalOperator3 + 1U);
973 } else {
974 /* Update for UnitDelay: '<S47>/UnitDelay' */
975 rtDW->UnitDelay_DSTATE_p = 1600U;
976 }
977
978 /* End of MinMax: '<S46>/MinMax' */
979 /* End of Outputs for SubSystem: '<S38>/Qualification' */
980 } else if ((!rtb_RelationalOperator4_f) && rtDW->UnitDelay_DSTATE_k) {
981 /* Outputs for IfAction SubSystem: '<S38>/Dequalification' incorporates:
982 * ActionPort: '<S41>/Action Port'
983 */
984 /* Switch: '<S45>/Switch1' incorporates:
985 * Constant: '<S45>/Constant23'
986 * UnitDelay: '<S45>/UnitDelay'
987 */
988 if (rtb_n_commDeacv) {
989 rtb_LogicalOperator3 = 0U;
990 } else {
991 rtb_LogicalOperator3 = rtDW->UnitDelay_DSTATE_f;
992 }
993
994 /* End of Switch: '<S45>/Switch1' */
995
996 /* Switch: '<S41>/Switch2' incorporates:
997 * Constant: '<S37>/t_errDequal'
998 * Constant: '<S41>/Constant6'
999 * RelationalOperator: '<S41>/Relational Operator2'
1000 * Sum: '<S44>/Sum1'
1001 */
1002 rtb_n_commDeacv = (((uint16_T)(rtb_LogicalOperator3 + 1U) <= 12000) &&
1003 rtDW->UnitDelay_DSTATE_k);
1004
1005 /* MinMax: '<S44>/MinMax' incorporates:
1006 * Constant: '<S41>/Constant6'
1007 * Sum: '<S44>/Sum1'
1008 */
1009 if ((uint16_T)(rtb_LogicalOperator3 + 1U) < 12000) {
1010 /* Update for UnitDelay: '<S45>/UnitDelay' */
1011 rtDW->UnitDelay_DSTATE_f = (uint16_T)(rtb_LogicalOperator3 + 1U);
1012 } else {
1013 /* Update for UnitDelay: '<S45>/UnitDelay' */
1014 rtDW->UnitDelay_DSTATE_f = 12000U;
1015 }
1016
1017 /* End of MinMax: '<S44>/MinMax' */
1018 /* End of Outputs for SubSystem: '<S38>/Dequalification' */
1019 } else {
1020 /* Outputs for IfAction SubSystem: '<S38>/Default' incorporates:
1021 * ActionPort: '<S40>/Action Port'
1022 */
1023 rtb_n_commDeacv = rtDW->UnitDelay_DSTATE_k;
1024
1025 /* End of Outputs for SubSystem: '<S38>/Default' */
1026 }
1027
1028 /* End of If: '<S38>/If2' */
1029
1030 /* Logic: '<S25>/Logical Operator12' incorporates:
1031 * Inport: '<Root>/b_motEna'
1032 * Logic: '<S25>/Logical Operator7'
1033 */
1034 rtb_LogicalOperator12 = ((!rtb_n_commDeacv) && rtU->b_motEna);
1035
1036 /* Logic: '<S25>/Logical Operator4' incorporates:
1037 * Constant: '<S25>/constant8'
1038 * Inport: '<Root>/n_ctrlModReq'
1039 * Logic: '<S25>/Logical Operator11'
1040 * Logic: '<S25>/Logical Operator8'
1041 * RelationalOperator: '<S25>/Relational Operator10'
1042 */
1043 rtb_LogicalOperator4_e = ((rtb_BitwiseOperator2 != 0) || (!rtDW->Compare) || (
1044 !rtb_LogicalOperator12) || (rtU->n_ctrlModReq == 0));
1045
1046 /* Abs: '<S4>/Abs2' incorporates:
1047 * Switch: '<S14>/Switch2'
1048 */
1049 if (rtb_Switch3 < 0) {
1050 rtb_LogicalOperator3 = (uint16_T)((uint32_T)-rtb_Switch3 >> 4);
1051 } else {
1052 rtb_LogicalOperator3 = (uint16_T)((uint32_T)rtb_Switch3 >> 4);
1053 }
1054
1055 /* End of Abs: '<S4>/Abs2' */
1056
1057 /* Relay: '<S25>/n_SpeedCtrl' */
1058 rtDW->n_SpeedCtrl_Mode = ((rtb_LogicalOperator3 >= 300) ||
1059 ((rtb_LogicalOperator3 > 200) && rtDW->n_SpeedCtrl_Mode));
1060
1061 /* Logic: '<S25>/Logical Operator10' incorporates:
1062 * Inport: '<Root>/b_cruiseEna'
1063 * Relay: '<S25>/n_SpeedCtrl'
1064 */
1065 rtb_Equal_k = (rtDW->n_SpeedCtrl_Mode && rtU->b_cruiseEna);
1066
1067 /* Logic: '<S25>/Logical Operator2' incorporates:
1068 * Constant: '<S25>/constant'
1069 * Inport: '<Root>/n_ctrlModReq'
1070 * Logic: '<S25>/Logical Operator5'
1071 * RelationalOperator: '<S25>/Relational Operator4'
1072 */
1073 rtb_LogicalOperator2_h = ((rtU->n_ctrlModReq == 2) && (!rtb_Equal_k));
1074
1075 /* Logic: '<S25>/Logical Operator1' incorporates:
1076 * Constant: '<S25>/constant1'
1077 * Inport: '<Root>/n_ctrlModReq'
1078 * RelationalOperator: '<S25>/Relational Operator1'
1079 */
1080 rtb_Equal_k = ((rtU->n_ctrlModReq == 1) || rtb_Equal_k);
1081
1082 /* Chart: '<S4>/Control_Mode_Manager' incorporates:
1083 * Logic: '<S25>/Logical Operator3'
1084 * Logic: '<S25>/Logical Operator6'
1085 * Logic: '<S25>/Logical Operator9'
1086 */
1087 if (rtDW->is_active_c5_PMSM_Controller == 0U) {
1088 rtDW->is_active_c5_PMSM_Controller = 1U;
1089 rtDW->is_c5_PMSM_Controller = IN_OPEN;
1090 rtb_z_ctrlMod = OPEN_MODE;
1091 } else if (rtDW->is_c5_PMSM_Controller == 1) {
1092 if (rtb_LogicalOperator4_e) {
1093 rtDW->is_ACTIVE = IN_NO_ACTIVE_CHILD;
1094 rtDW->is_c5_PMSM_Controller = IN_OPEN;
1095 rtb_z_ctrlMod = OPEN_MODE;
1096 } else if (rtDW->is_ACTIVE == 1) {
1097 rtb_z_ctrlMod = SPD_MODE;
1098 if (!rtb_Equal_k) {
1099 if (rtb_LogicalOperator2_h) {
1100 rtDW->is_ACTIVE = IN_TORQUE_MODE;
1101 rtb_z_ctrlMod = TRQ_MODE;
1102 } else {
1103 rtDW->is_ACTIVE = IN_SPEED_MODE;
1104 }
1105 }
1106 } else {
1107 /* case IN_TORQUE_MODE: */
1108 rtb_z_ctrlMod = TRQ_MODE;
1109 if (!rtb_LogicalOperator2_h) {
1110 rtDW->is_ACTIVE = IN_SPEED_MODE;
1111 rtb_z_ctrlMod = SPD_MODE;
1112 }
1113 }
1114 } else {
1115 /* case IN_OPEN: */
1116 rtb_z_ctrlMod = OPEN_MODE;
1117 if ((!rtb_LogicalOperator4_e) && (rtb_LogicalOperator2_h || rtb_Equal_k)) {
1118 rtDW->is_c5_PMSM_Controller = IN_ACTIVE;
1119 if (rtb_LogicalOperator2_h) {
1120 rtDW->is_ACTIVE = IN_TORQUE_MODE;
1121 rtb_z_ctrlMod = TRQ_MODE;
1122 } else {
1123 rtDW->is_ACTIVE = IN_SPEED_MODE;
1124 rtb_z_ctrlMod = SPD_MODE;
1125 }
1126 }
1127 }
1128
1129 /* End of Chart: '<S4>/Control_Mode_Manager' */
1130
1131 /* Product: '<S52>/Divide' incorporates:
1132 * Constant: '<S52>/Constant'
1133 * Inport: '<Root>/adc_Pha'
1134 * Inport: '<Root>/adc_Phb'
1135 */
1136 rtb_Divide_idx_0 = rtU->adc_Pha * rtP.f_adc_curr_ceof;
1137 rtb_Divide_idx_1 = rtU->adc_Phb * rtP.f_adc_curr_ceof;
1138
1139 /* Sum: '<S48>/Add' */
1140 tmp_2 = (int64_T)rtb_Divide_idx_0 + rtb_Divide_idx_1;
1141 if (tmp_2 > 2147483647LL) {
1142 tmp_2 = 2147483647LL;
1143 } else {
1144 if (tmp_2 < -2147483648LL) {
1145 tmp_2 = -2147483648LL;
1146 }
1147 }
1148
1149 /* Sum: '<S48>/Add1' incorporates:
1150 * Sum: '<S48>/Add'
1151 */
1152 tmp_2 = -(int64_T)(int32_T)tmp_2 >> 9;
1153 if (tmp_2 > 32767LL) {
1154 tmp_2 = 32767LL;
1155 } else {
1156 if (tmp_2 < -32768LL) {
1157 tmp_2 = -32768LL;
1158 }
1159 }
1160
1161 /* Gain: '<S55>/Gain' */
1162 rtb_Divide_idx_0 >>= 8;
1163 if (rtb_Divide_idx_0 > 32767) {
1164 rtb_Divide_idx_0 = 32767;
1165 } else {
1166 if (rtb_Divide_idx_0 < -32768) {
1167 rtb_Divide_idx_0 = -32768;
1168 }
1169 }
1170
1171 /* Sum: '<S55>/Add3' incorporates:
1172 * Sum: '<S48>/Add1'
1173 * Sum: '<S55>/Add2'
1174 */
1175 tmp_2 = (int64_T)(int16_T)tmp_2 << 9;
1176 tmp_1 = (tmp_2 + rtb_Divide_idx_1) >> 8;
1177 if (tmp_1 > 32767LL) {
1178 tmp_1 = 32767LL;
1179 } else {
1180 if (tmp_1 < -32768LL) {
1181 tmp_1 = -32768LL;
1182 }
1183 }
1184
1185 /* Sum: '<S55>/Add' incorporates:
1186 * Gain: '<S55>/Gain'
1187 * Sum: '<S55>/Add3'
1188 */
1189 rtb_Divide_idx_0 = ((rtb_Divide_idx_0 << 1) - (int16_T)tmp_1) >> 1;
1190 if (rtb_Divide_idx_0 > 32767) {
1191 rtb_Divide_idx_0 = 32767;
1192 } else {
1193 if (rtb_Divide_idx_0 < -32768) {
1194 rtb_Divide_idx_0 = -32768;
1195 }
1196 }
1197
1198 /* Gain: '<S55>/Gain1' incorporates:
1199 * Product: '<S57>/Divide1'
1200 * Sum: '<S55>/Add'
1201 */
1202 rtb_Divide1_m = (int16_T)((21845 * rtb_Divide_idx_0) >> 16);
1203
1204 /* Switch: '<S10>/Switch3' incorporates:
1205 * Constant: '<S10>/Constant16'
1206 * Constant: '<S10>/Constant2'
1207 * Constant: '<S11>/vec_hallToPos'
1208 * RelationalOperator: '<S10>/Relational Operator7'
1209 * Selector: '<S11>/Selector'
1210 * Sum: '<S10>/Sum1'
1211 */
1212 if (rtDW->Switch2_i == 1) {
1213 rtb_Sum2 = rtConstP.vec_hallToPos_Value[rtb_Add_gf];
1214 } else {
1215 rtb_Sum2 = (int8_T)(rtConstP.vec_hallToPos_Value[rtb_Add_gf] + 1);
1216 }
1217
1218 /* End of Switch: '<S10>/Switch3' */
1219
1220 /* MinMax: '<S10>/MinMax' incorporates:
1221 * Inport: '<Root>/us_Count'
1222 */
1223 if (rtU->us_Count < rtDW->z_counterRawPrev) {
1224 qY = rtU->us_Count;
1225 } else {
1226 qY = rtDW->z_counterRawPrev;
1227 }
1228
1229 /* End of MinMax: '<S10>/MinMax' */
1230
1231 /* Sum: '<S10>/Sum3' incorporates:
1232 * Product: '<S10>/Divide1'
1233 * Product: '<S10>/Divide3'
1234 */
1235 rtb_Sum3_jm = (int16_T)(((int16_T)((int16_T)(((uint64_T)qY << 14) /
1236 rtDW->z_counterRawPrev) * rtDW->Switch2_i) + (rtb_Sum2 << 14)) >> 2);
1237
1238 /* MinMax: '<S10>/MinMax1' incorporates:
1239 * Constant: '<S10>/Constant1'
1240 * Sum: '<S10>/Sum3'
1241 * Switch: '<S10>/Switch2'
1242 */
1243 if (rtb_Sum3_jm <= 0) {
1244 rtb_Sum3_jm = 0;
1245 }
1246
1247 /* End of MinMax: '<S10>/MinMax1' */
1248
1249 /* Sum: '<S15>/Add2' incorporates:
1250 * Constant: '<S15>/Constant2'
1251 * Product: '<S10>/Divide2'
1252 */
1253 rtb_Sum3_jm = (int16_T)((((15 * rtb_Sum3_jm) >> 4) + (rtP.i_hall_offset << 2))
1254 >> 2);
1255
1256 /* DataTypeConversion: '<S15>/Data Type Conversion' incorporates:
1257 * Sum: '<S15>/Add2'
1258 */
1259 rtb_r_cos_M1 = (int16_T)(rtb_Sum3_jm >> 4);
1260
1261 /* If: '<S15>/If' incorporates:
1262 * Constant: '<S15>/Constant1'
1263 * Constant: '<S15>/Constant3'
1264 * Inport: '<S16>/In1'
1265 * Inport: '<S18>/In1'
1266 * Merge: '<S15>/Merge'
1267 * Sum: '<S15>/Add'
1268 * Sum: '<S15>/Add1'
1269 * Sum: '<S15>/Add2'
1270 */
1271 if (rtb_r_cos_M1 >= 360) {
1272 /* Outputs for IfAction SubSystem: '<S15>/If Action Subsystem' incorporates:
1273 * ActionPort: '<S16>/Action Port'
1274 */
1275 rtb_Sum3_jm = (int16_T)(rtb_Sum3_jm - 5760);
1276
1277 /* End of Outputs for SubSystem: '<S15>/If Action Subsystem' */
1278 } else {
1279 if (rtb_r_cos_M1 < 0) {
1280 /* Outputs for IfAction SubSystem: '<S15>/If Action Subsystem2' incorporates:
1281 * ActionPort: '<S18>/Action Port'
1282 */
1283 rtb_Sum3_jm = (int16_T)(rtb_Sum3_jm + 5760);
1284
1285 /* End of Outputs for SubSystem: '<S15>/If Action Subsystem2' */
1286 }
1287 }
1288
1289 /* End of If: '<S15>/If' */
1290
1291 /* If: '<S3>/If' incorporates:
1292 * Inport: '<Root>/FOC_Flags'
1293 */
1294 if ((rtU->FOC_Flags == 0) || (rtU->FOC_Flags == 2)) {
1295 /* Outputs for IfAction SubSystem: '<S3>/If Action Subsystem' incorporates:
1296 * ActionPort: '<S12>/Action Port'
1297 */
1298 /* Merge: '<S3>/Merge' incorporates:
1299 * Inport: '<S12>/In1'
1300 * Merge: '<S15>/Merge'
1301 */
1302 rtDW->Merge_i = rtb_Sum3_jm;
1303
1304 /* End of Outputs for SubSystem: '<S3>/If Action Subsystem' */
1305 } else {
1306 if (rtU->FOC_Flags == 1) {
1307 /* Outputs for IfAction SubSystem: '<S3>/If Action Subsystem1' incorporates:
1308 * ActionPort: '<S13>/Action Port'
1309 */
1310 /* Merge: '<S3>/Merge' incorporates:
1311 * Inport: '<Root>/theta_Open'
1312 * Inport: '<S13>/In1'
1313 */
1314 rtDW->Merge_i = rtU->theta_Open;
1315
1316 /* End of Outputs for SubSystem: '<S3>/If Action Subsystem1' */
1317 }
1318 }
1319
1320 /* End of If: '<S3>/If' */
1321
1322 /* PreLookup: '<S58>/a_elecAngle_XA' incorporates:
1323 * Merge: '<S3>/Merge'
1324 */
1325 rtb_LogicalOperator3 = plook_u16s16_evencka(rtDW->Merge_i, 0, 16U, 360U);
1326
1327 /* Sum: '<S55>/Add2' */
1328 tmp_2 = (rtb_Divide_idx_1 - tmp_2) >> 9;
1329 if (tmp_2 > 32767LL) {
1330 tmp_2 = 32767LL;
1331 } else {
1332 if (tmp_2 < -32768LL) {
1333 tmp_2 = -32768LL;
1334 }
1335 }
1336
1337 /* Gain: '<S55>/Gain2' incorporates:
1338 * Sum: '<S55>/Add2'
1339 * Sum: '<S57>/Sum6'
1340 */
1341 rtb_Sum6_p = (int16_T)((18919 * (int16_T)tmp_2) >> 15);
1342
1343 /* Sum: '<S57>/Sum1' incorporates:
1344 * Interpolation_n-D: '<S58>/r_cos_M1'
1345 * Interpolation_n-D: '<S58>/r_sin_M1'
1346 * Product: '<S57>/Divide1'
1347 * Product: '<S57>/Divide2'
1348 * Product: '<S57>/Divide3'
1349 * Sum: '<S57>/Sum6'
1350 */
1351 rtb_Divide_idx_0 = ((rtb_Divide1_m * rtConstP.pooled9[rtb_LogicalOperator3]) >>
1352 14) + (int16_T)((rtb_Sum6_p *
1353 rtConstP.pooled8[rtb_LogicalOperator3]) >> 14);
1354 if (rtb_Divide_idx_0 > 32767) {
1355 rtb_Divide_idx_0 = 32767;
1356 } else {
1357 if (rtb_Divide_idx_0 < -32768) {
1358 rtb_Divide_idx_0 = -32768;
1359 }
1360 }
1361
1362 /* SignalConversion generated from: '<S48>/Low_Pass_Filter' incorporates:
1363 * Sum: '<S57>/Sum1'
1364 */
1365 rtb_TmpSignalConversionAtLow_Pa[0] = (int16_T)rtb_Divide_idx_0;
1366
1367 /* Sum: '<S57>/Sum6' incorporates:
1368 * Interpolation_n-D: '<S58>/r_cos_M1'
1369 * Interpolation_n-D: '<S58>/r_sin_M1'
1370 * Product: '<S57>/Divide1'
1371 * Product: '<S57>/Divide4'
1372 */
1373 rtb_Divide_idx_0 = (int16_T)((rtb_Sum6_p *
1374 rtConstP.pooled9[rtb_LogicalOperator3]) >> 14) - ((rtb_Divide1_m *
1375 rtConstP.pooled8[rtb_LogicalOperator3]) >> 14);
1376 if (rtb_Divide_idx_0 > 32767) {
1377 rtb_Divide_idx_0 = 32767;
1378 } else {
1379 if (rtb_Divide_idx_0 < -32768) {
1380 rtb_Divide_idx_0 = -32768;
1381 }
1382 }
1383
1384 /* SignalConversion generated from: '<S48>/Low_Pass_Filter' incorporates:
1385 * Sum: '<S57>/Sum6'
1386 */
1387 rtb_TmpSignalConversionAtLow_Pa[1] = (int16_T)rtb_Divide_idx_0;
1388
1389 /* Outputs for Atomic SubSystem: '<S48>/Low_Pass_Filter' */
1390 /* Constant: '<S48>/Constant' incorporates:
1391 * Outport: '<Root>/f_Idq'
1392 */
1393 Low_Pass_Filter(rtb_TmpSignalConversionAtLow_Pa, rtP.f_lpf_idq, rtY->f_Idq,
1394 &rtDW->Low_Pass_Filter_d);
1395
1396 /* End of Outputs for SubSystem: '<S48>/Low_Pass_Filter' */
1397
1398 /* Switch: '<S24>/Switch' incorporates:
1399 * Constant: '<S24>/Constant3'
1400 * Inport: '<Root>/spd_Target'
1401 */
1402 if (rtU->spd_Target > 240) {
1403 /* Switch: '<S24>/Switch1' incorporates:
1404 * Constant: '<S24>/Constant1'
1405 * DataTypeConversion: '<S24>/Data Type Conversion'
1406 * Switch: '<S24>/Switch'
1407 */
1408 if (rtb_LogicalOperator12) {
1409 rtb_Switch_np = rtU->spd_Target;
1410 } else {
1411 rtb_Switch_np = 0;
1412 }
1413
1414 /* End of Switch: '<S24>/Switch1' */
1415 } else {
1416 rtb_Switch_np = 0;
1417 }
1418
1419 /* End of Switch: '<S24>/Switch' */
1420
1421 /* Switch: '<S24>/Switch3' incorporates:
1422 * Constant: '<S24>/Constant4'
1423 * DataTypeConversion: '<S24>/Data Type Conversion2'
1424 * Inport: '<Root>/vdq_Open'
1425 */
1426 if (rtb_LogicalOperator12) {
1427 rtb_Sum6_p = rtU->vdq_Open[1];
1428 } else {
1429 rtb_Sum6_p = 0;
1430 }
1431
1432 /* End of Switch: '<S24>/Switch3' */
1433
1434 /* Sum: '<S7>/Sum3' incorporates:
1435 * UnitDelay: '<S7>/UnitDelay1'
1436 */
1437 qY = rtDW->UnitDelay1_DSTATE + /*MW:OvSatOk*/ 1U;
1438 if (rtDW->UnitDelay1_DSTATE + 1U < 1U) {
1439 qY = MAX_uint32_T;
1440 }
1441
1442 /* RelationalOperator: '<S2>/Equal' incorporates:
1443 * Constant: '<S2>/Constant1'
1444 * Math: '<S2>/Rem'
1445 * Sum: '<S7>/Sum3'
1446 */
1447 rtb_Equal_k = (qY % 40U == 0U);
1448
1449 /* If: '<S26>/If' incorporates:
1450 * DataTypeConversion: '<S26>/Data Type Conversion1'
1451 * DataTypeConversion: '<S26>/Data Type Conversion2'
1452 * Inport: '<Root>/idq_Target'
1453 * Inport: '<S27>/vq_in'
1454 * Inport: '<S30>/r_currTgt'
1455 * Switch: '<S24>/Switch3'
1456 */
1457 if (rtb_BitwiseOperator2 == 1) {
1458 /* Switch: '<S24>/Switch2' incorporates:
1459 * Constant: '<S24>/Constant2'
1460 * DataTypeConversion: '<S24>/Data Type Conversion1'
1461 * Inport: '<Root>/vdq_Open'
1462 * Inport: '<S27>/vd_in'
1463 */
1464 if (rtb_LogicalOperator12) {
1465 /* Outputs for IfAction SubSystem: '<S26>/If Action Subsystem' incorporates:
1466 * ActionPort: '<S27>/Action Port'
1467 */
1468 rtDW->Merge[0] = rtU->vdq_Open[0];
1469
1470 /* End of Outputs for SubSystem: '<S26>/If Action Subsystem' */
1471 } else {
1472 /* Outputs for IfAction SubSystem: '<S26>/If Action Subsystem' incorporates:
1473 * ActionPort: '<S27>/Action Port'
1474 */
1475 rtDW->Merge[0] = 0;
1476
1477 /* End of Outputs for SubSystem: '<S26>/If Action Subsystem' */
1478 }
1479
1480 /* End of Switch: '<S24>/Switch2' */
1481
1482 /* Outputs for IfAction SubSystem: '<S26>/If Action Subsystem' incorporates:
1483 * ActionPort: '<S27>/Action Port'
1484 */
1485 rtDW->Merge[1] = rtb_Sum6_p;
1486
1487 /* End of Outputs for SubSystem: '<S26>/If Action Subsystem' */
1488 } else if ((rtb_z_ctrlMod == 0) && rtb_Equal_k) {
1489 /* Outputs for IfAction SubSystem: '<S26>/open_mode' incorporates:
1490 * ActionPort: '<S29>/Action Port'
1491 */
1492 /* RelationalOperator: '<S31>/Relational Operator' incorporates:
1493 * Switch: '<S24>/Switch3'
1494 * UnitDelay: '<S31>/UnitDelay'
1495 */
1496 rtb_LogicalOperator12 = (rtb_Sum6_p != rtDW->UnitDelay_DSTATE_e);
1497
1498 /* If: '<S32>/If' */
1499 if (rtb_LogicalOperator12) {
1500 /* Outputs for IfAction SubSystem: '<S32>/RateInit' incorporates:
1501 * ActionPort: '<S33>/Action Port'
1502 */
1503 /* Sum: '<S33>/Add' incorporates:
1504 * Switch: '<S24>/Switch3'
1505 * UnitDelay: '<S6>/UnitDelay1'
1506 */
1507 rtb_Divide1_m = (int16_T)((rtb_Sum6_p - rtDW->UnitDelay1_DSTATE_f[1]) >> 1);
1508
1509 /* Signum: '<S33>/Sign' incorporates:
1510 * Sum: '<S33>/Add'
1511 */
1512 if (rtb_Divide1_m < 0) {
1513 rtb_Divide1_m = -1;
1514 } else {
1515 rtb_Divide1_m = (int16_T)(rtb_Divide1_m > 0);
1516 }
1517
1518 /* End of Signum: '<S33>/Sign' */
1519
1520 /* Product: '<S33>/Divide' incorporates:
1521 * Constant: '<S29>/Constant5'
1522 */
1523 rtDW->Divide = (int16_T)(rtP.dz_OpenStepVol * rtb_Divide1_m);
1524
1525 /* MinMax: '<S33>/Max' incorporates:
1526 * Switch: '<S24>/Switch3'
1527 * UnitDelay: '<S6>/UnitDelay1'
1528 */
1529 if (rtb_Sum6_p > rtDW->UnitDelay1_DSTATE_f[1]) {
1530 /* MinMax: '<S33>/Max' */
1531 rtDW->Max_p = rtb_Sum6_p;
1532 } else {
1533 /* MinMax: '<S33>/Max' */
1534 rtDW->Max_p = rtDW->UnitDelay1_DSTATE_f[1];
1535 }
1536
1537 /* End of MinMax: '<S33>/Max' */
1538
1539 /* MinMax: '<S33>/Max1' incorporates:
1540 * Switch: '<S24>/Switch3'
1541 * UnitDelay: '<S6>/UnitDelay1'
1542 */
1543 if (rtDW->UnitDelay1_DSTATE_f[1] < rtb_Sum6_p) {
1544 /* MinMax: '<S33>/Max1' */
1545 rtDW->Max1_g = rtDW->UnitDelay1_DSTATE_f[1];
1546 } else {
1547 /* MinMax: '<S33>/Max1' */
1548 rtDW->Max1_g = rtb_Sum6_p;
1549 }
1550
1551 /* End of MinMax: '<S33>/Max1' */
1552 /* End of Outputs for SubSystem: '<S32>/RateInit' */
1553
1554 /* Switch: '<S36>/Switch1' incorporates:
1555 * UnitDelay: '<S6>/UnitDelay1'
1556 */
1557 rtb_r_cos_M1 = rtDW->UnitDelay1_DSTATE_f[1];
1558 } else {
1559 /* Switch: '<S36>/Switch1' incorporates:
1560 * UnitDelay: '<S36>/UnitDelay'
1561 */
1562 rtb_r_cos_M1 = rtDW->UnitDelay_DSTATE_fv;
1563 }
1564
1565 /* End of If: '<S32>/If' */
1566
1567 /* Switch: '<S32>/Switch' incorporates:
1568 * Constant: '<S32>/Constant'
1569 * Product: '<S33>/Divide'
1570 * RelationalOperator: '<S32>/Equal'
1571 * Switch: '<S24>/Switch3'
1572 * UnitDelay: '<S32>/Unit Delay'
1573 */
1574 if (rtb_Sum6_p != rtDW->UnitDelay_DSTATE_i) {
1575 rtb_Divide1_m = rtDW->Divide;
1576 } else {
1577 rtb_Divide1_m = 0;
1578 }
1579
1580 /* End of Switch: '<S32>/Switch' */
1581
1582 /* Sum: '<S35>/Add2' */
1583 rtb_Divide_idx_0 = ((rtb_r_cos_M1 << 2) + rtb_Divide1_m) >> 2;
1584 if (rtb_Divide_idx_0 > 32767) {
1585 rtb_Divide_idx_0 = 32767;
1586 } else {
1587 if (rtb_Divide_idx_0 < -32768) {
1588 rtb_Divide_idx_0 = -32768;
1589 }
1590 }
1591
1592 /* Switch: '<S34>/Switch2' incorporates:
1593 * MinMax: '<S33>/Max'
1594 * MinMax: '<S33>/Max1'
1595 * RelationalOperator: '<S34>/LowerRelop1'
1596 * RelationalOperator: '<S34>/UpperRelop'
1597 * Sum: '<S35>/Add2'
1598 * Switch: '<S34>/Switch'
1599 */
1600 if ((int16_T)rtb_Divide_idx_0 > rtDW->Max_p) {
1601 rtb_r_cos_M1 = rtDW->Max_p;
1602 } else if ((int16_T)rtb_Divide_idx_0 < rtDW->Max1_g) {
1603 /* Switch: '<S34>/Switch' incorporates:
1604 * MinMax: '<S33>/Max1'
1605 * Switch: '<S34>/Switch2'
1606 */
1607 rtb_r_cos_M1 = rtDW->Max1_g;
1608 } else {
1609 rtb_r_cos_M1 = (int16_T)rtb_Divide_idx_0;
1610 }
1611
1612 /* End of Switch: '<S34>/Switch2' */
1613
1614 /* Merge: '<S26>/Merge' incorporates:
1615 * Constant: '<S29>/Constant3'
1616 * SignalConversion generated from: '<S29>/open_voltage'
1617 */
1618 rtDW->Merge[0] = 0;
1619
1620 /* Switch: '<S29>/Switch' incorporates:
1621 * Switch: '<S24>/Switch'
1622 */
1623 if (rtb_Switch_np > 0) {
1624 /* Merge: '<S26>/Merge' incorporates:
1625 * SignalConversion generated from: '<S29>/open_voltage'
1626 * Switch: '<S34>/Switch2'
1627 */
1628 rtDW->Merge[1] = rtb_r_cos_M1;
1629 } else {
1630 /* Merge: '<S26>/Merge' incorporates:
1631 * Constant: '<S29>/Constant1'
1632 * SignalConversion generated from: '<S29>/open_voltage'
1633 */
1634 rtDW->Merge[1] = 0;
1635 }
1636
1637 /* End of Switch: '<S29>/Switch' */
1638
1639 /* Update for UnitDelay: '<S31>/UnitDelay' incorporates:
1640 * Switch: '<S24>/Switch3'
1641 */
1642 rtDW->UnitDelay_DSTATE_e = rtb_Sum6_p;
1643
1644 /* Switch: '<S36>/Switch2' */
1645 if (rtb_LogicalOperator12) {
1646 /* Update for UnitDelay: '<S36>/UnitDelay' incorporates:
1647 * UnitDelay: '<S6>/UnitDelay1'
1648 */
1649 rtDW->UnitDelay_DSTATE_fv = rtDW->UnitDelay1_DSTATE_f[1];
1650 } else {
1651 /* Update for UnitDelay: '<S36>/UnitDelay' incorporates:
1652 * Sum: '<S35>/Add2'
1653 */
1654 rtDW->UnitDelay_DSTATE_fv = (int16_T)rtb_Divide_idx_0;
1655 }
1656
1657 /* End of Switch: '<S36>/Switch2' */
1658
1659 /* Update for UnitDelay: '<S32>/Unit Delay' incorporates:
1660 * Switch: '<S34>/Switch2'
1661 */
1662 rtDW->UnitDelay_DSTATE_i = rtb_r_cos_M1;
1663
1664 /* End of Outputs for SubSystem: '<S26>/open_mode' */
1665 } else if (rtb_z_ctrlMod == 2) {
1666 /* Outputs for IfAction SubSystem: '<S26>/torque_mode' incorporates:
1667 * ActionPort: '<S30>/Action Port'
1668 */
1669 rtDW->r_currTgt = rtU->idq_Target;
1670
1671 /* Merge: '<S26>/Merge1' incorporates:
1672 * Inport: '<Root>/idq_Target'
1673 * Inport: '<S30>/r_currTgt'
1674 * Inport: '<S30>/r_spdTgt'
1675 * Switch: '<S24>/Switch'
1676 */
1677 rtDW->Merge1 = rtb_Switch_np;
1678
1679 /* End of Outputs for SubSystem: '<S26>/torque_mode' */
1680 } else {
1681 /* Outputs for IfAction SubSystem: '<S26>/If Action Subsystem1' incorporates:
1682 * ActionPort: '<S28>/Action Port'
1683 */
1684 /* Merge: '<S26>/Merge1' incorporates:
1685 * Inport: '<S28>/In1'
1686 * Switch: '<S24>/Switch'
1687 */
1688 rtDW->Merge1 = rtb_Switch_np;
1689
1690 /* End of Outputs for SubSystem: '<S26>/If Action Subsystem1' */
1691 }
1692
1693 /* End of If: '<S26>/If' */
1694
1695 /* Switch: '<S59>/Switch2' incorporates:
1696 * Inport: '<Root>/spd_Limit'
1697 * Merge: '<S26>/Merge1'
1698 * RelationalOperator: '<S59>/LowerRelop1'
1699 * RelationalOperator: '<S59>/UpperRelop'
1700 * Switch: '<S59>/Switch'
1701 */
1702 if (rtDW->Merge1 > rtU->spd_Limit) {
1703 rtb_Switch_np = rtU->spd_Limit;
1704 } else if (rtDW->Merge1 < 0) {
1705 /* Switch: '<S59>/Switch' incorporates:
1706 * Constant: '<S49>/Constant'
1707 * Switch: '<S59>/Switch2'
1708 */
1709 rtb_Switch_np = 0;
1710 } else {
1711 rtb_Switch_np = rtDW->Merge1;
1712 }
1713
1714 /* End of Switch: '<S59>/Switch2' */
1715
1716 /* If: '<S53>/If' incorporates:
1717 * Constant: '<S76>/Constant'
1718 * Logic: '<S71>/Logical Operator'
1719 * Switch: '<S71>/Switch2'
1720 */
1721 rtb_Sum2 = -1;
1722 if ((rtb_z_ctrlMod != 0) && rtb_Equal_k) {
1723 rtb_Sum2 = 0;
1724
1725 /* Outputs for IfAction SubSystem: '<S53>/Do_Calc' incorporates:
1726 * ActionPort: '<S70>/Action Port'
1727 */
1728 /* Outputs for Atomic SubSystem: '<S76>/Low_Pass_Filter' */
1729 Low_Pass_Filter(rtb_UnitDelay1_m, rtP.f_lpf_vdq,
1730 rtb_TmpSignalConversionAtLow_Pa, &rtDW->Low_Pass_Filter_h);
1731
1732 /* End of Outputs for SubSystem: '<S76>/Low_Pass_Filter' */
1733
1734 /* DataTypeConversion: '<S70>/Data Type Conversion' incorporates:
1735 * Constant: '<S76>/Constant'
1736 * RelationalOperator: '<S70>/Equal'
1737 * UnitDelay: '<S70>/Unit Delay'
1738 */
1739 rtb_DataTypeConversion_j = (uint8_T)(rtDW->UnitDelay_DSTATE_p2 !=
1740 rtb_z_ctrlMod);
1741
1742 /* If: '<S73>/If' incorporates:
1743 * Constant: '<S87>/Constant1'
1744 * Constant: '<S87>/Constant11'
1745 * Constant: '<S87>/Constant4'
1746 * Gain: '<S70>/Gain'
1747 * Sum: '<S87>/Sum1'
1748 * Switch: '<S14>/Switch2'
1749 * Switch: '<S59>/Switch2'
1750 * UnitDelay: '<S70>/Unit Delay1'
1751 */
1752 if (rtb_z_ctrlMod == 1) {
1753 rtDW->If_ActiveSubsystem_h = 0;
1754
1755 /* Outputs for IfAction SubSystem: '<S73>/speed_mode' incorporates:
1756 * ActionPort: '<S87>/Action Port'
1757 */
1758 /* MinMax: '<S87>/Min' incorporates:
1759 * Constant: '<S87>/Constant6'
1760 * UnitDelay: '<S87>/Unit Delay'
1761 */
1762 if (rtP.i_dqMax < rtDW->UnitDelay_DSTATE_l) {
1763 rtb_Switch_f2_idx_1 = rtP.i_dqMax;
1764 } else {
1765 rtb_Switch_f2_idx_1 = rtDW->UnitDelay_DSTATE_l;
1766 }
1767
1768 /* End of MinMax: '<S87>/Min' */
1769
1770 /* MinMax: '<S87>/Min1' incorporates:
1771 * Constant: '<S87>/Constant6'
1772 * Gain: '<S87>/Gain'
1773 * Gain: '<S87>/Gain1'
1774 * UnitDelay: '<S87>/Unit Delay'
1775 */
1776 if ((int16_T)-rtDW->UnitDelay_DSTATE_l > (int16_T)-rtP.i_dqMax) {
1777 rtb_Min = (int16_T)-rtDW->UnitDelay_DSTATE_l;
1778 } else {
1779 rtb_Min = (int16_T)-rtP.i_dqMax;
1780 }
1781
1782 /* End of MinMax: '<S87>/Min1' */
1783
1784 /* Outputs for Atomic SubSystem: '<S87>/PI_Speed' */
1785 rtb_Sum1_f = PI_backCalc_fixdt(rtb_Switch_np - rtb_Switch3, rtP.cf_nKp,
1786 rtP.cf_nKi, rtP.cf_nKb, rtb_Switch_f2_idx_1, rtb_Min, (int16_T)
1787 ((rtP.cf_lastIqGain * rtDW->UnitDelay1_DSTATE_g) >> 15),
1788 rtb_DataTypeConversion_j, &rtDW->PI_Speed, &rtPrevZCX->PI_Speed);
1789
1790 /* End of Outputs for SubSystem: '<S87>/PI_Speed' */
1791
1792 /* Merge: '<S73>/Merge' incorporates:
1793 * Constant: '<S87>/Constant1'
1794 * Constant: '<S87>/Constant11'
1795 * Constant: '<S87>/Constant4'
1796 * DataTypeConversion: '<S87>/Data Type Conversion'
1797 * Gain: '<S70>/Gain'
1798 * Sum: '<S87>/Sum1'
1799 * Switch: '<S14>/Switch2'
1800 * Switch: '<S59>/Switch2'
1801 * Switch: '<S91>/Switch2'
1802 * UnitDelay: '<S70>/Unit Delay1'
1803 */
1804 rtDW->Merge_f = (int16_T)(rtb_Sum1_f >> 9);
1805
1806 /* End of Outputs for SubSystem: '<S73>/speed_mode' */
1807 } else {
1808 rtDW->If_ActiveSubsystem_h = 1;
1809
1810 /* Outputs for IfAction SubSystem: '<S73>/torque_mode' incorporates:
1811 * ActionPort: '<S88>/Action Port'
1812 */
1813 /* Sum: '<S88>/Sum1' incorporates:
1814 * Switch: '<S14>/Switch2'
1815 * Switch: '<S59>/Switch2'
1816 */
1817 rtb_Switch_np -= rtb_Switch3;
1818
1819 /* Delay: '<S88>/Delay' incorporates:
1820 * Inport: '<S30>/r_currTgt'
1821 */
1822 if (rtDW->icLoad_p != 0) {
1823 rtDW->Delay_DSTATE = rtDW->r_currTgt;
1824 }
1825
1826 /* MinMax: '<S88>/Min' incorporates:
1827 * Delay: '<S88>/Delay'
1828 * Inport: '<S30>/r_currTgt'
1829 */
1830 if (rtDW->r_currTgt < rtDW->Delay_DSTATE) {
1831 rtb_Min = rtDW->r_currTgt;
1832 } else {
1833 rtb_Min = rtDW->Delay_DSTATE;
1834 }
1835
1836 /* End of MinMax: '<S88>/Min' */
1837
1838 /* Outputs for Atomic SubSystem: '<S88>/PI_TrqSpdLim' */
1839 /* Delay: '<S93>/Resettable Delay' incorporates:
1840 * DataTypeConversion: '<S93>/Data Type Conversion2'
1841 * Inport: '<S30>/r_currTgt'
1842 */
1843 if ((rtb_DataTypeConversion_j > 0) &&
1844 (rtPrevZCX->ResettableDelay_Reset_ZCE_a != 1)) {
1845 rtDW->icLoad_k = 1U;
1846 }
1847
1848 rtPrevZCX->ResettableDelay_Reset_ZCE_a = (ZCSigState)
1849 (rtb_DataTypeConversion_j > 0);
1850 if (rtDW->icLoad_k != 0) {
1851 rtDW->ResettableDelay_DSTATE_c = rtDW->r_currTgt << 7;
1852 }
1853
1854 /* Product: '<S92>/Divide1' incorporates:
1855 * Constant: '<S88>/Constant1'
1856 * Sum: '<S88>/Sum1'
1857 */
1858 tmp_2 = (int64_T)rtb_Switch_np * rtP.cf_TrqLimKi;
1859 if (tmp_2 > 2147483647LL) {
1860 tmp_2 = 2147483647LL;
1861 } else {
1862 if (tmp_2 < -2147483648LL) {
1863 tmp_2 = -2147483648LL;
1864 }
1865 }
1866
1867 /* Sum: '<S92>/Sum2' incorporates:
1868 * Product: '<S92>/Divide1'
1869 * UnitDelay: '<S92>/Unit Delay'
1870 */
1871 if (((int32_T)tmp_2 < 0) && (rtDW->UnitDelay_DSTATE_n < MIN_int32_T
1872 - (int32_T)tmp_2)) {
1873 rtb_Divide_idx_0 = MIN_int32_T;
1874 } else if (((int32_T)tmp_2 > 0) && (rtDW->UnitDelay_DSTATE_n > MAX_int32_T
1875 - (int32_T)tmp_2)) {
1876 rtb_Divide_idx_0 = MAX_int32_T;
1877 } else {
1878 rtb_Divide_idx_0 = (int32_T)tmp_2 + rtDW->UnitDelay_DSTATE_n;
1879 }
1880
1881 /* End of Sum: '<S92>/Sum2' */
1882
1883 /* Sum: '<S93>/Sum1' incorporates:
1884 * Delay: '<S93>/Resettable Delay'
1885 */
1886 tmp_2 = (((int64_T)rtDW->ResettableDelay_DSTATE_c << 2) + rtb_Divide_idx_0)
1887 >> 2;
1888 if (tmp_2 > 2147483647LL) {
1889 tmp_2 = 2147483647LL;
1890 } else {
1891 if (tmp_2 < -2147483648LL) {
1892 tmp_2 = -2147483648LL;
1893 }
1894 }
1895
1896 rtb_Sum1_f = (int32_T)tmp_2;
1897
1898 /* End of Sum: '<S93>/Sum1' */
1899
1900 /* Product: '<S92>/Divide4' incorporates:
1901 * Constant: '<S88>/Constant4'
1902 * Sum: '<S88>/Sum1'
1903 */
1904 tmp_2 = (int64_T)rtb_Switch_np * rtP.cf_TrqLimKp;
1905 if (tmp_2 > 2147483647LL) {
1906 tmp_2 = 2147483647LL;
1907 } else {
1908 if (tmp_2 < -2147483648LL) {
1909 tmp_2 = -2147483648LL;
1910 }
1911 }
1912
1913 /* Sum: '<S92>/Sum6' incorporates:
1914 * DataTypeConversion: '<S93>/Data Type Conversion1'
1915 * Product: '<S92>/Divide4'
1916 * Sum: '<S93>/Sum1'
1917 */
1918 tmp_2 = (int64_T)(rtb_Sum1_f << 2) + (int32_T)tmp_2;
1919 if (tmp_2 > 2147483647LL) {
1920 tmp_2 = 2147483647LL;
1921 } else {
1922 if (tmp_2 < -2147483648LL) {
1923 tmp_2 = -2147483648LL;
1924 }
1925 }
1926
1927 rtb_Switch_np = (int32_T)tmp_2;
1928
1929 /* End of Sum: '<S92>/Sum6' */
1930
1931 /* RelationalOperator: '<S94>/LowerRelop1' incorporates:
1932 * MinMax: '<S88>/Min'
1933 * Switch: '<S94>/Switch2'
1934 */
1935 rtb_Divide_idx_0 = rtb_Min << 9;
1936
1937 /* Switch: '<S94>/Switch2' incorporates:
1938 * RelationalOperator: '<S94>/LowerRelop1'
1939 * Sum: '<S92>/Sum6'
1940 */
1941 if (rtb_Switch_np > rtb_Divide_idx_0) {
1942 rtb_Gain_b0 = rtb_Divide_idx_0;
1943 } else {
1944 /* Gain: '<S92>/Gain' incorporates:
1945 * MinMax: '<S88>/Min'
1946 */
1947 rtb_Gain_b0 = -32768 * rtb_Min;
1948
1949 /* Switch: '<S94>/Switch' incorporates:
1950 * Gain: '<S92>/Gain'
1951 * RelationalOperator: '<S94>/UpperRelop'
1952 * Switch: '<S94>/Switch2'
1953 */
1954 if (((int64_T)rtb_Switch_np << 6) < rtb_Gain_b0) {
1955 rtb_Gain_b0 >>= 6;
1956 } else {
1957 rtb_Gain_b0 = rtb_Switch_np;
1958 }
1959
1960 /* End of Switch: '<S94>/Switch' */
1961 }
1962
1963 /* Update for UnitDelay: '<S92>/Unit Delay' incorporates:
1964 * Constant: '<S88>/Constant2'
1965 * Product: '<S92>/Divide2'
1966 * Sum: '<S92>/Sum3'
1967 * Sum: '<S92>/Sum6'
1968 * Switch: '<S94>/Switch2'
1969 */
1970 rtDW->UnitDelay_DSTATE_n = (int32_T)(((int64_T)(rtb_Gain_b0 -
1971 rtb_Switch_np) * rtP.cf_TrqLimKb) >> 10);
1972
1973 /* Update for Delay: '<S93>/Resettable Delay' incorporates:
1974 * Sum: '<S93>/Sum1'
1975 */
1976 rtDW->icLoad_k = 0U;
1977 rtDW->ResettableDelay_DSTATE_c = rtb_Sum1_f;
1978
1979 /* End of Outputs for SubSystem: '<S88>/PI_TrqSpdLim' */
1980
1981 /* Merge: '<S73>/Merge' incorporates:
1982 * DataTypeConversion: '<S88>/Data Type Conversion'
1983 * ManualSwitch: '<S88>/Manual Switch'
1984 * Switch: '<S94>/Switch2'
1985 */
1986 rtDW->Merge_f = (int16_T)(rtb_Gain_b0 >> 9);
1987
1988 /* End of Outputs for SubSystem: '<S73>/torque_mode' */
1989 }
1990
1991 /* End of If: '<S73>/If' */
1992
1993 /* Outputs for IfAction SubSystem: '<S75>/MTPA_Calc' incorporates:
1994 * ActionPort: '<S80>/Action Port'
1995 */
1996 /* If: '<S75>/If' incorporates:
1997 * Constant: '<S80>/Constant3'
1998 * Merge: '<S75>/Merge'
1999 * Switch: '<S80>/Switch'
2000 */
2001 rtDW->Merge_c[0] = 0;
2002 rtDW->Merge_c[1] = rtDW->Merge_f;
2003
2004 /* End of Outputs for SubSystem: '<S75>/MTPA_Calc' */
2005
2006 /* Sum: '<S74>/Sum' incorporates:
2007 * Constant: '<S74>/Constant3'
2008 * UnitDelay: '<S74>/Unit Delay1'
2009 */
2010 rtb_Divide_idx_0 = (rtP.V_modulation - rtDW->UnitDelay1_DSTATE_c) >> 1;
2011 if (rtb_Divide_idx_0 < -32768) {
2012 rtb_Divide_idx_0 = -32768;
2013 }
2014
2015 /* Delay: '<S78>/Resettable Delay' incorporates:
2016 * Constant: '<S74>/Constant4'
2017 * DataTypeConversion: '<S78>/Data Type Conversion2'
2018 */
2019 if ((rtb_DataTypeConversion_j > 0) &&
2020 (rtPrevZCX->ResettableDelay_Reset_ZCE_o != 1)) {
2021 rtDW->icLoad = 1U;
2022 }
2023
2024 rtPrevZCX->ResettableDelay_Reset_ZCE_o = (ZCSigState)
2025 (rtb_DataTypeConversion_j > 0);
2026 if (rtDW->icLoad != 0) {
2027 rtDW->ResettableDelay_DSTATE = 0;
2028 }
2029
2030 /* Signum: '<S74>/Sign' incorporates:
2031 * Sum: '<S74>/Sum'
2032 */
2033 if ((int16_T)rtb_Divide_idx_0 < 0) {
2034 rtb_Switch_f2_idx_1 = -1;
2035 } else {
2036 rtb_Switch_f2_idx_1 = (int16_T)((int16_T)rtb_Divide_idx_0 > 0);
2037 }
2038
2039 /* End of Signum: '<S74>/Sign' */
2040
2041 /* Sum: '<S78>/Sum1' incorporates:
2042 * Constant: '<S74>/Constant2'
2043 * Constant: '<S74>/Constant5'
2044 * Delay: '<S78>/Resettable Delay'
2045 * Product: '<S77>/Divide'
2046 * Product: '<S77>/Divide1'
2047 * Sum: '<S77>/Add'
2048 * UnitDelay: '<S77>/Unit Delay'
2049 */
2050 rtb_Sum1_f = (((((rtP.cf_Fw_Kb * rtDW->UnitDelay_DSTATE) << 6) >> 12) +
2051 rtb_Switch_f2_idx_1 * rtP.cf_Fw_Ki) >> 4) +
2052 rtDW->ResettableDelay_DSTATE;
2053
2054 /* Switch: '<S79>/Switch2' incorporates:
2055 * Constant: '<S77>/Constant6'
2056 * RelationalOperator: '<S79>/LowerRelop1'
2057 * Sum: '<S78>/Sum1'
2058 */
2059 if (rtb_Sum1_f > 0) {
2060 rtb_Divide_idx_1 = 0;
2061 } else {
2062 /* Gain: '<S74>/Gain1' */
2063 rtb_Switch_np = -32768 * rtDW->Merge_c[1];
2064
2065 /* MinMax: '<S74>/Max' incorporates:
2066 * Constant: '<S74>/Constant6'
2067 * Gain: '<S74>/Gain1'
2068 */
2069 rtb_Divide_idx_0 = rtP.id_fieldWeakMax << 15;
2070 if (rtb_Switch_np <= rtb_Divide_idx_0) {
2071 rtb_Switch_np = rtb_Divide_idx_0;
2072 }
2073
2074 /* End of MinMax: '<S74>/Max' */
2075
2076 /* Switch: '<S79>/Switch' incorporates:
2077 * MinMax: '<S74>/Max'
2078 * RelationalOperator: '<S79>/UpperRelop'
2079 * Switch: '<S79>/Switch2'
2080 */
2081 if (((int64_T)rtb_Sum1_f << 14) < rtb_Switch_np) {
2082 rtb_Divide_idx_1 = rtb_Switch_np >> 14;
2083 } else {
2084 rtb_Divide_idx_1 = rtb_Sum1_f;
2085 }
2086
2087 /* End of Switch: '<S79>/Switch' */
2088 }
2089
2090 /* End of Switch: '<S79>/Switch2' */
2091
2092 /* Sum: '<S74>/Sum1' incorporates:
2093 * Product: '<S76>/Divide1'
2094 * Switch: '<S79>/Switch2'
2095 */
2096 rtb_Min = (int16_T)((rtb_Divide_idx_1 >> 1) + rtDW->Merge_c[0]);
2097
2098 /* Sum: '<S74>/Sum of Elements' */
2099 rtb_Switch_np = 1;
2100 rtb_Gain_b0 = 0;
2101
2102 /* Sqrt: '<S74>/Sqrt' incorporates:
2103 * Math: '<S74>/Math Function1'
2104 * Math: '<S74>/Math Function2'
2105 * Merge: '<S75>/Merge'
2106 * Product: '<S76>/Divide1'
2107 * Sum: '<S74>/Sum of Elements'
2108 * Sum: '<S74>/Sum2'
2109 */
2110 rtb_Switch_f2_idx_1 = rt_sqrt_Us32En6_Ys16En_1bhh77n4((((rtDW->Merge_c[0] *
2111 rtDW->Merge_c[0] + rtDW->Merge_c[1] * rtDW->Merge_c[1]) >> 1) - ((rtb_Min *
2112 rtb_Min) >> 1)) >> 3);
2113
2114 /* Sum: '<S76>/Add' incorporates:
2115 * Inport: '<Root>/iDC_Limit'
2116 * Inport: '<Root>/vDC'
2117 * Math: '<S86>/Math Function2'
2118 * Product: '<S49>/Divide'
2119 * Product: '<S76>/Divide'
2120 * Switch: '<S74>/Switch'
2121 */
2122 rtb_MathFunction2_p = rtU->iDC_Limit * rtU->vDC - rtb_Min *
2123 rtb_TmpSignalConversionAtLow_Pa[0];
2124
2125 /* Product: '<S76>/Divide3' incorporates:
2126 * Constant: '<S76>/Constant5'
2127 * Gain: '<S76>/Gain'
2128 * Math: '<S86>/Math Function2'
2129 */
2130 rtb_Divide_idx_0 = rtb_MathFunction2_p / (rtP.i_dqMax << 1);
2131 if (rtb_Divide_idx_0 > 32767) {
2132 rtb_Divide_idx_0 = 32767;
2133 } else {
2134 if (rtb_Divide_idx_0 < -32768) {
2135 rtb_Divide_idx_0 = -32768;
2136 }
2137 }
2138
2139 /* MinMax: '<S76>/Min2' incorporates:
2140 * Product: '<S76>/Divide3'
2141 */
2142 if (rtb_TmpSignalConversionAtLow_Pa[1] > (int16_T)rtb_Divide_idx_0) {
2143 rtb_Divide1_m = rtb_TmpSignalConversionAtLow_Pa[1];
2144 } else {
2145 rtb_Divide1_m = (int16_T)rtb_Divide_idx_0;
2146 }
2147
2148 /* End of MinMax: '<S76>/Min2' */
2149
2150 /* Product: '<S76>/Divide1' incorporates:
2151 * Math: '<S86>/Math Function2'
2152 */
2153 rtb_Divide_idx_0 = rtb_MathFunction2_p / rtb_Divide1_m;
2154 if (rtb_Divide_idx_0 > 32767) {
2155 rtb_Divide_idx_0 = 32767;
2156 } else {
2157 if (rtb_Divide_idx_0 < -32768) {
2158 rtb_Divide_idx_0 = -32768;
2159 }
2160 }
2161
2162 /* Signum: '<S76>/Sign' incorporates:
2163 * Sqrt: '<S74>/Sqrt'
2164 */
2165 if (rtb_Switch_f2_idx_1 < 0) {
2166 rtb_Sum6_p = -1;
2167 } else {
2168 rtb_Sum6_p = (int16_T)(rtb_Switch_f2_idx_1 > 0);
2169 }
2170
2171 /* End of Signum: '<S76>/Sign' */
2172
2173 /* Product: '<S76>/Divide2' incorporates:
2174 * Product: '<S76>/Divide1'
2175 */
2176 rtb_r_cos_M1 = (int16_T)((int16_T)rtb_Divide_idx_0 * rtb_Sum6_p);
2177
2178 /* Switch: '<S85>/Switch2' incorporates:
2179 * Constant: '<S76>/Constant2'
2180 * Constant: '<S76>/Constant3'
2181 * Gain: '<S76>/Gain1'
2182 * Product: '<S76>/Divide2'
2183 * RelationalOperator: '<S85>/LowerRelop1'
2184 * RelationalOperator: '<S85>/UpperRelop'
2185 * Switch: '<S85>/Switch'
2186 */
2187 if (rtb_r_cos_M1 > rtP.i_dqMax) {
2188 rtb_r_cos_M1 = rtP.i_dqMax;
2189 } else {
2190 if (rtb_r_cos_M1 < (int16_T)-rtP.i_dqMax) {
2191 /* Switch: '<S85>/Switch' incorporates:
2192 * Constant: '<S76>/Constant2'
2193 * Gain: '<S76>/Gain1'
2194 * Switch: '<S85>/Switch2'
2195 */
2196 rtb_r_cos_M1 = (int16_T)-rtP.i_dqMax;
2197 }
2198 }
2199
2200 /* End of Switch: '<S85>/Switch2' */
2201
2202 /* Switch: '<S76>/Switch' incorporates:
2203 * MinMax: '<S76>/Min1'
2204 * Sqrt: '<S74>/Sqrt'
2205 * Switch: '<S85>/Switch2'
2206 */
2207 if (rtb_Sum6_p > 0) {
2208 /* MinMax: '<S76>/Min' incorporates:
2209 * Sqrt: '<S74>/Sqrt'
2210 * Switch: '<S85>/Switch2'
2211 */
2212 if (rtb_r_cos_M1 < rtb_Switch_f2_idx_1) {
2213 /* Switch: '<S76>/Switch' */
2214 rtDW->Switch = rtb_r_cos_M1;
2215 } else {
2216 /* Switch: '<S76>/Switch' */
2217 rtDW->Switch = rtb_Switch_f2_idx_1;
2218 }
2219
2220 /* End of MinMax: '<S76>/Min' */
2221 } else if (rtb_r_cos_M1 > rtb_Switch_f2_idx_1) {
2222 /* MinMax: '<S76>/Min1' incorporates:
2223 * Switch: '<S76>/Switch'
2224 * Switch: '<S85>/Switch2'
2225 */
2226 rtDW->Switch = rtb_r_cos_M1;
2227 } else {
2228 /* Switch: '<S76>/Switch' incorporates:
2229 * Sqrt: '<S74>/Sqrt'
2230 */
2231 rtDW->Switch = rtb_Switch_f2_idx_1;
2232 }
2233
2234 /* End of Switch: '<S76>/Switch' */
2235
2236 /* Switch: '<S84>/Switch2' incorporates:
2237 * Constant: '<S76>/Constant1'
2238 * Constant: '<S76>/Constant2'
2239 * Gain: '<S76>/Gain1'
2240 * RelationalOperator: '<S84>/LowerRelop1'
2241 * RelationalOperator: '<S84>/UpperRelop'
2242 * Switch: '<S74>/Switch'
2243 * Switch: '<S84>/Switch'
2244 */
2245 if (rtb_Min > rtP.i_dqMax) {
2246 /* Switch: '<S84>/Switch2' */
2247 rtDW->Switch2 = rtP.i_dqMax;
2248 } else if (rtb_Min < (int16_T)-rtP.i_dqMax) {
2249 /* Switch: '<S84>/Switch' incorporates:
2250 * Constant: '<S76>/Constant2'
2251 * Gain: '<S76>/Gain1'
2252 * Switch: '<S84>/Switch2'
2253 */
2254 rtDW->Switch2 = (int16_T)-rtP.i_dqMax;
2255 } else {
2256 /* Switch: '<S84>/Switch2' */
2257 rtDW->Switch2 = rtb_Min;
2258 }
2259
2260 /* End of Switch: '<S84>/Switch2' */
2261
2262 /* Sqrt: '<S86>/Sqrt1' incorporates:
2263 * Math: '<S86>/Math Function2'
2264 * Math: '<S86>/Math Function3'
2265 * Product: '<S76>/Divide1'
2266 * Sum: '<S86>/Add'
2267 * Switch: '<S74>/Switch'
2268 */
2269 rtb_Min = rt_sqrt_Us32En10_Ys16E_7VJYwqF9(rtb_Min * rtb_Min + (int16_T)
2270 rtb_Divide_idx_0 * (int16_T)rtb_Divide_idx_0);
2271
2272 /* Sum: '<S77>/Sum' incorporates:
2273 * Sum: '<S78>/Sum1'
2274 * Switch: '<S79>/Switch2'
2275 */
2276 rtb_MathFunction2_p = rtb_Divide_idx_1 - rtb_Sum1_f;
2277
2278 /* End of Outputs for SubSystem: '<S53>/Do_Calc' */
2279 }
2280
2281 /* RelationalOperator: '<S106>/Relational Operator' incorporates:
2282 * Switch: '<S84>/Switch2'
2283 * UnitDelay: '<S106>/UnitDelay'
2284 */
2285 rtb_Equal_k = (rtDW->Switch2 != rtDW->UnitDelay_DSTATE_h);
2286
2287 /* Sum: '<S97>/Add' incorporates:
2288 * Product: '<S60>/Divide1'
2289 * Switch: '<S84>/Switch2'
2290 * UnitDelay: '<S97>/Unit Delay1'
2291 */
2292 rtb_Sum6_p = (int16_T)(rtDW->Switch2 - rtDW->UnitDelay1_DSTATE_i);
2293
2294 /* Abs: '<S97>/Abs' incorporates:
2295 * Product: '<S60>/Divide1'
2296 */
2297 if (rtb_Sum6_p < 0) {
2298 rtb_Sum6_p = (int16_T)-rtb_Sum6_p;
2299 }
2300
2301 /* End of Abs: '<S97>/Abs' */
2302
2303 /* Outputs for Enabled SubSystem: '<S97>/Enabled Subsystem' incorporates:
2304 * EnablePort: '<S107>/Enable'
2305 */
2306 /* If: '<S108>/If' incorporates:
2307 * Gain: '<S97>/Gain'
2308 * Product: '<S60>/Divide1'
2309 * UnitDelay: '<S97>/Unit Delay1'
2310 */
2311 if (rtb_Equal_k) {
2312 /* Outputs for IfAction SubSystem: '<S108>/RateInit' incorporates:
2313 * ActionPort: '<S109>/Action Port'
2314 */
2315 RateInit(rtDW->UnitDelay1_DSTATE_i, rtDW->Switch2, (int16_T)((13107 *
2316 rtb_Sum6_p) >> 13), &rtDW->Divide_n, &rtDW->Max_g, &rtDW->Max1_j);
2317
2318 /* End of Outputs for SubSystem: '<S108>/RateInit' */
2319
2320 /* Switch: '<S112>/Switch1' incorporates:
2321 * Gain: '<S97>/Gain'
2322 * Product: '<S60>/Divide1'
2323 * UnitDelay: '<S97>/Unit Delay1'
2324 */
2325 rtb_Divide1_m = rtDW->UnitDelay1_DSTATE_i;
2326 } else {
2327 /* Switch: '<S112>/Switch1' incorporates:
2328 * UnitDelay: '<S112>/UnitDelay'
2329 */
2330 rtb_Divide1_m = rtDW->UnitDelay_DSTATE_b;
2331 }
2332
2333 /* End of If: '<S108>/If' */
2334 /* End of Outputs for SubSystem: '<S97>/Enabled Subsystem' */
2335
2336 /* Switch: '<S108>/Switch' incorporates:
2337 * Constant: '<S108>/Constant'
2338 * Product: '<S109>/Divide'
2339 * RelationalOperator: '<S108>/Equal'
2340 * Switch: '<S84>/Switch2'
2341 * UnitDelay: '<S108>/Unit Delay'
2342 */
2343 if (rtDW->Switch2 != rtDW->UnitDelay_DSTATE_g) {
2344 rtb_Switch_f2_idx_1 = rtDW->Divide_n;
2345 } else {
2346 rtb_Switch_f2_idx_1 = 0;
2347 }
2348
2349 /* End of Switch: '<S108>/Switch' */
2350
2351 /* Sum: '<S111>/Add2' */
2352 rtb_Divide_idx_0 = ((rtb_Divide1_m << 5) + rtb_Switch_f2_idx_1) >> 5;
2353 if (rtb_Divide_idx_0 > 32767) {
2354 rtb_Divide_idx_0 = 32767;
2355 } else {
2356 if (rtb_Divide_idx_0 < -32768) {
2357 rtb_Divide_idx_0 = -32768;
2358 }
2359 }
2360
2361 /* Switch: '<S110>/Switch2' incorporates:
2362 * MinMax: '<S109>/Max'
2363 * MinMax: '<S109>/Max1'
2364 * RelationalOperator: '<S110>/LowerRelop1'
2365 * RelationalOperator: '<S110>/UpperRelop'
2366 * Sum: '<S111>/Add2'
2367 * Switch: '<S110>/Switch'
2368 */
2369 if ((int16_T)rtb_Divide_idx_0 > rtDW->Max_g) {
2370 rtb_Divide1_m = rtDW->Max_g;
2371 } else if ((int16_T)rtb_Divide_idx_0 < rtDW->Max1_j) {
2372 /* Switch: '<S110>/Switch' incorporates:
2373 * MinMax: '<S109>/Max1'
2374 * Switch: '<S110>/Switch2'
2375 */
2376 rtb_Divide1_m = rtDW->Max1_j;
2377 } else {
2378 rtb_Divide1_m = (int16_T)rtb_Divide_idx_0;
2379 }
2380
2381 /* End of Switch: '<S110>/Switch2' */
2382
2383 /* RelationalOperator: '<S113>/Relational Operator' incorporates:
2384 * Switch: '<S76>/Switch'
2385 * UnitDelay: '<S113>/UnitDelay'
2386 */
2387 rtb_LogicalOperator12 = (rtDW->Switch != rtDW->UnitDelay_DSTATE_o);
2388
2389 /* Sum: '<S98>/Add' incorporates:
2390 * Product: '<S60>/Divide1'
2391 * Switch: '<S76>/Switch'
2392 * UnitDelay: '<S98>/Unit Delay1'
2393 */
2394 rtb_Sum6_p = (int16_T)(rtDW->Switch - rtDW->UnitDelay1_DSTATE_b);
2395
2396 /* Abs: '<S98>/Abs' incorporates:
2397 * Product: '<S60>/Divide1'
2398 */
2399 if (rtb_Sum6_p < 0) {
2400 rtb_Sum6_p = (int16_T)-rtb_Sum6_p;
2401 }
2402
2403 /* End of Abs: '<S98>/Abs' */
2404
2405 /* Outputs for Enabled SubSystem: '<S98>/Enabled Subsystem' incorporates:
2406 * EnablePort: '<S114>/Enable'
2407 */
2408 /* If: '<S115>/If' incorporates:
2409 * Gain: '<S98>/Gain'
2410 * Product: '<S60>/Divide1'
2411 * UnitDelay: '<S98>/Unit Delay1'
2412 */
2413 if (rtb_LogicalOperator12) {
2414 /* Outputs for IfAction SubSystem: '<S115>/RateInit' incorporates:
2415 * ActionPort: '<S116>/Action Port'
2416 */
2417 RateInit(rtDW->UnitDelay1_DSTATE_b, rtDW->Switch, (int16_T)((13107 *
2418 rtb_Sum6_p) >> 13), &rtDW->Divide_l, &rtDW->Max, &rtDW->Max1);
2419
2420 /* End of Outputs for SubSystem: '<S115>/RateInit' */
2421
2422 /* Switch: '<S119>/Switch1' incorporates:
2423 * Gain: '<S98>/Gain'
2424 * Product: '<S60>/Divide1'
2425 * UnitDelay: '<S98>/Unit Delay1'
2426 */
2427 rtb_r_cos_M1 = rtDW->UnitDelay1_DSTATE_b;
2428 } else {
2429 /* Switch: '<S119>/Switch1' incorporates:
2430 * UnitDelay: '<S119>/UnitDelay'
2431 */
2432 rtb_r_cos_M1 = rtDW->UnitDelay_DSTATE_d;
2433 }
2434
2435 /* End of If: '<S115>/If' */
2436 /* End of Outputs for SubSystem: '<S98>/Enabled Subsystem' */
2437
2438 /* Switch: '<S115>/Switch' incorporates:
2439 * Constant: '<S115>/Constant'
2440 * Product: '<S116>/Divide'
2441 * RelationalOperator: '<S115>/Equal'
2442 * Switch: '<S76>/Switch'
2443 * UnitDelay: '<S115>/Unit Delay'
2444 */
2445 if (rtDW->Switch != rtDW->UnitDelay_DSTATE_a) {
2446 rtb_Switch_f2_idx_1 = rtDW->Divide_l;
2447 } else {
2448 rtb_Switch_f2_idx_1 = 0;
2449 }
2450
2451 /* End of Switch: '<S115>/Switch' */
2452
2453 /* Sum: '<S118>/Add2' */
2454 rtb_Divide_idx_1 = ((rtb_r_cos_M1 << 5) + rtb_Switch_f2_idx_1) >> 5;
2455 if (rtb_Divide_idx_1 > 32767) {
2456 rtb_Divide_idx_1 = 32767;
2457 } else {
2458 if (rtb_Divide_idx_1 < -32768) {
2459 rtb_Divide_idx_1 = -32768;
2460 }
2461 }
2462
2463 /* Switch: '<S117>/Switch2' incorporates:
2464 * MinMax: '<S116>/Max'
2465 * MinMax: '<S116>/Max1'
2466 * RelationalOperator: '<S117>/LowerRelop1'
2467 * RelationalOperator: '<S117>/UpperRelop'
2468 * Sum: '<S118>/Add2'
2469 * Switch: '<S117>/Switch'
2470 */
2471 if ((int16_T)rtb_Divide_idx_1 > rtDW->Max) {
2472 rtb_r_cos_M1 = rtDW->Max;
2473 } else if ((int16_T)rtb_Divide_idx_1 < rtDW->Max1) {
2474 /* Switch: '<S117>/Switch' incorporates:
2475 * MinMax: '<S116>/Max1'
2476 * Switch: '<S117>/Switch2'
2477 */
2478 rtb_r_cos_M1 = rtDW->Max1;
2479 } else {
2480 rtb_r_cos_M1 = (int16_T)rtb_Divide_idx_1;
2481 }
2482
2483 /* End of Switch: '<S117>/Switch2' */
2484
2485 /* DataTypeConversion: '<S54>/Data Type Conversion' incorporates:
2486 * Logic: '<S54>/Logical Operator'
2487 * RelationalOperator: '<S54>/Equal'
2488 * UnitDelay: '<S54>/Unit Delay'
2489 */
2490 rtb_DataTypeConversion_j = (uint8_T)((rtb_z_ctrlMod != 0) &&
2491 (rtDW->UnitDelay_DSTATE_bm != rtb_z_ctrlMod));
2492
2493 /* If: '<S54>/If1' incorporates:
2494 * Constant: '<S95>/Constant1'
2495 * Constant: '<S95>/Constant3'
2496 * Constant: '<S95>/Constant4'
2497 * Constant: '<S95>/Constant6'
2498 * Constant: '<S95>/Constant7'
2499 * Constant: '<S95>/Constant8'
2500 * Gain: '<S95>/Gain1'
2501 * Gain: '<S95>/Gain2'
2502 * Inport: '<S96>/In1'
2503 * Merge: '<S26>/Merge'
2504 * Merge: '<S54>/Merge'
2505 * Outport: '<Root>/f_Idq'
2506 * Product: '<S95>/Divide'
2507 * Sum: '<S95>/Sum'
2508 * Sum: '<S95>/Sum1'
2509 * Switch: '<S110>/Switch2'
2510 * Switch: '<S117>/Switch2'
2511 * UnitDelay: '<S6>/UnitDelay1'
2512 */
2513 if (rtb_z_ctrlMod != 0) {
2514 /* Outputs for IfAction SubSystem: '<S54>/CurrentLoop' incorporates:
2515 * ActionPort: '<S95>/Action Port'
2516 */
2517 /* Product: '<S95>/Divide' incorporates:
2518 * Constant: '<S95>/Constant2'
2519 * Inport: '<Root>/vDC'
2520 */
2521 rtb_Sum6_p = (int16_T)((rtU->vDC * rtP.V_modulation) >> 14);
2522
2523 /* Outputs for Atomic SubSystem: '<S95>/PI_backCalc_fixdt' */
2524 rtb_Switch_np = PI_backCalc_fixdt_o((int16_T)(rtb_Divide1_m - rtY->f_Idq[0]),
2525 rtP.cf_idKp, rtP.cf_idKi, rtP.cf_idKb, rtb_Sum6_p, (int16_T)-rtb_Sum6_p,
2526 rtDW->UnitDelay1_DSTATE_f[0], rtb_DataTypeConversion_j,
2527 &rtDW->PI_backCalc_fixdt_o3, &rtPrevZCX->PI_backCalc_fixdt_o3);
2528
2529 /* End of Outputs for SubSystem: '<S95>/PI_backCalc_fixdt' */
2530
2531 /* Outputs for Atomic SubSystem: '<S95>/PI_backCalc_fixdt1' */
2532 rtb_Gain_b0 = PI_backCalc_fixdt_o((int16_T)(rtb_r_cos_M1 - rtY->f_Idq[1]),
2533 rtP.cf_iqKp, rtP.cf_iqKi, rtP.cf_iqKb, rtb_Sum6_p, (int16_T)-rtb_Sum6_p,
2534 rtDW->UnitDelay1_DSTATE_f[1], rtb_DataTypeConversion_j,
2535 &rtDW->PI_backCalc_fixdt1, &rtPrevZCX->PI_backCalc_fixdt1);
2536
2537 /* End of Outputs for SubSystem: '<S95>/PI_backCalc_fixdt1' */
2538
2539 /* Sum: '<S95>/Sum2' incorporates:
2540 * Constant: '<S95>/Constant1'
2541 * Constant: '<S95>/Constant3'
2542 * Constant: '<S95>/Constant4'
2543 * Constant: '<S95>/Constant6'
2544 * Constant: '<S95>/Constant7'
2545 * Constant: '<S95>/Constant8'
2546 * DataTypeConversion: '<S95>/Data Type Conversion'
2547 * DataTypeConversion: '<S95>/Data Type Conversion1'
2548 * Gain: '<S95>/Gain1'
2549 * Gain: '<S95>/Gain2'
2550 * Merge: '<S54>/Merge'
2551 * Outport: '<Root>/f_Idq'
2552 * Product: '<S95>/Divide'
2553 * Sum: '<S95>/Sum'
2554 * Sum: '<S95>/Sum1'
2555 * Switch: '<S103>/Switch2'
2556 * Switch: '<S105>/Switch2'
2557 * Switch: '<S110>/Switch2'
2558 * Switch: '<S117>/Switch2'
2559 * UnitDelay: '<S6>/UnitDelay1'
2560 */
2561 rtb_TmpSignalConversionAtLow_Pa[0] = (int16_T)(rtb_Switch_np >> 9);
2562 rtb_TmpSignalConversionAtLow_Pa[1] = (int16_T)(rtb_Gain_b0 >> 9);
2563
2564 /* End of Outputs for SubSystem: '<S54>/CurrentLoop' */
2565 } else {
2566 /* Outputs for IfAction SubSystem: '<S54>/OpenLoop' incorporates:
2567 * ActionPort: '<S96>/Action Port'
2568 */
2569 rtb_TmpSignalConversionAtLow_Pa[0] = rtDW->Merge[0];
2570 rtb_TmpSignalConversionAtLow_Pa[1] = rtDW->Merge[1];
2571
2572 /* End of Outputs for SubSystem: '<S54>/OpenLoop' */
2573 }
2574
2575 /* End of If: '<S54>/If1' */
2576
2577 /* Product: '<S51>/Divide2' incorporates:
2578 * Constant: '<S51>/Constant'
2579 * Inport: '<Root>/vDC'
2580 * Product: '<S60>/Divide1'
2581 */
2582 rtb_Sum6_p = (int16_T)div_nde_s32_floor(rtU->vDC << 14, rtP.V_modulation);
2583
2584 /* Sum: '<S51>/Sum of Elements' incorporates:
2585 * Math: '<S51>/Math Function'
2586 * Merge: '<S54>/Merge'
2587 */
2588 tmp_2 = (int64_T)((rtb_TmpSignalConversionAtLow_Pa[0] *
2589 rtb_TmpSignalConversionAtLow_Pa[0]) >> 4) +
2590 ((rtb_TmpSignalConversionAtLow_Pa[1] * rtb_TmpSignalConversionAtLow_Pa[1]) >>
2591 4);
2592 if (tmp_2 > 2147483647LL) {
2593 tmp_2 = 2147483647LL;
2594 } else {
2595 if (tmp_2 < -2147483648LL) {
2596 tmp_2 = -2147483648LL;
2597 }
2598 }
2599
2600 /* Product: '<S51>/Divide' incorporates:
2601 * Math: '<S51>/Math Function1'
2602 * Product: '<S60>/Divide1'
2603 * Sum: '<S51>/Sum of Elements'
2604 */
2605 tmp_2 = ((int64_T)(int32_T)tmp_2 << 14) / ((rtb_Sum6_p * rtb_Sum6_p) >> 4);
2606 if (tmp_2 < 0LL) {
2607 tmp_2 = 0LL;
2608 } else {
2609 if (tmp_2 > 65535LL) {
2610 tmp_2 = 65535LL;
2611 }
2612 }
2613
2614 /* Sqrt: '<S51>/Sqrt' incorporates:
2615 * Product: '<S51>/Divide'
2616 */
2617 rtb_BitwiseOperator2 = rt_sqrt_Uu16En14_Yu16E_WMwW1mku((uint16_T)tmp_2);
2618
2619 /* Switch: '<S51>/Switch' incorporates:
2620 * Merge: '<S54>/Merge'
2621 * Sqrt: '<S51>/Sqrt'
2622 */
2623 if (rtb_BitwiseOperator2 > 16384) {
2624 /* Switch: '<S51>/Switch' incorporates:
2625 * Merge: '<S54>/Merge'
2626 * MultiPortSwitch: '<S51>/Multiport Switch'
2627 * Product: '<S51>/Divide1'
2628 */
2629 rtb_Switch_f2_idx_0 = (int16_T)((rtb_TmpSignalConversionAtLow_Pa[0] << 14) /
2630 rtb_BitwiseOperator2);
2631 rtb_Switch_f2_idx_1 = (int16_T)((rtb_TmpSignalConversionAtLow_Pa[1] << 14) /
2632 rtb_BitwiseOperator2);
2633 } else {
2634 rtb_Switch_f2_idx_0 = rtb_TmpSignalConversionAtLow_Pa[0];
2635 rtb_Switch_f2_idx_1 = rtb_TmpSignalConversionAtLow_Pa[1];
2636 }
2637
2638 /* End of Switch: '<S51>/Switch' */
2639
2640 /* Sum: '<S60>/Sum1' incorporates:
2641 * Interpolation_n-D: '<S58>/r_cos_M1'
2642 * Interpolation_n-D: '<S58>/r_sin_M1'
2643 * Product: '<S60>/Divide2'
2644 * Product: '<S60>/Divide3'
2645 */
2646 tmp_0 = (int16_T)((rtb_Switch_f2_idx_0 * rtConstP.pooled8[rtb_LogicalOperator3])
2647 >> 14) + (int16_T)((rtb_Switch_f2_idx_1 *
2648 rtConstP.pooled9[rtb_LogicalOperator3]) >> 14);
2649 if (tmp_0 > 32767) {
2650 tmp_0 = 32767;
2651 } else {
2652 if (tmp_0 < -32768) {
2653 tmp_0 = -32768;
2654 }
2655 }
2656
2657 /* Sum: '<S60>/Sum6' incorporates:
2658 * Interpolation_n-D: '<S58>/r_cos_M1'
2659 * Interpolation_n-D: '<S58>/r_sin_M1'
2660 * Product: '<S60>/Divide1'
2661 * Product: '<S60>/Divide4'
2662 */
2663 tmp = (int16_T)((rtb_Switch_f2_idx_0 * rtConstP.pooled9[rtb_LogicalOperator3])
2664 >> 14) - (int16_T)((rtb_Switch_f2_idx_1 *
2665 rtConstP.pooled8[rtb_LogicalOperator3]) >> 14);
2666 if (tmp > 32767) {
2667 tmp = 32767;
2668 } else {
2669 if (tmp < -32768) {
2670 tmp = -32768;
2671 }
2672 }
2673
2674 /* Product: '<S61>/Divide7' incorporates:
2675 * Constant: '<S61>/Constant3'
2676 * Sum: '<S60>/Sum1'
2677 */
2678 rtb_Sum6_p = (int16_T)((2365 * (int16_T)tmp_0) >> 11);
2679
2680 /* MATLAB Function: '<S61>/sector_select' incorporates:
2681 * Product: '<S61>/Divide7'
2682 * Sum: '<S60>/Sum1'
2683 * Sum: '<S60>/Sum6'
2684 */
2685 if ((int16_T)tmp_0 >= 0) {
2686 if ((int16_T)tmp >= 0) {
2687 if (rtb_Sum6_p > ((int16_T)tmp << 1)) {
2688 /* DataTypeConversion: '<S61>/Data Type Conversion' */
2689 rtb_DataTypeConversion_j = 2U;
2690 } else {
2691 /* DataTypeConversion: '<S61>/Data Type Conversion' */
2692 rtb_DataTypeConversion_j = 1U;
2693 }
2694 } else {
2695 rtb_Gain_p2 = -rtb_Sum6_p;
2696 if (-rtb_Sum6_p > 32767) {
2697 rtb_Gain_p2 = 32767;
2698 }
2699
2700 if (rtb_Gain_p2 > ((int16_T)tmp << 1)) {
2701 /* DataTypeConversion: '<S61>/Data Type Conversion' */
2702 rtb_DataTypeConversion_j = 3U;
2703 } else {
2704 /* DataTypeConversion: '<S61>/Data Type Conversion' */
2705 rtb_DataTypeConversion_j = 2U;
2706 }
2707 }
2708 } else if ((int16_T)tmp >= 0) {
2709 rtb_Gain_p2 = -rtb_Sum6_p;
2710 if (-rtb_Sum6_p > 32767) {
2711 rtb_Gain_p2 = 32767;
2712 }
2713
2714 if (rtb_Gain_p2 > ((int16_T)tmp << 1)) {
2715 /* DataTypeConversion: '<S61>/Data Type Conversion' */
2716 rtb_DataTypeConversion_j = 5U;
2717 } else {
2718 /* DataTypeConversion: '<S61>/Data Type Conversion' */
2719 rtb_DataTypeConversion_j = 6U;
2720 }
2721 } else if (rtb_Sum6_p > ((int16_T)tmp << 1)) {
2722 /* DataTypeConversion: '<S61>/Data Type Conversion' */
2723 rtb_DataTypeConversion_j = 4U;
2724 } else {
2725 /* DataTypeConversion: '<S61>/Data Type Conversion' */
2726 rtb_DataTypeConversion_j = 5U;
2727 }
2728
2729 /* End of MATLAB Function: '<S61>/sector_select' */
2730
2731 /* Gain: '<S61>/Gain' incorporates:
2732 * Inport: '<Root>/vDC'
2733 */
2734 rtb_Gain_p2 = 18919 * rtU->vDC;
2735
2736 /* Product: '<S61>/Divide' incorporates:
2737 * Gain: '<S61>/Gain'
2738 * Sum: '<S60>/Sum6'
2739 */
2740 rtb_Sum6_k = (int16_T)(((int64_T)(int16_T)tmp << 26) / rtb_Gain_p2);
2741
2742 /* Product: '<S61>/Divide1' incorporates:
2743 * Gain: '<S61>/Gain'
2744 * Sum: '<S60>/Sum1'
2745 */
2746 rtb_Sum1_a = (int16_T)(((int64_T)(int16_T)tmp_0 << 26) / rtb_Gain_p2);
2747
2748 /* MultiPortSwitch: '<S62>/Multiport Switch' incorporates:
2749 * DataTypeConversion: '<S61>/Data Type Conversion1'
2750 */
2751 switch (rtb_DataTypeConversion_j) {
2752 case 1:
2753 /* Product: '<S64>/Divide3' incorporates:
2754 * Constant: '<S61>/Constant1'
2755 * DataTypeConversion: '<S61>/Data Type Conversion2'
2756 * Product: '<S61>/Divide1'
2757 * Product: '<S64>/Divide2'
2758 */
2759 rtb_Divide3_k = (int16_T)(((int16_T)((rtb_Sum1_a * 9459) >> 13) * (int16_T)
2760 rtP.i_pwm_count) >> 12);
2761
2762 /* Product: '<S64>/Divide1' incorporates:
2763 * Constant: '<S61>/Constant1'
2764 * Constant: '<S64>/Constant'
2765 * DataTypeConversion: '<S61>/Data Type Conversion2'
2766 * Product: '<S61>/Divide'
2767 * Product: '<S61>/Divide1'
2768 * Product: '<S64>/Divide'
2769 * Sum: '<S64>/Add'
2770 */
2771 rtb_Sum1_a = (int16_T)(((int16_T)(rtb_Sum6_k - ((rtb_Sum1_a * 9459) >> 14)) *
2772 (int16_T)rtP.i_pwm_count) >> 12);
2773
2774 /* Product: '<S64>/Divide4' incorporates:
2775 * Constant: '<S61>/Constant1'
2776 * DataTypeConversion: '<S61>/Data Type Conversion2'
2777 * Sum: '<S64>/Add1'
2778 * Sum: '<S64>/Add2'
2779 */
2780 rtb_Sum6_p = (int16_T)((int16_T)((int16_T)((int16_T)rtP.i_pwm_count -
2781 rtb_Sum1_a) - rtb_Divide3_k) >> 1);
2782
2783 /* Sum: '<S64>/Add3' */
2784 rtb_Sum6_k = (int16_T)(rtb_Sum6_p + rtb_Divide3_k);
2785
2786 /* Outport: '<Root>/pwm_Duty' incorporates:
2787 * Sum: '<S64>/Add4'
2788 */
2789 rtY->pwm_Duty[0] = (int16_T)(rtb_Sum6_k + rtb_Sum1_a);
2790 rtY->pwm_Duty[1] = rtb_Sum6_k;
2791 rtY->pwm_Duty[2] = rtb_Sum6_p;
2792 break;
2793
2794 case 2:
2795 /* Product: '<S65>/Divide1' incorporates:
2796 * Constant: '<S61>/Constant1'
2797 * Constant: '<S65>/Constant'
2798 * DataTypeConversion: '<S61>/Data Type Conversion2'
2799 * Product: '<S61>/Divide'
2800 * Product: '<S61>/Divide1'
2801 * Product: '<S65>/Divide'
2802 * Sum: '<S65>/Add'
2803 */
2804 rtb_Divide3_k = (int16_T)(((int16_T)(((rtb_Sum1_a * 9459) >> 14) +
2805 rtb_Sum6_k) * (int16_T)rtP.i_pwm_count) >> 12);
2806
2807 /* Product: '<S65>/Divide3' incorporates:
2808 * Constant: '<S61>/Constant1'
2809 * Constant: '<S65>/Constant'
2810 * DataTypeConversion: '<S61>/Data Type Conversion2'
2811 * Product: '<S61>/Divide'
2812 * Product: '<S61>/Divide1'
2813 * Product: '<S65>/Divide2'
2814 * Sum: '<S65>/Add5'
2815 */
2816 rtb_Sum1_a = (int16_T)(((int16_T)(((rtb_Sum1_a * 9459) >> 14) - rtb_Sum6_k) *
2817 (int16_T)rtP.i_pwm_count) >> 12);
2818
2819 /* Product: '<S65>/Divide4' incorporates:
2820 * Constant: '<S61>/Constant1'
2821 * DataTypeConversion: '<S61>/Data Type Conversion2'
2822 * Sum: '<S65>/Add1'
2823 * Sum: '<S65>/Add2'
2824 */
2825 rtb_Sum6_p = (int16_T)((int16_T)((int16_T)((int16_T)rtP.i_pwm_count -
2826 rtb_Sum1_a) - rtb_Divide3_k) >> 1);
2827
2828 /* Sum: '<S65>/Add3' */
2829 rtb_Sum6_k = (int16_T)(rtb_Sum6_p + rtb_Divide3_k);
2830
2831 /* Outport: '<Root>/pwm_Duty' incorporates:
2832 * Sum: '<S65>/Add4'
2833 */
2834 rtY->pwm_Duty[0] = rtb_Sum6_k;
2835 rtY->pwm_Duty[1] = (int16_T)(rtb_Sum6_k + rtb_Sum1_a);
2836 rtY->pwm_Duty[2] = rtb_Sum6_p;
2837 break;
2838
2839 case 3:
2840 /* Product: '<S66>/Divide1' incorporates:
2841 * Constant: '<S61>/Constant1'
2842 * Constant: '<S66>/Constant'
2843 * DataTypeConversion: '<S61>/Data Type Conversion2'
2844 * Product: '<S61>/Divide'
2845 * Product: '<S61>/Divide1'
2846 * Product: '<S66>/Divide'
2847 * Sum: '<S66>/Add'
2848 */
2849 rtb_Sum6_k = (int16_T)(((int16_T)(-rtb_Sum6_k - ((rtb_Sum1_a * 9459) >> 14))
2850 * (int16_T)rtP.i_pwm_count) >> 12);
2851
2852 /* Product: '<S66>/Divide3' incorporates:
2853 * Constant: '<S61>/Constant1'
2854 * DataTypeConversion: '<S61>/Data Type Conversion2'
2855 * Product: '<S61>/Divide1'
2856 * Product: '<S66>/Divide2'
2857 */
2858 rtb_Sum1_a = (int16_T)(((int16_T)((rtb_Sum1_a * 9459) >> 13) * (int16_T)
2859 rtP.i_pwm_count) >> 12);
2860
2861 /* Product: '<S66>/Divide4' incorporates:
2862 * Constant: '<S61>/Constant1'
2863 * DataTypeConversion: '<S61>/Data Type Conversion2'
2864 * Sum: '<S66>/Add1'
2865 * Sum: '<S66>/Add2'
2866 */
2867 rtb_Sum6_p = (int16_T)((int16_T)((int16_T)((int16_T)rtP.i_pwm_count -
2868 rtb_Sum1_a) - rtb_Sum6_k) >> 1);
2869
2870 /* Sum: '<S66>/Add3' */
2871 rtb_Sum6_k += rtb_Sum6_p;
2872
2873 /* Outport: '<Root>/pwm_Duty' incorporates:
2874 * Sum: '<S66>/Add4'
2875 */
2876 rtY->pwm_Duty[0] = rtb_Sum6_p;
2877 rtY->pwm_Duty[1] = (int16_T)(rtb_Sum6_k + rtb_Sum1_a);
2878 rtY->pwm_Duty[2] = rtb_Sum6_k;
2879 break;
2880
2881 case 4:
2882 /* Product: '<S67>/Divide1' incorporates:
2883 * Constant: '<S61>/Constant1'
2884 * Constant: '<S67>/Constant'
2885 * DataTypeConversion: '<S61>/Data Type Conversion2'
2886 * Product: '<S61>/Divide'
2887 * Product: '<S61>/Divide1'
2888 * Product: '<S67>/Divide'
2889 * Sum: '<S67>/Add'
2890 */
2891 rtb_Sum6_k = (int16_T)(((int16_T)(((rtb_Sum1_a * 9459) >> 14) - rtb_Sum6_k) *
2892 (int16_T)rtP.i_pwm_count) >> 12);
2893
2894 /* Product: '<S67>/Divide3' incorporates:
2895 * Constant: '<S61>/Constant1'
2896 * DataTypeConversion: '<S61>/Data Type Conversion2'
2897 * Product: '<S61>/Divide1'
2898 * Product: '<S67>/Divide2'
2899 * Sum: '<S67>/Add5'
2900 */
2901 rtb_Sum1_a = (int16_T)(((int16_T)(-((int16_T)((rtb_Sum1_a * 9459) >> 13) <<
2902 2) >> 2) * (int16_T)rtP.i_pwm_count) >> 12);
2903
2904 /* Product: '<S67>/Divide4' incorporates:
2905 * Constant: '<S61>/Constant1'
2906 * DataTypeConversion: '<S61>/Data Type Conversion2'
2907 * Sum: '<S67>/Add1'
2908 * Sum: '<S67>/Add2'
2909 */
2910 rtb_Sum6_p = (int16_T)((int16_T)((int16_T)((int16_T)rtP.i_pwm_count -
2911 rtb_Sum1_a) - rtb_Sum6_k) >> 1);
2912
2913 /* Sum: '<S67>/Add3' */
2914 rtb_Sum6_k += rtb_Sum6_p;
2915
2916 /* Outport: '<Root>/pwm_Duty' incorporates:
2917 * Sum: '<S67>/Add4'
2918 */
2919 rtY->pwm_Duty[0] = rtb_Sum6_p;
2920 rtY->pwm_Duty[1] = rtb_Sum6_k;
2921 rtY->pwm_Duty[2] = (int16_T)(rtb_Sum6_k + rtb_Sum1_a);
2922 break;
2923
2924 case 5:
2925 /* Product: '<S68>/Divide3' incorporates:
2926 * Constant: '<S61>/Constant1'
2927 * Constant: '<S68>/Constant'
2928 * DataTypeConversion: '<S61>/Data Type Conversion2'
2929 * Product: '<S61>/Divide'
2930 * Product: '<S61>/Divide1'
2931 * Product: '<S68>/Divide2'
2932 * Sum: '<S68>/Add5'
2933 */
2934 rtb_Divide3_k = (int16_T)(((int16_T)(rtb_Sum6_k - ((rtb_Sum1_a * 9459) >> 14))
2935 * (int16_T)rtP.i_pwm_count) >> 12);
2936
2937 /* Product: '<S68>/Divide1' incorporates:
2938 * Constant: '<S61>/Constant1'
2939 * Constant: '<S68>/Constant'
2940 * DataTypeConversion: '<S61>/Data Type Conversion2'
2941 * Product: '<S61>/Divide'
2942 * Product: '<S61>/Divide1'
2943 * Product: '<S68>/Divide'
2944 * Sum: '<S68>/Add'
2945 */
2946 rtb_Sum1_a = (int16_T)(((int16_T)(-rtb_Sum6_k - ((rtb_Sum1_a * 9459) >> 14))
2947 * (int16_T)rtP.i_pwm_count) >> 12);
2948
2949 /* Product: '<S68>/Divide4' incorporates:
2950 * Constant: '<S61>/Constant1'
2951 * DataTypeConversion: '<S61>/Data Type Conversion2'
2952 * Sum: '<S68>/Add1'
2953 * Sum: '<S68>/Add2'
2954 */
2955 rtb_Sum6_p = (int16_T)((int16_T)((int16_T)((int16_T)rtP.i_pwm_count -
2956 rtb_Sum1_a) - rtb_Divide3_k) >> 1);
2957
2958 /* Sum: '<S68>/Add3' */
2959 rtb_Sum6_k = (int16_T)(rtb_Sum6_p + rtb_Divide3_k);
2960
2961 /* Outport: '<Root>/pwm_Duty' incorporates:
2962 * Sum: '<S68>/Add4'
2963 */
2964 rtY->pwm_Duty[0] = rtb_Sum6_k;
2965 rtY->pwm_Duty[1] = rtb_Sum6_p;
2966 rtY->pwm_Duty[2] = (int16_T)(rtb_Sum6_k + rtb_Sum1_a);
2967 break;
2968
2969 default:
2970 /* Product: '<S69>/Divide3' incorporates:
2971 * Constant: '<S61>/Constant1'
2972 * DataTypeConversion: '<S61>/Data Type Conversion2'
2973 * Product: '<S61>/Divide1'
2974 * Product: '<S69>/Divide2'
2975 * Sum: '<S69>/Add5'
2976 */
2977 rtb_Divide3_k = (int16_T)(((int16_T)(-((int16_T)((rtb_Sum1_a * 9459) >> 13) <<
2978 2) >> 2) * (int16_T)rtP.i_pwm_count) >> 12);
2979
2980 /* Product: '<S69>/Divide1' incorporates:
2981 * Constant: '<S61>/Constant1'
2982 * Constant: '<S69>/Constant'
2983 * DataTypeConversion: '<S61>/Data Type Conversion2'
2984 * Product: '<S61>/Divide'
2985 * Product: '<S61>/Divide1'
2986 * Product: '<S69>/Divide'
2987 * Sum: '<S69>/Add'
2988 */
2989 rtb_Sum1_a = (int16_T)(((int16_T)(((rtb_Sum1_a * 9459) >> 14) + rtb_Sum6_k) *
2990 (int16_T)rtP.i_pwm_count) >> 12);
2991
2992 /* Product: '<S69>/Divide4' incorporates:
2993 * Constant: '<S61>/Constant1'
2994 * DataTypeConversion: '<S61>/Data Type Conversion2'
2995 * Sum: '<S69>/Add1'
2996 * Sum: '<S69>/Add2'
2997 */
2998 rtb_Sum6_p = (int16_T)((int16_T)((int16_T)((int16_T)rtP.i_pwm_count -
2999 rtb_Sum1_a) - rtb_Divide3_k) >> 1);
3000
3001 /* Sum: '<S69>/Add3' */
3002 rtb_Sum6_k = (int16_T)(rtb_Sum6_p + rtb_Divide3_k);
3003
3004 /* Outport: '<Root>/pwm_Duty' incorporates:
3005 * Sum: '<S69>/Add4'
3006 */
3007 rtY->pwm_Duty[0] = (int16_T)(rtb_Sum6_k + rtb_Sum1_a);
3008 rtY->pwm_Duty[1] = rtb_Sum6_p;
3009 rtY->pwm_Duty[2] = rtb_Sum6_k;
3010 break;
3011 }
3012
3013 /* End of MultiPortSwitch: '<S62>/Multiport Switch' */
3014
3015 /* Switch: '<S119>/Switch2' */
3016 if (rtb_LogicalOperator12) {
3017 /* Update for UnitDelay: '<S119>/UnitDelay' incorporates:
3018 * UnitDelay: '<S98>/Unit Delay1'
3019 */
3020 rtDW->UnitDelay_DSTATE_d = rtDW->UnitDelay1_DSTATE_b;
3021 } else {
3022 /* Update for UnitDelay: '<S119>/UnitDelay' incorporates:
3023 * Sum: '<S118>/Add2'
3024 */
3025 rtDW->UnitDelay_DSTATE_d = (int16_T)rtb_Divide_idx_1;
3026 }
3027
3028 /* End of Switch: '<S119>/Switch2' */
3029
3030 /* Switch: '<S112>/Switch2' */
3031 if (rtb_Equal_k) {
3032 /* Update for UnitDelay: '<S112>/UnitDelay' incorporates:
3033 * UnitDelay: '<S97>/Unit Delay1'
3034 */
3035 rtDW->UnitDelay_DSTATE_b = rtDW->UnitDelay1_DSTATE_i;
3036 } else {
3037 /* Update for UnitDelay: '<S112>/UnitDelay' incorporates:
3038 * Sum: '<S111>/Add2'
3039 */
3040 rtDW->UnitDelay_DSTATE_b = (int16_T)rtb_Divide_idx_0;
3041 }
3042
3043 /* End of Switch: '<S112>/Switch2' */
3044
3045 /* Switch: '<S37>/Switch1' incorporates:
3046 * RelationalOperator: '<S39>/Relational Operator'
3047 * UnitDelay: '<S39>/UnitDelay'
3048 */
3049 if (rtb_n_commDeacv != rtDW->UnitDelay_DSTATE_bv) {
3050 rtb_UnitDelay = rtb_Sum_i;
3051 }
3052
3053 /* End of Switch: '<S37>/Switch1' */
3054
3055 /* Update for UnitDelay: '<S6>/UnitDelay1' incorporates:
3056 * Switch: '<S51>/Switch'
3057 */
3058 rtDW->UnitDelay1_DSTATE_f[0] = rtb_Switch_f2_idx_0;
3059 rtDW->UnitDelay1_DSTATE_f[1] = rtb_Switch_f2_idx_1;
3060
3061 /* Update for UnitDelay: '<S37>/UnitDelay' */
3062 rtDW->UnitDelay_DSTATE_j = rtb_UnitDelay;
3063
3064 /* Update for Delay: '<S9>/Delay' incorporates:
3065 * Inport: '<Root>/hall_A'
3066 */
3067 rtDW->Delay_DSTATE_d = rtU->hall_A;
3068
3069 /* Update for Delay: '<S9>/Delay1' incorporates:
3070 * Inport: '<Root>/hall_B'
3071 */
3072 rtDW->Delay1_DSTATE = rtU->hall_B;
3073
3074 /* Update for Delay: '<S9>/Delay2' incorporates:
3075 * Inport: '<Root>/hall_C'
3076 */
3077 rtDW->Delay2_DSTATE = rtU->hall_C;
3078
3079 /* Update for UnitDelay: '<S14>/UnitDelay3' incorporates:
3080 * Inport: '<Root>/us_Count'
3081 */
3082 rtDW->UnitDelay3_DSTATE = rtU->us_Count;
3083
3084 /* Update for UnitDelay: '<S14>/UnitDelay4' incorporates:
3085 * Abs: '<S14>/Abs5'
3086 */
3087 rtDW->UnitDelay4_DSTATE = rtb_Switch2;
3088
3089 /* Update for UnitDelay: '<S38>/UnitDelay' */
3090 rtDW->UnitDelay_DSTATE_k = rtb_n_commDeacv;
3091
3092 /* Update for UnitDelay: '<S42>/UnitDelay' */
3093 rtDW->UnitDelay_DSTATE_nx = rtb_RelationalOperator4_f;
3094
3095 /* Update for UnitDelay: '<S7>/UnitDelay1' incorporates:
3096 * Sum: '<S7>/Sum3'
3097 */
3098 rtDW->UnitDelay1_DSTATE = qY;
3099
3100 /* If: '<S53>/If' */
3101 if (rtb_Sum2 == 0) {
3102 /* Update for IfAction SubSystem: '<S53>/Do_Calc' incorporates:
3103 * ActionPort: '<S70>/Action Port'
3104 */
3105 /* Update for UnitDelay: '<S70>/Unit Delay' */
3106 rtDW->UnitDelay_DSTATE_p2 = rtb_z_ctrlMod;
3107
3108 /* Update for UnitDelay: '<S70>/Unit Delay1' incorporates:
3109 * Merge: '<S73>/Merge'
3110 */
3111 rtDW->UnitDelay1_DSTATE_g = rtDW->Merge_f;
3112
3113 /* Update for If: '<S73>/If' */
3114 switch (rtDW->If_ActiveSubsystem_h) {
3115 case 0:
3116 /* Update for IfAction SubSystem: '<S73>/speed_mode' incorporates:
3117 * ActionPort: '<S87>/Action Port'
3118 */
3119 /* Update for UnitDelay: '<S87>/Unit Delay' incorporates:
3120 * Sqrt: '<S86>/Sqrt1'
3121 */
3122 rtDW->UnitDelay_DSTATE_l = rtb_Min;
3123
3124 /* End of Update for SubSystem: '<S73>/speed_mode' */
3125 break;
3126
3127 case 1:
3128 /* Update for IfAction SubSystem: '<S73>/torque_mode' incorporates:
3129 * ActionPort: '<S88>/Action Port'
3130 */
3131 /* Update for Delay: '<S88>/Delay' incorporates:
3132 * Sqrt: '<S86>/Sqrt1'
3133 */
3134 rtDW->icLoad_p = 0U;
3135 rtDW->Delay_DSTATE = rtb_Min;
3136
3137 /* End of Update for SubSystem: '<S73>/torque_mode' */
3138 break;
3139 }
3140
3141 /* End of Update for If: '<S73>/If' */
3142
3143 /* Update for UnitDelay: '<S74>/Unit Delay1' incorporates:
3144 * Sqrt: '<S51>/Sqrt'
3145 */
3146 rtDW->UnitDelay1_DSTATE_c = rtb_BitwiseOperator2;
3147
3148 /* Update for UnitDelay: '<S77>/Unit Delay' incorporates:
3149 * Sum: '<S77>/Sum'
3150 */
3151 rtDW->UnitDelay_DSTATE = rtb_MathFunction2_p;
3152
3153 /* Update for Delay: '<S78>/Resettable Delay' incorporates:
3154 * Sum: '<S78>/Sum1'
3155 */
3156 rtDW->icLoad = 0U;
3157 rtDW->ResettableDelay_DSTATE = rtb_Sum1_f;
3158
3159 /* End of Update for SubSystem: '<S53>/Do_Calc' */
3160 }
3161
3162 /* Update for UnitDelay: '<S106>/UnitDelay' incorporates:
3163 * Switch: '<S84>/Switch2'
3164 */
3165 rtDW->UnitDelay_DSTATE_h = rtDW->Switch2;
3166
3167 /* Update for UnitDelay: '<S97>/Unit Delay1' incorporates:
3168 * Switch: '<S110>/Switch2'
3169 */
3170 rtDW->UnitDelay1_DSTATE_i = rtb_Divide1_m;
3171
3172 /* Update for UnitDelay: '<S108>/Unit Delay' incorporates:
3173 * Switch: '<S110>/Switch2'
3174 */
3175 rtDW->UnitDelay_DSTATE_g = rtb_Divide1_m;
3176
3177 /* Update for UnitDelay: '<S113>/UnitDelay' incorporates:
3178 * Switch: '<S76>/Switch'
3179 */
3180 rtDW->UnitDelay_DSTATE_o = rtDW->Switch;
3181
3182 /* Update for UnitDelay: '<S98>/Unit Delay1' incorporates:
3183 * Switch: '<S117>/Switch2'
3184 */
3185 rtDW->UnitDelay1_DSTATE_b = rtb_r_cos_M1;
3186
3187 /* Update for UnitDelay: '<S115>/Unit Delay' incorporates:
3188 * Switch: '<S117>/Switch2'
3189 */
3190 rtDW->UnitDelay_DSTATE_a = rtb_r_cos_M1;
3191
3192 /* Update for UnitDelay: '<S54>/Unit Delay' */
3193 rtDW->UnitDelay_DSTATE_bm = rtb_z_ctrlMod;
3194
3195 /* Update for UnitDelay: '<S39>/UnitDelay' */
3196 rtDW->UnitDelay_DSTATE_bv = rtb_n_commDeacv;
3197
3198 /* End of Outputs for SubSystem: '<Root>/PMSM_Controller' */
3199
3200 /* Outport: '<Root>/f_Vdq' incorporates:
3201 * UnitDelay: '<S6>/UnitDelay1'
3202 */
3203 rtY->f_Vdq[0] = rtb_UnitDelay1_m[0];
3204 rtY->f_Vdq[1] = rtb_UnitDelay1_m[1];
3205
3206 /* Outport: '<Root>/n_Sector' */
3207 rtY->n_Sector = rtb_DataTypeConversion_j;
3208
3209 /* Outport: '<Root>/n_MotError' */
3210 rtY->n_MotError = rtb_UnitDelay;
3211
3212 /* Outport: '<Root>/f_MotAngle' incorporates:
3213 * Merge: '<S3>/Merge'
3214 */
3215 rtY->f_MotAngle = rtDW->Merge_i;
3216
3217 /* Outport: '<Root>/f_MotRPM' incorporates:
3218 * Switch: '<S14>/Switch2'
3219 */
3220 rtY->f_MotRPM = rtb_Switch3;
3221
3222 /* Outport: '<Root>/f_hallAngle' incorporates:
3223 * Merge: '<S15>/Merge'
3224 */
3225 rtY->f_hallAngle = rtb_Sum3_jm;
3226
3227 /* Outport: '<Root>/n_hallStat' */
3228 rtY->n_hallStat = rtb_Add_gf;
3229
3230 /* Outport: '<Root>/n_runingMode' */
3231 rtY->n_runingMode = rtb_z_ctrlMod;
3232}
3233
3234/* Model initialize function */
3235void PMSM_Controller_initialize(RT_MODEL *const rtM)
3236{
3237 DW *rtDW = rtM->dwork;
3238 PrevZCX *rtPrevZCX = rtM->prevZCSigState;
3239 ExtY *rtY = (ExtY *) rtM->outputs;
3240 rtPrevZCX->ResettableDelay_Reset_ZCE_a = POS_ZCSIG;
3241 rtPrevZCX->ResettableDelay_Reset_ZCE_o = POS_ZCSIG;
3242 rtPrevZCX->PI_backCalc_fixdt1.ResettableDelay_Reset_ZCE = POS_ZCSIG;
3243 rtPrevZCX->PI_backCalc_fixdt_o3.ResettableDelay_Reset_ZCE = POS_ZCSIG;
3244 rtPrevZCX->PI_Speed.ResettableDelay_Reset_ZCE_f = POS_ZCSIG;
3245
3246 /* SystemInitialize for Atomic SubSystem: '<Root>/PMSM_Controller' */
3247 /* SystemInitialize for IfAction SubSystem: '<S14>/Raw_Motor_Speed_Estimation' */
3248 /* InitializeConditions for UnitDelay: '<S20>/UnitDelay2' */
3249 rtDW->UnitDelay2_DSTATE = rtP.n_hall_count_ps;
3250
3251 /* SystemInitialize for Outport: '<S20>/z_counter' incorporates:
3252 * Inport: '<S20>/z_counterRawPrev'
3253 */
3254 rtDW->z_counterRawPrev = rtP.n_hall_count_ps;
3255
3256 /* End of SystemInitialize for SubSystem: '<S14>/Raw_Motor_Speed_Estimation' */
3257
3258 /* SystemInitialize for IfAction SubSystem: '<S53>/Do_Calc' */
3259 /* Start for If: '<S73>/If' */
3260 rtDW->If_ActiveSubsystem_h = -1;
3261
3262 /* InitializeConditions for Delay: '<S78>/Resettable Delay' */
3263 rtDW->icLoad = 1U;
3264
3265 /* SystemInitialize for IfAction SubSystem: '<S73>/speed_mode' */
3266 /* SystemInitialize for Atomic SubSystem: '<S87>/PI_Speed' */
3267 PI_backCalc_fixdt_Init(&rtDW->PI_Speed);
3268
3269 /* End of SystemInitialize for SubSystem: '<S87>/PI_Speed' */
3270 /* End of SystemInitialize for SubSystem: '<S73>/speed_mode' */
3271
3272 /* SystemInitialize for IfAction SubSystem: '<S73>/torque_mode' */
3273 /* InitializeConditions for Delay: '<S88>/Delay' */
3274 rtDW->icLoad_p = 1U;
3275
3276 /* SystemInitialize for Atomic SubSystem: '<S88>/PI_TrqSpdLim' */
3277 /* InitializeConditions for Delay: '<S93>/Resettable Delay' */
3278 rtDW->icLoad_k = 1U;
3279
3280 /* End of SystemInitialize for SubSystem: '<S88>/PI_TrqSpdLim' */
3281 /* End of SystemInitialize for SubSystem: '<S73>/torque_mode' */
3282 /* End of SystemInitialize for SubSystem: '<S53>/Do_Calc' */
3283
3284 /* SystemInitialize for IfAction SubSystem: '<S54>/CurrentLoop' */
3285 /* SystemInitialize for Atomic SubSystem: '<S95>/PI_backCalc_fixdt' */
3286 PI_backCalc_fixdt_p_Init(&rtDW->PI_backCalc_fixdt_o3);
3287
3288 /* End of SystemInitialize for SubSystem: '<S95>/PI_backCalc_fixdt' */
3289
3290 /* SystemInitialize for Atomic SubSystem: '<S95>/PI_backCalc_fixdt1' */
3291 PI_backCalc_fixdt_p_Init(&rtDW->PI_backCalc_fixdt1);
3292
3293 /* End of SystemInitialize for SubSystem: '<S95>/PI_backCalc_fixdt1' */
3294 /* End of SystemInitialize for SubSystem: '<S54>/CurrentLoop' */
3295 /* End of SystemInitialize for SubSystem: '<Root>/PMSM_Controller' */
3296
3297 /* SystemInitialize for Outport: '<Root>/f_MotAngle' incorporates:
3298 * Merge: '<S3>/Merge'
3299 */
3300 rtY->f_MotAngle = rtDW->Merge_i;
3301}
3302
3303/*
3304 * File trailer for generated code.
3305 *
3306 * [EOF]
3307 */
3308