arduino based open source HPLC

Discussions about HPLC, CE, TLC, SFC, and other "liquid phase" separation techniques.

32 posts Page 1 of 3
Hello all,

I have become interested in trying to develop open source HPLC hardware/software, potentially for the release of designs to academic labs that aren't as well funded and do not require super duper high resolution or reproducibility of a ~70,000 USD brand spanking new HPLC (maybe for semi-prep or the most basic analytical applications, i.e. purity checks of single compounds).

However, I am really starting from scratch. I have recently acquired several old Waters 510 pumps and I have an Arduino Mega2560 microcontroller and a lot of will but not much skill (in this area). My first objective is to write a python program that will allow me to communicate with one of the pumps via serial communication between the arduino board and a PC. I am wondering if I should try and control the stepper motor directly with my own stepper motor driver board and power source or if I should try and use what is already in the waters pump. I am posting this to just start some discussion and if there appears to be any interest I'll keep you guys updated on the status of the project. This is probably the easiest place to start I imagine the detector and potentially autoinjector will be significantly more difficult.

I like the idea of an open source hardware/software combo for chromatography, but I don't know how well suited the Arduino is for this purpose. I'm familiar with the specs, but I don't know if it would have enough processing power to support all the tasks a chromatography system has to juggle. I've thought about playing around with one but just never got around to it.

As far as the Waters 510, there should be an external control port on the back. I don't have a pinout or the manual handy, but I believe that by varying a voltage across a couple of those pins you can control the speed. I could be incorrect, in which case you can controlling by varying the frequency of AC across a pair of pins. It may offer both modes as well. If I can find my manual I'll post the information. I see no reason not to use all the original components. Less work and cost to you.

Scott Horn
Thanks Scott, a manual would be very helpful. I wasn't envisioning having the arduino control the entire operation but using it as a means for a more power computer such as a Raspberry Pi or whatever flavor of single board computer is popular to control and communicate with the equipment. Although for now I'm just using a desktop computer connected to the arduino via USB to turn pins on and off. The aim is to have a setup that has unlimited flexibility, no software licenses, no proprietary connections, serial ports, or circuits. Although down the road I'll have to standardize which company's parts I use. As a single person I certainly won't be able to manufacture my own seals, plungers, pump heads, etc.
It's a noble aspiration for sure. The Waters 510 was built in a different era. Back then the protocols for controlling and receiving data from instruments were really simple, and often documented in the manuals. I'm pretty sure that nowadays if you called the manufacturer of a pump or detector and asked for a pinout and a description of their communication protocol they would laugh at you. They have a vested interest in making everything proprietary, so that they can sell you the expensive software and service contract to go along with your system. There are exceptions, and if you have the skill you can always reverse-engineer the comms. In my work I've done something in between what you're trying to do and buying a complete system. I picked a chromatography data system (Clarity) that allowed me to use equipment from a lot of different vendors, but have one software package control them all. It's not "open source", and the hardware is not entirely open either, but by picking the right manufacturers, I have enough access to the "nuts and bolts" to get what I need.

As far as the manual, I'm not at work right now, but I'll check tomorrow. I *MAY* have a pdf of the waters 510 manual.
I used a multimeter to measure resistances between the six pins labelled 'External Control' in the back of the 510

pin set up

1 4
2 5
3 6

Resistances (Ohms):
1 - 2 = 14.1 k
1 - 3 = 509 k
1 - 6 = 7.6 k
2 - 3 = 522 k
2 - 6 = 21.7 k
3 - 6 = 507 k

I'm not sure exactly how the pins tie into control of the 6-wire stepper motor.

I've abandoned the Waters 510 pump for now, I've given up on trying to reverse engineer the external control of the obsolete Waters circuits/drivers. Plus the 510 has a huge stepper that draws almost 5A of current so it is difficult to find reasonably priced stepper motor driver boards that can handle that kind of current.

Thankfully I also have an old Shimadzu LC-10ATvp in my possession which has a more reasonably sized motor that draws 2.7A of current. I hooked up an old 24VDC computer power supply to a SainSmart TB6850 driver board and a digital I/O pin on an the arduino. The driver has 5 pins that require a constant 5V of current (supplied by the arduino and grounded on the arduino) and I can make the motor execute with one step by sending a 5V pulse to the 6th input pin. Furthermore, I can use a digital pin capable of pulse width modulation instead of simple on/off so the arduino can set the pulse width modulation signal at the pin controlling the motor and then be free to do something else. When a delay() function combined with a digital pin NOT capable of PWM is used the arduino is tied up turning the pin on and off and cannot do other functions, which obviously is not ideal.

