ViKo 1 23 октября, 2015 Опубликовано 23 октября, 2015 · Жалоба Допустим, имеем ШИМ с периодом 1 мс. Читаем его 200 раз за период логическим входом микроконтроллера. Как теперь эти нули и единицы превратить в код, соответствующий скважности ШИМ? Например, создать длинный регистр, допустим, из 4096 битов. Задвигаем прочитанный вход в регистр, сдвигаем все биты, последний бит теряется. И вычисляем сумму всех битов. В-общем, скользящее среднее. Есть ли способ лучше? Можно ли улучшить данный алгоритм? Попутно вопрос - как на C определить и использовать длинный сдвиговый регистр? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
FatRobot 4 23 октября, 2015 Опубликовано 23 октября, 2015 · Жалоба Считать счетчиком интервал 1 и интервал 0. Как теперь эти нули и единицы превратить в код, соответствующий скважности ШИМ? работать с указателями на голову/хвост Попутно вопрос - как на C определить и использовать длинный сдвиговый регистр? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
kovigor 6 23 октября, 2015 Опубликовано 23 октября, 2015 · Жалоба Допустим, имеем ШИМ с периодом 1 мс. Скважность скачком меняется ? Если да, то сколько уровней скважности ? Два ? И еще, известны ли ожидаемые уровни заранее, или нет ? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ViKo 1 23 октября, 2015 Опубликовано 23 октября, 2015 · Жалоба работать с указателями на голову/хвост Сдвигать-то как? Обычные << потеряют выдвигаемый бит. То есть, надо брать старший бит из предыдущего слова, пихать его в младший бит текущего... и т.д. Да, еще и подсчитать единицы надо "правильным" алгоритмом, чтобы быстро. :rolleyes: Скважность скачком меняется ? Если да, то сколько уровней скважности ? Два ? И еще, известны ли ожидаемые уровни заранее, или нет ? Скважность меняется плавно. Всего уровней, может, и 1024, но мне хватит и 100. Уровни могут быть от полного 0 до полной 1. Это я сам задаю (и не только сам), хочу проверить реакцию. Нечто, вроде, логгера радиоуправляемой игрушки. Считать счетчиком интервал 1 и интервал 0. Да, можно и так. Измерять длительности единичных импульсов. Типа, обратный инженеринг ШИМ. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
АлександрК 0 23 октября, 2015 Опубликовано 23 октября, 2015 · Жалоба А если использовать для этого таймер? По фронту/спаду запускается таймер с временем счета больше периода ШИМ. По спаду/фронту считывается значение таймера. При следующем запуске таймера считывается конечное значение периода ШИМ и сбрасывается таймер для следующего периода ШИМ. Два значения таймера используете в расчетах как вам требуется. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ViKo 1 23 октября, 2015 Опубликовано 23 октября, 2015 · Жалоба А если использовать для этого таймер? По фронту/спаду запускается таймер с временем счета больше периода ШИМ. По спаду/фронту считывается значение таймера. При следующем запуске таймера считывается конечное значение периода ШИМ и сбрасывается таймер для следующего периода ШИМ. Два значения таймера используете в расчетах как вам требуется. Да, можно. Уже сказали. Задача становится тривиальной. А хотелось интересности. Так и надо делать. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Tanya 4 23 октября, 2015 Опубликовано 23 октября, 2015 · Жалоба Допустим, имеем ШИМ с периодом 1 мс. Читаем его 200 раз за период логическим входом микроконтроллера. Или я не врубаюсь, или одно из двух. С некоторым правильным (Вы его должны знать) периодом смотрим на вход - ждем перехода в 1, инкрементируем счетчик или не инкрементируем, а просто добавляем вход... И так 256 (к примеру) раз. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ViKo 1 23 октября, 2015 Опубликовано 23 октября, 2015 · Жалоба Или я не врубаюсь, или одно из двух. С некоторым правильным (Вы его должны знать) периодом смотрим на вход - ждем перехода в 1, инкрементируем счетчик или не инкрементируем, а просто добавляем вход... И так 256 (к примеру) раз. Тоже можно. Сбрасывать счетчик нулем на входе (перед сбросом сохранить). Когда на входе единица, инкрементировать. Опрашивать регулярно, по таймеру. Можно и отдельно считать нули и единицы, так еще надежнее будет. Сумма нулей и единиц даст период, отношение количества единиц к периоду даст скважность. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ViKo 1 23 октября, 2015 Опубликовано 23 октября, 2015 · Жалоба Можно и RC фильтром преобразовать в аналоговый сигнал и подать на АЦП. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
EvgenyNik 0 28 октября, 2015 Опубликовано 28 октября, 2015 · Жалоба Можно и RC фильтром преобразовать в аналоговый сигнал и подать на АЦП.Можно. Но сначала надо решить вопрос с требуемой точностью. Результат на выходе фильтра будет зависеть не только от заполнения ШИМ, но и от амплитуды генератора, а та, в свою очередь, может зависеть не только от стабильности источника питания, но и от напряжения на конденсаторе фильтра (если выход слабый). Опять же, автор не указал - насколько быстро меняется заполнение во времени. Фильтр даст усреднённое значение, фактически, за несколько периодов. А вдруг, у него ШИМ генерирует сложный процесс и ему нужен каждый период. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ViKo 1 28 октября, 2015 Опубликовано 28 октября, 2015 · Жалоба Быстро не меняется, не должно. Каждый импульс ШИМ мне отслеживать не нужно. Приблизительно, сотня импульсов будет неизменной. Да, амплитуда будет меняться. Питается от аккумулятора, до его разряда. Но это тоже будет плавное изменение. Мне же надо увидеть аномальное поведение. Вдруг ни с того, ни с сего изменяется режим работы. Хочу увидеть, это так ШИМ задает, или виновники другие (провод питания надорванный, например, есть и другие подозреваемые). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
SSerge 6 28 октября, 2015 Опубликовано 28 октября, 2015 · Жалоба Вы же с STM32 знакомы? У его таймеров есть режим PWM input mode. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ViKo 1 28 октября, 2015 Опубликовано 28 октября, 2015 · Жалоба Вы же с STM32 знакомы? У его таймеров есть режим PWM input mode. Знаком. Хочу применить простейший STM32F030CC. PWM Input - не помню, не было необходимости использовать. Посмотрю. Спасибо! Посмотрел. Да, годится! Вспомнил. :rolleyes: Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться