snedelko 0 5 мая, 2006 Опубликовано 5 мая, 2006 · Жалоба Подсобите алгоритмом или кодом для реализации захвата ШИМ сигнала. То есть подсчет скважности. Кто чем сможет. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
o-henry 0 5 мая, 2006 Опубликовано 5 мая, 2006 · Жалоба Делаем счетчик тактовых импульсов. На каждом такте пока на входе ШИМ стоит 1 увеличиваем значение счетчика. При переходе сигнала ШИМ из 1 в 0 переписываем значение счетчика на выход и сбрасываем счетчик. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
snedelko 0 5 мая, 2006 Опубликовано 5 мая, 2006 · Жалоба А как определить ресурсы для счетчика(сколько тригеров чтоли). У меня внешняя синхронизация ~18МГц, а частота ШИМа ~2кГц. Т.е. предполагаю что 14. Я не цифровик и плохо ориентируюсь в том, скоко логики требуется для какого либо текста VHDL. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
o-henry 0 5 мая, 2006 Опубликовано 5 мая, 2006 · Жалоба А как определить ресурсы для счетчика(сколько тригеров чтоли). У меня внешняя синхронизация ~18МГц, а частота ШИМа ~2кГц. Т.е. предполагаю что 14. Я не цифровик и плохо ориентируюсь в том, скоко логики требуется для какого либо текста VHDL. Если вы имели в виду разрядность счетчика - при таком соотношении частот счетчик действительно должен быть 14 разрядным. Посмотреть сколько ресурсов съедает VHDL описание блока можно в отчете по синтезу в Вашей среде разработки. В Xilinx ISE это делается так: В окне Sources выбираем требуемый VHDL файл, затем в окне Processes дважды щелкаем по пункту View Synthesis Report. В открывшемся файле смотрим раздел Device utilization summary Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
snedelko 0 6 мая, 2006 Опубликовано 6 мая, 2006 · Жалоба А смогу ли я добиться уменьшения его разрядности предварительно поделив где-то внешний клок. И затем синхронизировать счетчик от него? Наверно это или еще один счетчик, или PLL. И вообще где-нибудь можно глянуть текст кода VHDL: делитель частоты больше чем на два? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
o-henry 0 6 мая, 2006 Опубликовано 6 мая, 2006 · Жалоба А смогу ли я добиться уменьшения его разрядности предварительно поделив где-то внешний клок. И затем синхронизировать счетчик от него? Наверно это или еще один счетчик, или PLL. конечно можно. Если есть возможность использовать встроенный в FPGA PLL, частоту входного сигнала тактирования лучше делить/умножать именно на нем. И уже с выхода PLL раздавать клок на все внутренние блоки. И вообще где-нибудь можно глянуть текст кода VHDL: делитель частоты больше чем на два? Простейший делитель частоты и есть счетчик. на выходе младшего разряда - Fin/2, второго разряда - Fin/4 и т.д. Простейший пример счетчика - в прикреплении. counter.vhd.txt Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
=AK= 12 6 мая, 2006 Опубликовано 6 мая, 2006 · Жалоба А смогу ли я добиться уменьшения его разрядности предварительно поделив где-то внешний клок. И затем синхронизировать счетчик от него? Наверно это или еще один счетчик Конечно. Какжый разряд счетчика требует одного триггера ресурсов. И в этом смысле неважно, делит ли этот триггер входной клок или входит в состав другого счетчика, ресурсы в общем-то те же. Однако становятся важными другие обстоятельства. Если все работает от одного клока, то меньше вероятность ошибок, а софт может легко выловить ошибки во времянках. Поэтому лучше клок не делить, если можно. И вообще где-нибудь можно глянуть текст кода 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; Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
snedelko 0 6 мая, 2006 Опубликовано 6 мая, 2006 · Жалоба Спасибо за инфу. Буду переваривать. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
snedelko 0 6 мая, 2006 Опубликовано 6 мая, 2006 · Жалоба Значит вроде счетчик я сделал. Только мне надо считать скважность ШИМ. А точнее ((T1/T2)-0.5)/0.04. T1- то что я насчитал. Т2-период ШИМ, берем константой. Как я понял умножать/делить можно числа степени двойки(значит не подходит). Нужно наверно пробовать функции из модуля MATH? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
=AK= 12 7 мая, 2006 Опубликовано 7 мая, 2006 · Жалоба Нафига ((T1/T2)-0.5)/0.04 считать в плисине? Отправить измеренное T1 "наверх", в мелкоконтроллер или в писюк, пусть они считают чего им надо. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
o-henry 0 7 мая, 2006 Опубликовано 7 мая, 2006 · Жалоба В общем, поддерживаю =AK=. Если есть возможность - лучше не делать мат. вычислений в ПЛИС - накладно по ресурсам да и геморойно. Хотя неплохо бы иметь представление о проекте в целом и железе, на котором предполагается его реализация. Я так понимаю, что Ваш "измеритель скважности" - небольшой блок в некотором устройстве. Так что (хоть примерно) должно делать ваше устройство? Какими выч. средствами оно располагает: только ПЛИС - индикатор, ПЛИС-контроллер, ПЛИС-ПК или еще что-то? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
snedelko 0 7 мая, 2006 Опубликовано 7 мая, 2006 · Жалоба Рассказываю: есть датчики с цифровым выходом ввиде ШИМ. Я ловлю этот сигнал(ПЛИСой) и по-хорошему выдаю на ДСП. Датчиков много - по-этому МК не подойдет. Только вот выдать я должен X(t)=((T1/T2)-0.5)/0.04. На ДСП есть готовая прога(я ДСП плохо знаю). Раньше вместо ПЛИС стоял АЦП. Но и датчики были аналоговые... ALTERA Cyclone EP1C3. Среда Квартус. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Golikov 0 10 мая, 2006 Опубликовано 10 мая, 2006 · Жалоба Рассказываю: есть датчики с цифровым выходом ввиде ШИМ. Я ловлю этот сигнал(ПЛИСой) и по-хорошему выдаю на ДСП. Датчиков много - по-этому МК не подойдет. Только вот выдать я должен 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 ?... допишите задачу целиком, какое стояло АЦП, какой был рефернц, какие приделы выдаваемого сигнала были у старых датчиков, наверняка вся ваша задача решается целочисленно. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
des00 25 10 мая, 2006 Опубликовано 10 мая, 2006 · Жалоба Рассказываю: есть датчики с цифровым выходом ввиде ШИМ. Я ловлю этот сигнал(ПЛИСой) и по-хорошему выдаю на ДСП. Датчиков много - по-этому МК не подойдет. Только вот выдать я должен X(t)=((T1/T2)-0.5)/0.04. На ДСП есть готовая прога(я ДСП плохо знаю). Раньше вместо ПЛИС стоял АЦП. Но и датчики были аналоговые... ALTERA Cyclone EP1C3. Среда Квартус. хмм /0.04 = *25 делаем на умножители, а отношение периодов на битовом делителе, если время позволяет. И еще проще берем пикоблейз и ставим из штук 100. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Golikov 0 10 мая, 2006 Опубликовано 10 мая, 2006 · Жалоба И еще проще берем пикоблейз и ставим из штук 100. что есть пикоблейзер? и почему не проще делить в ДСП сразу? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться