реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> Захватить ШИМ, преобразовать в код
ViKo
сообщение Oct 23 2015, 09:20
Сообщение #1


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



Допустим, имеем ШИМ с периодом 1 мс. Читаем его 200 раз за период логическим входом микроконтроллера. Как теперь эти нули и единицы превратить в код, соответствующий скважности ШИМ? Например, создать длинный регистр, допустим, из 4096 битов. Задвигаем прочитанный вход в регистр, сдвигаем все биты, последний бит теряется. И вычисляем сумму всех битов. В-общем, скользящее среднее.
Есть ли способ лучше? Можно ли улучшить данный алгоритм?
Попутно вопрос - как на C определить и использовать длинный сдвиговый регистр?
Go to the top of the page
 
+Quote Post
Fat Robot
сообщение Oct 23 2015, 09:28
Сообщение #2


ʕʘ̅͜ʘ̅ʔ
*****

Группа: Свой
Сообщений: 1 008
Регистрация: 3-05-05
Пользователь №: 4 691



Считать счетчиком интервал 1 и интервал 0.

Цитата(ViKo @ Oct 23 2015, 10:20) *
Как теперь эти нули и единицы превратить в код, соответствующий скважности ШИМ?


работать с указателями на голову/хвост

Цитата(ViKo @ Oct 23 2015, 10:20) *
Попутно вопрос - как на C определить и использовать длинный сдвиговый регистр?
Go to the top of the page
 
+Quote Post
kovigor
сообщение Oct 23 2015, 09:34
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 5 273
Регистрация: 30-03-10
Пользователь №: 56 295



Цитата(ViKo @ Oct 23 2015, 12:20) *
Допустим, имеем ШИМ с периодом 1 мс.

Скважность скачком меняется ? Если да, то сколько уровней скважности ? Два ? И еще, известны ли ожидаемые уровни заранее, или нет ?
Go to the top of the page
 
+Quote Post
ViKo
сообщение Oct 23 2015, 09:44
Сообщение #4


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



Цитата(Fat Robot @ Oct 23 2015, 12:28) *
работать с указателями на голову/хвост

Сдвигать-то как? Обычные << потеряют выдвигаемый бит. То есть, надо брать старший бит из предыдущего слова, пихать его в младший бит текущего... и т.д.
Да, еще и подсчитать единицы надо "правильным" алгоритмом, чтобы быстро. rolleyes.gif

Цитата(kovigor @ Oct 23 2015, 12:34) *
Скважность скачком меняется ? Если да, то сколько уровней скважности ? Два ? И еще, известны ли ожидаемые уровни заранее, или нет ?

Скважность меняется плавно. Всего уровней, может, и 1024, но мне хватит и 100. Уровни могут быть от полного 0 до полной 1. Это я сам задаю (и не только сам), хочу проверить реакцию. Нечто, вроде, логгера радиоуправляемой игрушки.

Цитата(Fat Robot @ Oct 23 2015, 12:28) *
Считать счетчиком интервал 1 и интервал 0.

Да, можно и так. Измерять длительности единичных импульсов. Типа, обратный инженеринг ШИМ. biggrin.gif
Go to the top of the page
 
+Quote Post
Александр1
сообщение Oct 23 2015, 09:47
Сообщение #5


Местный
***

Группа: Участник
Сообщений: 465
Регистрация: 13-05-15
Из: Запорожье
Пользователь №: 86 663



А если использовать для этого таймер?
По фронту/спаду запускается таймер с временем счета больше периода ШИМ. По спаду/фронту считывается значение таймера. При следующем запуске таймера считывается конечное значение периода ШИМ и сбрасывается таймер для следующего периода ШИМ. Два значения таймера используете в расчетах как вам требуется.
Go to the top of the page
 
+Quote Post
ViKo
сообщение Oct 23 2015, 09:49
Сообщение #6


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



Цитата(Александр1 @ Oct 23 2015, 12:47) *
А если использовать для этого таймер?
По фронту/спаду запускается таймер с временем счета больше периода ШИМ. По спаду/фронту считывается значение таймера. При следующем запуске таймера считывается конечное значение периода ШИМ и сбрасывается таймер для следующего периода ШИМ. Два значения таймера используете в расчетах как вам требуется.

Да, можно. Уже сказали. Задача становится тривиальной. А хотелось интересности.
Так и надо делать.
Go to the top of the page
 
