Z-Scale controller: further work on the hardware prototype
Following up on my previous article on the Arduino Shield prototype, I have started to connect it to more accessories at the same time, and I have run into a small issue…
While the design works perfectly with just a few accessories, I did run into issues when connecting a lot of turnouts: in real life, depending on wiring length and the age of the turnout, each accessory will have a slightly different resistance and the matrix layout of the shield will not be properly balanced. This means that in some instances, when multiple turnouts are connected on the same low side ports for different high-side ‘banks’, a bit of power will be lost in every turnout when one is activated. In the worst case, this can even slightly move every turnout, causing unpredictable behaviours on the layout.
For this reason, I had to add diodes on the outputs, which guarantees that all power goes to the intended turnout when we pulse it. Below is a picture of the test rig:
Another unfortunate issue, is that I have now realised that the “open port” detection circuitry of the 33880 does not work reliably with the way I am using them: since in “Off” state, the high-side 33880 will let 0.6mA through each of its pins, as soon as multiple accessories are connected in parallel, the low-side 33880 tends to get a voltage above 1V on its drain pins in “Off” mode, which leads to detection of an accessory. If open port detection current could be deactivated on the high side, then I would be able to detect reliably on the low side, but there is no way to do this on the 33880. So I guess I’ll have to say good bye to this feature for now! Freescale does have another chip that is able to switch this detection on and off, so if I find time, I might use that one on the final Beaglebone shield.
I am glad I started with a fairly simple Arduino shield for the prototype: it was 95% good, and let me debug the remaining issues very easily! I’m now very close to a final version.