代码之家  ›  专栏  ›  技术社区  ›  Analon

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

  •  0
  • Analon  · 技术社区  · 11 年前

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

    如: 微控制器的Tx: 1.温度传感器ADC输出->笔记本电脑 2.电压传感器到笔记本电脑 3.笔记本电脑的电流传感器 4.笔记本电脑的光电二极管电流

    所以我需要在微控制器中编写一个程序,以按此顺序发送数据。我如何才能做到这一点? 我想到的是一个无限循环,它发送数据时会有时间延迟。

    在微控制器的Rx引脚处,

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

    我在matlab端也需要相同的多路复用或多路分解安排。在这里,我也在考虑在不同的时刻分配一些虚拟的“通道”。 我需要什么样的算法?

    1 回复  |  直到 11 年前
        1
  •  0
  •   Bas Swinckels    11 年前

    如果您总是以相同的速率发送所有输入/输出,您可以简单地将它们打包成“数据包”,这些数据包总是以一个或多个具有固定值的字节开头,这些字节形成“数据包头”。唯一的风险是,在您尝试开始接收字节但尚未同步时,传感器数据的一个字节可能与起始字节具有相同的值。您可以通过使标头更长,或者选择传感器非法输出的起始字节(通常为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
    

    这种相同的方案可以用于两个方向上的通信。