Arduino Uno与Matlab串行通信
我面临着Arduino Uno和Matlab之间的问题。其想法是在Arduino的模拟引脚上连接一个正弦发生器,进行a/D转换,并将结果发送到Matlab进行进一步处理(滤波和FFT)。频率将在10至20 Hz之间变化 第一件奇怪的事情是,Arduino串行终端的值只能在19200波特率下看到,尽管在下面的代码中波特率定义为9600。当我试图改变终端的波特率时(回到9600),我只看到垃圾值 第二件奇怪的事情是,当我在10和20赫兹之间改变频率时,序列输出的值看起来不像是正弦信号。但是,当频率稳定在20 Hz或10 Hz时,输出稳定 这是在Arduino上运行的代码:Arduino Uno与Matlab串行通信,matlab,arduino,Matlab,Arduino,我面临着Arduino Uno和Matlab之间的问题。其想法是在Arduino的模拟引脚上连接一个正弦发生器,进行a/D转换,并将结果发送到Matlab进行进一步处理(滤波和FFT)。频率将在10至20 Hz之间变化 第一件奇怪的事情是,Arduino串行终端的值只能在19200波特率下看到,尽管在下面的代码中波特率定义为9600。当我试图改变终端的波特率时(回到9600),我只看到垃圾值 第二件奇怪的事情是,当我在10和20赫兹之间改变频率时,序列输出的值看起来不像是正弦信号。但是,当频率稳
int values;
float voltage;
void setup() {
// put your setup code here, to run once:
Serial.begin(9600);
}
void loop() {
values = analogRead(1);
float voltage = values * (1.0/1023);
Serial.println(voltage, 3);
delay(200);
}
这是在Matlab上运行的代码:
clc;
clear all;
close all;
s = serial('COM12');
set(s, 'InputBufferSize', 1024);
set(s, 'FlowControl', 'none');
set(s, 'BaudRate', 19200);
set(s, 'Parity', 'none');
set(s, 'DataBits', 8);
set(s, 'StopBit', 1);
set(s, 'Timeout',4);
disp(get(s,'Name'));
prop(1)=(get(s,'BaudRate'));
prop(2)=(get(s,'DataBits'));
prop(3)=(get(s, 'StopBit'));
prop(4)=(get(s, 'InputBufferSize'));
disp(['Port Setup Done!!',num2str(prop)]);
fopen(s); %opens the serial port
disp('Running');
buf_len = 1024;
index = 1:buf_len;
Raw = zeros(size(index));
Data = zeros(size(index));
Fs = 200;
T = 1/Fs;
while 1
Raw = fscanf(s,'%f');
disp(num2str(Raw));
Data = [Data(2:end),Raw];
subplot(2,1,1);
plot(Data);
xlabel('Number of Samples');
ylabel('Amplitude');
axis normal;
drawnow;
N = length(Data);
f = [0:N/2]*Fs/N;
FFT = 2*abs(fft(Data))/N;
subplot(2,1,2);
plot(f, FFT(1:N/2+1));
xlabel('Frequency');
ylabel('Amplitude |Xf|');
axis normal;
drawnow;
最后一件奇怪的事情是,尽管发电机产生20 Hz的正弦信号,但FFT图显示了不同频率(8和18 Hz)的信号。我想我应该看到一个20赫兹的信号。使用示波器验证发电机输出
我想有人帮我澄清这个问题。我很困惑,我已经在网上搜索了好几个星期的链接,但什么都没有。请原谅我发这么大的帖子。我尽力提供尽可能多的信息。但是,如果有人想知道更多的事情,或者如果我没有提到任何事情,请随时提问 您的程序有很多错误