Nnamdi Kohn wrote:
Exactly what sort of jitter level is the concern here?
a maximum of approximately 10 µs could be tolerated.
Less than 10us jitter is a tight requirement, I think you are being a bit demanding for anything outside of a single ISR.
Is info being missed or are you needing to update some I/O device at 8 kHz?
information seems to be missing, because the right software modules involved
could not be executed within the right time. There is no direct I/O except
for the communication which is done at cycle start (READ) and somewhere in
the cycle middle (WRITE).
Communication? This is the message passing right? Your ISRs do the direct I/O accesses I presume.
Can you get away with counting and buffering to catch
up when the CPU is freed up?
No. Unfortunately, the application controlls the parallel drives (motors) of
a high-speed robot. Every input data (coming from sensors and resolvers) is
necessary within the right 8 kHz cycle in order to calculate the right
output data. Received in an other cycle, the data would be worthless.
Well, ideally, to get the lowest level servo loop to execute on the most recent data acquired on this cycle you would read the input positions, calculate ideal positions, compare them, and write the outputs all in a single sequence. All that should be a complete module that sits in a single ISR and therefore you won’t be inserting extra lag into the servo system.
That is unless you don’t actually have any servo code of your own. Some systems use independent smart servo controllers that all you have to do is feed the profile to. In this case response time looses it’s importance and my outline looses it’s relevance.
Maybe an interrupt handler would help? They are quite easy to do in QNX.
that’s what we do. But the complex calculations are divided into different
modules. So there is not ONE interrupt handler able to do all the stuff
necessary. It would collapse our modular architecture.
Build a callback system for your servo ISR or have a wrapper API for accessing the servo data from outside of the servo code.
→ UNFORTUNATELY I WILL BE OFF FOR THE NEXT TWO WEEKS,
SO MY ANSWERS WILL CONTINUE AFTER MY RETURN. Thankx