My next objective is to create an interface in python that will allow me to communicate with the arduino to turn the motor on/off as well as change motor speed. Since I've completly disassembled the Shimadzu driver mechanism I'll have to recalibrate my speed settings with a given flow rate.

I also have access to a drill press and am planning machining my own pump heads and I was wondering if anyone had any opinions on whether aluminum or stainless steel would be better for LC applications.
It may be a little late, but I found that Waters 510 manual as well as the service manual. If you still want them, post an email address and I'll send them to you. Sadly it looks like neither document details which pins are used to control pump speed. I thought I had a document around here somewhere that addressed it, but I can't find it.

As for machining your own pump heads, PEEK would probably be the easiest material to work with. Most LC pump heads I've seen were made from stainless steel or PEEK, I've never seen an aluminum one. Just buy some PEEK rod in a suitable diameter. The pump head is basically just a block with a few holes in it. The seals and check valves do all the "work".

PEEK sounds like a fantastic idea! I imagine drilling and tapping holes in blocks of plastic will be a little more complicated than say a block of steel, but PEEK definitely sounds more appealing than steel in terms of price and overall ease of working with. The question now is how to handle check valves and plungers. I could just drill and tap holes in a block of PEEK to fit whatever check valves are laying around. Does anyone know of an industrial surplus retailer (similar to chromtech or mcmaster-carr) where I could buy these parts?
Nevermind, it appears chromtech sells PEEK check valves

Now I just have to find out how much they cost...
There are issues with Peek. Sooner or later, every pump will encounter a completely blocked column. Every decent system will have some sort of pressure warning to turn it off - yours should too. If something happens like a check-valve gets stuck (much rarer than a blocked column) then the blockage may be before the pressure sensor, so there's no electronic shut-down. In this case, the only thing that stops it is the pump motor stalling.

In a steel system, it will stall. In a peek system, it will break the pump head. If you've got air in the head at the time, it will also shoot bits of plastic through any nearby object or person (an engineer from a well-known company who manufacture peek-based LC systems once told me he'd seen a neat hole in a ceiling tile made by a rapidly-exiting check-valve; I hasten to add that his company's instruments are perfectly safe, but the instrument in question had been seriously abused, putting it in a dangerous state that wasn't the manufacturer's fault).

I had not considered a pressure sensor nor did I consider the safety implications of having a runaway pressurized PEEK system. Right now I'm holding steadfast to a KISS design principle due to my inexperience and budget constraints. I'm sure I could purchase or modify a pressure transducer, however I'm also looking into automated stepper motor drivers that shut off the motor when there is a current spike (which occurs right before the motor stalls). Of course any device operating under that type of pressure needs to have multiple fail safes. I want to keep total costs for a single pump under say $500. Also the pump head I'm imagining would have a PEEK insert (the price of carbon fiber enforced PEEK is exponentially related to the diameter) embedded in a much cheaper plastic that could be cheaply extruded, maybe ABS (see image)
I'd seriously consider putting a pressure transducer in your system somewhere, not just from a safety point of view, but from a diagnostic point of view. As an analyst, when I come in in the morning and find that last night's results look awful, the first thing I look at is usually a trace of the system pressure in the last good run, and the first bad run. It is such a helpful diagnostic.
If the pressure suddenly starts to saw-tooth up and down, I can be (almost) sure we have a bubble.
If the pressure suddenly drops a lot, and retention times or long or the signal disappears altogether, you have a leak.
If the pressure has gone up dramatically, then it's a blockage; slow increases over several runs are often a sign of dirty samples, while a sudden increase on one sample might just mean a one-off bit of dirt from somewhere.
I appreciate that cheap is good, but you've got to balance it up against functional, and a pressure sensor is sooooo useful!
I agree, I also heavily rely on pressure traces to see what went wrong or to see if things went smoothly during a run. It is especially important because I work in an unregulated academic lab where the instruments are constantly in use and function as is. I have the pressure transducer from the Waters 510 pump. I will need to figure out a) how the transducer uses a reference voltage to regulate a current that changes with pressure and b) how to calibrate the darn thing, i.e. I need an inline pressure gauge, which I don't have.

