Jump to content

    
Sign in to follow this  
AlexZabr

PWM в PICе

Recommended Posts

Есть задача реализации 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 относительно клока.

 

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

 

Спасибо

Share this post


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

 

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

Share this post


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

 

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

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

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

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

Share this post


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

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

Share this post


Link to post
Share on other sites
Есть задача реализации 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 - там все это расписано.

Share this post


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

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

Share this post


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

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

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

Share this post


Link to post
Share on other sites
Убежать не убежит, но дрожит, зараза, неприлично,

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

Share this post


Link to post
Share on other sites

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

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

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this