Open-Source Library

Power Electronics

@ home

For power electronics newcomers, the poor availability of off-the-shelf inverters is a high entry barrier. To reduce the effort for the development of new inverters, we have teamed up with the manufacturer Wolfspeed to provide inverter developers with both hardware and software for their first steps. The goal is to offer an easy start into the world of power electronics.

Bachelor Thesis Research & Development

Benefits of our software

Our software was developed as part of a bachelor thesis for the 300kW XM3 Three-Phase Inverter CRD300DA12E-XM3 from Wolfspeed. The advantage for users is that they can obtain a ready-made inverter (overview of suppliers). This inverter can be used with our open-source software.

The advantage of our software is that it is freely available and can be easily adapted by users. For this purpose, a Matlab Simulink model was created, which generates the code for the microcontroller TMS320F28379D from Texas Instruments of the C2000 series directly from Matlab. For this the periphery like the AD-converter, the incremental encoder interface, the PWM modules and the CAN module were configured and used. Machine control in dq coordinates is available as the operating mode.



The following requirements must be met for the software presented here:

  • Inverter CRD300DA12E-XM3
  • CAN hardware and software incl. cable for communication with the inverter
  • UniFlash
  • Software package (downloadable from this page)
  • Needed for software adaptions: MATLAB 2020a (or newer) incl. following toolboxes
    • Simulink
    • Simulink Coder
    • Embedded Coder
    • Stateflow
    • Hardware Support Package für TI C2000

1. Optional: Build Simulink models from software package

2. Use UniFlash to flash CPU images to

  • CPU1: Wolfspeed_Cree_CPU_1.hex
  • CPU2: Wolfspeed_Cree_CPU_2.hex

3. Use your CAN software and use wolfspeed_inverter.dbc

4. Parametrize the inverter

4.1 QEI interface

  • QEI_offset_gamma_Tx: adjusting the offset angle
  • QEI_number_increment_Tx: impulses per revolution

4.2 Machine parameters

  • p_Tx: pole pairs
  • R_s_TX: stator resistance
  • L_q_q_Tx: q-axis inductance
  • L_d_d_Tx: d-axis inductance
  • psi_PM_Tx: permanent magnet flux

4.3 Switching frequency

  • f_sw_set_Tx for adjusting switching frequency (if switching frequency is higher than 25kHz please use the interleaving factor 3 model)

4.4 Parametrize id and iq limit

  • i_q_limit_Tx: for limiting i_q setpoint
  • i_d_limit_Tx: for limiting i_d setpoint

4.5 phase current shutdown limit

  • i_max_Tx: phase current shutdown limit

5. Preliminary tests

  • check speed of QEI (absolute value and sign): speed_mech_Rx
  • check angle of QEI: gamma_el_Rx
  • check current sensors: i_U_Rx, i_V_Rx, i_W_Rx (should be approx. 0A)
  • check DC link voltage measurement by applying DC link voltage: u_DC_Rx

6. Switch on

6.1 Check error code (errorcode_Rx). If not zero then reset inverter via toggling Reset_error_Tx

6.2 Set setpoint currents to 0A

  • i_q_set_CAN_Tx: 0
  • i_d_set_CAN_Tx: 0

6.3 Apply DC link voltage

6.4 Enable control and switching:

  • Enable_UUT_Tx: 1

6.5 Enter setpoint currents

  • i_q_set_CAN_Tx: within system boundaries
  • i_d_set_CAN_Tx: within system boundaries

7. Switch off

7.1 Set setpoint currents to 0A

  • i_q_set_CAN_Tx: 0
  • i_d_set_CAN_Tx: 0

7.2 Disable control and switching

  • Enable_UUT_Tx: 0
Error codes (errorcode_Rx)


No error


Gate driver fault


Parameter change under load








Out of memory (logger)


ISR execution time too long


Control mode change under load