Take a free running 8 bit counter and an 8 bit full adder. Add the counter output to your control word. The carry output of the adder is your PWM signal. That's 3-4 chips.
Replace the counter with a latch, so that each cycle
i you calculate
Ai+1 =
Ai + C, and you have a PDM, i.e. pulse density modulator.
If
A is 8-bit, and you limit
C to between 16 and 239, inclusive, you will always have at least one edge every 16 clock cycles, which makes it much easier to low-pass filter such a signal analogically. PWM-controlled devices like servos don't like a PDM signal, though.
Here is what I would do:
Two binary counters, with a carry/overflow output, and a register/latch each to store the count to reset to.
One counter counts the output high period, and the other the output low period.
With 8-bit binary counters, you can control the PWM frequency (as one period can be from 2 to 510 cycles).
Whenever one counter carries/overflows, the output is toggled, this counter reset to its period, and the other counter enabled.
Only one counter runs at any time.
So, two counters, two registers/latches to store the two periods, an SR flip-flop to select which clock handles the next clock pulse, and another SR flip-flop to toggle the output.
If you add a third counter and register/latch, you can make it the clock divisor
D, so that the PWM period is (
H+
L)×
D clock cycles, and duty is
H/(
H +
L). With 8-bit counters and a 2 MHz clock, you can then select the PWM frequency between 15.38 Hz and 1 MHz. Between 15.38 Hz and 3921 Hz the resolution is maximum possible.
SN74HC590 seems eminently suitable as an 8-bit counter, because it has a separate clock enable (CCKEN), and a register carry output (RCO), and is still easily available. The latches need separate output enables, so SN74HC573 seems suitable. For the latches, a CD4043 has four S/R latches, and seems well suited.
Since OP wants a robotic platform, they probably need many PWM channels, but all channels can probably use the same PWM frequency.
It seems to me that a free-running 8-bit counter, with its overflow resetting all output channels would work.
Each channel has a binary comparator and a S/R latch.
Add an extra binary counter to divide the clock source for frequency adjust. From a 2 MHz clock, an 8-bit divider yields 8-bit PWM frequencies between 30.6 Hz and 7812.5 Hz.
I think SN74HC590 is old enough for the counter(s), CD4043 for the SR flip-flops (4 outputs per chip), SN74F521 for the comparators, and SN74HC573 for the binary registers/latches. So, it's a minimum of 2.25 chips ('521 + '573 plus one fourth of a CD4043) per channel, plus one or two '590 counters.
I am not sure how to interface the binary registers/latches to the 68k bus, though, to set the duty cycle for each PWM channel.
Which leads me to: why not implement the 68000 architecture as a soft-core on an FPGA?