PWM nozzle insights

Does anyone have real world experience with PWM sprayer nozzles that they’d like to share? If you were setting up from the beginning, what would you do?

1 Like

I’ve had a real world experience in receiving a quote to put pwm on my sprayer. I would sure rather help fund and test an open source system that might work better than the commercial systems. Then pay the $ they want.

1 Like

Matt. I can only give experience of operating my neighbours new sprayer last year that had lots of optional gadgets installed.
PWM nozzles was good for spray drift control (able to control duty cycle & boom pressure over a wider speed range before having to change nozzle size), turn compensation, and minimizing overlap. this sprayer also had recirculating boom, auto boom height and weedseeker camera spot spraying system.
Would I build a system same as I operated? Definitely Not… It was way too complicated with modules from different companies all competing to control the boom and rarely playing nicely together.
Could it be done? Yes, An AOG based system could control everything, and would do it better for a fraction of the price.
Turn compensation was way to slow to respond, the system relied on GPS reference to turning, Ok for trailed sprayer but on a SP the boom reacts to steer angle so turn compensation needs to be faster and referenced directly off WAS position and speed.
We found best way to operate 90% of time was to adjust boom pressure to keep duty cycle 100% at our set speed, But could slow down for rougher country and turns where pwm maintained a good spray pattern from the nozzles as boom pressure stayed constant.

1 Like

Have PWM on my Patriot. It’s running Aim Command Pro, which includes turn compensation and individual nozzle control. Have to say I’d be hard pressed to go back to not having it. It’s really nice to be able to go from 5 to 15 mph and keep a good pattern. Especially because I have pivots and ducking around the pivot point can be exciting at high speeds. I agree turn compensation is slow to react. It would be with AOG and a single GPS receiver also. But a dual receiver would be pretty quick. In fact I’m wondering about setting up a dual F9P rig on my Patriot and using that to generate super accurate headings and feeding that as GPS input into the Aim Command Pro system.

Aim Command Pro is an add-on system. It’s kind of ingenious how it works with the OEM rate controller, but since it’s add-on it’s got quirks and it’s quite a bit more complicated to operate. I spent a lot of time figuring out how Aim Command Pro works, since I had a major system problem with it (turned out to be broken wires). Always the OEM rate controler is in charge. ACP plugs itself into the system between the OEM rate controller and the rest of the sprayer. When it’s active, it takes the flow sensor data and changes it so that the OEM rate controller still gets sane numbers. For example, if half the nozzles on a segment are on, ACP fakes the flow numbers so the rate controller thinks they are all on. These leads to disagreeing numbers on acres and gallons between the two monitors. Anyway, ACP takes over the PID control of the pump, to keep pressure set.

What kinds of operational questions do you have?

The Aim Command Pro system uses 6 watt solenoids, and each group of 9 or 10 are controlled by a single ECU that receives its orders over CAN bus from the master controller. The pulse rate is typically 10 hz, and the duty cycle ranges from 0 (shut) to 100%. The whole system takes a ton of power. It has its own dedicated 60 amp breaker right on the battery to feed it. Depending on the duty cycle, I figure my 120’ boom consumes about 30-36 amps at 12V! 72 nozzles.

Physically it wouldn’t be hard to control existing solenoids. Motor control mosfet boards could do it.

Control-logic-wise, the idea with PWM is to maintain a constant pressure and adjust the PWM to control the rate. So the basic unit would be a fast PID loop on the sprayer pump that controls pressure. This is different from sprayers I’m used to where the PID is typically on the volume rate. To calculate PWM you need a flow meter, and use another sort of PID loop that that sets the target PWM rate. Then for turn compensation it’s a pretty linear thing. If one tip is going faster, the other tip goes slower. PWM ratios across the boom could be calculated based on yaw rate. The limit is when the boom tip hits 100% it can’t go any higher, and you get a lower rate there. As nozzles shut off, the target flow rate is going to have to change. Interesting!

