MicroPython:Библиотеки/pyb/Класс DAC: различия между версиями
Myagkij (обсуждение | вклад) (Новая страница: «{{MicroPython/Панель перехода}} {{Перевод от Сubewriter}} {{Myagkij-редактор}} =<ref>[]</ref>= <syntaxhighlight lang="python"...») |
Myagkij (обсуждение | вклад) Нет описания правки |
||
Строка 3: | Строка 3: | ||
{{Myagkij-редактор}} | {{Myagkij-редактор}} | ||
=<ref>[]</ref>= | =Класс DAC – цифро-аналоговое преобразование<ref>[ http://docs.micropython.org/en/latest/library/pyb.DAC.html docs.micropython.org - class DAC – digital to analog conversion]</ref>= | ||
''Класс DAC'' используется для вывода аналоговых значений (напряжения) на контакты ''X5'' или ''X6''. Диапазон напряжения – ''между 0 и 3.3 вольтами''. | |||
{{Спойлер|'''Примечание''': В будущем [[API]] этого модуля ждут изменения.}} | |||
Пример использования: | |||
<syntaxhighlight lang="python" enclose="div"> | |||
from pyb import DAC | |||
dac = DAC(1) # создаем «dac» на контакте X5 | |||
dac.write(128) # записываем значение на «dac» | |||
# (на X5 появится напряжение 1.65 вольт) | |||
dac = DAC(1, bits=12) # используем 12-битное разрешение | |||
dac.write(4095) # задаем максимальное значение (3.3 вольта) | |||
</syntaxhighlight> | |||
Чтобы вывести непрерывную синусоиду: | |||
<syntaxhighlight lang="python" enclose="div"> | |||
import math | |||
from pyb import DAC | |||
# создаем буфер, содержащий синусоиду: | |||
buf = bytearray(100) | |||
for i in range(len(buf)): | |||
buf[i] = 128 + int(127 * math.sin(2 * math.pi * i / len(buf))) | |||
# задаем синусоиду при 400 Гц: | |||
dac = DAC(1) | |||
dac.write_timed(buf, 400 * len(buf), mode=DAC.CIRCULAR) | |||
</syntaxhighlight> | |||
Чтобы вывести непрерывную синусоиду в 12-битном разрешении: | |||
<syntaxhighlight lang="python" enclose="div"> | |||
import math | |||
from array import array | |||
from pyb import DAC | |||
# создаем буфер, содержащий синусоиду, при помощи полуслов: | |||
buf = array('H', 2048 + int(2047 * math.sin(2 * math.pi * i / 128)) for i in range(128)) | |||
# выводим синусоиду при 400 Гц: | |||
dac = DAC(1, bits=12) | |||
dac.write_timed(buf, 400 * len(buf), mode=DAC.CIRCULAR) | |||
</syntaxhighlight> | |||
==Конструкторы== | |||
* Класс pyb.DAC(port, bits=8, *, buffering=None) – конструирует новый объект DAC. | |||
Значением в аргументе port может быть объект Pin или целое число («1» или «2»). Цифро-аналоговый преобразователь 1 (DAC1) находится на контакте X5, а DAC2 – на контакте X6. | |||
Значение в аргументе bits – это целое число, обозначающее разрешение («8» или «12»). Максимальное значение для методов write() и write_timed() – это 2**``bits``-1. | |||
В аргументе buffering задается режим работы выходного буфера в операционном усилителе цифро-аналогового преобразователя, задача которого – снижение выходного сопротивления. Если задать здесь None, это задаст настройки по умолчанию (для функций DAC.noise(), DAC.triangle() и DAC.write_timed() буферизация будет включена, а для DAC.write() – выключена), если False, это полностью отключит буферизацию, а если True, выходная буферизация будет включена. | |||
При включенной буферизации DAC-контакт может снизить нагрузку до 5 кОм, а в противном случае выходное сопротивление не будет превышать 15 кОм. Соответственно, чтобы достичь 1-процентной точности без буферизации понадобится нагрузка менее 1.5 мОм. Использование буфера влечет штраф в точности – особенно по краям диапазона. | |||
== Методы == | |||
* DAC.init(bits=8, *, buffering=None) – повторно инициализирует цифро-аналоговый преобразователь (ЦАП). В аргументе bits может быть «8» или «12». В аргументе buffering может быть None, False или True. Значение этого аргумента смотрите в описании конструктора выше. | |||
* DAC.deinit() – денициализирует цифро-аналоговый преобразователь (ЦАП), освобождая его контакты для использования в других целях. | |||
* DAC.noise(freq) – генерирует псевдо-случайный шумовой сигнал. Он будет записан на DAC-вывод с частотой freq. | |||
* DAC.triangle(freq) – генерирует треугольный импульс. Значение на DAC-выводе меняется на частоте freq и проходит через полный 12-битный диапазон (вверх и вниз). В результате частота самой повторяющейся треугольной волны будет в 8912 раза меньше. | |||
* DAC.write(value) – прямой доступ к DAC-выводу. Минимальное значение – «0». Максимальное значение – 2**``bits``-1, где bits задается либо при создании объекта DAC, либо при использовании метода init(). | |||
* DAC.write_timed(data, freq, *, mode=DAC.NORMAL) – выделяет пакет RAM-памяти под DAC-данные при помощи передачи данных DMA. Входные данные воспринимаются как массив байтов в 8-битном режиме или массив беззнаковых полуслов (массив с кодом ‘H’) в 12-битном режиме. | |||
В аргументе freq может быть целое число, задающее частоту записи порций ЦАП-данных (при помощи таймера 6), или уже инициализированный объект Timer, используемый для инициации записи ЦАП-данных. Для этого подходят таймеры 2, 4, 5, 6, 7 и 8. | |||
В аргументе mode может быть DAC.NORMAL или DAC.CIRCULAR. | |||
Пример одновременного использования обоих цифро-аналоговых конвертеров: | |||
<syntaxhighlight lang="python" enclose="div"> | <syntaxhighlight lang="python" enclose="div"> | ||
dac1 = DAC(1) | |||
dac2 = DAC(2) | |||
dac1.write_timed(buf1, pyb.Timer(6, freq=100), mode=DAC.CIRCULAR) | |||
dac2.write_timed(buf2, pyb.Timer(7, freq=200), mode=DAC.CIRCULAR) | |||
</syntaxhighlight> | |||
=См.также= | =См.также= |
Версия от 10:43, 5 октября 2020
Класс DAC – цифро-аналоговое преобразование[1]
Класс DAC используется для вывода аналоговых значений (напряжения) на контакты X5 или X6. Диапазон напряжения – между 0 и 3.3 вольтами.
![]() |
Примечание: В будущем API этого модуля ждут изменения. |
Пример использования:
from pyb import DAC
dac = DAC(1) # создаем «dac» на контакте X5
dac.write(128) # записываем значение на «dac»
# (на X5 появится напряжение 1.65 вольт)
dac = DAC(1, bits=12) # используем 12-битное разрешение
dac.write(4095) # задаем максимальное значение (3.3 вольта)
Чтобы вывести непрерывную синусоиду:
import math
from pyb import DAC
# создаем буфер, содержащий синусоиду:
buf = bytearray(100)
for i in range(len(buf)):
buf[i] = 128 + int(127 * math.sin(2 * math.pi * i / len(buf)))
# задаем синусоиду при 400 Гц:
dac = DAC(1)
dac.write_timed(buf, 400 * len(buf), mode=DAC.CIRCULAR)
Чтобы вывести непрерывную синусоиду в 12-битном разрешении:
import math
from array import array
from pyb import DAC
# создаем буфер, содержащий синусоиду, при помощи полуслов:
buf = array('H', 2048 + int(2047 * math.sin(2 * math.pi * i / 128)) for i in range(128))
# выводим синусоиду при 400 Гц:
dac = DAC(1, bits=12)
dac.write_timed(buf, 400 * len(buf), mode=DAC.CIRCULAR)
Конструкторы
- Класс pyb.DAC(port, bits=8, *, buffering=None) – конструирует новый объект DAC.
Значением в аргументе port может быть объект Pin или целое число («1» или «2»). Цифро-аналоговый преобразователь 1 (DAC1) находится на контакте X5, а DAC2 – на контакте X6. Значение в аргументе bits – это целое число, обозначающее разрешение («8» или «12»). Максимальное значение для методов write() и write_timed() – это 2**``bits``-1. В аргументе buffering задается режим работы выходного буфера в операционном усилителе цифро-аналогового преобразователя, задача которого – снижение выходного сопротивления. Если задать здесь None, это задаст настройки по умолчанию (для функций DAC.noise(), DAC.triangle() и DAC.write_timed() буферизация будет включена, а для DAC.write() – выключена), если False, это полностью отключит буферизацию, а если True, выходная буферизация будет включена. При включенной буферизации DAC-контакт может снизить нагрузку до 5 кОм, а в противном случае выходное сопротивление не будет превышать 15 кОм. Соответственно, чтобы достичь 1-процентной точности без буферизации понадобится нагрузка менее 1.5 мОм. Использование буфера влечет штраф в точности – особенно по краям диапазона.
Методы
- DAC.init(bits=8, *, buffering=None) – повторно инициализирует цифро-аналоговый преобразователь (ЦАП). В аргументе bits может быть «8» или «12». В аргументе buffering может быть None, False или True. Значение этого аргумента смотрите в описании конструктора выше.
- DAC.deinit() – денициализирует цифро-аналоговый преобразователь (ЦАП), освобождая его контакты для использования в других целях.
- DAC.noise(freq) – генерирует псевдо-случайный шумовой сигнал. Он будет записан на DAC-вывод с частотой freq.
- DAC.triangle(freq) – генерирует треугольный импульс. Значение на DAC-выводе меняется на частоте freq и проходит через полный 12-битный диапазон (вверх и вниз). В результате частота самой повторяющейся треугольной волны будет в 8912 раза меньше.
- DAC.write(value) – прямой доступ к DAC-выводу. Минимальное значение – «0». Максимальное значение – 2**``bits``-1, где bits задается либо при создании объекта DAC, либо при использовании метода init().
- DAC.write_timed(data, freq, *, mode=DAC.NORMAL) – выделяет пакет RAM-памяти под DAC-данные при помощи передачи данных DMA. Входные данные воспринимаются как массив байтов в 8-битном режиме или массив беззнаковых полуслов (массив с кодом ‘H’) в 12-битном режиме.
В аргументе freq может быть целое число, задающее частоту записи порций ЦАП-данных (при помощи таймера 6), или уже инициализированный объект Timer, используемый для инициации записи ЦАП-данных. Для этого подходят таймеры 2, 4, 5, 6, 7 и 8. В аргументе mode может быть DAC.NORMAL или DAC.CIRCULAR. Пример одновременного использования обоих цифро-аналоговых конвертеров:
dac1 = DAC(1)
dac2 = DAC(2)
dac1.write_timed(buf1, pyb.Timer(6, freq=100), mode=DAC.CIRCULAR)
dac2.write_timed(buf2, pyb.Timer(7, freq=200), mode=DAC.CIRCULAR)
См.также
Внешние ссылки
- ↑ [ http://docs.micropython.org/en/latest/library/pyb.DAC.html docs.micropython.org - class DAC – digital to analog conversion]