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

Захват ШИМ сигнала...

Подсобите алгоритмом или кодом для реализации захвата ШИМ сигнала. То есть подсчет скважности. Кто чем сможет.

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


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

Делаем счетчик тактовых импульсов. На каждом такте пока на входе ШИМ стоит 1 увеличиваем значение счетчика. При переходе сигнала ШИМ из 1 в 0 переписываем значение счетчика на выход и сбрасываем счетчик.

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


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

А как определить ресурсы для счетчика(сколько тригеров чтоли). У меня внешняя синхронизация ~18МГц, а частота ШИМа ~2кГц. Т.е. предполагаю что 14. Я не цифровик и плохо ориентируюсь в том, скоко логики требуется для какого либо текста VHDL.

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


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

А как определить ресурсы для счетчика(сколько тригеров чтоли). У меня внешняя синхронизация ~18МГц, а частота ШИМа ~2кГц. Т.е. предполагаю что 14. Я не цифровик и плохо ориентируюсь в том, скоко логики требуется для какого либо текста VHDL.

 

Если вы имели в виду разрядность счетчика - при таком соотношении частот счетчик действительно должен быть 14 разрядным.

 

Посмотреть сколько ресурсов съедает VHDL описание блока можно в отчете по синтезу в Вашей среде разработки.

В Xilinx ISE это делается так:

В окне Sources выбираем требуемый VHDL файл, затем в окне Processes дважды щелкаем по пункту

View Synthesis Report.

В открывшемся файле смотрим раздел Device utilization summary

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


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

А смогу ли я добиться уменьшения его разрядности предварительно поделив где-то внешний клок. И затем синхронизировать счетчик от него? Наверно это или еще один счетчик, или PLL.

И вообще где-нибудь можно глянуть текст кода VHDL: делитель частоты больше чем на два?

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


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

А смогу ли я добиться уменьшения его разрядности предварительно поделив где-то внешний клок. И затем синхронизировать счетчик от него? Наверно это или еще один счетчик, или PLL.

конечно можно. Если есть возможность использовать встроенный в FPGA PLL, частоту входного сигнала тактирования лучше делить/умножать именно на нем. И уже с выхода PLL раздавать клок на все внутренние блоки.

 

И вообще где-нибудь можно глянуть текст кода VHDL: делитель частоты больше чем на два?

Простейший делитель частоты и есть счетчик. на выходе младшего разряда - Fin/2,

второго разряда - Fin/4 и т.д.

Простейший пример счетчика - в прикреплении.

counter.vhd.txt

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


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

А смогу ли я добиться уменьшения его разрядности предварительно поделив где-то внешний клок. И затем синхронизировать счетчик от него? Наверно это или еще один счетчик

Конечно. Какжый разряд счетчика требует одного триггера ресурсов. И в этом смысле неважно, делит ли этот триггер входной клок или входит в состав другого счетчика, ресурсы в общем-то те же.

 

Однако становятся важными другие обстоятельства. Если все работает от одного клока, то меньше вероятность ошибок, а софт может легко выловить ошибки во времянках. Поэтому лучше клок не делить, если можно.

 

И вообще где-нибудь можно глянуть текст кода VHDL: делитель частоты больше чем на два?

 

...
signal counter14 : unsigned(13 downto 0);
...
my_cnt14_p:process(Clk, counter14)
begin
  if rising_edge(Clk)
    counter14 <= counter14 + "00000000000001";
  end if;
end process;

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


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

Значит вроде счетчик я сделал. Только мне надо считать скважность ШИМ.

А точнее ((T1/T2)-0.5)/0.04.

T1- то что я насчитал.

Т2-период ШИМ, берем константой.

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

Нужно наверно пробовать функции из модуля MATH?

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


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

Нафига ((T1/T2)-0.5)/0.04 считать в плисине? Отправить измеренное T1 "наверх", в мелкоконтроллер или в писюк, пусть они считают чего им надо.

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


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

В общем, поддерживаю =AK=.

Если есть возможность - лучше не делать мат. вычислений в ПЛИС - накладно по ресурсам да и геморойно.

Хотя неплохо бы иметь представление о проекте в целом и железе, на котором предполагается его реализация. Я так понимаю, что Ваш "измеритель скважности" - небольшой блок в некотором устройстве.

