Преобразование случайных двоичных данных в сигнал ШИМ
Я использую Arduino Due. Я делаю проект по связи в видимом свете. Мне нужно преобразовать двоичные данные в сигнал ШИМ. Может ли кто-нибудь предложить мне метод генерации этого сигнала ШИМ на основе предоставленных двоичных данных?
Спасибо.
@Rohith Reddy, 👍0
3 ответа
Подсчитайте время, в течение которого сигнал находится на высоком уровне в течение определенного периода, и используйте соотношение времени включения к периоду в качестве рабочего цикла для сигнала ШИМ.
Итак, если вам просто нужно преобразовать двоичные данные в сигнал ШИМ, вам нужно учесть несколько вещей:
Если двоичные данные, которые вы получаете от датчика, являются линейными или нелинейными.
Каков размер двоичного байта. Пример: int (16 бит), char (8 бит), long (32 бита).
Если он линейный, то если данные умножить на какое-то число, будет выведено значение от 0 до 255.
Если данные нелинейны, вам просто нужно создать гигантский массив со значением интенсивности ШИМ напрямую, без какой-либо конкретной математической функции. Пример: массив[1024] = {0,1,1,2,3,4,5,5,6,6,10,9,...}; (1024 значения, потому что если вы используете аналоговый ввод. Тогда вы можете напрямую выводить значения из массива:
analogWrite(3,array[x]); //x — ваши данные
Вот линейный пример:
//map(value, fromLow, fromHigh, toLow, toHigh);
y = map(x, 0, 1023, 0, 255);
При этом y получит значение от 0 до 255. Вам просто нужно сначала выполнить простую последовательную программу, которая распечатает вам через последовательное окно Arduino двоичные данные и посмотрите, увеличиваются или уменьшаются данные в соответствии с вашим легким проектом.< /п>
Я не знаю о ваших уровнях программирования и о том, используете ли вы цифровой датчик или аналоговый датчик, но если вы используете цифровой датчик, то, вероятно, вы используете связь SPI или i2c. Затем вам просто нужно прочитать эти двоичные данные и определить, где находятся биты значений, с помощью побитовых манипуляций.
y=(x & (0xfff<<3))>>3;
Расскажите мне больше об источнике данных, о том, что это за данные и как они ведут себя, чтобы я мог вам больше помочь. Спасибо
Вместо того, чтобы создавать все с нуля, возможно, вы можете использовать какую-нибудь уже протестированную и отлаженную библиотеку Arduino, предназначенную для оптической связи в свободном пространстве, например
- Кен Ширрифф. "Многопротокольная инфракрасная удаленная библиотека для Arduino".
- A1RONZO в Sparkfun. "Учебное пособие по ИК-коммуникациям"
- Дэйв. "EEVblog #506 — Учебное пособие по протоколу Arduino с ИК-пультом дистанционного управления"
- "Многозадачная ИК-передача"
- "Универсальный пульт Arduino" (имеет двустороннюю связь, как отправку, так и прием)
- "Теория ИК-дистанционного управления" (ссылки на множество различных "стандартных" инфракрасных протоколов)
Практически все эти системы преобразуют произвольные двоичные данные в структурированные «кадры» или «пакеты» информации, включая своего рода контрольную сумму. Каждый пакет повторяется несколько раз; надеюсь, получатель поймает хотя бы один из них. Каждый бит пакета расширяется либо до «шаблона, представляющего 0 бит» (обычно светодиод выключается на весь бит), либо до «шаблона, представляющего 1 бит» (обычно светодиод мигает с частотой 38 кГц на весь бит). время, обычно с использованием ШИМ).
Чтобы сделать аппаратное и программное обеспечение проще и дешевле, большинство этих систем передают всего несколько десятков бит в секунду. Некоторые системы оптической связи в свободном пространстве предназначены для работы намного быстрее, например RONJA.
- Проблема с настройкой частоты ШИМ для Arduino Due
- Seeeduino СЯО запись и чтение ШИМ продолжительность (период) с помощью таймеров
- Протокол связи Arduino с python — помимо примера pyserial и Arduino
- Пример UDPSendReceiveString с использованием Arduino Due с Ethernet-модулем ENC28J60
- Как создать инвертированный ШИМ на Due с помощью программного обеспечения
- Преобразовать код Arduino MEGA в код Arduino DUE?
- Собственный USB-порт Arduino и Simulink
- Генерация комплементарного ШИМ с внешним триггером с помощью Arduino Due