Isolating SnapAmp from KFLOP to remove motor noise
Posted: Mon Apr 08, 2024 2:56 pm
Hello!
I've been working with the Dynomotion suite for the better part of a year now and have found most aspects to be robust and fairly straightforward. The only issue which has continued to crop up around our system is the ~30kHz switching noise from the SnapAmp which dirties up my IO wherever it gets the chance. For the most part I have been able to mitigate this via opto-inputs, filtering, and pull-downs, however most recently I've hit something of an impasse with noise coupling into my UART comms.
I have a ceramic heater and voice coil wired up to the SnapAmp, both on side A, with supply voltage 80V, and the resulting switching transients when using PWMR are very noticeable - even with shielded cables and the ground lug tightly connected between the SnapAmp and the KFLOP. There is a thermocouple in the ceramic heater which runs to a separate microcontroller which interprets the temperature data and then sends the current temperature as a 32-bit float over UART to IO_44 and IO_45 (Rx, Tx, respectively) on JP7.
Unfortunately, due to the current layout of our system, the ribbon cable between JP7 on the KFLOP and the JP7 breakout board to which the microcontroller is wired is roughly 10 inches long. I can take off another 1 or 2 inches before it's taut, I figured this might help a bit but most likely wouldn't fix the issue. As is, when the system is booted up, without running my init.c program (which clears the fault on the SnapAmp), I can communicate freely at any baud rate with the microcontroller without any errors or issues. However, the moment I run init.c and the switching transients appear (even with both SnapAmp channels set to PWMR#=0), the UART gets overwhelmed with 1's and spit out byte 255 without discrimination. I ordered and assembled the user-made JP7 isolated, filtered, and pulled-down breakout board that you guys endorse on your wiki and replaced the JP7 breakout board with that one. The first thing I noticed was that the opto-inputs are inverted so they messed up the Rx signal - it seems neither the KFLOP nor the microcontroller I'm using can invert this signal to negate this effect - so it seems I have to stick with the filtered inputs which I still expected to be useful.
They were! sort of... The filtered and pulled_down inputs were able to withstand the initial PWMR0 switching transients upon running init.c, and I was able to send data over UART without error. However, above modest PWMR values of 7-10 - ONLY on the ceramic heater (pulling maybe 1A max at that time) with the voice coil commanded to PWMR0 - the UART gets muddled by the noise.
I realize that shortening the cable between the JP7 breakout board and the JP7 connector could very well be the solution to this issue, but regardless I see this noise everywhere and find myself continuing to take extra measures to remove it from my logic signals. I propose this: place 11 bi-directional high-speed digital isolators with propogation delay < 6ns, rise time < 4ns, fall time < 4ns, for the 10 IO bits and the #RESET pin, and 3.3V, 5V, and 12V isolated DC-to-DC power supplies to create new isolated 3.3V, 5V, and 12V sources, all on a PCB. If such components were placed on a custom-made PCB with two 16-pin connectors such that it could be placed between JP4 on the KFLOP and JP6 on the SnapAmp, I would expected the majority of this switching noise to be removed from the rest of my system.
Is this a realistic expectation? And furthermore, possibly more importantly, would I break anything??
Thank you so much in advance for any time any of you end up taking to aid me in my pursuits!
I've been working with the Dynomotion suite for the better part of a year now and have found most aspects to be robust and fairly straightforward. The only issue which has continued to crop up around our system is the ~30kHz switching noise from the SnapAmp which dirties up my IO wherever it gets the chance. For the most part I have been able to mitigate this via opto-inputs, filtering, and pull-downs, however most recently I've hit something of an impasse with noise coupling into my UART comms.
I have a ceramic heater and voice coil wired up to the SnapAmp, both on side A, with supply voltage 80V, and the resulting switching transients when using PWMR are very noticeable - even with shielded cables and the ground lug tightly connected between the SnapAmp and the KFLOP. There is a thermocouple in the ceramic heater which runs to a separate microcontroller which interprets the temperature data and then sends the current temperature as a 32-bit float over UART to IO_44 and IO_45 (Rx, Tx, respectively) on JP7.
Unfortunately, due to the current layout of our system, the ribbon cable between JP7 on the KFLOP and the JP7 breakout board to which the microcontroller is wired is roughly 10 inches long. I can take off another 1 or 2 inches before it's taut, I figured this might help a bit but most likely wouldn't fix the issue. As is, when the system is booted up, without running my init.c program (which clears the fault on the SnapAmp), I can communicate freely at any baud rate with the microcontroller without any errors or issues. However, the moment I run init.c and the switching transients appear (even with both SnapAmp channels set to PWMR#=0), the UART gets overwhelmed with 1's and spit out byte 255 without discrimination. I ordered and assembled the user-made JP7 isolated, filtered, and pulled-down breakout board that you guys endorse on your wiki and replaced the JP7 breakout board with that one. The first thing I noticed was that the opto-inputs are inverted so they messed up the Rx signal - it seems neither the KFLOP nor the microcontroller I'm using can invert this signal to negate this effect - so it seems I have to stick with the filtered inputs which I still expected to be useful.
They were! sort of... The filtered and pulled_down inputs were able to withstand the initial PWMR0 switching transients upon running init.c, and I was able to send data over UART without error. However, above modest PWMR values of 7-10 - ONLY on the ceramic heater (pulling maybe 1A max at that time) with the voice coil commanded to PWMR0 - the UART gets muddled by the noise.
I realize that shortening the cable between the JP7 breakout board and the JP7 connector could very well be the solution to this issue, but regardless I see this noise everywhere and find myself continuing to take extra measures to remove it from my logic signals. I propose this: place 11 bi-directional high-speed digital isolators with propogation delay < 6ns, rise time < 4ns, fall time < 4ns, for the 10 IO bits and the #RESET pin, and 3.3V, 5V, and 12V isolated DC-to-DC power supplies to create new isolated 3.3V, 5V, and 12V sources, all on a PCB. If such components were placed on a custom-made PCB with two 16-pin connectors such that it could be placed between JP4 on the KFLOP and JP6 on the SnapAmp, I would expected the majority of this switching noise to be removed from the rest of my system.
Is this a realistic expectation? And furthermore, possibly more importantly, would I break anything??
Thank you so much in advance for any time any of you end up taking to aid me in my pursuits!