This model shows how to model a digital potentiometer such as is used to control audio amplifiers from a digital circuit or microprocessor-controlled system. The model also shows how you can create your own custom blocks in order to extend the SimElectronics® library.
The datasheet specifies an end-to-end resistance R or 10K ohms and a quantization of 16 steps. To look under the Digipot masked subsystem, select the block and type ctrl-U. The low (L) to wiper (W) resistance is R*N/16, and high (H) to wiper resistance is R*(16-N)/16 where N is the value of an internal counter. The internal counter is enabled by the chip-select (CS) pin, and counts each time the up/down (U/D) pin goes high. It counts up if U/D is high when CS goes high, or counts down if U/D is low when CS goes high.
In this circuit, the op-amp gain is set by R2/R1 where R2 is the Digipot block resistance. R1 is set to 10K and R2 starts at 10K*8/16 = 5K. Hence the initial gain is 0.5, and the output voltage amplitude is 0.5 volts for a 1 volt peak input sinewave. The Pulse Generator increases the counter N by 1 every second, and the op-amp gain tends to 1 as N approaches 16.
The Digipot block has been implemented as a masked subsystem, and as such is suitable for re-use in other models. Use of triggered and enabled Simulink® subsystems is used to implement the asynchronous counter. To support asynchronous operation, the discrete-time integrator's sample time is set to -1.
Sometimes digipots will only change their resistance when the wiper current is zero. For example, in audio applications this helps prevent audible clicks when the state changes. To implement this, another edge-triggered block can be added after the Pulse Counter block, its trigger signal being driven by a wiper current measurement. Another possible enhancement is to model the wiper resistance by adding a resistor between the wiper port W and the junction between the two variable resistors.