Так что (хоть примерно) должно делать ваше устройство?

Какими выч. средствами оно располагает: только ПЛИС - индикатор, ПЛИС-контроллер, ПЛИС-ПК или еще что-то?

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


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

Рассказываю: есть датчики с цифровым выходом ввиде ШИМ. Я ловлю этот сигнал(ПЛИСой) и по-хорошему выдаю на ДСП. Датчиков много - по-этому МК не подойдет. Только вот выдать я должен

X(t)=((T1/T2)-0.5)/0.04. На ДСП есть готовая прога(я ДСП плохо знаю). Раньше вместо ПЛИС стоял АЦП. Но и датчики были аналоговые...

ALTERA Cyclone EP1C3. Среда Квартус.

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


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

Рассказываю: есть датчики с цифровым выходом ввиде ШИМ. Я ловлю этот сигнал(ПЛИСой) и по-хорошему выдаю на ДСП. Датчиков много - по-этому МК не подойдет. Только вот выдать я должен

X(t)=((T1/T2)-0.5)/0.04. На ДСП есть готовая прога(я ДСП плохо знаю). Раньше вместо ПЛИС стоял АЦП. Но и датчики были аналоговые...

ALTERA Cyclone EP1C3. Среда Квартус.

 

Вы что то скрываете:)... если был ДСП и читал с АЦП, то без переделки программы или без симуляции работы АЦП в плис вы задачу не решите.

 

 

Теперь про решение:

МК можно и один поставить, пусть ваша плис ему по очереди дает значения со всех датчиков, а он их все делит и отдает обратно, как сабпроцессор в ПК. Врядли у вас стояло куча АЦП в параллель, считывали вы наверняка последовательно, а учитывая что деления всегда на константу, его можно заменить одно тактовым умножением и МК это все быстро сделает.

Только тут возникает вопрос...

T1/T2-0.5 по идее должно выдавать -0.5 до +0.5, после чего этот делят на 0.04, то есть умножают на 25. и получаем диапазон -12.5 до +12.5. И как это число передавалось в ДСП с АЦП? врядли у вас была АЦП с реализацией плавающей точки...

 

Если не хотим МК, а хотим нормировать то можно так

А*5 == А*4+А. А*6 == А*4+А*2

все деление на константы можно заменить умножением, все умножение с плавающей точкой перевести в целочисленные умножения (изменив формат чисел), а уж любое целочисленное умножение можно заменить суммами и сдвигами!

 

Период у вас 2 кГц, при частоте 18МГц это 9000 тактов - то есть -0.5 ... 0.5 это если ничего не делать

-4500 ... +4500, умножаем это на 25, как А*16+А*8+А = -112500 +112500, это число и пере6давайте в ДСП, понимая что его надо на 9000 разделить, а лучше умножить на 1/9000, и получите нормированное -12.5 ... +12.5.

 

Можно помудрить с частотой и подобрать ее так чтобы период был степенью двойки, так еще проще будет...

 

Но я бы реализуя эту задачу сразу передавать -4500… +4500 и нормировать уже все сразу в ДСП, только если честно очень странное число 12.5, для ДСП обработки может стоит нормировать в другие диапазоны? почему 12.5 ?... допишите задачу целиком, какое стояло АЦП, какой был рефернц, какие приделы выдаваемого сигнала были у старых датчиков, наверняка вся ваша задача решается целочисленно.

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


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

Рассказываю: есть датчики с цифровым выходом ввиде ШИМ. Я ловлю этот сигнал(ПЛИСой) и по-хорошему выдаю на ДСП. Датчиков много - по-этому МК не подойдет. Только вот выдать я должен

X(t)=((T1/T2)-0.5)/0.04. На ДСП есть готовая прога(я ДСП плохо знаю). Раньше вместо ПЛИС стоял АЦП. Но и датчики были аналоговые...

ALTERA Cyclone EP1C3. Среда Квартус.

 

хмм /0.04 = *25 делаем на умножители, а отношение периодов на битовом делителе, если время позволяет. И еще проще берем пикоблейз и ставим из штук 100.

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


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

И еще проще берем пикоблейз и ставим из штук 100.

 

что есть пикоблейзер? и почему не проще делить в ДСП сразу?

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


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

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

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

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

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

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

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

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

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

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