Как все мы знаем,в нашей Ардуинке есть шим со значениями от 0 до 255, что как бы удовлетворяет 99% потребностей обычного ардуинщика. Но вот понадобилось мне получить очень малые значения шима, нужно регулировать мощность от 0 до 1% хотябы с шагом 0.1% (и даже мельче), а от 1 до 100% хоть через 5%. Есть ли простой способ это реализовать, С таймерами работать не умею, с micros() не вышло, слишком долго исполняются команды и программый шим не получился. Городить что то аппаратное пока не хотелось бы. Может кто то может дать совет?
Копайте в сторону 16-битного таймера. С каким МК работаете? Какая исходная задача? Может вам вместо подробного ШИМа честный ЦАП нужен...
http://www.avdweb.nl/arduino/libraries/fast-pwm-dac.html тут пример как ардуиновский PWM разогнали до 10бит .. а вообще на хабре где-то статью видел вроде ещё больше разгоняли .. так что гугл в помощь
разрешением. У 16 битного 16 бит, у 8 битного 8 бит. Независимо от таймингов, что бы вы этим словом не называли.
используйте обычный шим (8 разрядов получите), RC (лучше LC) фильтр нч второго порядка и выход шима (уже после фильтра) пропустите через цап (тут вам 2-3 разряда должно хватить). Цап можно взять любой с непосредственным управлением. У меня например еще с совковых времен валяются 572ПА 8 разрядные, наверняка они содраны с какого -то оригинального изделия и есть и фирменные, и китайские. 2-3 разрядный цап в принципе можно сделать и самому на основе подобранной R2R матрицы, но это хлопотно.
а может и не "вместо", а "вместе". 2-3-4 разрядный цап дал бы нужный шаг вблизи нуля. как-то несколько искусственно выглядит постановка задачи. Может поясните более широко, зачем вам 10 (или более) разрядный выходной сигнал?
Что вы имеете ввиду под "разрешением"? Один и тот же интервал времени, например 1us, и в 8 битном и в 16 битном таймере длится 0x0F (при 16Mhz). На точности это никак не отражается.
на точности шима, построенного на таймере, отражается. Под разрешением я имел в виду кратность одного отсчета, соответсвенно 1/256 при 8 битах и ~1/64 тыс при 16 битах, именно такое разрешение нам важно для шима, построенного на таймере.
Можно вручную регулировать период импульса, то есть сделать не 256, а, например, в 10 раз больше - 2560, таким образом увеличив то самое разрешение в 10 раз. Разумеется, при этом пропорционально в 10 раз уменьшится частота. Впрочем, при 16Мгц она составит 6250Гц, что вполне прилично. При стандартной частоте шим 500Гц, период, он же разрешение, может достигать 32 000. Но для этого потребуется намного научиться работать с таймерами. Я бы посмотрел в сторону режима СТС.
это только с 16 разрядным таймером, т.е таймером 1 - а он всего один. Кроме того, шим с такой скважностью будет труднее интегрировать (сглаживать).
Наверное стоит более внятно описать задачу. Нужно включать светодиодные индикаторы (цифровые и просто светодиоды) в двух режимах, с обычной регулеровкой яркости и сверхтусклой. Потому как даже при значении analogWrite 1 выжегает глаза. Это нужно для астрономических наблюдений и управления аппаратурой, просто после адаптации к темноте любой яркий свет недопустим (даже подсветка наручных часов вызывает "зайчики").
Поэтому ШИМ-ить нужно на минимальном токе, а не на максимальном (номинальном). Т.е. вам нужен драйвер, который умеет и аналоговое диммирование через управление током светодиодов и ШИМ для модуляции на минимальном токе.
вот, с этого бы начать.... Чувствительность глаза ЛОГАРИФМИЧЕСКИЯ, поэтому уменьшение яркости фотодиода шимом даже до минимума дает лишь 48 дБ при диапазоне глаза более 280 ( впрочем у кого как) дБ. Поэтому вам бы предусмотреть, кроме шима, еще управляемый делитель , или два выхода шима , один через резистор, ослабляющий ток так, что освещение слабеет на два порядка. Впрочем, и предыдущий мой совет - поставить цап с R2R матрицей не отменяется. Словами понятно или схемку накидать?
Cпасибо, все понятно. Этот ЦАП меня уже долго преследует, то-там то-сям... просто напасть какая-то . Ну а идея с двумя выходами и делителем выглядит хорошо, думаю так и поступлю.