Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Таймер на Arduino Due (SAM) копит ошибку #8

Open
sadr0b0t opened this issue Sep 7, 2017 · 0 comments
Open

Таймер на Arduino Due (SAM) копит ошибку #8

sadr0b0t opened this issue Sep 7, 2017 · 0 comments
Labels

Comments

@sadr0b0t
Copy link
Owner

sadr0b0t commented Sep 7, 2017

Сделал замеры по периодам таймеров на Arduino Due (SAM), получил, что на сумме из 1000 периодов накапливается существенная ошибка.

например, на 10КГц период должен быть 100мкс. На одном периоде замер показывает время между точками замера 100-101мкс (это ок). Но на 1000 периодов время между точками замера получается 100428мкс (лишние 428 микросекунд - это очень много).

    // period = 100us
    // PIC32MX (ChipKIT Uno32): 100us (ok)
    // AVR (Arduino Leonardo): 96/100/104us, x2=200/204us (ok)
    // SAM (Arduino Due): 100/101us, x1000=100428us (?ok)
    timer_init_ISR_10KHz(TIMER_DEFAULT);

На PIC32/ChipKIT, AVR/Leonardo все отлично, такой погрешности нет (на PIC32 идеально 100000, на AVR - +/- 4 мкс).

те же ~420мкс вылезают и на других частотах:

    // period = 5us
    // PIC32MX (ChipKIT Uno32): 5us, x10=50us (ok)
    // AVR (Arduino Leonardo): 12/16us, x2=20us, x10=84us (fail)
    // SAM (Arduino Due): 5/6us, x2=11us, x10=54/55us, x1000=5460us (fail)
    //timer_init_ISR_200KHz(TIMER_DEFAULT);

    // period = 10us
    // PIC32MX (ChipKIT Uno32): 10us (ok)
    // AVR (Arduino Leonardo): 12us, x2=20us, x10=100/104/108us, x1000=10000  (~ok)
    // SAM (Arduino Due): 10/11us, x1000=10397/10425 (?ok)
    //timer_init_ISR_100KHz(TIMER_DEFAULT);
    
    // period = 20us
    // PIC32MX (ChipKIT Uno32): 20us (ok)
    // AVR (Arduino Leonardo): 12/20/24us, x2=40/44/48us, x1000=19996/20000/20004 (~ok)
    // SAM (Arduino Due): 20/21us (ok), x1000=20405/20416us (?ok)
    //timer_init_ISR_50KHz(TIMER_DEFAULT);

    // period = 50us
    // PIC32MX (ChipKIT Uno32): 50us (ok)
    // AVR (Arduino Leonardo): 48/52/56us, x2=100us (ok)
    // SAM (Arduino Due): 50/51us, x1000=50410 (?ok)
    //timer_init_ISR_20KHz(TIMER_DEFAULT);

Будем надеяться, что проблема может быть в или в значениях для установки частоты или в настройках режима таймера, а не в особенностях железа.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

1 participant