延迟接口Arduino和Simulink

3
我正在尝试使用Arduino微控制器(尝试过Arduino UNO、Arduino FIO)从电位计读取数据,并通过串行通信接口将其接入Simulink(我尝试过的波特率范围为57600-921600)。
以下是Arduino源代码:
/*
  AnalogReadSerial
  Reads an analog input on pin 0, prints the result to the serial monitor.
*/
#define ana_pin A0 

void setup() {
  analogReference(DEFAULT);
  Serial.begin(57600);
}

// the loop routine runs over and over again forever:
void loop() {
  // read the input on analog pin 0:
  int sensorValue = analogRead(ana_pin);
  // print out the value you read:
  Serial.print(sensorValue);
 // delay(500);        // delay in between reads for stability
}

我将其与Tera Term软件进行了接口,相应的值在3V或0V时会立即更改。
但是,当我尝试使用仪器控制工具箱将其与Simulink模型进行接口时:

enter image description here

当数值从3V的ASCII表示方式变为0V时,存在10秒的延迟。

enter image description here

块的采样时间0.01秒,模型配置参数已相应调整(我尝试了1秒或更长时间,但延迟仍然存在。另外,我能够从另一个传感器和LPC1768开发板记录数据,没有任何延迟。我还尝试在Simulink中使用Arduino支持库:)

enter image description here

看起来没有接收到任何数据,如您可以从PNG文件中的Scope1看到,状态信号始终为0。我还附上了在Simulink中的Arduino块的硬件实现属性:

enter image description here

你能帮我理解发生了什么以及如何解决这个问题吗?


当您更改比特率时,延迟的长度是否保持不变? - Patrick Trentin
1
在Arduino的草图中,您应该尝试将Serial.print(sensorValue);替换为Serial.println(sensorValue);;这将添加一个终止字符\n(或Windows上的\r\n)。大多数串行函数等待特殊字符以知道传输何时结束。在您失败的情况下,我认为Simulink作用域具有10秒的超时时间。 - Arno Bozo
谢谢您的回复。如建议所述,我使用了Serial.println功能,并在仪器控制工具箱中设置了终止器为<\r\n>。然而,在感知值变化之间仍然存在10秒的延迟。使用Serial.println函数并在ICT中设置终止器为<none>,延迟增加了大约1秒(总延迟20秒)。从直觉上讲,这是可以理解的,因为延迟考虑了读取和显示'\r\n'的ASCII字符。因此,我相信延迟是由于arduino和simulink接口造成的。当我改变比特率时,滞后的长度是恒定的。 - Dimple Bhuta
1个回答

0
@Patrick Trentin - 当我使用波特率为230400、460800和921600时,会出现4秒的延迟。对于波特率为57600、115200,我会出现10秒的延迟。感谢你指出这一点,我之前没有注意到。然而,由于我将在一个需要每0.01秒准确读取数据的应用程序中使用该传感器,我认为无法接受4秒的延迟。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接