I’ve been tackling my own issues with ideas that are sound on paper for physically small products where I run into mechanical or industrial limitations/difficulties which I’m not (or at least certainly didn’t start out) well-versed in rather than any electronics or programming issues. I hit a brick wall years ago (asked here on HN in the distant past but didn’t get anywhere) and actually never progressed past that.
I’m not sure what issues you ran into with the MEMS but my instinct (if I were forced to use them, as they are still rather nascent tech) would be to use multiple physically spread out on a plane and then clean up the signal in software. I’m not sure what price point or “genericness” you’re looking for, my assumption is that you need something that a customer can install or have installed on any bike and you don’t have the luxury of making your own bike parts because otherwise you could basically make it a stepper motor in reverse if you have access to the very axis rather than your device being off-center.
If you can mount something on the shaft itself (externally coupled at the end or by replacing it or other parts) your options become a lot more reliable as you’re in “tried and tested” territory.
Other options (warning: brain dump not thought through) would be an LVDT (see earlier piston suggestion) as they’re basically infinite life, contactless, and can give you micrometer accuracy; if you can somehow determine the distance between two points and have a sensor at a fixed position on each pedal so you can get the distance between them; coating the crank with a reflective substance and using IR sensors to get the distance at arbitrary angles (I’m pretty sure IR raw output can give you the accuracy you seek, though PIR definitely won’t); and a crazy idea based off a tilt switch of using a conductive liquid in a sealed non-conductive cylinder with two strips of differing conductivity on either (long) side, calculating the resistance with a high precision ADC could easily give you what you are looking for but I can’t find any off the shelf parts that do this (which is weird since it seems to be very obvious and is free of moving parts).
Good ideas though, we've come across the multiple MEMs approach (someone put I think 16 on a single PCB to get 4 times the resolution). The CRM100 [0] we're currently using is the best we've found so far for our application.
We're been using liquid-level inclinometers for calibration and lab testing, unfortunately they are too slow for use on the road.
LVDT's and similar would be great, however the engineering cost (at bicycle scale) puts them out of reach, which is the same for precision optics for IR solutions. Plenty of $1k+ encoders out there but way over budget for us!
I’m not sure what issues you ran into with the MEMS but my instinct (if I were forced to use them, as they are still rather nascent tech) would be to use multiple physically spread out on a plane and then clean up the signal in software. I’m not sure what price point or “genericness” you’re looking for, my assumption is that you need something that a customer can install or have installed on any bike and you don’t have the luxury of making your own bike parts because otherwise you could basically make it a stepper motor in reverse if you have access to the very axis rather than your device being off-center.
If you can mount something on the shaft itself (externally coupled at the end or by replacing it or other parts) your options become a lot more reliable as you’re in “tried and tested” territory.
Other options (warning: brain dump not thought through) would be an LVDT (see earlier piston suggestion) as they’re basically infinite life, contactless, and can give you micrometer accuracy; if you can somehow determine the distance between two points and have a sensor at a fixed position on each pedal so you can get the distance between them; coating the crank with a reflective substance and using IR sensors to get the distance at arbitrary angles (I’m pretty sure IR raw output can give you the accuracy you seek, though PIR definitely won’t); and a crazy idea based off a tilt switch of using a conductive liquid in a sealed non-conductive cylinder with two strips of differing conductivity on either (long) side, calculating the resistance with a high precision ADC could easily give you what you are looking for but I can’t find any off the shelf parts that do this (which is weird since it seems to be very obvious and is free of moving parts).
Edit: I found a similar thing, but measuring capacitance with a dielectric liquid rather than measuring resistance with a conductive liquid: https://en.m.wikipedia.org/wiki/Liquid_capacitive_inclinomet...