This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] TMS320F28335:由于 PID CONTRLLLER 块在 MATLAB Simulink 中无法正常工作、降压转换器的闭环无法正常工作

Guru**** 2534260 points
Other Parts Discussed in Thread: TMS320F28335

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1010154/tms320f28335-closed-loop-of-buck-converter-is-not-working-due-to-pid-contrlller-block-is-not-working-properly-in-matlab-simulink

器件型号:TMS320F28335

尊敬的 TI 团队:

在 Matlab Simulink 平台中的 TMS320F28335微控制器的帮助下、我正在设计闭环系统内的降压转换器

当我在开环系统中运行降压转换器时、它运行良好、由 F28335生成的 ePWM 大约为20kHz。但我的输出电压不正确。

我们的额定值为24伏输入、12伏直流输出、20kHz 开关频率。

现在、当我在闭环中运行该系统时、问题就会出现、因此对于闭环、我使用的是 Simulink 类型的 PID 控制器块、

当我运行不带 DSP 的 Simulink 模型时、它运行正常、我已以离散形式调整了 P 和 I 值。

但是、当我尝试在硬件基础上实施时、连接 ADC 块以测量输出电压并馈送到微控制器、然后使用一些增益值和夏季模块来获得与参考点(恒定模块)相关的误差差异。

当我尝试运行一个模型并将代码放入 DSP 中时、这个问题出现在 PID 块中、它一直进入饱和点(0.95)。 因此、我的控制器运行缓慢。

有人在我做错的地方帮助我吗?

在这张图中,我当时没有运行块,它没有处于模拟模式。

