Перейти к содержанию
    

PWM в PICе

Есть задача реализации PWM, т.е считывание PWM при сохранении достаточно высокой точности.

На входе контроллера - PWM датчика, нулевой показатель - 50% (с допуском), весь range +/- 12.5% вокруг 50%.

Требуемая точность считывания контроллером: 0.04375% или лучше.

Полный период длится 10 msec.

 

После считывания PWM входа - нужно делать не сложные расчеты для получения конечных данных + калибрацию датчика, посему реализация будет - простым 8-битным микроконтроллером типа PICa или Atmel ибо нужно низкое потребление.

Вопрос - как обычно реализуется микроконтролером считывание PWMa учитывая требуемую точность ? Ведь там-же программа, а ее real-time есть понятие весьма относительное....

Есть понятие timerа в такого типа контроллерах, как они могут помочь тут ? Считают ли они в точности по clockу контроллера (т.е. по его crystal/oscillator) ?

 

Прикидочные PWM вычисления:

предположим 10 MHz клок, не учитываем для простоты его ppm и jitter.

получаем длительность периода датчика = 100 000 клоков, 50% -> 50 000/ 100 000.

Требуемая точность: 0.04375% - т.е. минимальный надежно определяемый шаг = каждые 43.75 клока (скажем 43 клока) что есть 49.957% PWM.

Для чисто hardwareной системы (скажем FPGA) - это не проблема, но тут замешана программа выполения которой не всегда дает real-time относительно клока.

 

Как оно далется контроллерами ?

 

Спасибо

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для чисто hardwareной системы (скажем FPGA) - это не проблема, но тут замешана программа выполения которой не всегда дает real-time относительно клока.

 

Не совсем ясен смысл фразы, т.к. весь реалтайм ограничен сверху Duty Cycle of  PWM output, и в любом случае промежуточные отсчеты измеряемого датчиком параметра надо обрабатывать(интегрировать, усреднять,сглаживать или фильтровать) для согласования с Duty Cycle. Во -вторых: если кратковрЕменная стабильность внутреннего тактового генератора микроконтроллера Вас устроит, то обработка такого сигнала на стороне прибора представляет собой измерение отдельно длительности низкого уровня, и отдельно - высокого. Это я к тому, что прецизионный тактовый генератор можно и не делать, что не может не радовать.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Не совсем ясен смысл фразы, т.к. весь реалтайм ограничен сверху Duty Cycle of  PWM output, и в любом случае промежуточные отсчеты измеряемого датчиком параметра надо обрабатывать(интегрировать, усреднять,сглаживать или фильтровать) для согласования с Duty Cycle. Во -вторых: если кратковрЕменная стабильность внутреннего тактового генератора микроконтроллера Вас устроит, то обработка такого сигнала на стороне прибора представляет собой измерение отдельно длительности низкого уровня, и отдельно - высокого. Это я к тому, что прецизионный тактовый генератор можно и не делать, что не может не радовать.

 

Возможно я не совсем ясно обрисовал картину..

датчик дает уже обработанный PWM который отображает замеряемый параметер после требуемых фильтраций и т.д...это не просто A/D после которого-бы действителчно нужно было-бы фильтровать.

К выходу PWM уже можно относиться как в выходному параметру (про замере PWM нужной точности).

В том то и дело что я не знаком с имплементациями подобного плана контроллерами. Мое сомнение было как-раз в плане точности замера высокого/низкого участков контроллером ибо пока туго представляю как делается так что-бы достичь точности. Т.е. в случае испольования скажем FPGA/CPLD - все просто, счетчики на достаточно высокой частоте считают длительность уровней. Но тут контроллер который управляем бегущей программой...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Т.е. в случае испольования скажем FPGA/CPLD - все просто, счетчики на достаточно высокой частоте считают длительность уровней. Но тут контроллер который управляем бегущей программой...

Input capture unit в любом приличном МК делает минимум половину того, что надо- т.е. по rising/falling edge отмечает точные временнЫе метки между срабатываниями. Более совершенное, например, в dsPIC30f2010 - посмотрите, там есть модуль измерения PWM-сигнала от датчиков тока.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Есть задача реализации PWM, т.е считывание PWM при сохранении достаточно высокой точности.

На входе контроллера - PWM датчика, нулевой показатель - 50% (с допуском), весь range +/- 12.5% вокруг 50%.

Требуемая точность считывания контроллером: 0.04375% или лучше.

Полный период длится 10 msec.

Подаете на вход таймера (внешнюю) опору с частотой и (кратковременной) стабильностью, удовлетворяющими требованиям по точности измерения. Для упрощения жизни удобнее (но необязательно, если период PWM не плавает в разы), чтобы за период PWM счетчик не переполнялся более 1 раза.

Фиксируете по прерыванию от каждого фронта PWM состояние счетчика.

Остается несложная арифметика типа (a-b )/(a+b ), которая должна выполниться за <10 мс. Если период PWM равен 10 msec с точностью 0.04375% или лучше, то арифметика упрощается за счет обходимости деления.

Нутряные RC-генераторы что у ПИКов, что у АВРов в качестве опоры заявленные требования по точности по-любому не удовлетворят.

 

Посмотрите какой-то аппнот AD по обработке акселерометров с выходом в PWM - там все это расписано.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Нутряные RC-генераторы что у ПИКов, что у АВРов в качестве опоры заявленные требования по точности по-любому не удовлетворят.

А мне внутренний голос сказал, что за 10 миллисекунд внутренний генератор у современных приличных ПИКов никуда не убежит.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А мне внутренний голос сказал, что за 10 миллисекунд внутренний генератор у современных приличных ПИКов никуда не убежит.

Убежать не убежит, но дрожит, зараза, неприлично, причем зависимо от типа операций и количества 0/1 в операндах.

имхо, в данном случае проще устранить одну степень свободы, чем задумываться о степени ее свободности:).

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Убежать не убежит, но дрожит, зараза, неприлично,

Кстати, PLL clk stabitity jitter - знакомая цифра 2%, при измерении ШИМ с данной точностью убивает все . Вывод: не использовать PLL в пике, если он каким-то образом будет на измеряющей стороне. 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Всем спасибо, в целом более-менее понятно, программер обьяснит подробности.

Крайняя экономия - не цель, посему нет проблем раоты с внешним клоком (думаю даже 50 ppm будет достаточно, хотя может быть поставлю 25).

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

считывание PWM при сохранении достаточно высокой точности.

 

выбрать ПИК с модулем ССР, он для этого и предназначен:

http://ww1.microchip.com/downloads/en/DeviceDoc/31014a.pdf

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Почитайте "Применение модуля захвата, сравнения, ШИМ"

http://www.gamma.spb.ru/articles.php?i=27

 

и оригинал на www.microchip.com ищите по Tips'n Tricks

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...