2 Tutorial: Exporting a Subsystem as a dSPACE Application - MapleSim Help

2 Tutorial: Exporting a Subsystem as a dSPACE Application

This tutorial guides you through the process of creating a dSPACE model using the dSPACE DS1104 Real-Time Application template from a pure closed-loop simulation model.

It is a rapid control prototyping application, where the controller runs in real-time on the DS1104 board in order to control a real system.

2.1 Overview of the Plant to Control

The model simulates a DC Motor speed controller. The system is composed of the following real components:

 • The DC Motor itself, which includes a gear (ratio=30)
 • The H-bridge driver, allowing the bi-directional control of the motor. This component also provides a current measurement output with a 377 µA/A sensitivity, connected in series with a 2 kΩ resistor
 • A Transistor-Transistor Logic (TTL) incremental encoder with 300 lines. This encoder is attached to the motor shaft (the rotor), not to the gear shaft. Thus, there are 9000 lines (300*30) per revolution

2.2 Overview of the Initial Closed-loop Simulation Model

The initial closed-loop simulation model (DC Motor Control Start Tutorial) is located in the dSPACE Connector Examples palette under the Libraries tab. Click DC Motor Control Start Tutorial to open the model in MapleSim.

The main components are (from right to left):

 • The DC Motor subsystem. You can explore this model to see the different parameters of the motor.
 • A H-bridge subsystem, based on ideal switch and diode components. The H-bridge, supplied with a 12V voltage source, provides the required power to the motor. Each switch is driven by an on/off signal output by the SignMagn subsystem.
 • The SignMagn subsystem computes the switching logic in order to drive the H-bridge in the "Sign/Magnitude mode".
 • The DutyCycle subsystem transforms the voltage command (output of the PID controller) into a direction and a duty cycle signal, required by the Sign/Magnitude drive mode.
 • A PID controller which maintains the real motor speed as closely as possible to the reference.
 • A Pulse component which outputs a square pulse as a reference speed.

Run this model and look at the result.

2.3 Preparing the Model for Export

The model you opened in the previous section is not ready to export, mainly because it does not precisely reflect the real sensors and their interaction with the input and output components of the dSPACE DS1104 board. Next, you will add modeling components for the incremental encoder and the current sensor. You will also group into a subsystem all the components needed in the Controller application that will run in real-time on the DS1104 board.

The output of the incremental encoder are pulses corresponding to the angular position of the rotor. In the real-time application, you will connect this sensor to the incremental encoder input of the DS1104 board. The encoder input driver of the DS1104 gives the angular position and the position difference between two time steps. Use this delta position to compute the speed.

To add the incremental encoder model

 1 Select, and then delete the line between the DCMotor speed output and the minus input of the Feedback component.
 2 Add a Gain component (from the Signal Blocks > Common palette) to the right of the DCMotor subsystem.

 3 Transform the Gain component into a subsystem (that is, select the Gain component, then select the Edit menu, and then select Create Subsystem). Name the subsystem IncEncoder.
 4 Double-click on this subsystem to open it.
 5 Connect the input and output of the Gain component to the subsystem boundary. Name the input Speed and name the output DeltaPos.
 6 Select the Gain component, and then enter $\frac{9000\cdot 0.001}{2\cdot \mathrm{\pi }}$ for the gain value (k). Since there are 9000 lines per revolution and the sample time of the application will be 1 ms, we have to multiply the real speed by $\frac{9000\cdot 0.001}{2\cdot \mathrm{π}}$ in order to get the delta position value.

 8 Connect the DCMotor speed output to the input of the IncEncoder subsystem.

Processing the Incremental Encoder Capture Signal in the Real-time Application

In the real-time application, you will need to transform the incremental encoder capture signal of the DS1104 board (delta position) into a quantity corresponding to the motor speed. For this you just need to add another gain component with a value which is the inverse of the one you set up in the previous section.

