I need to drive a brushed DC motor (inside a linear actuator) with an electronics circuit. The cable feeding the actuator has, in addition to supply_A and supply_B wires, two wires for feedback signals (hall effect), and supply and ground for Hall-effect sensors.
I have so far used an off-the-shelf DC motor driver from DFRobot (DFR0601), which takes a logic PWM signal as input and spits out a high-power PWM signal which is fed directly to the motor.
This drives the motor fine, but the square-wave PWM signal creates severe crosstalk with the Hall feedback signals and completely messes the position monitoring, which I need to rely on (I am using two actuators and they need to operate without one getting ahead of the other).
I therefore need to address the crosstalk issue. As a temporary solution, I am adding an RLC filter between the driver module and the motor(s). This means filtering a high-power signal, which is not ideal. Here is a screenshot of the filter circuit.
This is only a temporary solution, as it is too bulky and too expensive for my actual application. Simulation yielded currents as high as 7 A through L and C. Parts I ended selecting are:
I will receive the parts in about a week, so I have not tested it yet, but as mentioned, this is only a short term patch.
I am looking at a more space efficient and power efficient way to address the crosstalk issue. Options I can think of are:
- Find a more efficient way to filter the PWM signal at the output of the DFR0601 module
- Find another driver module which outputs a non-PWM signal (must fit within 50mm × 50mm x 12.5mm)
- Ditch the DFR0601 and design my own driver, which would output a non-PWM signal (available real estate is approx 50 mm x 50 mm x 22 mm)
- ??
I searched for alternate modules, but most are bigger than the real estate I have available.
Separating the motor power wires from the low-power Hall signals could have been an option, but it introduces other complications which I would prefer avoiding. Besides, the motor power signals do run through my main PCB, close to where the Hall signals enter my microcontroller, so there would still be a risk of crosstalk there even if I separated the wires.
Can anyone advise on ways to address this issue? If I filter the "logic" PWM signal, what could be used to drive the motor(s)? Would it be advisable to use op-amps?
Other information:
Main supply: 28 VDC
Actuator specs:
Max voltage: 24 VDC
Motor resistance in stall mode: 3.3 Ω
Motor resistance under typical load/speed: 15 - 30 Ω
Cable run is approx. 12 feet
Hall pulse rate is in the vicinity of 110 Hz
The Hall supply line is fed from the 3.3v out of the RPi Pico
Microcontroller: RPi Pico
Max PWM freq: 62.5 MHz (currently set to 60 kHz due to DFR0601 limitation)
Plenty of pins available on the Pico if necessary (GPIOs, PWM, UART, SPI, I2C)
Need to drive two channels, both in forward and reverse modes.
Motor speed accuracy is not important, as long as both actuator units operate in sync (think of sit-stand desk as the application).
Actuators are operated for 5 to 10 seconds continuously, then are not operated for a period which can span 1 to several minutes.
Here is a screenshot of the current PCB layout (region of interest only). You can see MOT_1_A and MOT_1_B being the high-power PWM signals going to the DC motor, and HALL_1_A and HALL_1_B being the Hall signals going to RPI Pico inputs.
Here is a snapshot of signal measured at one of the signal GPIOs (RPi Pico), with the hall signal being disconnected at the motor end, so whatever appears on the scope is only high-power PWM interference being picked up through the cable run and possibly to some extent by the PCB traces.