Генерация одиночного импульса на Ардуино

Артур Т.

✩✩✩✩✩✩✩
13 Янв 2021
11
0
Всем доброго времени суток!
Для проекта с использованием Ардуино Нано необходимо генерировать на выходе одного из пинов сигнал уровня HIGH. Длительность сигнала задается с помощью мембранной клавиатуры в диапазоне от 5 мс до 99999 мс. Проблема в том, что длительность импульса имеется фактическую погрешность -0,0749% (измерена в 10 точках внутри диапазона: 1000 мс, 10000 мс, 20000 мс и т.д.). Задача состоит в том, чтобы добиться погрешности не более +- 0,005% (это уж совсем идеально), ну или хотя бы +- 0,001%. Буду рад и благодарен любой помощи и совету!
 

7Up

✩✩✩✩✩✩✩
3 Июн 2021
147
9
нужен внешний термостатированный генератор с погрешностью на порядок лучше, чем вы хотите
 

EugeneFrol

✩✩✩✩✩✩✩
17 Апр 2024
37
4
50
На вашей Arduino Nano стоит ATmega328 ?
Обещать не буду, но где то был пример использования одного из таймеров в режиме "Compare Mode".
Позволяет сформировать одиночный импульс аппаратно с кварцевой точностью.
 

bort707

★★★★★★✩
21 Сен 2020
3,334
963
Задача состоит в том, чтобы добиться погрешности не более +- 0,005% (это уж совсем идеально), ну или хотя бы +- 0,001%.
Вообще-то 0.001 это лучше чем 0.005.
Запутались в цифрах?

А можно узнать, для чего нужна эта космическая точность?
 

poty

★★★★★★★
19 Фев 2020
3,548
1,012
добиться погрешности не более +- 0,005% (это уж совсем идеально), ну или хотя бы +- 0,001%
слово "хотя бы" перед значением, которое лучше, неприменимо.
кварцев с такой точностью нет
есть, обычные кварцы имеют точность 30ppm (0,003%), но для этого им нужно создать условия, конечно, например:
термостатированный генератор
Не буду утверждать, что на Nano такая точность достижима, система синхронизации тактовой частоты всегда будет вносить свою погрешность, а контролировать её в таких простых МП невозможно. Но на порядок более худшая точность реально достижима. И снова вынужден оговориться - не на Nano, а на МП, в котором сделана грамотная разводка.
Ваш эксперимент
измерена в 10 точках внутри диапазона: 1000 мс, 10000 мс, 20000 мс
неясно как проводился. Если погрешность постоянна (или даже повторяема), то её можно исправить программно, такое во многих чипах применяется, с загрузкой таблиц коррекции на этапе инициализации. Если нет - нужно смотреть на температурные условия, на характеристики нагрузки, на характеристики измерителя - с такой точностью измерить - нужно не просто лабораторное оборудование, а специализированный инструмент, да и то, к.м.к., с опосредованным измерением.
 

Артур Т.

✩✩✩✩✩✩✩
13 Янв 2021
11
0
@bort707, да, вы правильно указали, конечно же, это опечатка, имелось ввиду "не более +- 0,005% (это уж совсем идеально), ну или хотя бы +- 0,01%."
Для чего такая точность? Для использования при проведении проверки и некой калибровки средств проверки РЗА, где по документации необходимо использовать весьма старый прибор, точность измерения которого как раз +-0,005 % с определенными ньюансами. Или же его аналог.

И вообще, это не то, чтобы какая космическая точность. Для проведения измерений, применяющихся в нашей отечественной промышленности, такая точность это скорее нижний порог вхождения, в основном используются средства с куда большей точностью.
Здесь же все упирается в то, что устройство должно обладать весьма специфичным набором функций, а за точность как раз будет отвечать процесс генерации одиночного импульса.

Ваш эксперимент

неясно как проводился. Если погрешность постоянна (или даже повторяема), то её можно исправить программно, такое во многих чипах применяется, с загрузкой таблиц коррекции на этапе инициализации. Если нет - нужно смотреть на температурные условия, на характеристики нагрузки, на характеристики измерителя - с такой точностью измерить - нужно не просто лабораторное оборудование, а специализированный инструмент, да и то, к.м.к., с опосредованным измерением.
Специфику раскрывать не могу, разумеется. Могу заверить, что использовалось высокоточное оборудование, точность которого в десятки, если не сотни раз выше, чем 0,005 %. Многократные измерения и расчет среднего значения отклонений, и как раз -0,0749% это и есть это среднее значение.
 