To process the incremental encoder capture signal

 1 Add a Gain component (from the Signal Blocks > Common palette) near the minus input of the Feedback component (at the left of the PID subsystem).

 2 Transform the newly added Gain component into a subsystem (that is, select the Gain component, then select the Edit menu, and then select Create Subsystem). Name the subsystem IncEncoderScaling.
 3 Double-click on this subsystem to open it.
 4 Connect the input and output of the Gain component to the subsystem boundary. Name the input DeltaPos and name the output Speed.
 5 Select the Gain component, and then enter $\frac{2\cdot \mathrm{\pi }}{9000\cdot 0.001}$ for the gain value (k).

 7 Connect the output of the IncEncoder subsystem to the input of the IncEncoderScaling subsystem.
 8 Connect the output of the IncEncoderScaling subsystem to the minus input of the Feedback component.

Converting the Controller to a Subsystem

By converting your entire model or part of your model into a subsystem, you identify which parts of the model you want to export to a dSPACE application. In this example, you will group the controller components into a subsystem.

To convert the controller into a subsystem

 1 Using the selection tool ( ) located above the Model Workspace, draw a box around the controller components in the model.

 2 From the Edit menu, select Create Subsystem.
 3 In the Create Subsystem dialog box, enter Controller as the subsystem name.
 4 Click OK. A Controller subsystem is displayed in the Model Workspace.

 5 Double-click the Controller subsystem and modify the names of the inputs and outputs as follows:
 • First input (connected to the Feedback component): SpeedReference
 • Second input (connected to the IncEncoderScaling subsystem): DeltaPos
 • First output (first output of the DutyCycle subsystem): Direction
 • Second output (second output of the DutyCycle subsystem): DutyCycle

For the real-time application, connect the current sensor output to an analog input of the DS1104 board in order to monitor the current in the drive. To save time, the current sensor model is already included in this model. It is called CurrentMeas and can be found under the Project tab, in the Definitions > Subsystems palette.

To add the current sensor model

 2 Under the Project tab, navigate to the Definitions > Subsystems palette, and then drag the CurrentMeas subsystem to the Model Workspace. Place the CurrentMeas subsystem below the DCMotor subsystem.
 3 Delete the current probe connected to the DCMotor subsystem in the model.
 4 Connect the current output of the DCMotor subsystem to the input of the CurrentMeas subsystem.

Processing the current sensor ADC signal in the real-time application

In the real-time application, connect the output of the current sensor to an ADC input of the DS1104 board and transform the signal into a quantity corresponding to the motor current. For this you just need to add a scaling gain block in the controller subsystem.

To process the current sensor ADC signal

 1 Double-click the Controller subsystem to open it.
 2 Add a Gain component (from the Libraries > Signal Blocks > Common palette) below the other blocks of this subsystem.

 3 Connect the input of this Gain block to the left border of the subsystem, and then name the input Imeas.
 4 Connect the output of Gain component to the right border of the subsystem, and then name the output Current.

Note: The current value will not be used in the controller (you just want to monitor it), so you will not connect it to any block of the controller. However, in order to generate code, you cannot leave the output of the Gain component unconnected.

 5 Select the Gain component, and then enter $\frac{1}{2000\cdot 377\cdot {10}^{-6}}$ for the gain value (k).

Note: The sensitivity is 377 µA/A, and you get your value from the voltage measurement across a 2 kΩ resistor. This results in a scaling value of $\frac{1}{2000\cdot 377\cdot {10}^{-6}}$ .

 6 Connect the output of the IncEncoderScaling subsystem to the right border of the subsystem, and then name the output Speed. This allows you to monitor the motor speed in the real-time application.
 7 Delete the three probes. They will be added to Controller subsystem outputs in step 10.

 9 Connect the third input of the Controller subsystem to the output of the CurrentMeas subsystem.
 10 Add probes to the first and second outputs of the Controller subsystem.