但是、是的、当我运行模型或将代码转储到 DSP 中时、问题将以0.95 (饱和值)的值进入 PID 块。  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    阿里耶特

    您是否了解了进入电路板上 ADC 的电压以确保其处于预期范围?  我还会查看 ADCResults、看看换算后的值是否符合您的预期。  

    最棒的
    Matthew

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    是 的,请在运行硬件部件时获得这些结果。 请参阅

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    在输出中、我得到的电压为9.65伏、但它仍然缓慢增加、但问题在于当我使用 相同的 P 和 I 值设计 Simulink IN 中的控制器时、我将获得准确的结果。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    但在这里,PI 控制器工作不正常,由于未知原因达到饱和值  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    请参阅实际值,使用第二增益(14.96/3)获取实际值的原因。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    阿里耶特

    最大 ADC 输入值由 VREFHI 决定、但该值上限为<=VDDA 电压轨。  我们在这里看到的最大值为3.0- 3.3V。  这意味着 ADC 将在该电压下达到满量程。  如果您通过 VREFHI 驱动任何东西进入 ADC、它将在4095 (12位)或65535 (16位)上饱和。

    如果我不理解、请告诉我。

    如果 ADC 输入受到控制、则必须是 PWM 未正确调制才能在需要时获得总线电压、我们可以在那里进行调试。

    最棒的

    Matthew

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    SIR、请参见上图、其中显示 ADC 值约为2555、不超过4055。 我知道 ADC 有12位、SIR 问题出现在 PID 控制器中、该值已饱和、即使我们在仿真工具中很好地对 PID 值进行了分析。 请帮帮我

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    请参阅这个。 我的输出电压值最大为12伏。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    阿里耶特

    我将邀请其他人查看此帖子、请给我一整天左右的时间。

    最棒的

    Matthew

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    当然可以、先生。 我也会等待您和其他人的响应。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    SIR DMC C2000 PID 控制器是否工作?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    阿里耶特

    根据您最初的注释、开环中的调节电压不正确、我想知道是否有某些方面的硬件在运行、导致闭环的运行方式不符合您的要求。  我将向 MW 团队征求意见。

    最棒的

    Matthew

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    阿里耶特

    还有一个问题、降压转换器是 TI 套件还是定制设计?  我正在尝试确定问题是在硬件域还是某个代码/SW 中。

    最棒的

    Matthew

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    先生,这是一个定制设计,我设计了一个额定功率为100瓦,24-12伏的降压转换器。 当它在开环中运行时,它在相应的负载下提供9伏电压。一旦我转到 MATLAB Simulink,在那里我设计了一个闭环结构,那么它就不起作用了。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    先生,是否有更新?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Arijeet、

    以下是一些可能对您有所帮助的资源。

    《为直流/直流降压转换器建模电压控制器- MATLAB & Simulink 示例》(mathworks.com)

    有关此模型工作的视频:

    直流/直流降压转换器示例-文件交换- MATLAB Central (mathworks.com)

    在闭环中运行时、您还可以考虑在 CCS 中调试 ADC 值吗?

    此致、

    Venkatesh C

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    谢谢主席先生、我 之前参考过、现在仍在寻求帮助、但它使用不同的模型、我有 TMS320F28335 DSP、某些功能不起作用。

    在闭环中运行时、我将发布 ADC 值的 CCS、但 SIR 可以从 Simulink (由 Simulink 开发)导出代码。 我不知道如何在 CCS 中编写代码。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Arijeet、

    以下是从 Simulink 将代码导入 CCS 的方法:

    从模型创建 CCS 工程- MATLAB & Simulink (mathworks.com)

    您是否正在使用降压转换器的定制设计?

    TI 提供的类似这样的东西:

    C2000 数字电源降压转换器 BoosterPack 设计指南(修订版 A)(TI.com)

    此致、

    Venkatesh C

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    谢谢主席先生。  

    这是我的降压转换器定制设计。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    先生,我将把降压转换器闭环的代码从 Simulink 导入 CCS,并对其进行调试。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    SIR 在上述型号(第一张图片)中,运行该型号或硬件的正确方法是什么?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Arijeet、

    由于我们需要更多信息来更好地了解问题、因此最好您联系我们的支持渠道。 当我们收到支持请求时、我们的内部流程使我们能够让合适的人员参与解决此问题、我们将立即与您联系、以更详细的方式了解案例。

    请通过以下地址联系我们:
    https://www.mathworks.com/support.html

    此致、

    Venkatesh C

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    是的、先生、我是否需要在 MathWorks 中发布同样的问题?

    我仍然没有解决这个问题。 我需要解决这个问题。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Venkatesh 先生:

    我在这里发布我的代码,请参阅。

    /*
    2	 * Academic License - for use in teaching, academic research, and meeting
    3	 * course requirements at degree granting institutions only.  Not for
    4	 * government, commercial, or other organizational use.
    5	 *
    6	 * File: pwmdsp_3.c
    7	 *
    8	 * Code generated for Simulink model 'pwmdsp_3'.
    9	 *
    10	 * Model version                  : 1.8
    11	 * Simulink Coder version         : 9.1 (R2019a) 23-Nov-2018
    12	 * C/C++ source code generated on : Sat Jun 26 18:40:45 2021
    13	 *
    14	 * Target selection: ert.tlc
    15	 * Embedded hardware selection: Texas Instruments->C2000
    16	 * Code generation objectives: Unspecified
    17	 * Validation result: Not run
    18	 */
    19	
    20	#include "pwmdsp_3.h"
    21	#include "pwmdsp_3_private.h"
    22	
    23	/* Block signals (default storage) */
    24	B_pwmdsp_3_T pwmdsp_3_B;
    25	
    26	/* Block states (default storage) */
    27	DW_pwmdsp_3_T pwmdsp_3_DW;
    28	
    29	/* Real-time model */
    30	RT_MODEL_pwmdsp_3_T pwmdsp_3_M_;
    31	RT_MODEL_pwmdsp_3_T *const pwmdsp_3_M = &pwmdsp_3_M_;
    32	static uint16_T adcInitFlag = 0;
    33	void mul_wide_su32(int32_T in0, uint32_T in1, uint32_T *ptrOutBitsHi, uint32_T
    34	                   *ptrOutBitsLo)
    35	{
    36	  uint32_T outBitsLo;
    37	  uint32_T absIn0;
    38	  uint32_T in0Hi;
    39	  uint32_T in1Lo;
    40	  uint32_T in1Hi;
    41	  uint32_T productHiLo;
    42	  uint32_T productLoHi;
    43	  absIn0 = in0 < 0L ? ~(uint32_T)in0 + 1UL : (uint32_T)in0;
    44	  in0Hi = absIn0 >> 16UL;
    45	  absIn0 &= 65535UL;
    46	  in1Hi = in1 >> 16UL;
    47	  in1Lo = in1 & 65535UL;
    48	  productHiLo = in0Hi * in1Lo;
    49	  productLoHi = absIn0 * in1Hi;
    50	  absIn0 *= in1Lo;
    51	  in1Lo = 0UL;
    52	  outBitsLo = (productLoHi << /*MW:OvBitwiseOk*/ 16UL) + /*MW:OvCarryOk*/ absIn0;
    53	  if (outBitsLo < absIn0) {
    54	    in1Lo = 1UL;
    55	  }
    56	
    57	  absIn0 = outBitsLo;
    58	  outBitsLo += /*MW:OvCarryOk*/ productHiLo << /*MW:OvBitwiseOk*/ 16UL;
    59	  if (outBitsLo < absIn0) {
    60	    in1Lo++;
    61	  }
    62	
    63	  absIn0 = (((productLoHi >> 16UL) + (productHiLo >> 16UL)) + in0Hi * in1Hi) +
    64	    in1Lo;
    65	  if ((in1 != 0UL) && (in0 < 0L)) {
    66	    absIn0 = ~absIn0;
    67	    outBitsLo = ~outBitsLo;
    68	    outBitsLo++;
    69	    if (outBitsLo == 0UL) {
    70	      absIn0++;
    71	    }
    72	  }
    73	
    74	  *ptrOutBitsHi = absIn0;
    75	  *ptrOutBitsLo = outBitsLo;
    76	}
    77	
    78	int32_T mul_ssu32_loSR(int32_T a, uint32_T b, uint32_T aShift)
    79	{
    80	  uint32_T u32_chi;
    81	  uint32_T u32_clo;
    82	  mul_wide_su32(a, b, &u32_chi, &u32_clo);
    83	  u32_clo = u32_chi << /*MW:OvBitwiseOk*/ (32UL - aShift) | u32_clo >> aShift;
    84	  return (int32_T)u32_clo;
    85	}
    86	
    87	/* Hardware Interrupt Block: '<Root>/C28x Hardware Interrupt' */
    88	void isr_int1pie1_task_fcn(void)
    89	{
    90	  /* Call the system: <Root>/ADC-PWM Subsystem */
    91	  {
    92	    /* S-Function (c28xisr_c2000): '<Root>/C28x Hardware Interrupt' */
    93	
    94	    /* Output and update for function-call system: '<Root>/ADC-PWM Subsystem' */
    95	    {
    96	      /* local block i/o variables */
    97	      uint16_T rtb_Gain;
    98	      int32_T rtb_Saturation;
    99	      int32_T rtb_IQNxIQN;
    100	      int32_T rtb_IQNxIQN1;
    101	      real_T v;
    102	
    103	      /* DataTypeConversion: '<S1>/Data Type Conversion' incorporates:
    104	       *  Constant: '<S1>/Constant'
    105	       */
    106	      v = fabs(pwmdsp_3_P.Constant_Value);
    107	      if (v < 4.503599627370496E+15) {
    108	        if (v >= 0.5) {
    109	          v = floor(pwmdsp_3_P.Constant_Value + 0.5);
    110	        } else {
    111	          v = pwmdsp_3_P.Constant_Value * 0.0;
    112	        }
    113	      } else {
    114	        v = pwmdsp_3_P.Constant_Value;
    115	      }
    116	
    117	      if (rtIsNaN(v) || rtIsInf(v)) {
    118	        v = 0.0;
    119	      } else {
    120	        v = fmod(v, 65536.0);
    121	      }
    122	
    123	      rtb_Gain = v < 0.0 ? (uint16_T)-(int16_T)(uint16_T)-v : (uint16_T)v;
    124	
    125	      /* End of DataTypeConversion: '<S1>/Data Type Conversion' */
    126	
    127	      /* DataTypeConversion: '<S1>/Data Type Conversion1' */
    128	      rtb_IQNxIQN1 = (int32_T)rtb_Gain << 12U;
    129	
    130	      /* S-Function (c280xadc): '<S1>/ADC' */
    131	      {
    132	        AdcRegs.ADCTRL2.bit.RST_SEQ1 = 1;/* Reset SEQ1 module*/
    133	        AdcRegs.ADCST.bit.INT_SEQ1_CLR = 1;/*clear INT sequencer*/
    134	        AdcRegs.ADCTRL2.bit.SOC_SEQ1 = 1;/* Software Trigger*/
    135	        while (AdcRegs.ADCST.bit.INT_SEQ1 == 0) {
    136	        }                              /*Wait for Sequencer INT bit to clear */
    137	
    138	        asm(" RPT #11 || NOP");
    139	        pwmdsp_3_B.ADC = (AdcRegs.ADCRESULT0) >> 4;
    140	      }
    141	
    142	      /* DataTypeConversion: '<S1>/Data Type Conversion3' */
    143	      rtb_IQNxIQN = (int32_T)pwmdsp_3_B.ADC << 12U;
    144	
    145	      /* Sum: '<S2>/Sum2' */
    146	      rtb_Saturation = rtb_IQNxIQN1 - rtb_IQNxIQN;
    147	
    148	      /* S-Function (stiiqmath_iqmpy): '<S2>/IQN x IQN' incorporates:
    149	       *  Constant: '<S2>/Constant'
    150	       */
    151	
    152	      /* C28x IQmath Library (stiiqmath_iqmpy) - '<S2>/IQN x IQN' */
    153	      {
    154	        rtb_IQNxIQN = _IQ24mpy (rtb_Saturation, pwmdsp_3_P.Constant_Value_h);
    155	      }
    156	
    157	      /* S-Function (stiiqmath_iqmpy): '<S2>/IQN x IQN1' incorporates:
    158	       *  Constant: '<S2>/Constant1'
    159	       */
    160	
    161	      /* C28x IQmath Library (stiiqmath_iqmpy) - '<S2>/IQN x IQN1' */
    162	      {
    163	        rtb_IQNxIQN1 = _IQ24mpy (rtb_Saturation, pwmdsp_3_P.Constant1_Value);
    164	      }
    165	
    166	      /* Sum: '<S3>/Sum' incorporates:
    167	       *  UnitDelay: '<S3>/Unit Delay'
    168	       */
    169	      pwmdsp_3_DW.UnitDelay_DSTATE += rtb_IQNxIQN1;
    170	
    171	      /* Sum: '<S2>/Sum1' incorporates:
    172	       *  UnitDelay: '<S3>/Unit Delay'
    173	       */
    174	      rtb_Saturation = c28x_add_s32_s32_s32_sat(rtb_IQNxIQN,
    175	        pwmdsp_3_DW.UnitDelay_DSTATE);
    176	
    177	      /* Saturate: '<S2>/Saturation' */
    178	      if (rtb_Saturation > pwmdsp_3_P.Saturation_UpperSat) {
    179	        rtb_Saturation = pwmdsp_3_P.Saturation_UpperSat;
    180	      } else {
    181	        if (rtb_Saturation < pwmdsp_3_P.Saturation_LowerSat) {
    182	          rtb_Saturation = pwmdsp_3_P.Saturation_LowerSat;
    183	        }
    184	      }
    185	
    186	      /* End of Saturate: '<S2>/Saturation' */
    187	
    188	      /* Gain: '<S1>/Gain' */
    189	      rtb_Gain = (uint16_T)mul_ssu32_loSR(rtb_Saturation, pwmdsp_3_P.Gain_Gain,
    190	        24UL);
    191	
    192	      /* S-Function (c280xpwm): '<S1>/ePWM' */
    193	
    194	      /*-- Update CMPA value for ePWM1 --*/
    195	      {
    196	        EPwm1Regs.CMPA.half.CMPA = (uint16_T)(rtb_Gain);
    197	      }
    198	    }
    199	
    200	    /* End of Outputs for S-Function (c28xisr_c2000): '<Root>/C28x Hardware Interrupt' */
    201	  }
    202	}
    203	
    204	/* Model step function */
    205	void pwmdsp_3_step(void)
    206	{
    207	  /* (no output/update code required) */
    208	}
    209	
    210	/* Model initialize function */
    211	void pwmdsp_3_initialize(void)
    212	{
    213	  /* Registration code */
    214	
    215	  /* initialize non-finites */
    216	  rt_InitInfAndNaN(sizeof(real_T));
    217	
    218	  /* initialize error status */
    219	  rtmSetErrorStatus(pwmdsp_3_M, (NULL));
    220	
    221	  /* block I/O */
    222	  (void) memset(((void *) &pwmdsp_3_B), 0,
    223	                sizeof(B_pwmdsp_3_T));
    224	
    225	  /* states (dwork) */
    226	  (void) memset((void *)&pwmdsp_3_DW, 0,
    227	                sizeof(DW_pwmdsp_3_T));
    228	
    229	  /* Start for S-Function (c28xisr_c2000): '<Root>/C28x Hardware Interrupt' incorporates:
    230	   *  SubSystem: '<Root>/ADC-PWM Subsystem'
    231	   */
    232	
    233	  /* Start for function-call system: '<Root>/ADC-PWM Subsystem' */
    234	
    235	  /* Start for S-Function (c280xadc): '<S1>/ADC' */
    236	  if (adcInitFlag == 0) {
    237	    InitAdc();
    238	    adcInitFlag = 1;
    239	  }
    240	
    241	  config_ADC_A (0U, 0U, 0U, 0U, 0U);
    242	
    243	  /* Start for S-Function (c280xpwm): '<S1>/ePWM' */
    244	
    245	  /*** Initialize ePWM1 modules ***/
    246	  {
    247	    /*-- Setup Time-Base (TB) Submodule --*/
    248	    EPwm1Regs.TBPRD = 3750;
    249	
    250	    /* // Time-Base Control Register
    251	       EPwm1Regs.TBCTL.bit.CTRMODE    = 2;          // Counter Mode
    252	       EPwm1Regs.TBCTL.bit.SYNCOSEL   = 3;          // Sync output select
    253	       EPwm1Regs.TBCTL.bit.PRDLD      = 0;          // Shadow select
    254	       EPwm1Regs.TBCTL.bit.PHSEN      = 0;          // Phase load enable
    255	       EPwm1Regs.TBCTL.bit.PHSDIR     = 0;          // Phase Direction
    256	       EPwm1Regs.TBCTL.bit.HSPCLKDIV  = 0;          // High speed time pre-scale
    257	       EPwm1Regs.TBCTL.bit.CLKDIV     = 0;          // Timebase clock pre-scale
    258	     */
    259	    EPwm1Regs.TBCTL.all = (EPwm1Regs.TBCTL.all & ~0x3FBF) | 0x32;
    260	
    261	    /* // Time-Base Phase Register
    262	       EPwm1Regs.TBPHS.half.TBPHS     = 0;          // Phase offset register
    263	     */
    264	    EPwm1Regs.TBPHS.all = (EPwm1Regs.TBPHS.all & ~0xFFFF0000) | 0x0;
    265	    EPwm1Regs.TBCTR = 0x0000;          /* Clear counter*/
    266	
    267	    /*-- Setup Counter_Compare (CC) Submodule --*/
    268	    /* // Counter-Compare Control Register
    269	       EPwm1Regs.CMPCTL.bit.SHDWAMODE = 0;  // Compare A block operating mode.
    270	       EPwm1Regs.CMPCTL.bit.SHDWBMODE = 0;  // Compare B block operating mode.
    271	       EPwm1Regs.CMPCTL.bit.LOADAMODE = 0;          // Active compare A
    272	       EPwm1Regs.CMPCTL.bit.LOADBMODE = 0;          // Active compare A
    273	     */
    274	    EPwm1Regs.CMPCTL.all = (EPwm1Regs.CMPCTL.all & ~0x5F) | 0x0;
    275	    EPwm1Regs.CMPA.half.CMPA = 975;
    276	    EPwm1Regs.CMPB = 32000;
    277	
    278	    /*-- Setup Action-Qualifier (AQ) Submodule --*/
    279	    EPwm1Regs.AQCTLA.all = 18;
    280	    EPwm1Regs.AQCTLB.all = 264;
    281	
    282	    /* // Action-Qualifier Software Force Register
    283	       EPwm1Regs.AQSFRC.bit.RLDCSF    = 0;          // Reload from Shadow options
    284	     */
    285	    EPwm1Regs.AQSFRC.all = (EPwm1Regs.AQSFRC.all & ~0xC0) | 0x0;
    286	
    287	    /* // Action-Qualifier Continuous S/W Force Register Set
    288	       EPwm1Regs.AQCSFRC.bit.CSFA     = 0;          // Continuous Software Force on output A
    289	       EPwm1Regs.AQCSFRC.bit.CSFB     = 0;          // Continuous Software Force on output B
    290	     */
    291	    EPwm1Regs.AQCSFRC.all = (EPwm1Regs.AQCSFRC.all & ~0xF) | 0x0;
    292	
    293	    /*-- Setup Dead-Band Generator (DB) Submodule --*/
    294	    /* // Dead-Band Generator Control Register
    295	       EPwm1Regs.DBCTL.bit.OUT_MODE   = 0;          // Dead Band Output Mode Control
    296	       EPwm1Regs.DBCTL.bit.IN_MODE    = 0;          // Dead Band Input Select Mode Control
    297	       EPwm1Regs.DBCTL.bit.POLSEL     = 0;          // Polarity Select Control
    298	     */
    299	    EPwm1Regs.DBCTL.all = (EPwm1Regs.DBCTL.all & ~0x3F) | 0x0;
    300	    EPwm1Regs.DBRED = 0;
    301	    EPwm1Regs.DBFED = 0;
    302	
    303	    /*-- Setup Event-Trigger (ET) Submodule --*/
    304	    /* // Event-Trigger Selection and Event-Trigger Pre-Scale Register
    305	       EPwm1Regs.ETSEL.bit.SOCAEN     = 1;          // Start of conversion A Enable
    306	       EPwm1Regs.ETSEL.bit.SOCASEL    = 1;          // Start of conversion A Select
    307	       EPwm1Regs.ETPS.bit.SOCAPRD     = 1;          // EPWM1SOCA Period Select
    308	       EPwm1Regs.ETSEL.bit.SOCBEN     = 0;          // Start of conversion B Enable
    309	       EPwm1Regs.ETSEL.bit.SOCBSEL    = 1;          // Start of conversion B Select
    310	       EPwm1Regs.ETPS.bit.SOCBPRD     = 1;          // EPWM1SOCB Period Select
    311	       EPwm1Regs.ETSEL.bit.INTEN      = 0;          // EPWM1INTn Enable
    312	       EPwm1Regs.ETSEL.bit.INTSEL     = 1;          // EPWM1INTn Select
    313	       EPwm1Regs.ETPS.bit.INTPRD      = 1;          // EPWM1INTn Period Select
    314	     */
    315	    EPwm1Regs.ETSEL.all = (EPwm1Regs.ETSEL.all & ~0xFF0F) | 0x1901;
    316	    EPwm1Regs.ETPS.all = (EPwm1Regs.ETPS.all & ~0x3303) | 0x1101;
    317	
    318	    /*-- Setup PWM-Chopper (PC) Submodule --*/
    319	    /* // PWM-Chopper Control Register
    320	       EPwm1Regs.PCCTL.bit.CHPEN      = 0;          // PWM chopping enable
    321	       EPwm1Regs.PCCTL.bit.CHPFREQ    = 0;          // Chopping clock frequency
    322	       EPwm1Regs.PCCTL.bit.OSHTWTH    = 0;          // One-shot pulse width
    323	       EPwm1Regs.PCCTL.bit.CHPDUTY    = 0;          // Chopping clock Duty cycle
    324	     */
    325	    EPwm1Regs.PCCTL.all = (EPwm1Regs.PCCTL.all & ~0x7FF) | 0x0;
    326	
    327	    /*-- Set up Trip-Zone (TZ) Submodule --*/
    328	    EALLOW;
    329	    EPwm1Regs.TZSEL.all = 0;
    330	
    331	    /* // Trip-Zone Control Register
    332	       EPwm1Regs.TZCTL.bit.TZA        = 3;          // TZ1 to TZ6 Trip Action On EPWM1A
    333	       EPwm1Regs.TZCTL.bit.TZB        = 3;          // TZ1 to TZ6 Trip Action On EPWM1B
    334	     */
    335	    EPwm1Regs.TZCTL.all = (EPwm1Regs.TZCTL.all & ~0xF) | 0xF;
    336	
    337	    /* // Trip-Zone Enable Interrupt Register
    338	       EPwm1Regs.TZEINT.bit.OST       = 0;          // Trip Zones One Shot Int Enable
    339	       EPwm1Regs.TZEINT.bit.CBC       = 0;          // Trip Zones Cycle By Cycle Int Enable
    340	     */
    341	    EPwm1Regs.TZEINT.all = (EPwm1Regs.TZEINT.all & ~0x6) | 0x0;
    342	    EDIS;
    343	  }
    344	
    345	  /* End of Start for S-Function (c28xisr_c2000): '<Root>/C28x Hardware Interrupt' */
    346	
    347	  /* SystemInitialize for S-Function (c28xisr_c2000): '<Root>/C28x Hardware Interrupt' incorporates:
    348	   *  SubSystem: '<Root>/ADC-PWM Subsystem'
    349	   */
    350	
    351	  /* System initialize for function-call system: '<Root>/ADC-PWM Subsystem' */
    352	
    353	  /* InitializeConditions for UnitDelay: '<S3>/Unit Delay' */
    354	  pwmdsp_3_DW.UnitDelay_DSTATE = pwmdsp_3_P.UnitDelay_InitialCondition;
    355	
    356	  /* End of SystemInitialize for S-Function (c28xisr_c2000): '<Root>/C28x Hardware Interrupt' */
    357	}
    358	
    359	/* Model terminate function */
    360	void pwmdsp_3_terminate(void)
    361	{
    362	  /* (no terminate code required) */
    363	}
    364	
    365	/*
    366	 * File trailer for generated code.
    367	 *
    368	 * [EOF]
    369	 */
    370	
    

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Mathewpate 先生

    我在这里发布我的代码,请参阅。

    /*
    2	 * Academic License - for use in teaching, academic research, and meeting
    3	 * course requirements at degree granting institutions only.  Not for
    4	 * government, commercial, or other organizational use.
    5	 *
    6	 * File: pwmdsp_3.c
    7	 *
    8	 * Code generated for Simulink model 'pwmdsp_3'.
    9	 *
    10	 * Model version                  : 1.8
    11	 * Simulink Coder version         : 9.1 (R2019a) 23-Nov-2018
    12	 * C/C++ source code generated on : Sat Jun 26 18:40:45 2021
    13	 *
    14	 * Target selection: ert.tlc
    15	 * Embedded hardware selection: Texas Instruments->C2000
    16	 * Code generation objectives: Unspecified
    17	 * Validation result: Not run
    18	 */
    19	
    20	#include "pwmdsp_3.h"
    21	#include "pwmdsp_3_private.h"
    22	
    23	/* Block signals (default storage) */
    24	B_pwmdsp_3_T pwmdsp_3_B;
    25	
    26	/* Block states (default storage) */
    27	DW_pwmdsp_3_T pwmdsp_3_DW;
    28	
    29	/* Real-time model */
    30	RT_MODEL_pwmdsp_3_T pwmdsp_3_M_;
    31	RT_MODEL_pwmdsp_3_T *const pwmdsp_3_M = &pwmdsp_3_M_;
    32	static uint16_T adcInitFlag = 0;
    33	void mul_wide_su32(int32_T in0, uint32_T in1, uint32_T *ptrOutBitsHi, uint32_T
    34	                   *ptrOutBitsLo)
    35	{
    36	  uint32_T outBitsLo;
    37	  uint32_T absIn0;
    38	  uint32_T in0Hi;
    39	  uint32_T in1Lo;
    40	  uint32_T in1Hi;
    41	  uint32_T productHiLo;
    42	  uint32_T productLoHi;
    43	  absIn0 = in0 < 0L ? ~(uint32_T)in0 + 1UL : (uint32_T)in0;
    44	  in0Hi = absIn0 >> 16UL;
    45	  absIn0 &= 65535UL;
    46	  in1Hi = in1 >> 16UL;
    47	  in1Lo = in1 & 65535UL;
    48	  productHiLo = in0Hi * in1Lo;
    49	  productLoHi = absIn0 * in1Hi;
    50	  absIn0 *= in1Lo;
    51	  in1Lo = 0UL;
    52	  outBitsLo = (productLoHi << /*MW:OvBitwiseOk*/ 16UL) + /*MW:OvCarryOk*/ absIn0;
    53	  if (outBitsLo < absIn0) {
    54	    in1Lo = 1UL;
    55	  }
    56	
    57	  absIn0 = outBitsLo;
    58	  outBitsLo += /*MW:OvCarryOk*/ productHiLo << /*MW:OvBitwiseOk*/ 16UL;
    59	  if (outBitsLo < absIn0) {
    60	    in1Lo++;
    61	  }
    62	
    63	  absIn0 = (((productLoHi >> 16UL) + (productHiLo >> 16UL)) + in0Hi * in1Hi) +
    64	    in1Lo;
    65	  if ((in1 != 0UL) && (in0 < 0L)) {
    66	    absIn0 = ~absIn0;
    67	    outBitsLo = ~outBitsLo;
    68	    outBitsLo++;
    69	    if (outBitsLo == 0UL) {
    70	      absIn0++;
    71	    }
    72	  }
    73	
    74	  *ptrOutBitsHi = absIn0;
    75	  *ptrOutBitsLo = outBitsLo;
    76	}
    77	
    78	int32_T mul_ssu32_loSR(int32_T a, uint32_T b, uint32_T aShift)
    79	{
    80	  uint32_T u32_chi;
    81	  uint32_T u32_clo;
    82	  mul_wide_su32(a, b, &u32_chi, &u32_clo);
    83	  u32_clo = u32_chi << /*MW:OvBitwiseOk*/ (32UL - aShift) | u32_clo >> aShift;
    84	  return (int32_T)u32_clo;
    85	}
    86	
    87	/* Hardware Interrupt Block: '<Root>/C28x Hardware Interrupt' */
    88	void isr_int1pie1_task_fcn(void)
    89	{
    90	  /* Call the system: <Root>/ADC-PWM Subsystem */
    91	  {
    92	    /* S-Function (c28xisr_c2000): '<Root>/C28x Hardware Interrupt' */
    93	
    94	    /* Output and update for function-call system: '<Root>/ADC-PWM Subsystem' */
    95	    {
    96	      /* local block i/o variables */
    97	      uint16_T rtb_Gain;
    98	      int32_T rtb_Saturation;
    99	      int32_T rtb_IQNxIQN;
    100	      int32_T rtb_IQNxIQN1;
    101	      real_T v;
    102	
    103	      /* DataTypeConversion: '<S1>/Data Type Conversion' incorporates:
    104	       *  Constant: '<S1>/Constant'
    105	       */
    106	      v = fabs(pwmdsp_3_P.Constant_Value);
    107	      if (v < 4.503599627370496E+15) {
    108	        if (v >= 0.5) {
    109	          v = floor(pwmdsp_3_P.Constant_Value + 0.5);
    110	        } else {
    111	          v = pwmdsp_3_P.Constant_Value * 0.0;
    112	        }
    113	      } else {
    114	        v = pwmdsp_3_P.Constant_Value;
    115	      }
    116	
    117	      if (rtIsNaN(v) || rtIsInf(v)) {
    118	        v = 0.0;
    119	      } else {
    120	        v = fmod(v, 65536.0);
    121	      }
    122	
    123	      rtb_Gain = v < 0.0 ? (uint16_T)-(int16_T)(uint16_T)-v : (uint16_T)v;
    124	
    125	      /* End of DataTypeConversion: '<S1>/Data Type Conversion' */
    126	
    127	      /* DataTypeConversion: '<S1>/Data Type Conversion1' */
    128	      rtb_IQNxIQN1 = (int32_T)rtb_Gain << 12U;
    129	
    130	      /* S-Function (c280xadc): '<S1>/ADC' */
    131	      {
    132	        AdcRegs.ADCTRL2.bit.RST_SEQ1 = 1;/* Reset SEQ1 module*/
    133	        AdcRegs.ADCST.bit.INT_SEQ1_CLR = 1;/*clear INT sequencer*/
    134	        AdcRegs.ADCTRL2.bit.SOC_SEQ1 = 1;/* Software Trigger*/
    135	        while (AdcRegs.ADCST.bit.INT_SEQ1 == 0) {
    136	        }                              /*Wait for Sequencer INT bit to clear */
    137	
    138	        asm(" RPT #11 || NOP");
    139	        pwmdsp_3_B.ADC = (AdcRegs.ADCRESULT0) >> 4;
    140	      }
    141	
    142	      /* DataTypeConversion: '<S1>/Data Type Conversion3' */
    143	      rtb_IQNxIQN = (int32_T)pwmdsp_3_B.ADC << 12U;
    144	
    145	      /* Sum: '<S2>/Sum2' */
    146	      rtb_Saturation = rtb_IQNxIQN1 - rtb_IQNxIQN;
    147	
    148	      /* S-Function (stiiqmath_iqmpy): '<S2>/IQN x IQN' incorporates:
    149	       *  Constant: '<S2>/Constant'
    150	       */
    151	
    152	      /* C28x IQmath Library (stiiqmath_iqmpy) - '<S2>/IQN x IQN' */
    153	      {
    154	        rtb_IQNxIQN = _IQ24mpy (rtb_Saturation, pwmdsp_3_P.Constant_Value_h);
    155	      }
    156	
    157	      /* S-Function (stiiqmath_iqmpy): '<S2>/IQN x IQN1' incorporates:
    158	       *  Constant: '<S2>/Constant1'
    159	       */
    160	
    161	      /* C28x IQmath Library (stiiqmath_iqmpy) - '<S2>/IQN x IQN1' */
    162	      {
    163	        rtb_IQNxIQN1 = _IQ24mpy (rtb_Saturation, pwmdsp_3_P.Constant1_Value);
    164	      }
    165	
    166	      /* Sum: '<S3>/Sum' incorporates:
    167	       *  UnitDelay: '<S3>/Unit Delay'
    168	       */
    169	      pwmdsp_3_DW.UnitDelay_DSTATE += rtb_IQNxIQN1;
    170	
    171	      /* Sum: '<S2>/Sum1' incorporates:
    172	       *  UnitDelay: '<S3>/Unit Delay'
    173	       */
    174	      rtb_Saturation = c28x_add_s32_s32_s32_sat(rtb_IQNxIQN,
    175	        pwmdsp_3_DW.UnitDelay_DSTATE);
    176	
    177	      /* Saturate: '<S2>/Saturation' */
    178	      if (rtb_Saturation > pwmdsp_3_P.Saturation_UpperSat) {
    179	        rtb_Saturation = pwmdsp_3_P.Saturation_UpperSat;
    180	      } else {
    181	        if (rtb_Saturation < pwmdsp_3_P.Saturation_LowerSat) {
    182	          rtb_Saturation = pwmdsp_3_P.Saturation_LowerSat;
    183	        }
    184	      }
    185	
    186	      /* End of Saturate: '<S2>/Saturation' */
    187	
    188	      /* Gain: '<S1>/Gain' */
    189	      rtb_Gain = (uint16_T)mul_ssu32_loSR(rtb_Saturation, pwmdsp_3_P.Gain_Gain,
    190	        24UL);
    191	
    192	      /* S-Function (c280xpwm): '<S1>/ePWM' */
    193	
    194	      /*-- Update CMPA value for ePWM1 --*/
    195	      {
    196	        EPwm1Regs.CMPA.half.CMPA = (uint16_T)(rtb_Gain);
    197	      }
    198	    }
    199	
    200	    /* End of Outputs for S-Function (c28xisr_c2000): '<Root>/C28x Hardware Interrupt' */
    201	  }
    202	}
    203	
    204	/* Model step function */
    205	void pwmdsp_3_step(void)
    206	{
    207	  /* (no output/update code required) */
    208	}
    209	
    210	/* Model initialize function */
    211	void pwmdsp_3_initialize(void)
    212	{
    213	  /* Registration code */
    214	
    215	  /* initialize non-finites */
    216	  rt_InitInfAndNaN(sizeof(real_T));
    217	
    218	  /* initialize error status */
    219	  rtmSetErrorStatus(pwmdsp_3_M, (NULL));
    220	
    221	  /* block I/O */
    222	  (void) memset(((void *) &pwmdsp_3_B), 0,
    223	                sizeof(B_pwmdsp_3_T));
    224	
    225	  /* states (dwork) */
    226	  (void) memset((void *)&pwmdsp_3_DW, 0,
    227	                sizeof(DW_pwmdsp_3_T));
    228	
    229	  /* Start for S-Function (c28xisr_c2000): '<Root>/C28x Hardware Interrupt' incorporates:
    230	   *  SubSystem: '<Root>/ADC-PWM Subsystem'
    231	   */
    232	
    233	  /* Start for function-call system: '<Root>/ADC-PWM Subsystem' */
    234	
    235	  /* Start for S-Function (c280xadc): '<S1>/ADC' */
    236	  if (adcInitFlag == 0) {
    237	    InitAdc();
    238	    adcInitFlag = 1;
    239	  }
    240	
    241	  config_ADC_A (0U, 0U, 0U, 0U, 0U);
    242	
    243	  /* Start for S-Function (c280xpwm): '<S1>/ePWM' */
    244	
    245	  /*** Initialize ePWM1 modules ***/
    246	  {
    247	    /*-- Setup Time-Base (TB) Submodule --*/
    248	    EPwm1Regs.TBPRD = 3750;
    249	
    250	    /* // Time-Base Control Register
    251	       EPwm1Regs.TBCTL.bit.CTRMODE    = 2;          // Counter Mode
    252	       EPwm1Regs.TBCTL.bit.SYNCOSEL   = 3;          // Sync output select
    253	       EPwm1Regs.TBCTL.bit.PRDLD      = 0;          // Shadow select
    254	       EPwm1Regs.TBCTL.bit.PHSEN      = 0;          // Phase load enable
    255	       EPwm1Regs.TBCTL.bit.PHSDIR     = 0;          // Phase Direction
    256	       EPwm1Regs.TBCTL.bit.HSPCLKDIV  = 0;          // High speed time pre-scale
    257	       EPwm1Regs.TBCTL.bit.CLKDIV     = 0;          // Timebase clock pre-scale
    258	     */
    259	    EPwm1Regs.TBCTL.all = (EPwm1Regs.TBCTL.all & ~0x3FBF) | 0x32;
    260	
    261	    /* // Time-Base Phase Register
    262	       EPwm1Regs.TBPHS.half.TBPHS     = 0;          // Phase offset register
    263	     */
    264	    EPwm1Regs.TBPHS.all = (EPwm1Regs.TBPHS.all & ~0xFFFF0000) | 0x0;
    265	    EPwm1Regs.TBCTR = 0x0000;          /* Clear counter*/
    266	
    267	    /*-- Setup Counter_Compare (CC) Submodule --*/
    268	    /* // Counter-Compare Control Register
    269	       EPwm1Regs.CMPCTL.bit.SHDWAMODE = 0;  // Compare A block operating mode.
    270	       EPwm1Regs.CMPCTL.bit.SHDWBMODE = 0;  // Compare B block operating mode.
    271	       EPwm1Regs.CMPCTL.bit.LOADAMODE = 0;          // Active compare A
    272	       EPwm1Regs.CMPCTL.bit.LOADBMODE = 0;          // Active compare A
    273	     */
    274	    EPwm1Regs.CMPCTL.all = (EPwm1Regs.CMPCTL.all & ~0x5F) | 0x0;
    275	    EPwm1Regs.CMPA.half.CMPA = 975;
    276	    EPwm1Regs.CMPB = 32000;
    277	
    278	    /*-- Setup Action-Qualifier (AQ) Submodule --*/
    279	    EPwm1Regs.AQCTLA.all = 18;
    280	    EPwm1Regs.AQCTLB.all = 264;
    281	
    282	    /* // Action-Qualifier Software Force Register
    283	       EPwm1Regs.AQSFRC.bit.RLDCSF    = 0;          // Reload from Shadow options
    284	     */
    285	    EPwm1Regs.AQSFRC.all = (EPwm1Regs.AQSFRC.all & ~0xC0) | 0x0;
    286	
    287	    /* // Action-Qualifier Continuous S/W Force Register Set
    288	       EPwm1Regs.AQCSFRC.bit.CSFA     = 0;          // Continuous Software Force on output A
    289	       EPwm1Regs.AQCSFRC.bit.CSFB     = 0;          // Continuous Software Force on output B
    290	     */
    291	    EPwm1Regs.AQCSFRC.all = (EPwm1Regs.AQCSFRC.all & ~0xF) | 0x0;
    292	
    293	    /*-- Setup Dead-Band Generator (DB) Submodule --*/
    294	    /* // Dead-Band Generator Control Register
    295	       EPwm1Regs.DBCTL.bit.OUT_MODE   = 0;          // Dead Band Output Mode Control
    296	       EPwm1Regs.DBCTL.bit.IN_MODE    = 0;          // Dead Band Input Select Mode Control
    297	       EPwm1Regs.DBCTL.bit.POLSEL     = 0;          // Polarity Select Control
    298	     */
    299	    EPwm1Regs.DBCTL.all = (EPwm1Regs.DBCTL.all & ~0x3F) | 0x0;
    300	    EPwm1Regs.DBRED = 0;
    301	    EPwm1Regs.DBFED = 0;
    302	
    303	    /*-- Setup Event-Trigger (ET) Submodule --*/
    304	    /* // Event-Trigger Selection and Event-Trigger Pre-Scale Register
    305	       EPwm1Regs.ETSEL.bit.SOCAEN     = 1;          // Start of conversion A Enable
    306	       EPwm1Regs.ETSEL.bit.SOCASEL    = 1;          // Start of conversion A Select
    307	       EPwm1Regs.ETPS.bit.SOCAPRD     = 1;          // EPWM1SOCA Period Select
    308	       EPwm1Regs.ETSEL.bit.SOCBEN     = 0;          // Start of conversion B Enable
    309	       EPwm1Regs.ETSEL.bit.SOCBSEL    = 1;          // Start of conversion B Select
    310	       EPwm1Regs.ETPS.bit.SOCBPRD     = 1;          // EPWM1SOCB Period Select
    311	       EPwm1Regs.ETSEL.bit.INTEN      = 0;          // EPWM1INTn Enable
    312	       EPwm1Regs.ETSEL.bit.INTSEL     = 1;          // EPWM1INTn Select
    313	       EPwm1Regs.ETPS.bit.INTPRD      = 1;          // EPWM1INTn Period Select
    314	     */
    315	    EPwm1Regs.ETSEL.all = (EPwm1Regs.ETSEL.all & ~0xFF0F) | 0x1901;
    316	    EPwm1Regs.ETPS.all = (EPwm1Regs.ETPS.all & ~0x3303) | 0x1101;
    317	
    318	    /*-- Setup PWM-Chopper (PC) Submodule --*/
    319	    /* // PWM-Chopper Control Register
    320	       EPwm1Regs.PCCTL.bit.CHPEN      = 0;          // PWM chopping enable
    321	       EPwm1Regs.PCCTL.bit.CHPFREQ    = 0;          // Chopping clock frequency
    322	       EPwm1Regs.PCCTL.bit.OSHTWTH    = 0;          // One-shot pulse width
    323	       EPwm1Regs.PCCTL.bit.CHPDUTY    = 0;          // Chopping clock Duty cycle
    324	     */
    325	    EPwm1Regs.PCCTL.all = (EPwm1Regs.PCCTL.all & ~0x7FF) | 0x0;
    326	
    327	    /*-- Set up Trip-Zone (TZ) Submodule --*/
    328	    EALLOW;
    329	    EPwm1Regs.TZSEL.all = 0;
    330	
    331	    /* // Trip-Zone Control Register
    332	       EPwm1Regs.TZCTL.bit.TZA        = 3;          // TZ1 to TZ6 Trip Action On EPWM1A
    333	       EPwm1Regs.TZCTL.bit.TZB        = 3;          // TZ1 to TZ6 Trip Action On EPWM1B
    334	     */
    335	    EPwm1Regs.TZCTL.all = (EPwm1Regs.TZCTL.all & ~0xF) | 0xF;
    336	
    337	    /* // Trip-Zone Enable Interrupt Register
    338	       EPwm1Regs.TZEINT.bit.OST       = 0;          // Trip Zones One Shot Int Enable
    339	       EPwm1Regs.TZEINT.bit.CBC       = 0;          // Trip Zones Cycle By Cycle Int Enable
    340	     */
    341	    EPwm1Regs.TZEINT.all = (EPwm1Regs.TZEINT.all & ~0x6) | 0x0;
    342	    EDIS;
    343	  }
    344	
    345	  /* End of Start for S-Function (c28xisr_c2000): '<Root>/C28x Hardware Interrupt' */
    346	
    347	  /* SystemInitialize for S-Function (c28xisr_c2000): '<Root>/C28x Hardware Interrupt' incorporates:
    348	   *  SubSystem: '<Root>/ADC-PWM Subsystem'
    349	   */
    350	
    351	  /* System initialize for function-call system: '<Root>/ADC-PWM Subsystem' */
    352	
    353	  /* InitializeConditions for UnitDelay: '<S3>/Unit Delay' */
    354	  pwmdsp_3_DW.UnitDelay_DSTATE = pwmdsp_3_P.UnitDelay_InitialCondition;
    355	
    356	  /* End of SystemInitialize for S-Function (c28xisr_c2000): '<Root>/C28x Hardware Interrupt' */
    357	}
    358	
    359	/* Model terminate function */
    360	void pwmdsp_3_terminate(void)
    361	{
    362	  /* (no terminate code required) */
    363	}
    364	
    365	/*
    366	 * File trailer for generated code.
    367	 *
    368	 * [EOF]
    369	 */
    370	
    

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    阿里耶特

    跟进与 Venkatesh 的谈话、Mathworks 的论坛/系统上是否也有一个案例存档?

    最棒的

    Matthew

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    是的,我也在 MathWorks 中发布了一个案例,但没有人回复。 甚至 Venkatesh 先生也没有答复。 这个问题是基于代码的,如果你能看到,它对我很有帮助。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    阿里耶特

    我将了解我们系统团队的某个人是否可以提供帮助。  请再给我一天时间。

    最棒的

    Matthew

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    好的,先生,我会等待你的回应。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    主席先生,你有没有回应? 请稍候。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    阿里耶特

    我还在研究这个问题、让我再次向其他人发出命令、看看我们是否有一些想法。  

    最棒的

    Matthew

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    好的、先生。