You seem determined to do this with analog, or mostly analog, and you don't seem to like the (eminently sensible for a one-off or small run) idea of using a pre-packaged motor controller -- why?
At any rate, you don't seem to want an absolute encoder count -- you just want a velocity from the motor that you can wrap with a PID. Here's a circuit that'll do it for you; this can be done with all 7400 series logic, and a 555 for the clock:
.------. xor | | __ and xA --------|D1 Q1|----o----------| | __ xB --------|D2 Q2|--o-|--------. |==|-------| | .---|D3 Q3|--|-|--------|-|__| |& |---- up |.--|D4 Q4|--|-|----. o------------|__| || | | | | o-------------. __ clock -----o>clk | | | | | __ '--| | || | | | | | '-| | |& |---- down || '------' | | | |==|-------|__| || | | '-----|__| |'------------' | '---------------' created by Andy´s ASCII-Circuit v1.24.140803 Beta
When clocked faster than the highest frequency you'll ever see out of the motor (so, around 100kHz in your case) you'll get an "up" pulse each time the motor advances and a "down" pulse each time it retreats. You can feed the result into a difference amplifier, and the average value out will be your motor velocity. The result can go from there to a PID. If you _only_ care about rate and you can be sure that the motor will only go in one direction you can replace the above circuit with a single edge-triggered monostable multivibrator with the period set to less than the shortest pulse you'll ever see (74xx126, IIRC). Once again the average will be proportional to velocity.
Any way you slice it, you'll use up about 5 times as much board space as an AVR or PIC and you'll fiddle with it more, but it won't be any obscure digital crap!