Converting a SPICE subcircuit to Simscape component
    4 views (last 30 days)
  
       Show older comments
    
    Florian Sawallich
 on 3 Dec 2020
  
    
    
    
    
    Commented: David John
    
 on 4 Aug 2021
            Hi everyone, 
I have a serious problem, which I cannot solve myself. 
Task: I want to convert a SPICE subcircuit to a Simscape component using the matlab syntax "subcircuit2ssc(filename,target)" The SPICE subcircuit are only related to Inductors and mutual inductors. 
SPICE-model:
.subckt Ckt_model_series 1 2 3 4 5 6
L1 1 4 3.93e-09
L2 2 5 5.35e-09
L3 3 6 5.39e-09
K12 L1 L2 0.38
K13 L1 L3 0.45
K23 L2 L3 0.19
.ends Ckt_model_series
Problem: After converting I get the following message in the .ssc file:
% Users should manually implement the following SPICE commands in order to
% achieve a complete implementation:
%    ckt_model_series: K12 l1 l2 0.38
%    ckt_model_series: K13 l1 l3 0.45
%    ckt_model_series: K23 l2 l3 0.19
This basically means all three inductor coupling are not taken into consideration. According to this link my syntax should be right. 
Question: Where is my mistake and how can I manually implement the SPICE commands afterwards? I need this solution for even bigger circuits ...
Accepted Answer
  David John
    
 on 3 Aug 2021
        Could you please confirm which release you are using?
Support for the coupling factor component was added in R2019a, I believe. If you have access to that release or later, it should just work for you.
If you don't have access to that release, then the best solution is to write the relevant equations for yourself. For this simple case, I can give you an example. Basically, it just involves writing out the differential equations. Note that L1, L2 and L3 are variables representing the currents through those inductors, so I'm just writing something like v1 = L1*i1.der + k12*sqrt(L1*L2)*i2.der + etc.
component ckt_model_series
% ckt_model_series
    nodes
        node_1 = foundation.electrical.electrical; % node_1
        node_2 = foundation.electrical.electrical; % node_2
        node_3 = foundation.electrical.electrical; % node_3
        node_4 = foundation.electrical.electrical; % node_4
        node_5 = foundation.electrical.electrical; % node_5
        node_6 = foundation.electrical.electrical; % node_6
    end
    variables
        L1 = {value={0,'A'},priority=priority.none};
        L2 = {value={0,'A'},priority=priority.none};
        L3 = {value={0,'A'},priority=priority.none};
    end
    branches
        L1: node_1.i -> node_4.i;
        L2: node_2.i -> node_5.i;
        L3: node_3.i -> node_6.i;
    end
    equations
        value(node_1.v-node_4.v,'V') == 3.93e-09*value(L1.der,'A/s')+0.38*sqrt(3.93e-09*5.35e-09)*value(L2.der,'A/s')+0.45*sqrt( ...
            3.93e-09*5.39e-09)*value(L3.der,'A/s');
        value(node_2.v-node_5.v,'V') == 5.35e-09*value(L2.der,'A/s')+0.38*sqrt(5.35e-09*3.93e-09)*value(L1.der,'A/s')+0.19*sqrt( ...
            5.35e-09*5.39e-09)*value(L3.der,'A/s');
        value(node_3.v-node_6.v,'V') == 5.39e-09*value(L3.der,'A/s')+0.45*sqrt(5.39e-09*3.93e-09)*value(L1.der,'A/s')+0.19*sqrt( ...
            5.39e-09*5.35e-09)*value(L2.der,'A/s');
    end
end
2 Comments
  David John
    
 on 4 Aug 2021
				Glad to hear that you got unstuck. If you're happy with the answer provided, please feel free to "accept" it. This helps us to identify questions that still require further investigation.
Many thanks,
David
More Answers (1)
  Pranav Verma
    
 on 11 Dec 2020
        Hi Florian,
The link states that since SPICE is a rich language, it is not always possible to perform a full conversion without some manual intervention. 
You can refer to the below link to see if it helps:
Thanks
See Also
Categories
				Find more on Choose and Parameterize Blocks in Help Center and File Exchange
			
	Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!

