Arduino Uno와 Matlab 사이에 문제가 있습니다. 아이디어는 Arduino의 아날로그 핀에서 사인 곡선 생성기를 연결하고, A/D 변환을 수행하고, 추가 프로세싱 (필터링 및 FFT)을 위해 Matlab에서 결과를 전송하는 것입니다. 주파수는 10 ~ 20Hz 사이에서 다양합니다.Arduino Uno 및 Matlab 직렬 통신
첫 번째 이상한 점은 다음 코드에서 보오율이 9600으로 정의되었지만 Arduino의 시리얼 터미널 값이 19200 보레이트에서만 볼 수 있다는 것입니다. 터미널 (다시 9600), 난 단지 정크 값을 참조하십시오.
두 번째 이상한 점은 10 ~ 20Hz 간격으로 주파수를 변경하면 직렬 신호가 부비동 신호처럼 보이지 않는 값을 인쇄한다는 것입니다. 그러나 주파수가 20Hz 또는 10Hz에서 안정적이면 출력이 안정적입니다.
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에서 생산하고 있다는 사실에도 불구하고 sinus 신호에서 FFT 그래프는 다른 주파수 (8 및 18 Hz)에서 신호를 보여줍니다. 나는 20Hz에서 하나의 신호를 보았다고 생각한다. 생성기 출력은 오실로스코프를 사용하여 검증됩니다.
이 문제를 명확히 설명 할 수있는 사람을 부탁드립니다. 나는 혼란 스럽다. 나는 WEEKS에 대한 많은 링크를 웹에서 찾았지만, 아직 아무것도 찾지 못했다. 이 큰 게시물에 대해 용서해주십시오. 가능한 한 많은 정보를 제공하려고 노력했습니다. 그러나, 누군가가 더 많은 것을 알고 싶거나 언급하지 않았다면 자유롭게 물어보십시오.