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