2014-07-22 3 views
0

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에 대한 많은 링크를 웹에서 찾았지만, 아직 아무것도 찾지 못했다. 이 큰 게시물에 대해 용서해주십시오. 가능한 한 많은 정보를 제공하려고 노력했습니다. 그러나, 누군가가 더 많은 것을 알고 싶거나 언급하지 않았다면 자유롭게 물어보십시오.

답변

1

프로그램에 많은 실수가 있습니다.

  1. arduino와 PC에 대해 서로 다른 설정을 적용했습니다.
  2. 정확한 파형을 얻고 있습니까? u는 그것을 언급하지 않았다.
  3. 또한 하드웨어 회로를 보냅니다.
  4. 이 시도해 볼 수 있습니다 f = [0 : N/2] * 500/N; f = f/.05