Search This Blog

Tuesday 19 May 2020

Inductor, Capacitor, Resistor and ... Memristor

Inductor, Capacitor, Resistor and ... Memristor

You can easily buy resistors, capacitors and inductors, they are the building blocks of electronic circuits everywhere. Now you can buy the fourth, a less well-known fundamental device: the memristor. This is a device whose resistance changes depending on the current that has flowed through it. There's a Wikipedia page with details here:

https://en.wikipedia.org/wiki/Memristor

You can buy them here: Knowm

I decided to by some to experiment with. Knowm have a variety of packages for their memristors, I chose the 32 pin DIP style package:


I bought three different types of memristor: Tungsten, Carbon and Chromium. The photo is a Tungsten variant. There's 16 memristors in the package. Here's a close up of what's in the package:


The dark bars are, I think, the memristor channels that change their resistance depending on the current through them. The silver blobs are bond wires that provide connections from the memristors to the pins on the package. The collection of memristors is then encased in a blob of transparent plastic of some kind. The blob seems to be permanently a bit tacky, hence the blobs of dust in the picture.

I have no application for these devices, indeed very few people do, so I decided to build a test rig to investigate what their characteristics are. This is based on an Arduino Uno, together with some analogue switches to select memristors to test, a DAC to drive test voltages and a voltage reference. The AD converters on the Uno are used to measure the voltages across the memristor.


I made a test package in the same form factor as the memristors, which I populated with a collection of diodes, resistors and other components so I had a known set of reference devices to compare to the memristors.


The two analogue switch ICs are on perfboard because I got the width of the ICs incorrect, so I made adapters rather than re-spin the PCB.  Unfortunately the memristor package is a different width to the 40 pin DIP footprint I put on the PCB so they have to plug in to the PCB using a perfboard adapter as well. This also means the test component PCBs are a different width to the memristor package. Oh well, it was a quick PCB layout job, and it is a prototype after all.

The software on the Uno drives a voltage across the memristor and a current limiting resistor and measures the current and voltage through the test component. I then put the values that are output on the serial port into a spreadsheet and plot the result. Here's the output from a run with a resistor:



The straight line indicates a constant resistance, in this case 10k. If the same test is run on a diode then you get this:



The rise in current is the diode turning on. The current doesn't go very high as the memristors I am using cannot tolerate more than 1mA of current. In fact they are supplied with a warning sheet which lets you know that probing them with a multimeter will destroy the devices due to too high a voltage being applied to them. The PCB has a series resistor to limit the current, with the value I am using this is a limit of about 200uA. The forward voltage drop of a diode is about 600mV, but this isn't reached in the graph above as the current is limited.

A 2V0 zener diode results in this trace:



The forward voltage threshold is similar to the diode above, but the reverse voltage threshold is higher and the current increases at a slower rate than the forward current increase. At higher currents this reverse voltage would be 2.0V for this diode.

I had a few false starts when I tried to trace a memristor. The curves just didn't come out as expected, here's an example:



The units are current in uA vertically and voltage in V horizontally. The curve isn't what is expected of a memristor which should be a bow-tie sort of shape with a 'pinch' in it. I had designed the PCB with the datasheet in such a way that I didn't exceed the maximum ratings for current or voltage. The datasheet was a bit inconsistent and had several VI curves that didn't have explicit units for current or voltage. If they were volts and amps, then the curves would extend past the maximum ratings of the memristors. After talking to Knowm it turns out that the maximum ratings (mainly for current) are simply a threshold where the high resistance state turns into a lower 'high resistance'. The drop is from around 1Gohm to about 100kohm. The curves in the datasheet do indeed exceed the maximum values given. In light of this I changed the current limiting resistor from 100k to 1k, which allows a much higher current to be supplied. With this resistor a typical curve from a memristor is like this:



This curve has the expected form for a memristor, with the crossover and hysteresis. It's a quasi d.c. curve so doesn't look like the trace most often seen which is one made with sinusoidal drive signals. Before I increased the drive current I did put together a sinusoidal drive circuit to see if I could duplicate the waveforms I had seen, and got this:


This does look like the traces I had seen, so it proved that the memristors were in fact still memristors and I hadn't damaged them. The quasi d.c. traces are similar to these but are slightly different in shape. Memristor traces alter depending on the frequency that they are driven at so this isn't unexpected.

This plot of all of my Tungsten memristors shows a problem with this device:


This shows that the memristors are pretty similar when a positive voltage is applied. When the voltage is negative, however, then some of the devices behave very differently. This makes it tricky to use them as memory storage. This is the curve of a single tungsten memristor. It shows (to the right) the low resistance region, as current increases when voltage increases. To the left the low resistance persists until a threshold is reached, then the current drops as voltage increases. This is a negative resistance area, the device then enters the high resistance area.


This transition area as the device enters the high resistance region is where a lot of variation occurs. If you are trying to represent a '1' bit as the device being in the low resistance region and a '0' bit as the device being in the high resistance region then you can have problems because of this variability. This makes it difficult to use the memristors to store bits (I've tried), something which simulated memristors don't suffer from.





2 comments:

Unknown said...

Thanks for sharing your research. Shame that storage is inconsistent, funny how it isn't mentioned in all the memristor hype this past decade. Really appreciate your work.

amen said...

It's definitely not strongly advertised, but if you look at the details then it is mentioned, for instance:

https://backend.orbit.dtu.dk/ws/portalfiles/portal/127421938/Memory_memristor_Nannarelli.pdf

in the section 'C. The Ugly' points out the inconsistent behaviour.