Fully CAN based AOG setup

I’ve been now working forward with the full CAN implementation for AOG. Already had the Valtra running with the PVEA-CI CAN valve, but now refitting that with everything on the bus. A quick teaser on the bench test for the sensors: Bench test CAN bus AOG setup - YouTube

Everything sits in one plastic box together with the F9P like so:

Connectors are CAN, antenna, second CAN for diagnostics and USB. BNO080 hooked up to the Teensy 4.0. Keypad is from Blinkmarine.

WAS is Danfoss X510 fitted to the kingpin:

Switching off will be with STW M01-CAN sensor:

Had thoughts of using SASA sensor for that, but would need a steering shaft extension so let’s try with the pressure sensor instead. A modified ino with all of the unnecessary stuff removed is used for the control with FlexCan library.


nice work

1 Like

@nut you are a force to be reckoned with, you really have ran away with CAN.


First smoke today! All worked from get go except for a small mechanical play in the WAS install, was sorted with re-alignment & tightening. Took a while to figure out as I was sure it’s a SW issue😅


Recorded some pressure data from using the steering wheel so I can set up the disengage. There’s a built-in configurable filter in the STW sensor, should be good for omitting unwanted peaks.

Here’s what it looks like:

Ino code (latest with untested pressure disengage) here: GitHub - jkonno/AOG_full_CAN_Teensy_40

Added bonus is that the box sits now in the tray that used to be always full of junk👍

1 Like

And it’s alive: AOG first field test with full CAN setup - YouTube

The PVFC valve made all the difference with the smooth steering, you don’t even notice the valve working anymore and all of the pressure peaks in the LS line are gone!


Hi @nut

Great job!
I was wondering witch PVFC configuration you use.
I fund the answer in your other tread “valtra-8550-hydraulic-autosteer-project”

If I understand correctly it act as a shuttle valve, ports connected to the orbitrol LS, prop valve LS and the priority valve LS.

So Do you think the PVFC valve can replace a shuttle valve in any cases on OC Valtras? or just for the Danfoss prop valves?

This the kind of setup you send a pwm value and read the WAS value over CAN, the calculations made by AOG/teensy? All CAN Parts are just plug and play?

You’re a rockstar🤘
Now you should implement that on a tractor with yellow rims!!

Yeah, it replaces the shuttle valve. What’s different is that it’s a flow diverter instead of a simple shuttle. It works the same way in all dynamic LS systems. In a dynamic system the priority valve leads a flow into the LS line and in the orbitrol there’s a small orifice that allows that flow to escape to tank. Now, if you have a steering valve that just statically increases the pressure in the LS line, the flow has nowhere to go, so either you can cheat and put an orifice into the LS line that allows the bleed flow into tank, but then you need to play around with the orifice size to ensure you don’t get too much pressure drop. The PVFC valve ensures via a spring loaded spool that the LS line is always as the same pressure as the steering flow, while allowing the constant flow from the priority valve into tank.

And yes, it’s just using the normal WAS input and PWM commands, but all the sensors and valve are on the bus. The previous version had only the valve on the but, that works quite nicely as you don’t need cytron etc at all. And if using Danfoss valves, it’s cheaper than the analogue PVEA…

Next setup I’m building will be using the Danfoss EHi steering valve package with PVED-CC controller and same layout. The EHi package is very compact with integrated shutoff and PVFC valves and only marginally more expensive than the PVG16 + PVFC setup. Target would be to make that road safety compliant plug & play package, that will be a lot easier with pre-certified hardware.



Very nice work ! I also really like the professional look-like of the button.
I see there is 4 buttons: one for steering, what are the other 3 used for ?
Do you have design a specific PCB ?


The other three as still under thinking process :grin: Original idea was to add hydraulics control to the same board so you could switch the implement lifting on/off with the A/M button, arrows I thought to use for levelling blade offset control. Maybe I’ll upgrade the spool valves to electrohydraulic CAN valves during the winter to allow for implement automation on the antique Valtra as well.

No special PCB, it’s the prebuilt Teensy triple can board from skpang, around 60 eur.


I really like the principe of having an only cable with the CAN and all modules connected to the bus ! This simplified a lot the mounting and the steering box ! And also the PCB: no ADS, no cytron, only BNO.

How is power supplied the box ? The 12V bus routed with CAN bus is connected directly to the battery of the tractor ?
Keypad from Blinkmarine are compatible CAN J1939 (I see only OpenCAN on thier website) ?

To bad that my NH T7000 are not equiped with CanBUS steering valve !
We need to find a CAN bus compatible motor + controler to port assembly into an electric motor version :grin: !


1 Like

It’s powered currently from USB as didn’t have a data only cable around, but there’s wiring ready for powering it from the CAN wiring loom. That takes power from tractor auxiliary power outlet fuse and has an on/off switch in between so you can completely power off the valve.

The blinkmarine is J1939!


I take a look on the DST X510/520 datasheet here: https://assets.danfoss.com/documents/67478/AQ304226795410en-000201.pdf
There is something that I’m not sure to understand (page 9):

The sensor claim an adress and the controler shall allowing him an adress ? The adress is the 8 bits source adress of the SAE J1939 CAN ID Format ?


As I understand it, j1939 (nor the underlying CAN protocol) does not have a system like TCP/IP where there’s a DHCP server that hands out addresses on request. But in order to prevent address collisions, there is a protocol for claiming an address on the bus. Any j1939 device will have a set of preferred addresses that it wishes to choose from. Using the PGN 60928 broadcast message, it determines if a desired address is in use, and if it is, goes on to try the next one in its list until it finds one that it can use. This allows, for example, two ISOBUS monitors to work on the same bus. I don’t believe address claim is required to talk and be heard on a CAN bus. It doesn’t really matter for small buses with only a few devices, typically. For example most of the devices on a John Deere bus are hard-wired to use one or two specific addresses.

Yes the address is the 8-bit source address in the J1939 message.


If you want to try J1939 and arduino i suggest this page ARD1939 - SAE J1939 Protocol Stack for Aduino Uno, Mega2560, Due, Teensy, ESP32 and library https://copperhilltech.com/content/ARD1939.zip . I have done some experiments with this code years ago and it worked quite well for me. I learned a lot about J1939 and CAN by just sniffing the Bus of the tractor (in read only mode) to reverse engineer some messages and reading some good documentation about PGNs, …

Thank, you are right. That was explain in the datasheet but I miss it:

Have found the CAN-USB Adapter from Seed Studio, it’s not expensive and quiet handy compared to an RPi/Arduino stack:

Software documentation:

Will it be worth trying with this setup??
Any concerns?

Thanks for answer(s)

You’d need Windows Software to use it?

Yes, it seems the software is avialable on Github.

But I am not sure if it helps us to find a simple way to connect AOG to the tractor’s Canbus.

What do you think?

No it shows up us a regular serial device. In theory the Linux kernel’s built-in CAN support can work with it, but I’ve never actually had success there. In my mind, since the end goal is to have microcontrollers talking to your CAN network, you may as well start with microcrontroller hardware in the first place. CAN shields, etc.

In practice I’ve never found the software provided with these various usb CAN devices to be that useful in doing my analysis. I get more mileage with some C code.