1D, 2D and 3D Lookup Tables in PSIM

NikosDimitrakopoulos
NikosDimitrakopoulos
Altair Employee
edited October 21 in Altair HyperWorks

1D, 2D and 3D Lookup Tables in PSIM

Aside from its core electronics simulation capabilities, PSIM offers a flexible environment for creating custom signals out of known data and customizing simulations in general. Key tools include controlled sources, math blocks, script blocks, and lookup table blocks. This article focuses on using lookup table blocks in PSIM.

Setting Up Basic Lookup Table Models

1D Lookup Table

Let's start with the 1D Lookup block:

image

 

When you import the 1D Lookup block into the schematic and click the 'Help' menu, you'll see that this block uses interpolation to determine the output based on the inputs. This means the inputs don’t need to match the exact values of the first column of the lookup table and are not limited by them.

image
 

Let's work with a simple example. Imagine we have a custom drive cycle of speed data vs. time, which we want to use as the reference speed for a speed controller. The speed data is saved in a CSV file (accel.csv), with time in the first column and speed in the second column.

We can load this data by opening the 1D lookup table block and navigating to accel.csv using the “Open File…” button:

image

 

Important Notes:

  1. The CSV data should not contain "column headers"; all data from row 1 should be numerical

  2. The first column of the CSV is compared with the input node data of the block to determine the output

  3. The second column contains the actual data that will be interpolated and exported from the output node of the block

 

In this example, the first column corresponds to time, so the time block will be used in the PSIM schematic. The output will be the speed, which will act as a reference for the speed controller in this simulation, as well as the input to a math block containing a simple second-order vehicle model to determine the load torque based on this speed:

image

 

 
2D Lookup Table

Now let's move to the 2D Lookup Table option, which is a bit more complicated. To maintain the advantages of interpolation, choose the 2D Lookup Table (interpolation) block from the library:

image

 

This block contains two inputs and one output. The notation for the first and second input is:

image

 

The "Help" menu of the 2D Lookup Table can be a little intimidating, so let's follow the process of setting this up with two separate examples.

 

1st example

If your 2D lookup looks like this:

image

 

Then you need to transform it to the following format to be accepted by PSIM:

image

 

  • Note that there are no names and only numerical data exists. The same as the 1D Lookup

  • The 2nd and 3rd row data should be in ascending order, otherwise you will get an error

  • The first row is dedicated to declaring the number of rows and columns the 2D lookup has

  • The second and third rows contain the datasets of the two inputs of the lookup

  • The following rows contain the output data

 

2nd Example

The second example involves a csv file containing coupled inductors losses vs. current vs. frequency. The csv file is named current_vs_freq_vs_losses.csv, and the data is gathered in three columns in this manner:

image

image

image

 

We have currents ranging from 1A to 100A [100 unique current test points] and frequencies ranging from 1Hz to 200kHz [44 unique frequency test points].

Therefore, we have 44 different loss data points for current = 1A, 44 different loss data points for current = 2A, and so on... This notation is different from the first example and requires more effort to translate into a format that PSIM will accept.

We can either leverage Excel’s TRANSPOSE function or use a Python script (attached along with data files to recreate) that will read the Ploss data from current_vs_freq_vs_losses.csv, the data per 44 rows, and save the transposed results in a new file. The transposed results should contain a single row with 44 columns per current testpoint. We have 100 unique current test points so we need to do this process 100 times and thus the final output file will be a dataset with 100 rows and 44 columns:

image

image

image

 

The dataset and script to replicate can be found in the attachments section:

  • Python script -> 2D_lookup_dataset.py
  • Inout to the script -> current_vs_freq_vs_losses.csv
  • Output of the script-> output.csv

 

3D Lookup Table

For the 3D Lookup table, we are referencing the simple 3D LuT block and not the .mat file one:

image

image

This block follows the same logic as the 2D lookup table. In fact, it is just a repetition of the 2D LuT logic for every element of the “3rd dimension”. Let’s investigate a simple example provided by one of our users in PSIM’s forum:

image

 

In this 3D LuT example, saved as a comma-separated-value file, we have 3 inputs:  x1,x2,x3 and 2 outputs: y1,y2.

Important Note

The simple 3D LuT block in PSIM only works for single output LuTs. This means that we need to place two separate 3D LuT blocks parsing the same inputs x1,x2,x3 each and having two separate outputs y1,y2 for this example.

Just for the sake of simplification, let’s work with one 3D LuT block, parsing only the y1 output.

We can notice that:

  1. x1 input has 3 different values: 3, 70, 500

  2. x2 input has 3 different values: 31, 36, 41

  3. x3 input has 2 different values:520, 640

The methodology to define the PSIM compatible csv file is the following:

image

 

Please keep in mind that the green, yellow and blue row data should be in ascending order, otherwise you will get an error.

The final file format can be in .csv format. You can load it as .csv from inside PSIM if you select "All Files" while browsing to the file:

image

 

You will find the above colorized csv along with the final csv to be used in PSIM attached -> test_3d.zip