Optional: You can add probes to the third and fourth outputs of the Controller subsystem to display their values during a MapleSim simulation.

The model should be very similar to the DC Motor Control model found in the dSPACE Connector Examples palette. The Controller subsystem is now ready to be prepared for export. Note that you can still simulate this model in MapleSim.

2.4 Map the Controller subsystem inputs and outputs to the dSPACE DS1104 inputs and outputs

You will now define the mapping of the Controller subsystem inputs and outputs to the DS1104 hardware inputs and outputs, reflecting the real connection between the DS1104 and the DC Motor. This will be done using the Maple template, dSPACE DS1104 Real-Time Application, which will then be attached to the model.

To map the controller

 1 Click Templates ( ) in the Main Toolbar.
 2 From the list, select dSPACE DS1104 Real-Time Application.
 3 In the Attachment field, enter dSPACE_DS1104_Controller as the worksheet name.
 4 Click Create Attachment. Your MapleSim model is opened in Maple, in the dSPACE DS1104 Real-Time Application template.
 5 Browse to the Controller1 subsystem by selecting Controller1 from the list box next to Main above the model diagram.

 6 In the Subsystem Selection section of the template, click Load Selected Subsystem. All of the template fields are populated with information specific to the subsystem displayed in the model diagram.

You can now define the mapping between the inputs and outputs of the subsystem and the dSPACE DS1104 inputs and outputs, according to the following details:

 • The speed reference could be connected to an external signal generator signal. However, it can be interesting to run a virtual signal generator in real-time on the dSPACE board in order to tune the amplitude, frequency and/or offset directly from the dSPACE ControlDesk software. Thus, you will connect the speed reference input of the controller to a virtual square wave signal. The other choices for the virtual signals are Sine, Step or Constant.
 • The incremental encoder of the DC Motor will be connected to the first incremental encoder input of the DS1104 board.
 • Next, the current sensor of the H-Bridge will be connected to the first ADC input of the DS1104 board.
 • The direction input of the H-Bridge will be connected to the first digital output of the DS1104 board.
 • The duty cycle input of the H-Bridge will be connected to the first PWM output of the DS1104 board.
 • The current sensor signal monitored by the controller (third output of the controller) will be left unconnected.

You will proceed in two steps. First you will define all of the mapping signals, and then you will configure the input and output parameters.

To define all of the mapping signals:

 1 In the Input / Output Settings for the dSPACE DS1104 Board section, Input Mapping table, select the Main.Controller1.SpeedReference(t) signal in the list of model inputs. In the DS1104 inputs or Virtual signals list box on the right, select virtual_Square_1. This signal will be replaced in the application by a square signal generator running on the dSPACE board.
 2 In the Input Mapping table, select the Main.Controller1.DeltaPos(t) signal in the list of model inputs. In the DS1104 inputs or Virtual signals list box on the right, select DELTA_INC1, which is the delta position information given by the first incremental encoder input of the DS1104 board.
 3 In the Input Mapping table, select the Main.Controller1.Imeas(t) signal in the list of model inputs. In the DS1104 inputs or Virtual signals list box on the right, select ADCH1. This signal reads the value of the first ADC channel of the DS1104.
 4 In the Output Mapping table, select the Main.Controller1.Direction(t) signal in the list of model outputs. In the DS1104 outputs list box at the right, select Bit_ch0.

This signal sends the value computed by the application to the first digital channel of the DS1104. Note that the digital inputs and outputs of the DS1104 board can be configured either as inputs or outputs. In the present case, since the Bit_ch0 channel is defined as an output, it can no longer be used as an input. To verify this, browse to the DS1104 inputs or Virtual signals list box and look for the Bit_ch0 signal. You will see that it is marked as unavailable. If you try to connect an input signal to this channel, you will get an error message until you disconnect the channel from its output signal.

 5 In the Output Mapping table, select the Main.Controller1.DutyCycle(t) signal in the list of model outputs. In the DS1104 outputs list box on the right, select PWM_ch1. This signal will send the value computed by the application to the first single phase PWM channel of the DS1104.