+Quote Post
Tanya
сообщение Oct 23 2015, 09:51
Сообщение #7


Гуру
******

Группа: Модераторы
Сообщений: 8 752
Регистрация: 6-01-06
Пользователь №: 12 883



Цитата(ViKo @ Oct 23 2015, 12:20) *
Допустим, имеем ШИМ с периодом 1 мс. Читаем его 200 раз за период логическим входом микроконтроллера.

Или я не врубаюсь, или одно из двух. С некоторым правильным (Вы его должны знать) периодом смотрим на вход - ждем перехода в 1, инкрементируем счетчик или не инкрементируем, а просто добавляем вход... И так 256 (к примеру) раз.
Go to the top of the page
 
+Quote Post
ViKo
сообщение Oct 23 2015, 09:56
Сообщение #8


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



Цитата(Tanya @ Oct 23 2015, 12:51) *
Или я не врубаюсь, или одно из двух. С некоторым правильным (Вы его должны знать) периодом смотрим на вход - ждем перехода в 1, инкрементируем счетчик или не инкрементируем, а просто добавляем вход... И так 256 (к примеру) раз.

Тоже можно. Сбрасывать счетчик нулем на входе (перед сбросом сохранить). Когда на входе единица, инкрементировать. Опрашивать регулярно, по таймеру.
Можно и отдельно считать нули и единицы, так еще надежнее будет. Сумма нулей и единиц даст период, отношение количества единиц к периоду даст скважность.
Go to the top of the page
 
+Quote Post
ViKo
сообщение Oct 23 2015, 13:00
Сообщение #9


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



Можно и RC фильтром преобразовать в аналоговый сигнал и подать на АЦП.
Go to the top of the page
 
+Quote Post
EvgenyNik
сообщение Oct 28 2015, 07:13
Сообщение #10


Знающий
****

Группа: Свой
Сообщений: 597
Регистрация: 24-05-06
Из: г. Чебоксары
Пользователь №: 17 402



Цитата(ViKo @ Oct 23 2015, 16:00) *
Можно и RC фильтром преобразовать в аналоговый сигнал и подать на АЦП.
Можно. Но сначала надо решить вопрос с требуемой точностью. Результат на выходе фильтра будет зависеть не только от заполнения ШИМ, но и от амплитуды генератора, а та, в свою очередь, может зависеть не только от стабильности источника питания, но и от напряжения на конденсаторе фильтра (если выход слабый).
Опять же, автор не указал - насколько быстро меняется заполнение во времени. Фильтр даст усреднённое значение, фактически, за несколько периодов. А вдруг, у него ШИМ генерирует сложный процесс и ему нужен каждый период.


--------------------
Почему разработчики систем повышенной надёжности плохо справляются с простыми проектами? :)
Go to the top of the page
 
+Quote Post
ViKo
сообщение Oct 28 2015, 09:24
Сообщение #11


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



Быстро не меняется, не должно. Каждый импульс ШИМ мне отслеживать не нужно. Приблизительно, сотня импульсов будет неизменной.
Да, амплитуда будет меняться. Питается от аккумулятора, до его разряда. Но это тоже будет плавное изменение.
Мне же надо увидеть аномальное поведение. Вдруг ни с того, ни с сего изменяется режим работы. Хочу увидеть, это так ШИМ задает, или виновники другие (провод питания надорванный, например, есть и другие подозреваемые).
Go to the top of the page
 
+Quote Post
SSerge
сообщение Oct 28 2015, 14:47
Сообщение #12


Профессионал
*****

Группа: Свой
Сообщений: 1 719
Регистрация: 13-09-05
Из: Novosibirsk
Пользователь №: 8 528



Вы же с STM32 знакомы?
У его таймеров есть режим PWM input mode.


--------------------
Russia est omnis divisa in partes octo.
Go to the top of the page
 
+Quote Post
ViKo
сообщение Oct 28 2015, 14:54
Сообщение #13


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



Цитата(SSerge @ Oct 28 2015, 17:47) *
Вы же с STM32 знакомы?
У его таймеров есть режим PWM input mode.

Знаком. Хочу применить простейший STM32F030CC. PWM Input - не помню, не было необходимости использовать. Посмотрю. Спасибо!
Посмотрел. Да, годится! Вспомнил. rolleyes.gif
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 16th June 2025 - 21:01
Рейтинг@Mail.ru


Страница сгенерированна за 0.01504 секунд с 7
ELECTRONIX ©2004-2016