【发布时间】:2014-10-05 17:04:23
【问题描述】:
我一直在尝试通过 arduino uno 读取模拟信号并在 MATLAB 中绘制它们。当我从函数发生器给出我的输入波并尝试绘制它时,绘制的信号不正确,例如输入正弦波没有给出正弦波。可能的原因是什么?是否需要外接电路才能流畅阅读?
ARDUINO 代码
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)
【问题讨论】:
-
请发布您的代码。
-
ARDUINO 代码 void setup() { Serial.begin(9600); } void loop() { int a=analogRead(A0);序列号.println(a);延迟(1); }MATLAB 代码 s=serial('COM3','BaudRate',9600); fopen(s) x=1:100; n=1;而 n==1 对于 i=1:length(x) tmp=fscanf(s,'%d');如果长度(tmp)>1 继续;结束 y(i)=tmp;结束 y=y/1024*5; ylim([0 5]); plot(x,y) drawow end fclose(s)
-
下一次,请将代码添加到问题中而不是 cmets,因为它难以阅读。因此,您通过串行连接以 9,600 波特率采集 100 个数据点。你输入的正弦波频率是多少?你在 MATLAB 中得到什么输出?顺便说一句,看起来你的
while循环将永远运行...... -
好吧,我尝试了高达 1khz 的频率。输出非常失真,无论作为输入给出的函数如何,它都类似于三角形。是的,虽然是无限循环,因为我想像在原始图中一样实时绘图示波器
-
为了调试目的,只获取一个周期的数据并在数据采集完成后尝试绘制它可能是值得的。一旦你得到这个工作,你就可以继续“实时”绘制和连续采集数据。听起来您在混叠,即没有以足够快的采样率采集数据。
标签: matlab arduino-uno analog-digital-converter