The Main.Controller1.Current(t) signal is left unconnected. You can monitor it using ControlDesk.

To configure the parameters

 1 To configure the first digital I/O channel, scroll down to the Bit I/O Unit section, expand this section, and then do the following:
 • In the Initialization and Termination section, select 1 for the Initial Value (this corresponds to a forward turn of the motor).
 • In the Termination section, select Hold the current value. (You want the termination direction of the motor to be the same as it was just before the termination of the application.)

Note: The first channel, Bit_ch0, should be marked as Used as Output. All of the other channels should be marked as Not used.

 2 To configure the Incremental Encoder Interface, scroll down to the Incremental Encoder Interface section, expand this section, and then do the following:
 • In the General parameters section, select TTL for the Encoder 1 mode.
 • For the Encoder 1 reset-on-index mode, select false, since there is no index signal on this encoder.
 • In the Initialization section, leave the default value of 0 for the initial position of the encoder, since you will not be using the position capture.

 3 To configure the first single phase PWM channel, scroll down to the PWM Generation section, expand this section, and then do the following:
 • In the General Parameters section do the following:
 – Select Asymmetric as the PWM mode.
 – Enter 2 in the PWM Period (ms) text area.
 – Select Active high for PWM ch1 polarity (the polarity for the first channel).
 • In the Initialization section, enter 0 in the PWM ch1 text area. This is the initial duty cycle for the first PWM channel; the initial speed of the motor should be 0.
 • In the Termination section, select Termination value, and then enter 0 as the termination duty cycle for PWM ch1, the first PWM channel. (For safety, the termination speed of the motor should be 0.)

 4 To configure the Virtual Square Signal Generator, scroll down to the Virtual Square Signals Generator section, expand it, and then do the following in the Square 1 part of the table:
 • Enter 5 for the Amplitude.
 • Enter 0.5 for the Frequency (Hz).
 • Enter 10 for the Offset.

The I/O mapping and configuration is now complete. You can now proceed to the next step: exporting the controller to a real-time dSPACE application.

Note that you can attach more than one template of this kind if, for example, you need to define different I/O mappings for the same controller.

2.5 Exporting the Controller to a dSPACE real-time application running on the DS1104 board

In this section, you will create a dSPACE executable that can be run on a DS1104 from the Controller subsystem.

To Export the Controller

 1 Scroll down to the Step 3: Options section.
 2 In the Solver Settings area, enter 0.001 s for the Base Rate.

 3 In the Optimization Options area, select 3 (that is Full) for the Level of code optimization.

This option specifies the degree of simplification applied to the model equations during the code generation process. The full optimization option eliminates redundant variables and equations in the system.

 4 In the TRC Variables and Parameters Options section do the following:
 • Select Include the maximum number of variables.
 • Select Include the maximum number of parameters.

These options add all the possible variables and parameters in the TRC file that is generated with the dSPACE application. The TRC file is used by ControlDesk so that you can display variables and modify parameters in the real-time application as it is running.

 5 Scroll down to the Step 4: Generate dSPACE Application section of the template. Enter the following information for your real-time application:
 • In the dSPACE directory text area, enter the directory where dSPACE is installed.
 • In the Target directory text area, enter the directory where you want to store your real-time application.
 • In the Application name text area, enter the name for your real-time application.

 6 Click Generate dSPACE Application to generate the C code, the .trc file, the .sdf file and the .ppc file for your application.
 7 Open ControlDesk and load the generated application as usual. You will have access to the inputs, outputs, states and state derivatives of the application in the Model group. The parameters are in the Model Parameters subgroup, the execution time and current time can be accessed from the Task Info > Execution subgroup. Of course, this application should be connected to the real system so that you get interesting values.