On the last AOG web meeting, Brian asked about how many sections are reasonable to control. With ACP, even though each nozzle is independently controlled, they are grouped into sections (each with a switch), so I think it’s reasonable to expect that while AOG might some day able to assist in this kind of individual nozzle control, manually larger groups at a time is reasonable.


Do you find that 10hz is fast enough to provide good coverage? Do these nozzles have a small accumulator to smooth out the pressure pulses? If 15 mph is 100% duty cycle, then 5 mph is 33% at the same pressure? That’s an on-distance of 7.4 cm and an off-distance of 14.8 cm. Does that provide enough coverage? We like to run at a high pressure (100-150 psi) because we think we get more value (weed killing) out of our chemical.

Good question. And that also reminded me of another important aspect of their operation. The duty cycle of the odd nozzles is 0.5 seconds phase shifted from the even nozzles. In other words, every other nozzle turns off at the same time. This evens out the pattern. I think if they didn’t do this you’d definitely notice skips.

In practice, the solenoids don’t turn off or on instantly. Also the movement of the droplets through the air is relatively slow. At higher ground speeds, the movement of the boom through the air tends to mix and drift the droplets such that I’ve never noticed any coverage issues, but I do try to run at least 70% duty cycle as much as I can. Slowing down for obstacles or turns hasn’t showed any misses that I can detect, even at 30% duty cycle.

I sized my nozzles and set my pressure specifically for the droplet size I am looking for, which focuses on finding a compromise between drift and coverage. PWM does not work with air induction nozzles (at least it won’t with the ones I’ve tried). I use Wilger nozzles designed for reduced drift, but I still have to be careful. PWM gives me the ability to drop pressures back around the border, and then bump them back up in the interior where I’m less worried, so I can get more speed and coverage. For me it was a whole new way of looking at things. Some farmers with PWM use just one or two nozzle sizes, but I use 4 currently that I choose from.

Out of curiosity, what type and size of nozzles are you using at 100 psi, and what is your ground speed, @m_elias? I don’t have any nozzles that wouldn’t drift majorly at 100 psi. But I did choose nozzles to give a desired droplet size at 50 psi.

I worked out the math for PWM control in a spreadsheet. I’ll post some Python code to demonstrate that here later this morning.

If anyone finds it useful, here’s a spreadsheet I made a long time ago that generates nozzle charts.

When used in Google Sheets on a phone, it’s kind of like a mini app for selecting nozzles, pressures, and speeds. Still have to refer to a manufacturer’s chart for droplet size vs pressure.

Here are a couple of ideas for PWM control:

Pressure side: PID loop to control pressure, either by valve, or more ideally controlling hydraulic oil flow to hydraulic water pump

Volume side:

  • Figure out rate/minute that should come out of one nozzle for the desired rate and speed (irrespective of PWM), and this becomes the base rate
  • Use yaw rate to calculate the ratio of speed at a position vs the speed in the center, which should be the vehicle’s indicated speed.
  • Use this ratio to adjust the base rate calculated above for the rate needed by the nozzle in question.
  • Add up all the adjusted rates, zeroing out the ones that are turned off.
  • This total rate is the flow rate desired, that a PID loop can use as a set point
  • PID loop will adjust to match the set point by increasing or decreasing a base PWM duty cycle rate.
  • Each nozzle takes the base PWM duty cycle and multiplies it by the yaw-compensation ratio and gets that as its control signal.

This technique has the advantage that it does not require any knowledge of the nozzles, except that they all must be the same. I believe this method is actually used by Aim Command, which has no turn compensation and no individual nozzle control. The problem with this algorithm is that once the compensated duty cycle rates get all the way to zero or all the way to one (full on), such as would happen in a tight turn, especially with nozzles that are turned of for overlap control, the PID loop is going to ultimately drive the rate higher or lower than it should be. Also it might not respond quick enough with individual nozzle control to settle into the desired rate.

Working on some code to demonstrate another way to do it, more similar to how Aim Command Pro works, but I have to think about it some more.

Looking on youtube , that working more like common rail engine , nozzles are turned on off in fast pulses.

1 Like

