Sim: Swap pins instead of inverting position variable in potentiometers
This commit is contained in:
parent
2b8a29b662
commit
01c69f1066
|
@ -29,14 +29,10 @@
|
||||||
std::string SPICE_GENERATOR_R_POT::ModelLine( const SPICE_ITEM& aItem ) const
|
std::string SPICE_GENERATOR_R_POT::ModelLine( const SPICE_ITEM& aItem ) const
|
||||||
{
|
{
|
||||||
std::string r = m_model.FindParam( "r" )->value->ToSpiceString();
|
std::string r = m_model.FindParam( "r" )->value->ToSpiceString();
|
||||||
|
std::string position = m_model.FindParam( "pos" )->value->ToSpiceString();
|
||||||
|
|
||||||
// We invert the argument passed to the model because we want pos=1 to correspond to the signal
|
if( position != "" )
|
||||||
// from + and pos=0 to the signal from -.
|
|
||||||
auto pos = static_cast<SIM_VALUE_FLOAT&>( *m_model.FindParam( "pos" )->value );
|
|
||||||
|
|
||||||
if( pos.HasValue() )
|
|
||||||
{
|
{
|
||||||
std::string position = ( SIM_VALUE_FLOAT( 1 ) - pos ).ToSpiceString();
|
|
||||||
return fmt::format( ".model {} potentiometer( r={} position={} )\n", aItem.modelName, r,
|
return fmt::format( ".model {} potentiometer( r={} position={} )\n", aItem.modelName, r,
|
||||||
position );
|
position );
|
||||||
}
|
}
|
||||||
|
@ -45,12 +41,20 @@ std::string SPICE_GENERATOR_R_POT::ModelLine( const SPICE_ITEM& aItem ) const
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
std::string SPICE_GENERATOR_R_POT::ItemLine( const SPICE_ITEM& aItem ) const
|
||||||
|
{
|
||||||
|
// Swap pin order so that pos=1 is all +, and pos=0 is all -.
|
||||||
|
SPICE_ITEM item = aItem;
|
||||||
|
std::swap( item.pinNetNames[0], item.pinNetNames[2] );
|
||||||
|
return SPICE_GENERATOR::ItemLine( item );
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
std::string SPICE_GENERATOR_R_POT::TunerCommand( const SPICE_ITEM& aItem,
|
std::string SPICE_GENERATOR_R_POT::TunerCommand( const SPICE_ITEM& aItem,
|
||||||
const SIM_VALUE_FLOAT& aValue ) const
|
const SIM_VALUE_FLOAT& aValue ) const
|
||||||
{
|
{
|
||||||
return fmt::format( "altermod @{}[position]={}",
|
return fmt::format( "altermod @{}[position]={}",
|
||||||
aItem.model->SpiceGenerator().ItemName( aItem ),
|
aItem.model->SpiceGenerator().ItemName( aItem ), aValue.ToSpiceString() );
|
||||||
( SIM_VALUE_FLOAT( 1 ) - aValue ).ToSpiceString() );
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -35,6 +35,7 @@ public:
|
||||||
using SPICE_GENERATOR::SPICE_GENERATOR;
|
using SPICE_GENERATOR::SPICE_GENERATOR;
|
||||||
|
|
||||||
std::string ModelLine( const SPICE_ITEM& aItem ) const override;
|
std::string ModelLine( const SPICE_ITEM& aItem ) const override;
|
||||||
|
std::string ItemLine( const SPICE_ITEM& aItem ) const override;
|
||||||
std::string TunerCommand( const SPICE_ITEM& aItem, const SIM_VALUE_FLOAT& aValue ) const override;
|
std::string TunerCommand( const SPICE_ITEM& aItem, const SIM_VALUE_FLOAT& aValue ) const override;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue