Arduino Uno Rev3 Внутренний кварц

Я использую плату Arduino Uno Rev3, и мне нужно отправить триггерный сигнал с определенной частотой (20–50 Гц). Этот триггерный сигнал должен быть максимально точным (+/- 0,01 мс). На сайте Arduino указано, что arduino uno имеет кварцевый кристалл с частотой 16 МГц, но я измеряю точность частоты около 0,35% (что было бы типично для керамического резонатора) вместо того, что я мог ожидать от кварца (0,001%). Я использую функцию micros() для измерения времени. Я делаю что-то неправильно? Почему моя частота настолько неточна?

Спасибо за помощь! :)

Изменить: действительно, когда я смотрю на схемы, я вижу керамический резонатор (синий кружок). Однако, кажется, есть еще часть 16 МГц (красный кружок). может это кварцевый генератор?

, 👍2

Обсуждение

Не могли бы вы предоставить код измерения, отредактировав свой вопрос?, @chrisl

Я не знаю, почему они говорят, что у него кварцевый кристалл — это не так — у него керамический резонатор. Этот: https://uk.farnell.com/murata/cstce16m0v53-r0/resonator-ceramic-16mhz-smd/dp/2443265, @Majenko

@Маженко, боже мой, ты уверен? Весь мой проект опирается на эту точность. Зачем им делать ложное заявление на официальном сайте? Есть ли вообще плата ардуино (альтернатива) с кварцевым кристаллом?, @MarayJay

Да, я уверен. Это часть схемы. Я отправил электронное письмо веб-мастеру, чтобы попытаться исправить ошибку на странице продукта. Есть много других плат с кристаллами получше - в основном более мощные платы, такие как Teensy, chipKIT и т.д., @Majenko

хорошо. Спасибо :), @MarayJay

Все платы, которые я делаю с 328P, 1284P, 2560, используют кристаллы кварца. 0,01 мс = 10 мкс, да? Вы можете сократить время до 4 мкс с помощью micros(), но вам нужно написать код, который работает в цикле() и не имеет джиттера, вызванного фоновым кодом цикла(). Например, мне нужно было загрузить 45 сдвиговых регистров с 8 МГц SPI; для этого мне пришлось отключить прерывания и записать 45 дискретных строк SPI.transfer (spdr = array[0]; 15 no-ops, затем spdr = array[1]); 15 операций без операций и т. д.) Если бы прерывания были включены, я мог бы видеть (на логическом анализаторе), что прерывание micros() нарушило бы временной поток. loop() сделал хуже., @CrossRoads

Arduino Uno Rev3 имеет ATmega328P. @Majenko, насколько я могу интерпретировать схему, есть два компонента: тот, который вы прислали (керамический резонатор), и еще один, возможно, кварц? пытаюсь прикрепить картинку, @MarayJay

@MarayJay Uno R3 имеет кварцевый кристалл для работы с ATMega16U2, а не с ATMega328P. Это то, что вам нужно для ATMega328P. Кварц требуется для USB для точности, но не для UART, так как он более щадящий., @Majenko

Итак, на этой плате нет возможности получить точность кварца для управления выходным контактом?, @MarayJay

@MarayJay Нет, боюсь, что нет., @Majenko

@MarayJay Если вы хорошо разбираетесь в пайке, нет причин, по которым вы не можете заменить резонатор на плате кристаллом 16 МГц и двумя керамическими конденсаторами (22 мкФ). Примерно так: https://images.app.goo.gl/x5KSXfUf9y1Q9K6e6, @Kavka


1 ответ


Лучший ответ:

2

Чип ATMega328P действительно тактируется керамическим резонатором. Веб-сайт вводит в заблуждение, заявляя, что у него есть кристалл (я отправил электронное письмо веб-мастеру, чтобы попытаться исправить это, хотя я не питаю особой надежды).

Кварцевый резонатор 16 МГц на схеме является частью схемы интерфейса USB и не имеет ничего общего с синхронизацией вашего кода. Он используется исключительно для тактирования чипа ATMega16U2, который обеспечивает подключение USB (USB требует более высокой точности для стабильной связи).

Есть и другие платы с лучшими кристаллами — чаще всего это платы со встроенным USB-подключением, такие как Arduino Due или Leonardo, или любая из множества плат других производителей, таких как Teensy или chipKIT.

,

Большое спасибо за разъяснение! Я изо всех сил пытаюсь найти альтернативу, которая обеспечивает следующие характеристики: - Выход 5В (мне нужен сигнал 5В) - Кварцевый - Возможна связь через RS-232 - USB-соединение для подключения к компьютеру У вас есть предложение?, @MarayJay

@MarayJay Arduino Leonardo может быть вашим лучшим выбором., @Majenko

Я правильно понимаю: у Леонардо есть только один кварцевый генератор, потому что нет второго процессора для связи через USB? А вы на 100% уверены, что это кварцевый генератор, да? Я больше не доверяю странице Arduino, поэтому я доверяю вам. (кстати, ты спасаешь мой день), @MarayJay

@MarayJay Леонардо имеет прямое («родное») USB-соединение. Он объединяет функциональные возможности обоих чипов Uno в одном. USB требует точности кристалла кварца. Вы также можете использовать Arduino Micro, если вам нужна меньшая занимаемая площадь. Тот же чип, только плата меньшего размера., @Majenko

Большое спасибо :), @MarayJay