SimpleTriac

model SimpleTriac "Simple triac, based on Semiconductors.Thyristor model"
    parameter SI.Voltage VDRM(final min = 0) = 100 "Forward breakthrough voltage";
    parameter SI.Voltage VRRM(final min = 0) = 100 "Reverse breakthrough voltage";
    parameter SI.Current IDRM = 0.1 "Saturation current";
    parameter SI.Voltage VTM = 1.7 "Conducting voltage";
    parameter SI.Current IH = 0.006 "Holding current";
    parameter SI.Current ITM = 25 "Conducting current";
    parameter SI.Voltage VGT = 0.7 "Gate trigger voltage";
    parameter SI.Current IGT = 0.005 "Gate trigger current";
    parameter SI.Time TON = 1e-6 "Switch on time";
    parameter SI.Time TOFF = 1.5e-5 "Switch off time";
    parameter SI.Voltage Vt = 0.04 "Voltage equivalent of temperature (kT/qn)";
    parameter Real Nbv = 0.74 "Reverse Breakthrough emission coefficient";
    Modelica.Electrical.Analog.Interfaces.NegativePin n "Cathode"
        annotation (Placement(transformation(extent = {
            {-110, -10}, 
            {-90, 10}})));
    Modelica.Electrical.Analog.Interfaces.PositivePin p "Anode"
        annotation (Placement(transformation(extent = {
            {94, -10}, 
            {114, 10}})));
    Modelica.Electrical.Analog.Interfaces.PositivePin g "Gate"
        annotation (Placement(
            transformation(extent = {
                {-110, -108}, 
                {-90, -88}}),
            iconTransformation(extent = {
                {-110, -108}, 
                {-90, -88}})));
    Modelica.Electrical.Analog.Semiconductors.Thyristor thyristor(VDRM = VDRM, VRRM = VRRM, IDRM = IDRM, VTM = VTM, IH = IH, ITM = ITM, VGT = VGT, IGT = IGT, TON = TON, TOFF = TOFF, Vt = Vt, Nbv = Nbv, useHeatPort = useHeatPort, T = T) annotation (Placement(transformation(extent = {
        {-20, 30}, 
        {0, 50}})));
    Modelica.Electrical.Analog.Semiconductors.Thyristor thyristor1(VDRM = VDRM, VRRM = VRRM, IDRM = IDRM, VTM = VTM, IH = IH, ITM = ITM, VGT = VGT, IGT = IGT, TON = TON, TOFF = TOFF, Vt = Vt, Nbv = Nbv, useHeatPort = useHeatPort, T = T) annotation (Placement(transformation(
        extent = {
            {-10, -10}, 
            {10, 10}},
        rotation = 180,
        origin = {-12, -40})));
    Modelica.Electrical.Analog.Ideal.IdealDiode idealDiode(Vknee = 0) annotation (Placement(transformation(extent = {
        {-40, 58}, 
        {-20, 78}})));
    Modelica.Electrical.Analog.Ideal.IdealDiode idealDiode1(Vknee = 0) annotation (Placement(transformation(
        extent = {
            {-10, -10}, 
            {10, 10}},
        rotation = 90,
        origin = {-20, -72})));
    parameter Boolean useHeatPort = false "=true, if HeatPort is enabled"
        annotation (
            Evaluate = true,
            HideResult = true,
            choices(checkBox = true));
    parameter SI.Temperature T = 293.15 "Fixed device temperature if useHeatPort = false"
        annotation (Dialog(enable = not useHeatPort));
    Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a heatPort if useHeatPort annotation (Placement(
        transformation(extent = {
            {-10, -110}, 
            {10, -90}}),
        iconTransformation(extent = {
            {-10, -110}, 
            {10, -90}})));