Yes that’s right. Mine operate at 10 Hz, with even and odd nozzles firing oppositely, if that makes sense. You can see the pulses from the cab. Ground coverage seems to be pretty consistent despite the pulses.

The biggest problem I have is that solenoids fail somewhat frequently. Usually the wire breaks where the pigtail enters the epoxy potting. $100 a pop. Last year I lost 10 solenoids. But I think part of that was because in the spring I changed all the swivel mounts and moved the solenoids around a bunch doing that, stressing the wires. It’s not uncommon to lose 3 or 4 in a year from what I hear from other owners.

Interestingly, the computer seems to be able to detect plugged nozzles from feedback from the coil somehow.

Okay so I wrote up some Python code to calculate the turn compensation and figure out how to adjust the duty cycle values. The code produces some little graphs (like Capstan or ACPro does) to show the duty cycles across the boom. Also had thoughts on how it might be implemented. I posted the code and info at GitHub - torriem/pwmnozzle: Python demonstration of calculating PWM nozzle control parameters. It can handle overspeed (turning too fast) and any nozzle can be turned on or off, and the flow calculations reflect that.

The calculations showed something counter-intuitive to me, but made sense when I though about it. When turning sharp enough that the inside part of the boom starts to go backwards and is thus shut off, the total flow rate actually increases slightly the sharper you turn, despite the turned off nozzles. Makes sense when you think about the area under the curve as the graph rotates. Anyway, some might find the math interesting, and I show how to do pressure/volume calculations, and compensate for specific gravity in those calculations.

Turns out the basic sprayer nozzle equation is pretty simple:
volume = nozzle_size * sqrt(pressure/calibration_pressure) / sqrt(specific_gravity)

Thus a 0.6 gpm nozzle (calibrated at 40 psi) will generate 0.67 gpm at 50 psi with water (specific gravity of 1)


“Interestingly, the computer seems to be able to detect plugged nozzles from feedback from the coil somehow.”

I would expect it can detect a break in the wiring (no current used by a coil) or a different amount of current then expected for a coil who’s plunger isn’t moving correctly. Solenoids use less current when the plunger is retracted.

Thanks for sharing your experiences, interesting reading. I don’t know the exact details of our nozzles other then we have 5 & 10 gal nozzles which amounts to 5 or 10 gal per acre at 10 mph & 100 psi.

1 Like

Yeah it seems to detects open circuits, shorts, stuck plungers, and plugged nozzles, fairly reliably. Kind of makes me want to stick a scope across the coil to measure the current waveform when it’s pulsing.

Those features will be difficult to compete with on an Arduino without a fancy peripheral io chip.

No doubt! I’m not suggesting it’s important. Pwm control alone would be quite a feat!

I was just curious as to how it might be done is all.

I think it’s doable. Sounds like the right guys would know what chips to use, similar to a lot of industrial & automotive stuff. Without any fancy io monitoring, Arduino supported microcontrollers should work. I’m not sure what the best way would be to setup the Arduinos. How fast do the PWM duty cycles need to be updated? I think from an Arduino/hardware standpoint, it would be nice to only need one Arduino and add as many expansion PWM modules as needed, i2c or whatever. Maybe rate control will make its way back into AoG at some point, best to keep it as simple as possible in AoG and have the Arduino do the PWM specific calculations.

I think PID loops belong in the microcontroller, not AOG. AOG should just tell the arduino what to do. What flow rate to maintain, what PSI, etc. AOG could do all the PWM rate calculations (and it would have to since it has the map and knows where the vehicle is moving). Arduino using I2C to a chip that has many PWM outputs would work.

An ideal test bed would be a small estate sprayer. They have just half a dozen nozzles on them, and also they use a simple demand positive displacement pump and you set pressure with a manual regulator. So right there you have your constant pressure. One arduino could probably generate 6 PWM signals which would drive standard motor controllers. Could test out different frequencies and see what works best.

Apparently John Deere’s PWM system runs at 30 Hz.

May be wrong but from what I understand JD has dual mode 15/30hz, I’ve heard they work good, just don’t break them. $$$.