如何在matlab中绘制来自arduino的输入模拟信号

时间:2014-10-05 17:04:23

标签: matlab arduino-uno analog-digital-converter

我一直试图通过arduino uno读取模拟信号并在MATLAB中绘制它们。当我从函数发生器给出输入波并尝试绘制它时,绘制的信号不正确,例如输入正弦波没有给出正弦波。可能的原因是什么?我是否需要任何外部电路才能顺利读取?

ARDUINO CODE

void setup() 
{ Serial.begin(9600); } 
void loop() 
{ 
int a=analogRead(A0); 
Serial.println(a); 
delay(1); 
}

MATLAB代码

s=serial('COM3','BaudRate',9600); 
fopen(s) 
x=1:100; 
n=1; 
while n==1 
   for i=1:length(x) 
       tmp=fscanf(s,'%d'); 
       if length(tmp)>1 
          continue; 
       end 
       y(i)=tmp; 
   end 
   y=y/1024*5; 
   ylim([0 5]); 
   plot(x,y) 
   drawnow 
   end 
fclose(s) 

1 个答案:

答案 0 :(得分:1)

只有一个问题:你有没有研究过信号理论?奈奎斯特定理?

您正在获取1点(100 us),然后通过PRINTLN通过串行连接(每个字节10位)发送它! (所以你发送例如6个字节,即“1023”+ CR + LF)。所以60字节,9600 bps,超过6 ms。我们假设每个点都是7毫秒。

现在你有一个1千赫的波。所以你从波浪中取出一个样本,然后等待其中的6个通过然后再取一个点。所以你永远无法看到任何东西。

如果你想看到你的波浪尝试每波最少10点(即不要超过15赫兹)。如果你想看到更好的波形,尝试使用正弦插值而不是普通插值。