0

Я бы хотел отправить несколько сигналов (4 входа и выхода и 7 выходов) с моего ноутбука на микроконтроллер. Я подумываю использовать USB-последовательный преобразователь и мультиплексировать данные через порт. Мне нужно будет написать коды как в конце ноутбука, так и в микроконтроллере для мультиплексирования данных.Использование MATLAB для отправки нескольких последовательных сигналов через один и тот же порт

Например: Tx микроконтроллера: 1.Temperature датчик ADC output-> Ноутбук датчик 2.Voltage для ноутбука 3.Current Датчик для ноутбука 4.Photodiode тока для ноутбуков

Так что мне нужно напишите программу в микроконтроллере, чтобы отправить данные в этом порядке. Как я могу это сделать? Я думал о бесконечном цикле, который отправляет данные с задержками времени между ними.

В Rx штифтом микроконтроллера,

Семь битовые последовательности. Каждая битовая последовательность будет использоваться для установки рабочего цикла ШИМ, генерируемого микроконтроллером.

Мне также нужно одно и то же устройство мультиплексирования или демультиплексирования в конце matlab. Здесь тоже я собираюсь выделить некоторые виртуальные «каналы» в разные моменты времени. Какой алгоритм мне нужен?

ответ

0

Если вы всегда отправляете все входы/выходы с одинаковой скоростью, вы можете просто упаковать их в «пакеты», которые всегда начинаются с одного или нескольких байтов с фиксированным значением, которое формирует «заголовок пакета». Единственный риск состоит в том, что один из байтов данных датчика может иметь то же значение, что и начальный байт, когда вы пытаетесь начать получать байты, и вы еще не синхронизированы. Вы можете уменьшить этот риск, сделав заголовок более длинным или выбрав стартовый байт, который является незаконным выходом для датчиков (как правило, OxFF или так).

Передающая петля на микроконтроллере очень легко (псевдокод):

while True: 
    measure_sensors() 
    serial.send(START_BYTE) 
    serial.send(temperature) 
    serial.send(voltage) 
    serial.send(current) 
    serial.send(photodiode) 
end while 

Принимающей петля немного сложнее, так как необходимо синхронизировать первым:

while True: 
    data = serial.receive() 
    if data != START_BYTE: 
     print 'not synced' 
     continue #restart at top of while 
    end if 
    temperature = serial.receive() 
    voltage = serial.receive() 
    current = serial.receive() 
    photodiode = serial.receive() 
    do_stuff_with_measurements() 
end while 

Эту же схема могут использоваться для связи в обоих направлениях.

Смежные вопросы