Ошибка базы данных WordPress: [Table './meandr_base/anzpz_usermeta' is marked as crashed and last (automatic?) repair failed]
SELECT user_id, meta_key, meta_value FROM anzpz_usermeta WHERE user_id IN (1) ORDER BY umeta_id ASC

0

Генератор пилообразного напряжения

Обещался как-то привести пример на компаратор AVR, покапался по своему архиву и нашел генератор пилообразного напряжения. Вообще для реализации в железе этот генератор не из удачных, хотя если его доработать, то получится вполне приличный генератор. В свое время он был заброшен и, в итоге, так и остался в сыром виде. Но эта схема мне понравилась тем, что она хорошо подходит в качестве примера для работы с АЦП, Аналоговым Компаратором, SPI и внешними прерываниями в МК AVR . Вся эта периферия работает здесь самым простым образом, но при этом  связана друг с другом. Программу и пример в Proteus’e можно скачать в конце статьи, поэтому не буду приводить здесь куски этой программы, а приведу только схему и кратко опишу как это все реализовано и для чего используется в схеме. Но начну с того, что опишу какие возможности закладывались в этот генератор.
  1. Непрерывная генерация.
  2. Генерация пачек импульсов. Запуск пачки по синхроимпульсу.
  3. Регулировка частоты выходного сигнала (напряжение 0..5В).
  4. Регулировка длины пачки импульсов (напряжение 0..5В).
Схема
Обвязка микроконтроллера по питанию не показана.
Сам генератор представляет из себя интегратор, собранный на операционном усилителе, в котором конденсатор периодически разряжается. Микроконтроллер устанавливает частоту сброса конденсатора, а в итоге и частоту импульсов пилообразного напряжения, а также отслеживает напряжение на выходе и в случае чего подстраивает его под конкретное напряжение. Для чего это сделано? Если собрать отдельно интегратор с полевым транзистором и подавать на транзистор импульсы для разрядки конденсатора с внешнего генератора, то окажется, что при изменении частоты следования импульсов изменяется и амплитуда выходного напряжения. Оно то и правильно, мы же либо раньше разряжаем конденсатор, либо позже.
Т.о. чтобы на выходе напряжение оставалось постоянным, нужно соответствующим образом изменять напряжение на входе интегратора. И вот тут возникла задачка — сделать отслеживание напряжения на выходе и в случае надобности изменять напряжение на входе интегратора. Заодно прицепил какую-то регулировку используя для этого АЦП микроконтроллера. Итак, какая периферия для чего используется:
  • Аналоговый компаратор. Используется для отслеживания выходного напряжения. В зависимости от опорного напряжения наш генератор формирует величину амплитуды выходного сигнала.
  • АЦП. Используется для регулировки каких-нибудь параметров. Например, частоты выходных импульсов. А сделано это так, что мы измеряем напряжение на входе АЦП и в зависимости от него выставляем частоту выходного сигнала.
  • SPI. Используется для управления ЦАПом, напряжение с которого подается на вход интегратора. Т.е. SPI используется для подстройки напряжения на входе интегратора.
  • Внешние прерывания. Используется для подачи синхроимпульса.
А теперь кратко, как работает программа.
  1. Включаем генератор. На входе интегратора напряжение равно нулю.
  2. Компаратор определяет что на одном из его входов напряжение ниже опорного и дает команду SPI увеличить напряжение.
  3. Увеличиваем напряжение на 1 (всего напряжение питание разбито на 256 частей). SPI дает команду ЦАПу и он преобразует цифровое значение в аналоговое напряжение.
  4. Повторяем п.2 и п.3 пока напряжение не дойдет до нужного (в данном случае амплитуда сигнала будет равна удвоенному опорному напряжению на входе компаратора).
  5. Если вдруг превысили напряжение, то будет команда уменьшить напряжение. Амплитуда регулируется только при непрерывной генерации (ну это просто так сделано в этом генераторе, но при желании можно переделать). Т.е. при включении генератора он должен быть в режиме непрерывной генерации (переключатель разомкнут).
  6. Если мы хотим изменить частоту тогда мы изменяем напряжение на входе ADC0. Здесь подойдет обычный делитель напряжения с переменным резистором.
  7. Если хотим изменить длину пачки импульсов изменяем напряжение на входе ADC1.
  8. Если работаем в режиме генерации пачек, то на вход INT0 МК подается синхроимпульс (само собой амплитуда не больше 5В).

Вот собственно и все. Думаю, разобраться с программой не составит никакого труда.

admin

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *