What do you use the server for? hosting?
Some of the servers I have host customer applications, not limited to but including websites. Other servers host applications that I "rent seats" to certain types of customers, whereas they pay per user per month. This is the first time in years I've actually had space in the rack. Previously both racks were full floor to ceiling and I had a pile of "development" servers and networks stacked next to it on a milk crate.
Spec on the controller? Schematic?
The controller will be able to provide 600A to the motor from the batteries, configured more or less as an H-Bridge. It's slightly different than most of the H-Bridge schematics you'll find in that the motor is not fully in between the four IGBT transistors, as the case of the particular motor I acquired is always ground (or battery negative).
The IGBT's instead reverse how the shunt coil is wired thus reversing the direction of the motor. Fairly straight forward. The 600A rating is based on the four IGBT's I have on my workbench.
I am at the present working out current sensing, temperature sensing, and emergency shut-down and/or pulse-width limiting for either condition, and those "features" are not in the digital version of the schematic. I have them scribbled out on graph paper and breadboarded on the workbench.
Control of the below circuit (plus the sensing features I mentioned above) will be controlled by a Microchip 18F4550. I selected this chip for several reasons:
- Available in a DIP package, allowing me to use a socket in case it bursts into flames and needs to be replaced.
- Built-in USB interface capability.
- Re-writable flash memory for programs, 24K in size.
- 2048K of SRAM for variable storage.
- Thirteen 10-bit A/D converters.
- Thirty-five bits of digital I/O.
- Easy to program PWM capability.
From the "overview" schematic below you will see four inputs - IN A through IN D. This follows a truth table:
ABCD
1001 - clockwise.
0110 - counter-clockwise.
0011 - braking.
All other combinations are invalid and should not be programmed.
One of the problems with IGBT's is they switch slower than MOSFET transistors, and there can be situations where opposite IGBT pairs can be closed simultaniously, allowing battery voltage to pass directly through the entire H-Bridge to ground - a short circuit. This is why power transistors of many kinds get so darn hot - this very brief instant where there's a direct short.
Since I am going to control this by software, in the PIC, I came up with a brain-dead simple way of eliminating this problem.
To move the motor forward, I issue a binary command of 1001 and repeatedly pulse that value at the correct pulse-width to achieve a certain speed.
When I want to brake, I would issue a binary command of 0011 but only after issuing a binary command of 0000 which shuts off all the IGBTs in the bridge. Whatever the transition time of the IGBT's are, that's the length of time I have to latch the 0000 command. In the case of the IGBT's I have, that's 325ns. To be safe, I would issue the binary 0000 command for 500ns instead of 325ns (safety margin).
Since the PIC has multiple A/D controllers, I have one attached to a variable resistor (potentiometer) for the throttle pedal position, and another one for the brake pedal position.
By having both pedals monitored by a variable resistance, I not only can have proportional speed but I can also have proportional motor braking as well, and will code some software logic to determine priority.
The first step is to read both pedals (10 bit, value 0-1024) and to remove jitter I'd shift both values left 2 bits, giving me an 8-bit representation of the two pedal positions (0-255).
0 = no action (1% pulsewidth)
255 = maximum action (99% pulsewidth)
Then, I would prioritize them.
if $brake > 0 then apply $brakePWM;
else apply $acceleratorPWM;
This would ensure if my son hits both the brake and the gas at the same time, the controller pays more attention to the brake pedal position.
There is some scaling of the values necessary, as a 1% pulsewidth does nothing, and in fact with this motor as much as 13% pulsewidth doesn't make it move from a standstill. If it's already moving it will adjust it's speed to that percentage of max so the controller has to take this into consideration. This also applies to braking, though at a different scale than acceleration.
So if my son is sitting in the car, not moving, and pushes the pedal half-way, for a 50% pulsewidth, for a brief instant the controller will apply 99% pulsewidth and as the car stats to move, it will quickly but smoothly adjust the pulsewidth from 99% down to 50% - the position of the pedal - before the motor reaches 50% of it's speed.
Things like this are much easier to "code" than to do with digital logic or analog circuits. The PIC having a USB port built in makes changing these kinds of settings that much easier - plug in laptop, netbook, or whatever.