1000watt motor controller DIY

I bough 1000watt (48V, 20A) motor with a controller that works with hall effect sensors (1-4v). I need to control it by Arduino but cannot come up with a comprehensive solution:

Solution for controlling speed: Use MCP4725 I2C DAC to convert Arduino PWM to analog signal that would replace input from the Hall Sensor. This would work to control the motor speed but I could not change direction. Is this a reasonable solution or is there an easier way?

Solution for the motor direction: I am struggling with this part. I am unable to find H-bridge motor controller that would be able to handle 48v and 20a. for some reason, all the options top out at 36v. Do you have any suggestions (something <$100)?

Second solution for the motor direction: There are number of examples of changing direction with dual relays or MOSFETs/transistors but could not find one that would handle 48V and 20A.

  • 1 - Are there reasonably priced Transistors that could handle the current/voltage (Anything in this range seems to be more than $100.)?
  • 2 - Also, cannot find relays that would be able to handle 48VDC 20A. I found relays that can handle 120VAC and 40A but DC rating is less than 48V.
  • Any suggestions for transistors or relays for this purpose?

Or, is there another, more simple or better solution for what I am trying to do? Thank you.

What is the stall current ?

Unfortunately, I do not know. the rated current is 20A and here is the ebay page with specs from the seller. Is it possible to calculate or guesstimate? I am not sure but I would guess that 20A may be also the stall current?

you may look into IR3205(110A Mosfet) and IR2130 (Mosfet/IGBT driver).

Could you use the Arduino to control the control box (in place of a human) ?

How does the control box work?

...R

If you need to control direction (and the control box doesn't provide for this - which is likely) - a couple of SPDT 40A automotive relays should work ok.

It is also possible to get high-current "reversing" or "h-bridge" relays for automotive purposes - they are typically used for (older) seat actuator control - though to be honest, these relays are just a couple of SPDT relays packaged into a single unit (if there is an issue with size constraints, they may be worth it).

There are also h-bridge relays for controlling offroad winches - these will typically have the capability of 60-100 amps or more capability (and are also larger, of course).

Don't worry about the voltage - I've used 20 amp automotive relays to control mains voltage (110-120 VAC) loads; it's the current you need to worry about (that and contact materials - different materials are used for resistive (bulbs) vs inductive (motors) vs capacitive (signal) loads - but most automotive relays can be used in inductive load situations).

Just don't switch the relay while voltage is going to the motor (set PWM to 0 before the switchover) - otherwise contact arcing/welding/smoke/flame can occur.

For controlling the speed - open up that controller. Likely (at least, in the few I have seen) there will be a small 8-pin DIP IC connected to a large mosfet (or more...) - that 8-pin chip is -likely- a 555 timer running as an astable multivibrator, with the frequency controlled by the throttle. Usually, the throttle is a pot, but in your case its a hall-effect sensor - but the principle is the same.

If you don't see a 8-pin DIP IC (or anything similar) - then find the mosfet, note down the number, and get a datasheet to tell you which pin is the gate. Then, locate that pin on the PCB, and follow the trace. Verify the PWM output (and voltage) with a scope. You can then cut the trace, and control that pin with your Arduino (you might need a secondary transistor or mosfet, if the mosfet the controller uses isn't logic level).

If you don't want to do that level of surgery/hacking - you can do your idea of simulating the hall-effect sensor - but you'll need to find out what voltage level it is outputting. If it is greater than 5 volts, you'll need to amplify the output of the Ardunio's PWM. To change the PWM signal, you can use a simple RC filter (the output of which can be run into your amplifier, if needed) - google "PWM to voltage conversion" for more info.

If money isn't an object - you might look into motor controllers from Roboteq:

Roboteq MDC1460

...and Vantec:

Vantec RDFR

That listing does say "reversible", but whether that just means you can swap the motor leads around or whether there's a control input to do it I can't easily tell from the images. The intended application suggests if it does have reverse it will be speed limited.

Thank you all for the input.

Hi CrOsh, thanks for the detailed guidance. I guess, I can use the 12V relay with 20A for the 48V/20A application? I found one on Amazon with 30/40 AMP Relay Harness Spdt 12V Bosch Style and hope this will work. Please let me know if this is a mistake. thanks.

Will definitely open up the controller - it will make things much easier than interfacing with MCP4725.

High MarkT, Yes, I think they just mean that the wires can be switched. All the wires are labeled (throttle, brake light, etc.) but there is no pin for reversing.

Again, thanks to everybody. I am relatively new to this but the project is awesome: building a 23ft X-Wing fighter to raise money for school STEM program.

will follow up with updates.

mvoltin: Hi CrOsh, thanks for the detailed guidance. I guess, I can use the 12V relay with 20A for the 48V/20A application? I found one on Amazon with 30/40 AMP Relay Harness Spdt 12V Bosch Style and hope this will work. Please let me know if this is a mistake. thanks.

A couple of those will probably work OK. Use a fet or some other kind of transistor to switch the coils, of course, and remember the flyback diode across the coil. Motor connects between the commons (pin 30), positive to each pin 87a, ground/neg to each pin 87. Again, remember to only switch when not sending PWM to the motor; in fact, put in a slight delay or something in your code, to allow the motor to brake. Oh - and this scheme will have braking (short across motor leads); if you wanted to make that optional, you would need a third relay connected in series between one of the common pins and motor terminal.

mvoltin: Will definitely open up the controller - it will make things much easier than interfacing with MCP4725.

Be sure that you are comfortable with such reverse engineering; you basically want to find that gate on the FET input - then trace it back to the whatever is being used to control the speed (I noted a 555 - but it could be anything). Once you know that (and make damn sure you do know it!) - cut the trace at that point, then scrape away a bit of trace coating on the trace (to get to bare metal) and tin the spot, then solder on a wire to control the FET. Once you know whether the FET is a logic level FET or a common 10V FET - then you can work out a scheme to control it - but likely those FET(s) are n-channel, so you just need to PWM the FET to control the speed. That new control line and a convenient ground on the PCB will be your connections.

mvoltin: Yes, I think they just mean that the wires can be switched. All the wires are labeled (throttle, brake light, etc.) but there is no pin for reversing.

Yeah - on the older style pot-controlled speed controllers, the sellers would sometimes show them "opened up" - and some would even give schematics (which, even though the 8-pin DIP on those boards wasn't identified, the circuit was pretty clear that it was a 555). Some sellers would inform the buyer that to get reverse, you needed to use a relay (DPDT) - but DPDT relays that can handle the amperage generally aren't common (at least at a low cost - most such relays are for industrial controls, and some require sockets and such - you can sometimes find them surplus, but they can get pricey buying them new) , and so using two SPDT relays is preferable.