23 Apr 2012 13:56
Jitter while generating PWMs with GPIO from RTDM driver
Andrey Nechypurenko <andreynech <at> googlemail.com>
2012-04-23 11:56:47 GMT
2012-04-23 11:56:47 GMT
Hi Folks,
Following my tests with PWM generation using GPIO in user space [1],
I've made the RTDM module [2] to further reduce the jitter. As a
result, jitter was improved, but still under heavy system load the
servo motor I am trying to control starts shaking. Now, I fill stuck
and hope to get some help here.
At one hand, I can not imaging that 800MHz ARM (BeagleBoard xM) could
not manage to generate 20mS PWMs from RTDM driver precise enough to
avoid sporadic servo movements. So probably I am doing something
wrong. On the other hand, I do not see where the possible mistake can
happen and hope that someone experienced in with Xenomai could help.
There is an article about observed behavior [3] with more details, but
the core problem, I guess, boils down to the following code fragment:
void pwm_task_proc(void *arg) {
const int which = (int)arg;
// Toggling GPIO pin
for(;;) {
//set_data_out has offset 0x94 . Set gpio pin to 1 (up)
iowrite32(0x40000000, gpio + 0x6094);
// wait requested pulse width time (duty)
if(0 != rtdm_task_sleep(up_period[which]))
rtdm_printk("PWM: rtdm_task_sleep() returns error\n");
//clear_data_out has offset 0x90 . Set gpio pin to 0 (down)
(Continue reading)
.
Thank you!
Andrey.
RSS Feed