I’ve designed a little peristaltic pump to be used in my home brewing, and going to be using a 37D motor with the available encoder to drive it. I was originally planning to use a simple pwm controller (super cheap eBay unit), controlling the Potentiometer input with a Sanguino board (brewtroller), and then trying to feed the encoder signal back into the Sanguino and writing some code for understanding it.
But the more I think about it, I’m leaning toward using a Pololu Motor Driver or Controller, but I’m having a bit of trouble trying to understand in detail which one is which…
Ideally, I’d love to run the system as follows
- PWM or Voltage input (to driver/controller) for speed control (would prefer to use Voltage as the PWM frequency is limited on the brewtroller)
- Encoder feedback (to driver/controller) for closed loop
- Voltage output (from driver/controller) for specifying speed back to Sagnuino.
If not, I’d consider running it through Packet Serial Rs-485 (but will have to teach myself how to write the code), as it needs to be 3 wire communication, not 4 wire serial. (think this explains it, but tell me if not!).
Looking over the Jrk, Roboclaw and VNH2SP30 (but the VNH2SP30 is prob last on my list), I’m not sure if any of them offer a Voltage output, or if I need to run Serial.
As a secondary consideration, could I run the Jrk or Roboclaw with Closed Loop speed control, and then set the PWM/Voltage output of the Sanguino to equal a set motor speed? That way I can control the speed to set values that I want during certain processes, and also display on the process screen (which will be on my 10" LCD).
Any assistance would be awesome!
What are the available interfaces on the brewtroller? We do not have any motor controllers with quadrature encoder support that outputs an analog voltage for feedback. You might instead try reading the encoders on a microcontroller (like an Arduino Uno) and have it output a voltage to your brewtroller.
For the motor controller, you might consider our Simple Motor Controllers, as they accept analog inputs for speed control and are user friendly.
By the way, your proposed control system seems to be more complicated than it needs to be. You might consider simplifying it. If you tell me more about your project, I might have more suggestions.
Thanks for the feedback. The brewtroller is an open source project (oscsys.com/store/product/1002116), and the options for interface are Analog Input, Digital Input and Serial Communications. I would love to use the Serial side of things, but I’m still learning programming (I’m a mechanical engineer in the automotive industry, so am used to the hardware, and not so much software/code). I was considering using the Brewtroller board to read the encoder signal, but I’m not so sure if I’m up to that yet either… So was looking for a simple voltage signal (what I’m used to in the Auto work).
The purpose for the pumps is to control flow rate during doing my home brewing. I am working toward an almost complete 1 button brewing system, and would like to use the pump control (the pump is a positive displacement) to control volume flow during the process, which will also allow me to control the static volumes in each vessel at different times in the process.
I want the encoder feedback to ensure that the pump speed is actually what is being commanded, and not reduced due to increased load. So I really want a closed loop system, with an output for the pump speed that I can integrate to create volume flow rate (so that this can be displayed on the lcd).
Does that all make a bit more sense? Where were you thinking to simplify the system?
Thanks for the link. It looks like the brewtroller uses an ATmega644A microcontroller. Directly reading the encoders with the brewtroller might be the easiest way to achieve closed-loop control. You might also be able to use our Arduino library for quadrature encoders (Pololu Arduino Libraries version 120914) with the brewtroller.
Thanks, I was originally considering reading directly with the brewtroller - I will definitely look into this. Would it be possible to run the Pololu Jrk 12v12 in closed loop control to control to a setpoint, running an analog input from the Brewtroller to provide the setpoint, and then run a semi-closed loop speed control from the Brewtroller using the encoder? That way I would be running the Encoder output to both the Jrk 12v12 and also to the Brewtroller.
I realise that with the closed loop function on the Jrk 12v12 I shouldn’t need any feedback to the Brewtroller, as it will meter the speed to ensure consistency for any input voltage, but I want to use the secondary feedback to ensure that there are no issues with the motor (ie motor failed etc)
Following that, I’d love to look at trying to run this all over Serial and wondering if there is any difference between the 3 wire serial that the Brewtroller uses (TX, RX and GND) and the 4 wire serial that I understand that the Jrk controller uses?
The jrk uses RX and TX lines for serial communication, and it should be able to communicate with your brewtroller. You might consider reading the feedback from the jrk via serial using the commands for reading its variables. You can find more information about this in the “Variable Reading Commands” section of the jrk user’s guide.
Would you recommend this method to control two of your 25D 12V motors and their respective encoders? I was under the impression this wasn’t for fast, high CPR encoders but your recommendation makes me want to go this route. We’re using Arduino Uno and the Pololu Dual MC33926 Motor Driver Shield.
It is not clear what kind of control you are looking for, but based on your other posts that we combined into this thread, it sounds like you want closed-loop speed control.
The Jrk controllers can be configured to do closed-loop speed control using tachometer feedback (e.g. the rising edge of a single channel from a quadrature encoder). You could then use your Arduino Uno to specify a target through TTL serial commands (or I2C if you choose to use one of the newer Jrk G2 controllers).
However, from your description in those other posts, it sounds like you were wanting to handle the algorithm for controlling the speed in your Arduino sketch. If that is the case, it would probably be better to read and process the encoders directly with your Arduino using one of the libraries on the Arduino Rotary Encoder page Amanda pointed you to that support interrupts.