A side note: I bought an old Gilson 3 channel UV-detector on eBay for $20 bucks that seems to function. Each channel has an analog output on the back that I can just plug into the arduino input pins after stepping down the current with some resistors. The detector is noisy as hell though (+/- 0.01 AU), probably an aged lamp and/or the flow cell needs to be cleaned.
Another update (pump control):

Waters 510 pump
So there are four pins on the back marked external control, using a multimeter I found that three of these pins correspond to three pins for the pressure transducer. That leaves one pin (pin 3) which has to be the signal input that sets the flow rate. I also found some documents online that state that the Waters 515 flow rate is controlled by voltage frequency. Now, I have literally no idea what the frequency is or what the voltage input is. I will start off on the assumption that the pump takes a 5V or possibly 10V analog voltage input and that the frequency of the voltage controls the flow rate. I will need to get a voltage amplifier and construct an RC circuit to change the arduino PWM to analog voltage output and also play with the frequency. I've noticed that if I short that pin with ground the motor stops moving.

LC-20ATvp pump
Note that I gutted the native Shimadzu circuits because tracking down their communication protocols seemed hopeless. I've gotten control of this motor with my own driver board but I realized that without knowing motor position I have no idea the true speed of the motor which will slow down when it is carrying a load, so I will most likely have to find a nonlinear calibration curve for steps/min vs. flow rate. I think it's safe to assume also that different solvents will have different calibration curves.

Exciting development

I've also acquired a third pump, a Gilson 306. I've found a good amount of documentation online for the GSIOC protocols so I'm going to test my limits here and try and get the arduino to communicate with the 306 RS422 serial port. The problem is the arduino has a UART so I need a converter. As of now I have an RS232 arduino shield and an RS232-RS422 converter so I will attempt to send data back and forth between the arduino serial port and the Gilson pump. I am impressed with the mechanical design of the 306. One could replace the pumphead/plungers in less than a minute if they felt so inclined.

Any input would be greatly appreciated
ScottHorn wrote:
The Waters 510 was built in a different era. Back then the protocols for controlling and receiving data from instruments were really simple, and often documented in the manuals. I'm pretty sure that nowadays if you called the manufacturer of a pump or detector and asked for a pinout and a description of their communication protocol they would laugh at you.

Um, what if there were a manufacturer that didn't laugh at that request?

I'm in very close contact with an engineer at a company that makes HPLC instruments. That company is tossing around the idea of publishing an open API for their pumps and/or detectors. The discussion is very informal and preliminary at this point, but there's interest in doing something like that. A number of the engineers are longtime Linux users, so the open-source model is of interest.

An API would allow full control of not only existing, legacy pumps analogous to the Waters 510 but also new pumps going forward. Detectors are on the table as well.

Obviously it's great if you can scrape together an HPLC system with older, simpler pumps from Ebay, but is there any interest in being able to buy brand new pumps that would be fully supported by open-source software (and use a complete, documented and open API)?

ScottHorn wrote:
They have a vested interest in making everything proprietary, so that they can sell you the expensive software and service contract to go along with your system.

My engineer friend says that he's trying to make a case for why that model is broken and how an open source model would sell more pumps. Any input you have on that subject would be welcome in this thread or by PM; I'll relay it to him.
32 posts Page 1 of 3

Who is online

In total there are 17 users online :: 0 registered, 0 hidden and 17 guests (based on users active over the past 5 minutes)
Most users ever online was 599 on Tue Sep 18, 2018 9:27 am

Users browsing this forum: No registered users and 17 guests

Latest Blog Posts from Separation Science

Separation Science offers free learning from the experts covering methods, applications, webinars, eSeminars, videos, tutorials for users of liquid chromatography, gas chromatography, mass spectrometry, sample preparation and related analytical techniques.

Subscribe to our eNewsletter with daily, weekly or monthly updates: Food, Environmental, (Bio)Pharmaceutical, Bioclinical, Liquid Chromatography, Gas Chromatography and Mass Spectrometry.

Liquid Chromatography

Gas Chromatography

Mass Spectrometry