[an error occurred while processing this directive] [an error occurred while processing this directive]
По-разному(+)
(«Телесистемы»: Конференция «Микроконтроллеры и их применение»)
[an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive]

Отправлено Black Eagle 27 ноября 2001 г. 16:42
В ответ на: PWM отправлено Dymon 27 ноября 2001 г. 16:12

Лучше всего - посредством PCA (Programmable Counter Array) и/или аппаратного PWM, если таковые имеются в Вашем MCU. Этот вариант самый простой, быстрый и точный - т.к. PWM генерится аппаратно, то нет никакого дребезга фронтов из-за разного времени реакции на прерывание.

Другой вариант - полупрограммный, с использованием 16-битного таймера. Больше мороки, практически неизбежный дребезг фронтов, бОльшая трата ресурсов процессора.

Третий вариант - чисто программный, основанный на генерации точных задержек. Практически полная загрузка процессора, медленно (таймеры во многих MCU считают быстрее машинного цикла), правда, если отказаться от прерываний (бывают и такие задачки ведь!:о), то можно получить PWM без дребезга.

Первые два варианта на блюдечке выложены у Cygnal в виде весьма грамотных статей с исходниками (см. ссылку), только учтите, что Cygnal - это одно-, а не 4-, 6-, или 12-тактная машинка в отличие от большинства известных инкарнаций х51. Собственно, подход будет весьма схожим и для других (не х51) архитектур.

Удачи!

Составить ответ  |||  Конференция  |||  Архив

Ответы



Перейти к списку ответов  |||  Конференция  |||  Архив  |||  Главная страница  |||  Содержание  |||  Без кадра

E-mail: info@telesys.ru