Hi,
Some good points Scead.
Falven:
If you use logic level MOSFETs you *might* get away without using a driver but you still need a transistor (or two) to drive the upper transistors of the H bridge, and you'll have to allow enough dead time for the opposite MOSFETs to turn off before turning on the other set. Switching will be relatively slow but for your app may work if it doesnt have to switch on and off too fast. For example 1kHz might be ok.
You at least need transistors to drive the upper MOSFETs because their gates have to be driven 5 volts more positive than the highest output voltage (which in your case is 12v, that means 17v). If you use P type for the uppers then you have to have at least 12v drive to turn them off.
For transistors arranged like this:
where LU=left upper, RU=right upper, LL=left lower, RL=right lower,
with all off you would turn on LU and RU for one direction, then turn off LU and RU, then wait at least 1ms (for example).
For the other direction after you wait at least 1ms you turn on RU and LL. Before you can turn LU and RL back on again you have to turn RU and LL off and wait 1ms again. So whenever you turn one set off you wait a short time, then turn the other set on. If there is a lot of time between switches that would work good.
You'll also have to check your particular microcontroller for it's startup sequence. Does it turn all pins high or low or to high impedance? You have to know this so you can design the right drive circuit because you can not have all four transistors turn on accidentally just because the uC is powered on.
Also, what manufacturer are you going to use for the uC chip?