Pwm from npn seen on anlog input

The Magnetic encoder is a fine solution. They are a little costly (compared to a optical/contact "O/C" rotary encoder).

I've not used the magnetic encoders but from the datasheet they are a serial interface, and may be easier to program. They also seem to have a very high resolution compared to the O/C encoder. And they provide an absolute indication (i.e a pointer on the knob in a known position will always provide the same reading). The O/C is relative like you find on an modern automotive radio volume control.

From what I read they don't have any detents (as expected with 10 bit resolution) so you will have to provide some friction to stop vibration from changing the angle.

I have used the O/C type encoder for applications where didn't want to sense "noise" I found a 16 position (4 bits) O/C encoder perfect for my operation. I don't recall the mfg or model but it had detents at each position so I didn't have to worry about changing from vibration.
Keep in mind you are not limited to 16 positions as the encoder can be turned more than one revolution.
Also you can define where ever it is on power up as "0" and not worry about starting up with the control at max.