diff --git a/pcb_calculator/calculator_panels/panel_transline_base.cpp b/pcb_calculator/calculator_panels/panel_transline_base.cpp index 796e0cc688..0a836fb1da 100644 --- a/pcb_calculator/calculator_panels/panel_transline_base.cpp +++ b/pcb_calculator/calculator_panels/panel_transline_base.cpp @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////// -// C++ code generated with wxFormBuilder (version 4.2.1-0-g80c4cb6-dirty) +// C++ code generated with wxFormBuilder (version 4.2.1-0-g80c4cb6) // http://www.wxformbuilder.org/ // // PLEASE DO *NOT* EDIT THIS FILE! @@ -372,7 +372,7 @@ PANEL_TRANSLINE_BASE::PANEL_TRANSLINE_BASE( wxWindow* parent, wxWindowID id, con sbMessagesSizer = new wxStaticBoxSizer( new wxStaticBox( this, wxID_ANY, _("Results") ), wxVERTICAL ); wxFlexGridSizer* fgSizerTranslResults; - fgSizerTranslResults = new wxFlexGridSizer( 8, 2, 4, 0 ); + fgSizerTranslResults = new wxFlexGridSizer( 10, 2, 4, 0 ); fgSizerTranslResults->AddGrowableCol( 1 ); fgSizerTranslResults->SetFlexibleDirection( wxBOTH ); fgSizerTranslResults->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED ); @@ -441,6 +441,22 @@ PANEL_TRANSLINE_BASE::PANEL_TRANSLINE_BASE( wxWindow* parent, wxWindowID id, con m_Message8->Wrap( -1 ); fgSizerTranslResults->Add( m_Message8, 0, wxEXPAND|wxLEFT|wxRIGHT, 5 ); + m_left_message9 = new wxStaticText( sbMessagesSizer->GetStaticBox(), wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); + m_left_message9->Wrap( -1 ); + fgSizerTranslResults->Add( m_left_message9, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT, 5 ); + + m_Message9 = new wxStaticText( sbMessagesSizer->GetStaticBox(), wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); + m_Message9->Wrap( -1 ); + fgSizerTranslResults->Add( m_Message9, 0, wxEXPAND|wxLEFT|wxRIGHT, 5 ); + + m_left_message10 = new wxStaticText( sbMessagesSizer->GetStaticBox(), wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); + m_left_message10->Wrap( -1 ); + fgSizerTranslResults->Add( m_left_message10, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT, 5 ); + + m_Message10 = new wxStaticText( sbMessagesSizer->GetStaticBox(), wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); + m_Message10->Wrap( -1 ); + fgSizerTranslResults->Add( m_Message10, 0, wxEXPAND|wxLEFT|wxRIGHT, 5 ); + sbMessagesSizer->Add( fgSizerTranslResults, 1, wxALL|wxEXPAND, 5 ); diff --git a/pcb_calculator/calculator_panels/panel_transline_base.fbp b/pcb_calculator/calculator_panels/panel_transline_base.fbp index cc5b207247..c0f1f08662 100644 --- a/pcb_calculator/calculator_panels/panel_transline_base.fbp +++ b/pcb_calculator/calculator_panels/panel_transline_base.fbp @@ -4150,7 +4150,7 @@ fgSizerTranslResults wxFLEX_GROWMODE_SPECIFIED none - 8 + 10 4 5 @@ -5144,6 +5144,254 @@ -1 + + 5 + wxALIGN_CENTER_VERTICAL|wxRIGHT + 0 + + 1 + 1 + 1 + 1 + 0 + + 0 + 0 + + + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 0 + 1 + + 1 + + 0 + 0 + wxID_ANY + dummy + 0 + + 0 + + + 0 + + 1 + m_left_message9 + 1 + + + protected + 1 + + Resizable + 1 + + + ; ; Not forward_declare + 0 + + + + + -1 + + + + 5 + wxEXPAND|wxLEFT|wxRIGHT + 0 + + 1 + 1 + 1 + 1 + 0 + + 0 + 0 + + + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 0 + 1 + + 1 + + 0 + 0 + wxID_ANY + dummy + 0 + + 0 + + + 0 + + 1 + m_Message9 + 1 + + + protected + 1 + + Resizable + 1 + + + ; ; Not forward_declare + 0 + + + + + -1 + + + + 5 + wxALIGN_CENTER_VERTICAL|wxRIGHT + 0 + + 1 + 1 + 1 + 1 + 0 + + 0 + 0 + + + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 0 + 1 + + 1 + + 0 + 0 + wxID_ANY + dummy + 0 + + 0 + + + 0 + + 1 + m_left_message10 + 1 + + + protected + 1 + + Resizable + 1 + + + ; ; Not forward_declare + 0 + + + + + -1 + + + + 5 + wxEXPAND|wxLEFT|wxRIGHT + 0 + + 1 + 1 + 1 + 1 + 0 + + 0 + 0 + + + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 0 + 1 + + 1 + + 0 + 0 + wxID_ANY + dummy + 0 + + 0 + + + 0 + + 1 + m_Message10 + 1 + + + protected + 1 + + Resizable + 1 + + + ; ; Not forward_declare + 0 + + + + + -1 + + diff --git a/pcb_calculator/calculator_panels/panel_transline_base.h b/pcb_calculator/calculator_panels/panel_transline_base.h index 5e9a500288..bc145652e1 100644 --- a/pcb_calculator/calculator_panels/panel_transline_base.h +++ b/pcb_calculator/calculator_panels/panel_transline_base.h @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////// -// C++ code generated with wxFormBuilder (version 4.2.1-0-g80c4cb6-dirty) +// C++ code generated with wxFormBuilder (version 4.2.1-0-g80c4cb6) // http://www.wxformbuilder.org/ // // PLEASE DO *NOT* EDIT THIS FILE! @@ -121,6 +121,10 @@ class PANEL_TRANSLINE_BASE : public CALCULATOR_PANEL wxStaticText* m_Message7; wxStaticText* m_left_message8; wxStaticText* m_Message8; + wxStaticText* m_left_message9; + wxStaticText* m_Message9; + wxStaticText* m_left_message10; + wxStaticText* m_Message10; wxButton* m_buttonTransLineReset; // Virtual event handlers, override them in your derived class diff --git a/pcb_calculator/params_read_write.cpp b/pcb_calculator/params_read_write.cpp index 0990071639..5ae7a942ab 100644 --- a/pcb_calculator/params_read_write.cpp +++ b/pcb_calculator/params_read_write.cpp @@ -221,12 +221,9 @@ void PANEL_TRANSLINE::SetPrmBgColor( enum PRMS_ID aPrmId, const KIGFX::COLOR4D* */ void PANEL_TRANSLINE::SetResult( int aLineNumber, const wxString& aText ) { - #define MSG_CNT_MAX 8 - wxStaticText* messages[MSG_CNT_MAX] = - { m_Message1, m_Message2, m_Message3, - m_Message4, m_Message5, m_Message6, - m_Message7, m_Message8 - }; +#define MSG_CNT_MAX 10 + wxStaticText* messages[MSG_CNT_MAX] = { m_Message1, m_Message2, m_Message3, m_Message4, m_Message5, + m_Message6, m_Message7, m_Message8, m_Message9, m_Message10 }; wxASSERT( ( aLineNumber >= 0 ) && ( aLineNumber < MSG_CNT_MAX ) ); diff --git a/pcb_calculator/transline/c_microstrip.cpp b/pcb_calculator/transline/c_microstrip.cpp index 6b6eb681b7..d91d094fe2 100644 --- a/pcb_calculator/transline/c_microstrip.cpp +++ b/pcb_calculator/transline/c_microstrip.cpp @@ -452,6 +452,7 @@ void C_MICROSTRIP::er_eff_freq() F_e = P_1 * P_2 * pow( ( P_3 * P_4 + 0.1844 * P_7 ) * f_n, 1.5763 ); /* even-mode effective dielectric constant */ er_eff_e = m_parameters[EPSILONR_PRM] - ( m_parameters[EPSILONR_PRM] - er_eff ) / ( 1.0 + F_e ); + prop_delay_e = calcUnitPropagationDelay( er_eff_e ); er_eff = er_eff_o_0; P_8 = 0.7168 * ( 1.0 + 1.076 / ( 1.0 + 0.0576 * ( m_parameters[EPSILONR_PRM] - 1.0 ) ) ); @@ -468,6 +469,7 @@ void C_MICROSTRIP::er_eff_freq() F_o = P_1 * P_2 * pow( ( P_3 * P_4 + 0.1844 ) * f_n * P_15, 1.5763 ); /* odd-mode effective dielectric constant */ er_eff_o = m_parameters[EPSILONR_PRM] - ( m_parameters[EPSILONR_PRM] - er_eff ) / ( 1.0 + F_o ); + prop_delay_o = calcUnitPropagationDelay( er_eff_o ); } @@ -874,13 +876,15 @@ void C_MICROSTRIP::show_results() setResult( 0, er_eff_e, "" ); setResult( 1, er_eff_o, "" ); - setResult( 2, atten_cond_e, "dB" ); - setResult( 3, atten_cond_o, "dB" ); - setResult( 4, atten_dielectric_e, "dB" ); - setResult( 5, atten_dielectric_o, "dB" ); + setResult( 2, prop_delay_e, "ps/cm" ); + setResult( 3, prop_delay_o, "ps/cm" ); + setResult( 4, atten_cond_e, "dB" ); + setResult( 5, atten_cond_o, "dB" ); + setResult( 6, atten_dielectric_e, "dB" ); + setResult( 7, atten_dielectric_o, "dB" ); - setResult( 6, m_parameters[SKIN_DEPTH_PRM] / UNIT_MICRON, "µm" ); - setResult( 7, Zdiff, "Ω" ); + setResult( 8, m_parameters[SKIN_DEPTH_PRM] / UNIT_MICRON, "µm" ); + setResult( 9, Zdiff, "Ω" ); } diff --git a/pcb_calculator/transline/c_microstrip.h b/pcb_calculator/transline/c_microstrip.h index b8add924e2..c651204cce 100644 --- a/pcb_calculator/transline/c_microstrip.h +++ b/pcb_calculator/transline/c_microstrip.h @@ -55,6 +55,8 @@ private: double ang_l_o; // odd-mode electrical length in angle double er_eff_e; // even-mode effective dielectric constant double er_eff_o; // odd-mode effective dielectric constant + double prop_delay_e; // even-mode unit propagation delay (ps/cm) + double prop_delay_o; // odd-mode unit propagation delay (ps/cm) double er_eff_e_0; // static even-mode effective dielectric constant double er_eff_o_0; // static odd-mode effective dielectric constant double w_eff; // Effective width of line diff --git a/pcb_calculator/transline/coplanar.cpp b/pcb_calculator/transline/coplanar.cpp index fdc6af3f71..6caf3f129f 100644 --- a/pcb_calculator/transline/coplanar.cpp +++ b/pcb_calculator/transline/coplanar.cpp @@ -35,6 +35,7 @@ COPLANAR::COPLANAR() : TRANSLINE() { m_Name = "CoPlanar"; backMetal = false; + unit_prop_delay = 0.0; Init(); } @@ -172,6 +173,8 @@ void COPLANAR::calcAnalyze() m_parameters[EPSILON_EFF_PRM] = sr_er_f * sr_er_f; m_parameters[Z0_PRM] = zl_factor / sr_er_f; + + unit_prop_delay = calcUnitPropagationDelay( m_parameters[EPSILON_EFF_PRM] ); } @@ -180,10 +183,11 @@ void COPLANAR::show_results() { setResult( 0, m_parameters[EPSILON_EFF_PRM], "" ); - setResult( 1, m_parameters[LOSS_CONDUCTOR_PRM], "dB" ); - setResult( 2, m_parameters[LOSS_DIELECTRIC_PRM], "dB" ); + setResult( 1, unit_prop_delay, "ps/cm" ); + setResult( 2, m_parameters[LOSS_CONDUCTOR_PRM], "dB" ); + setResult( 3, m_parameters[LOSS_DIELECTRIC_PRM], "dB" ); - setResult( 3, m_parameters[SKIN_DEPTH_PRM] / UNIT_MICRON, "µm" ); + setResult( 4, m_parameters[SKIN_DEPTH_PRM] / UNIT_MICRON, "µm" ); } diff --git a/pcb_calculator/transline/coplanar.h b/pcb_calculator/transline/coplanar.h index 7ceaffc7e7..f1f1dea128 100644 --- a/pcb_calculator/transline/coplanar.h +++ b/pcb_calculator/transline/coplanar.h @@ -37,6 +37,7 @@ public: protected: bool backMetal; + double unit_prop_delay; private: void calcAnalyze() override; diff --git a/pcb_calculator/transline/microstrip.cpp b/pcb_calculator/transline/microstrip.cpp index 7646741f58..fb0235d1de 100644 --- a/pcb_calculator/transline/microstrip.cpp +++ b/pcb_calculator/transline/microstrip.cpp @@ -305,6 +305,9 @@ void MICROSTRIP::dispersion() D = Z0_dispersion( u, e_r, e_r_eff_0, e_r_eff_f, f_n ); Z0_f = Z0_0 * D; + // 1e10 factor is to convert from s/m to ps/cm + unit_prop_delay = calcUnitPropagationDelay( e_r_eff_f ); + m_parameters[EPSILON_EFF_PRM] = e_r_eff_f; m_parameters[Z0_PRM] = Z0_f; } @@ -465,10 +468,11 @@ void MICROSTRIP::show_results() setProperty( ANG_L_PRM, m_parameters[ANG_L_PRM] ); setResult( 0, m_parameters[EPSILON_EFF_PRM], "" ); - setResult( 1, atten_cond, "dB" ); - setResult( 2, atten_dielectric, "dB" ); + setResult( 1, unit_prop_delay, "ps/cm" ); + setResult( 2, atten_cond, "dB" ); + setResult( 3, atten_dielectric, "dB" ); - setResult( 3, m_parameters[SKIN_DEPTH_PRM] / UNIT_MICRON, "µm" ); + setResult( 4, m_parameters[SKIN_DEPTH_PRM] / UNIT_MICRON, "µm" ); } diff --git a/pcb_calculator/transline/microstrip.h b/pcb_calculator/transline/microstrip.h index 01221be9ee..599711f5a6 100644 --- a/pcb_calculator/transline/microstrip.h +++ b/pcb_calculator/transline/microstrip.h @@ -49,6 +49,7 @@ private: double w_eff; // Effective width of line double atten_dielectric; // Loss in dielectric (dB) double atten_cond; // Loss in conductors (dB) + double unit_prop_delay; // Unit propagation delay (ps/cm) // private params double Z0_h_1; // homogeneous stripline impedance diff --git a/pcb_calculator/transline/stripline.cpp b/pcb_calculator/transline/stripline.cpp index aff5741d24..edd2220596 100644 --- a/pcb_calculator/transline/stripline.cpp +++ b/pcb_calculator/transline/stripline.cpp @@ -30,7 +30,7 @@ #include "stripline.h" #include "units.h" -STRIPLINE::STRIPLINE() : TRANSLINE() +STRIPLINE::STRIPLINE() : TRANSLINE(), unit_prop_delay( 0.0 ) { m_Name = "StripLine"; Init(); @@ -104,6 +104,8 @@ void STRIPLINE::calcAnalyze() m_parameters[ANG_L_PRM] = 2.0 * M_PI * m_parameters[PHYS_LEN_PRM] * sqrt( m_parameters[EPSILONR_PRM] ) * m_parameters[FREQUENCY_PRM] / C0; // in radians + + unit_prop_delay = calcUnitPropagationDelay( m_parameters[EPSILON_EFF_PRM] ); } @@ -163,10 +165,11 @@ void STRIPLINE::show_results() { setResult( 0, m_parameters[EPSILON_EFF_PRM], "" ); - setResult( 1, m_parameters[LOSS_CONDUCTOR_PRM], "dB" ); - setResult( 2, m_parameters[LOSS_DIELECTRIC_PRM], "dB" ); + setResult( 1, unit_prop_delay, "ps/cm" ); + setResult( 2, m_parameters[LOSS_CONDUCTOR_PRM], "dB" ); + setResult( 3, m_parameters[LOSS_DIELECTRIC_PRM], "dB" ); - setResult( 3, m_parameters[SKIN_DEPTH_PRM] / UNIT_MICRON, "µm" ); + setResult( 4, m_parameters[SKIN_DEPTH_PRM] / UNIT_MICRON, "µm" ); } diff --git a/pcb_calculator/transline/stripline.h b/pcb_calculator/transline/stripline.h index 1315c26ecd..b4e4efede9 100644 --- a/pcb_calculator/transline/stripline.h +++ b/pcb_calculator/transline/stripline.h @@ -39,6 +39,8 @@ private: void showAnalyze() override; double lineImpedance( double, double& ); void show_results() override; + + double unit_prop_delay; }; #endif diff --git a/pcb_calculator/transline/transline.cpp b/pcb_calculator/transline/transline.cpp index e1f2841a64..aee2582ef9 100644 --- a/pcb_calculator/transline/transline.cpp +++ b/pcb_calculator/transline/transline.cpp @@ -438,3 +438,9 @@ void TRANSLINE::setErrorLevel( PRMS_ID aP, char aErrorLevel ) default: SetPropertyBgColorInDialog( aP, &okCol ); break; } } + + +double TRANSLINE::calcUnitPropagationDelay( const double epsilonEff ) +{ + return std::sqrt( epsilonEff ) * ( 1.0e10 / 2.99e8 ); +} \ No newline at end of file diff --git a/pcb_calculator/transline/transline.h b/pcb_calculator/transline/transline.h index 74d0d5e6fb..bc67a03d8c 100644 --- a/pcb_calculator/transline/transline.h +++ b/pcb_calculator/transline/transline.h @@ -135,6 +135,9 @@ protected: void ellipke( double, double&, double& ); double ellipk( double ); void setErrorLevel( PRMS_ID, char ); + + /// Calculates the unit propagation delay (in ps/cm) for the given effective dielectric constant + static double calcUnitPropagationDelay( double epsilonEff ); }; #endif /* __TRANSLINE_H */ diff --git a/pcb_calculator/transline_dlg_funct.cpp b/pcb_calculator/transline_dlg_funct.cpp index 682beb1ac4..5834753b5e 100644 --- a/pcb_calculator/transline_dlg_funct.cpp +++ b/pcb_calculator/transline_dlg_funct.cpp @@ -116,16 +116,12 @@ void PANEL_TRANSLINE::TranslineTypeSelection( enum TRANSLINE_TYPE_ID aType ) m_radioBtnPrm2->Show( tr_ident->m_HasPrmSelection ); // Setup messages - wxStaticText* left_msg_list[] = - { - m_left_message1, m_left_message2, m_left_message3, m_left_message4, m_left_message5, - m_left_message6, m_left_message7, m_left_message8, nullptr - }; + wxStaticText* left_msg_list[] = { m_left_message1, m_left_message2, m_left_message3, m_left_message4, + m_left_message5, m_left_message6, m_left_message7, m_left_message8, + m_left_message9, m_left_message10, nullptr }; - wxStaticText* msg_list[] = - { - m_Message1, m_Message2, m_Message3, m_Message4, m_Message5, m_Message6, m_Message7, m_Message8, nullptr - }; + wxStaticText* msg_list[] = { m_Message1, m_Message2, m_Message3, m_Message4, m_Message5, m_Message6, + m_Message7, m_Message8, m_Message9, m_Message10, nullptr }; unsigned jj = 0; diff --git a/pcb_calculator/transline_ident.cpp b/pcb_calculator/transline_ident.cpp index 5533d87910..7f47ff1096 100644 --- a/pcb_calculator/transline_ident.cpp +++ b/pcb_calculator/transline_ident.cpp @@ -117,6 +117,7 @@ TRANSLINE_IDENT::TRANSLINE_IDENT( enum TRANSLINE_TYPE_ID aType ) m_BitmapName = BITMAPS::microstrip; m_Messages.Add( wxString::Format( _( "Effective %s:" ), wxT( "εr" ) ) ); + m_Messages.Add( _( "Unit propagation delay:" ) ); m_Messages.Add( _( "Conductor losses:" ) ); m_Messages.Add( _( "Dielectric losses:" ) ); m_Messages.Add( _( "Skin depth:" ) ); @@ -159,6 +160,7 @@ TRANSLINE_IDENT::TRANSLINE_IDENT( enum TRANSLINE_TYPE_ID aType ) m_HasPrmSelection = true; m_Messages.Add( wxString::Format( _( "Effective %s:" ), wxT( "εr" ) ) ); + m_Messages.Add( _( "Unit propagation delay:" ) ); m_Messages.Add( _( "Conductor losses:" ) ); m_Messages.Add( _( "Dielectric losses:" ) ); m_Messages.Add( _( "Skin depth:" ) ); @@ -193,6 +195,7 @@ TRANSLINE_IDENT::TRANSLINE_IDENT( enum TRANSLINE_TYPE_ID aType ) m_HasPrmSelection = true; m_Messages.Add( wxString::Format( _( "Effective %s:" ), wxT( "εr" ) ) ); + m_Messages.Add( _( "Unit propagation delay:" ) ); m_Messages.Add( _( "Conductor losses:" ) ); m_Messages.Add( _( "Dielectric losses:" ) ); m_Messages.Add( _( "Skin depth:" ) ); @@ -302,6 +305,8 @@ TRANSLINE_IDENT::TRANSLINE_IDENT( enum TRANSLINE_TYPE_ID aType ) m_Messages.Add( wxString::Format( _( "Effective %s (even):" ), wxT( "εr" ) ) ); m_Messages.Add( wxString::Format( _( "Effective %s (odd):" ), wxT( "εr" ) ) ); + m_Messages.Add( _( "Unit propagation delay (even):" ) ); + m_Messages.Add( _( "Unit propagation delay (odd):" ) ); m_Messages.Add( _( "Conductor losses (even):" ) ); m_Messages.Add( _( "Conductor losses (odd):" ) ); m_Messages.Add( _( "Dielectric losses (even):" ) ); @@ -349,6 +354,7 @@ TRANSLINE_IDENT::TRANSLINE_IDENT( enum TRANSLINE_TYPE_ID aType ) m_BitmapName = BITMAPS::stripline; m_Messages.Add( wxString::Format( _( "Effective %s:" ), wxT( "εr" ) ) ); + m_Messages.Add( _( "Unit propagation delay:" ) ); m_Messages.Add( _( "Conductor losses:" ) ); m_Messages.Add( _( "Dielectric losses:" ) ); m_Messages.Add( _( "Skin depth:" ) ); diff --git a/pcbnew/dialogs/panel_setup_condition_help_1clauses.h b/pcbnew/dialogs/panel_setup_condition_help_1clauses.h new file mode 100644 index 0000000000..f1dbb6616b --- /dev/null +++ b/pcbnew/dialogs/panel_setup_condition_help_1clauses.h @@ -0,0 +1,6 @@ +// Do not edit this file, it is autogenerated by CMake from the .md file +_HKI( "### Clause\n" + "\n" + " (condition \"\")\n" + "\n" + "
" ); diff --git a/pcbnew/dialogs/panel_setup_condition_help_6notes.h b/pcbnew/dialogs/panel_setup_condition_help_6notes.h new file mode 100644 index 0000000000..c22e698c0c --- /dev/null +++ b/pcbnew/dialogs/panel_setup_condition_help_6notes.h @@ -0,0 +1,7 @@ +// Do not edit this file, it is autogenerated by CMake from the .md file +_HKI( "### Notes\n" + "\n" + "Use Ctrl+/ to comment or uncomment line(s).\n" + "


\n" + "\n" + "" );