What values do you need every 50 ms? (Remember, all I know about what you want to do is what you have written here.)
It may well work at 50 ms reporting interval, it is just that I did not test it below 100 ms as that’s far faster than anybody would need for general energy monitoring. The problem is not getting the data - emonLibCM in an Atmel ATMega 328P does that at one sample every 104 µs (so a pair of voltage and current samples every 208 µs which is better than 10 times faster than you need) - but calculating the averages, formatting and sending the data somewhere to use it or store it.
(Note: You must make the averaging period an exact multiple of half a cycle, otherwise you will have what we term “end effect” which will introduce ripple.)
I’m thinking you should look at the research we’ve published here about the STM32. There’s a very long thread STM32 Development (and others that are relevant), and whilst I’ve been watching it moderately closely, I’m not up to speed on the details. But I think that offers a more realistic solution than an Arduino-based one - mainly because the Atmel 328P is running close to the maximum that it can do with emonLibCM.
Regarding ZMPT101B, use the transformer alone, with a multiplier resistor in the primary circuit and a secondary burden feeding straight into your ADC as per the data sheet. The problem is with the op.amp and the filters in the module.