equation
    if useHeatPort then 
        connect(heatPort,thyristor.heatPort);
        connect(heatPort,thyristor1.heatPort);
    end if;
    connect(thyristor.Anode,n) annotation (Line(
        points = {
            {-19, 40}, 
            {-18, 40}, 
            {-18, 48}, 
            {-70, 48}, 
            {-70, 0}, 
            {-100, 0}},
        color = {0, 0, 255}));
    connect(thyristor.Gate,idealDiode.n) annotation (Line(
        points = {
            {0, 50}, 
            {0, 59.5}, 
            {-20, 59.5}, 
            {-20, 68}},
        color = {0, 0, 255}));
    connect(idealDiode.p,g) annotation (Line(
        points = {
            {-40, 68}, 
            {-82, 68}, 
            {-82, -98}, 
            {-100, -98}},
        color = {0, 0, 255}));
    connect(idealDiode1.n,thyristor1.Gate) annotation (Line(
        points = {
            {-20, -62}, 
            {-20, -50}, 
            {-22, -50}},
        color = {0, 0, 255}));
    connect(idealDiode1.p,g) annotation (Line(
        points = {
            {-20, -82}, 
            {-42, -82}, 
            {-42, -98}, 
            {-100, -98}},
        color = {0, 0, 255}));
    connect(thyristor1.Anode,p) annotation (Line(
        points = {
            {-3, -40}, 
            {-2, -40}, 
            {-2, -60}, 
            {80, -60}, 
            {80, 0}, 
            {104, 0}},
        color = {0, 0, 255}));
    connect(thyristor1.Anode,thyristor.Cathode) annotation (Line(
        points = {
            {-3, -40}, 
            {-2, -40}, 
            {-2, 40}, 
            {-1, 40}},
        color = {0, 0, 255}));
    connect(thyristor1.Cathode,thyristor.Anode) annotation (Line(
        points = {
            {-21, -40}, 
            {-22, -40}, 
            {-22, 40}, 
            {-19, 40}},
        color = {0, 0, 255}));

    annotation (
        defaultComponentName = "triac",
        Icon(
            coordinateSystem(
                preserveAspectRatio = true,
                extent = {
                    {-100, -100}, 
                    {100, 100}}),
            graphics = {
                Polygon(
                    points = {
                        {-30, 0}, 
                        {-30, -100}, 
                        {70, -50}, 
                        {-30, 0}},
                    lineColor = {0, 0, 255}), 
                Polygon(
                    points = {
                        {70, 100}, 
                        {70, 0}, 
                        {-30, 50}, 
                        {70, 100}},
                    lineColor = {0, 0, 255}), 
                Line(
                    points = {
                        {70, 0}, 
                        {70, -100}},
                    color = {0, 0, 255}), 
                Line(
                    points = {
                        {-30, 0}, 
                        {-30, 100}},
                    color = {0, 0, 255}), 
                Line(
                    points = {
                        {-30, 0}, 
                        {-90, 0}},
                    color = {0, 0, 255}), 
                Line(
                    points = {
                        {70, 0}, 
                        {110, 0}},
                    color = {0, 0, 255}), 
                Line(
                    points = {
                        {-100, -88}, 
                        {-100, -80}, 
                        {-30, -50}},
                    color = {0, 0, 255}), 
                Text(
                    extent = {
                        {-150, 150}, 
                        {150, 110}},
                    textString = "%name",
                    lineColor = {0, 0, 255})}),
        Documentation(
            info = "<html>\n<p>This is a simple TRIAC model based on the extended thyristor model Modelica.Electrical.Analog.Semiconductors.Thyristor.\n<br>Two thyristors are contrarily connected in parallel, whereas each transistor is connected with a diode.\n<br>Further information regarding the electrical component TRIAC can be detected in documentation of the ideal TRIAC model.\n<br>As an additional information: this model is based on the Modelica.Electrical.Analog.Semiconductors.Thyristor.</p>\n<p><strong>Attention:</strong> The model seems to be very sensitive with respect to the choice of some parameters (e.g., VDRM, VRRM). This is caused by the thyristor model. Further investigations are necessary.</p>\n</html>",
            revisions = "<html>\n<ul>\n<li><em>November 25, 2009   </em><br>\n\n       by Susann Wolf<br><br>\n       </li>\n</ul>\n</html>"));
end SimpleTriac;