资源简介

基于simulink的s-function的PWM生成,注释详细,可以更好的便于学习simulink的sfun的编写

资源截图

代码片段和文件信息

/* 
 * File     : sfun_pwm.c
 * Abstract:
 *   
 *   This file represents an S-function example which demonstrates the S-function macros for using a
 *   controllable sample time. This S-function generates PWM (Pulse-width modulation) signals based
 *   on the input period and duty cycle signals.
 *
 *   This S-function registers a controllable sample time with which the S-function can schedule the
 *   next hit when changing the output value. The S-function has two input ports and one output
 *   port. The first input port is the duty cycle signal and the second is the period signal. The
 *   S-function has two block parameters: the amplitude of the generated PWM signal and the
 *   resolution of the controllable sample time.
 * 
 *   This S-function illustrates the use of the S-function macro:
 *       
 *        ssSetControllableSampleTime(S 0 resolution)
 *
 *   to register a controllable sample time in mdlInitializeSampleTimes(). The resolution must be a
 *   positive finite number that defines the fundamental step size that the S-function can schedule
 *   the next hit for this sample time.
 *
 *   This S-function illustrates the use of the S-function macro:
 *
 *       ssSetNumTicksToNextHitForControllableSampleTime(S 0 numTick)
 *  
 *   to schedule the next hit of the controllable sample time. The next hit happens after t =
 *   t_current + numTick * resolution. numTick must be a positive integer. The S-function must use
 *   this macro to schedule the execution of the controllable sample time in
 *   mdlInitializeConditions() and mdlOutputs().
 *
 * Copyright 2017 The MathWorks Inc.
 */

#define S_FUNCTION_NAME mysfun_generate                          //函数名
#define S_FUNCTION_LEVEL 2                                       //sfun的深度

#include “simstruc.h“
#include “assert.h“

/* Function: mdlInitializeSizes ================================================
 * Abstract:
 *
 *   Register an S-function with two input ports one output port and three DWorks. Specify the
 *   number of sample times to 1.
 *
 */
static void mdlInitializeSizes(SimStruct* S)
{
    //这个函数用来初始化的,主要是设置输入、输出和参数的。
    
    if (!ssSetNumInputPorts(S 2)) return;//设置输入信号2个
    ssSetInputPortWidth(S 0 1);//设置输入变量0的维数为1
    ssSetInputPortDirectFeedThrough(S 0 1);// 设置输入端口的信号是否mdlOutputs函数中使用,这儿设置为true
    ssSetInputPortWidth(S 1 1);//设置输入变量1的维数为1
    ssSetInputPortDirectFeedThrough(S 1 1);// 设置输入端口的信号是否mdlOutputs函数中使用,这儿设置为true
    
    if (!ssSetNumOutputPorts(S 1)) return;//设置输出变量的个数
    ssSetOutputPortWidth(S 0 1);//设置输出变量0的维数为1维

    ssSetNumSFcnParams(S 2);//设置参数2个
    if (ssGetNumSFcnParams(S) != ssGetSFcnParamsCount(S)) {
        return;
    }
    
    ssSetNumContStates(S 0);//设置连续状态变量的
    ssSetNumDiscStates(S 0);
    ssSetNumDWork(S 3);
    ssSetDWorkWidth(S 0 1);//设置离散状态变量的
    ssSetDWorkDataType(S 0 SS_BOOLEAN);
    ssSetDWorkWidth(S 1 1);
    ssSetDWorkDataType(S

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件       6992  2020-06-03 23:17  mysfun_generate.c

     文件      20480  2020-06-03 22:48  mysfun_generate.mexw64

     文件      24325  2020-06-03 22:51  generate.slx

----------- ---------  ---------- -----  ----

                51797                    3


评论

共有 条评论