使用MATLAB通过同一端口发送多个串行信号

时间:2013-09-02 09:53:47

标签: matlab serial-port microcontroller multiplexing interfacing

我想从笔记本电脑向微控制器发送多个信号(4个输入和输出以及7个输出)。我正在考虑使用USB转串口转换器并通过端口复用数据。我需要在笔记本电脑端和微控制器中编写代码来复用数据。

例如: 微控制器的Tx: 1.温度传感器ADC输出 - >笔记本电脑 2.笔记本电脑的电压传感器 3.电流传感器到笔记本电脑 4.Photodiode current to Laptop

所以我需要在微控制器中编写一个程序来按顺序发送数据。我怎么能做到这一点? 我在考虑一个无限循环,它会在数据之间发送时间延迟。

在微控制器的Rx引脚上,

七位序列。每个位序列将用于设置微控制器产生的PWM的占空比。

我还需要在matlab端进行相同的多路复用或多路分解。在这里,我也想到在不同的时刻分配一些虚拟的“频道”。 我需要什么样的算法?

1 个答案:

答案 0 :(得分: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

这个方案可以用于双向通信。