We had a brief discussion about motors/controllers on another thread, and since I shared what I'm doing for this project, I figured I'd post it here as well.
The motor is a 4.5 HP, 12V Winch motor, made in china as a "knock-off" of a Ramsey. I disassembled it and it has decent bearings at both ends (double roller), atypical of what comes out of china. Not a bad deal for what I paid.
It has a 3/4" keyed shaft (requires a woodruff key rather than a square key) and is about 4-1/2" diameter. It's a series-wound motor so it will make a ton of torque at lower RPMs and max out around 2000-2500 RPM, which is fine for my application.
My controller is of my own design, and the power section is a set of IGBT's arranged as what is called an "H" bridge. The IGBT's replace S1 - S4 in this schematic:
Basically how an H-Bridge works is:
- To drive the motor clockwise, you'd close S1 and S4.
- To drive the motor counter-clockwise, you'd close S2 and S3.
- To freewheel the motor, you leave all four open, and
- To cause a braking action you'd close S2 and S4.
Closing S2 and S4 essentially short circuits the motor leads to each other (and ground) and since a motor spinning through inertia is a generator, this shorting action causes the motor to brake very quickly, decreasing it's braking ability as it slows down.
I chose IGBT's over mosfets simply because of the current requirements - a 4.5HP motor produces about 3400 watts which can easily draw 300A continuous and peak higher than that. Mosfets, while they switch much faster than IGBT's, are not made large enough (in an affordable package) to do this job as a single unit, so I'd have to run multiple mosfets in parallel to be able to pass the kind of current this motor is going to draw. The drawback to running mosfets in parallel is that the input (gate) capacitance goes way up and it becomes increasingly more difficult to switch them quickly, and that's one of the more important things to consider when designing a high-current motor controller - switching time.
Because semiconductors never turn on and off "instantly" and instead take a few microseconds, there are instances where S1 can be told to turn off while simultaniously S2 is turned on, and because S1 doesn't shut off instantly and S2 doesn't turn on instantly, there's a moment in time where S1 and S2 are closed enough whereas high current will go from the battery positive rail to the battery negative rail (ground). With a system capable of pumping 300+ amps through the motor, that's a ton of current for the semiconductors to sink. So the design has to consider this fact and devise a way to minimize it. It's difficult to eliminate entirely, but the smaller time window this "short" exists the better for the semiconductors, power supply, nearby radios and televisions and computers (EMI radiation).
Mosfets switch faster, but can't handle 300A in a single, affordable device. IGBT's switch slower, but can be had in 300A and 600A packages as a single, affordable device.
To control motor speed one has to build a PWM controller and that can be done a variety of ways either as a dedicated circuit or implemented through a computer chip/processor of some kind. Because I want programability and the ability to do more than stop/start/change direction, I'll be using a PIC chip - particularly the 18F4550 because I have two of them to experiment with. This is the point I'm at right now, writing code.
To cause a slow-start condition on a PWM-controlled motor, one simply has to make the pulses increase their width slower than what the throttle potentiometer says to do so. This is one of the advantage of the PIC chip because I can use that chip to read the value of the pot, then increase the pulse rate based on a constant over time until it matches the pot, rather than using the pot to determine the pulse width directly. I'll give an example, maybe that will help.
The motor is at rest, and the pulse width is 1%.
The pot is rotated to it's midpoint.
The PIC notices the pot was rotated to it's midpoint, and every second increases the pulse width by 2% until the pulse width equals 50%, matching the potentiometer.
Once the pulse width equals the value of the potentiometer (50% in this example), the PIC maintains that pulsewidth until the pot is changed to another setting.
As described, you also have a slow-down feature unless you modify the code so that any decrease in the setting of the pot *instantly* changes the pulse width to the new, lower value.
I'm taking it a step further and adding some logic, and a second pot, to use as a proportional brake pedal, which will have priority over the throttle pedal. More brake pedal equates more braking action.