wizard suleiman

✩✩✩✩✩✩✩
13 Окт 2023
67
3
@Артур Т., а вам не подойдет такой вариант, вы мне 10к сразу, я вам код, подойдет вы мне еще 30к)))
длительность импульса будите задавать через ком порт,(отправив цифру 1= 1 герц) думаю он будет работать максимально точно, однако гарантий дать естественно не могу, как и пытать вопросами, или переделывать...
еще из за того что я не знаю сколько будет выполняться каждая часть кода, на высоких частотах при отправке 100000 реальная скорость может быть 78924 естественно... но зато быстро!))) и за 10к фактически...
 

wizard suleiman

✩✩✩✩✩✩✩
13 Окт 2023
67
3
@Артур Т. и это будет генерация сигнала меандера,
удалось объяснить ?
это вам подойдет или не то ?
приемлема цена для вас ?
 

wizard suleiman

✩✩✩✩✩✩✩
13 Окт 2023
67
3
@Артур Т.,ок, тогда может вам это будет полезно
  • delay(1) = 1 миллисекунда
  • delayMicroseconds(1) = 1 микросекунда
    // Вызов функции занимает время!
    digitalWrite(pin, HIGH); // ~3-4 мкс
    delayMicroseconds(5); // ~5-6 мкс
    digitalWrite(pin, LOW); // ~3-4 мкс
    // Итого: ~11-14 мкс вместо 5!
    при всем при этом
    delayMicroseconds(us); // Максимум: 16383 (16,383 мс) и больше нельзя



 

Bruzzer

★★★★✩✩✩
23 Май 2020
717
222
Ваша задача делится на 2
(Перечислены в произвольном порядке, а не в порядке важности)
1. написать программу формирования импульса с точностью до ТАКТА (или +- ТАКТА) процессора.
2. Обеспечить стабильность тактового импульса процессора.

И если первая задача может быть выполнена человеком с данного форума, то вторая задача слишком специфична для и на мой взгляд не решается удаленно. Я например знаю, как запрограммировать но не возьмусь за вопросы точности генератора.
 

wizard suleiman

✩✩✩✩✩✩✩
13 Окт 2023
67
3
тогда проверьте пж его точность... сколько он дает погрешности...
и если можно наверное опишите задачу что делаете, не зависимо от того что не реально вам помочь...
так может просто код кто то вам скинет максимально точный, согласно тому что опишите, возможно это вам будет полезно...
 

Артур Т.

✩✩✩✩✩✩✩
13 Янв 2021
11
0
@Bruzzer, согласен, что обеспечить стабильность тактового импульса процессора достаточно сложно. Но, проводя многократные измерения длительности импульса и обработав результаты, становится понятно, что пусть устройство имеет некоторую неточность в при формировании длительности заданного импульса и "врет" в среднем на -0,0749% (опять же уточню, что измерения многократные и растянуты по времени примерно на неделю:, т.е. были сделаны две порции измерений с разницей в неделю, за которую устройство побывало под воздействием разной температуры и влажности), причем "врет" стабильно одинаково (СКО +-0,007%). В связи с этим вопрос, а не проще ли ввести поправку на длительность импульса.
Не жду ответа на этот вопрос, а лишь делюсь своими мыслями и наблюдениями.

тогда проверьте пж его точность... сколько он дает погрешности...
Насколько я понял, опять же поправьте, если я не прав. Напрямую измерить частоту кварца (и, соответственно, оценить точность) не получится, поэтому могу судить о точности только при измерении длительности импульса.
 

wizard suleiman

✩✩✩✩✩✩✩
13 Окт 2023
67
3
@Артур Т., я имел в виду, достаточно будет почитать даташит, или обзор, или ии спросить, и тогда возможно поймете что заявленная частота может чуть отличаться, температура и питание могут вносить еще погрешности, при чем у того кто будет делать код могут быть совершенно другие значения, и как следствие возможно вы придете к тому что это все дает очень большие погрешности, и не попасть в заявленную вами точность...