This repo demonstrates how to work with an Arduino's PWM outputs in a clean programmer-friendly way. It packages all the low-level interaction with timer clocks that underly PWM functionality, ...
PCF8591 has one 8 bit ADC on board for 4 channels. The ADC is 8 bit and quite fast. At 100 KHz one gets more than 2000 reads per second for read() and more than 2000 writes per second for write().