로그인회원등록 내글장바구니주문조회현재접속자
 상품 검색








 게시판 검색





 
 
회원등록 비번분실


온라인 입금계좌
ㆍ기업은행
ㆍ219-043192-01-028
ㆍ이건영

      거래은행 바로가기
 
 Sensor Applications
아듀이노 응용소스
작성자 avrtools™        
작성일 2018/01/30
첨부#1 due-FFT-analyzer-V2.zip (2,609KB) (Down:0)
첨부#2 Weidmann-arduino.zip (57KB) (Down:0)
ㆍ추천: 0  ㆍ조회: 247   
  DUE SAM3X8E Audio FFT Analyzer 제작
 참조 사이트 : DUE Audio FFT Anlyzer Soucrce Code
 첨부파일 #1 : Arduino DUE soucr-code for Audio FFT Analyzer
 첨부파일 #2 : Ardubo Library Split Radix Real Power <SplitRadixRealP.h> +<UTFT.h>
 
 PC Speaker와 DUE의 A0를 연결하여 FFT 작동을 확인하고 있다.
 

 Arduino DUE를 사용한  Split Radix Real Power FFT Analyzer의 제작
Arduino DUE는 Atmel사의 ARM core SAM3X8E를 장착한 32 bit 개발기판이다.
소프트웨어 개발환경은 Arduino IDE 혹은 Atmel사의 AVR Studio를 사용할 수 있다.
 
 Arduino DUE 개발기판(12,000원) 84MHz clock으로 작동하는 SAM3X8E를 장착. 

개발환경의 설정이나 라이브러리의 입수 등 장점을 보면 Arduino가 매우 편리하다.
우선 하드웨어가 표준화되어 있고, 개발환경을 특별히 설정할 필요가 전혀없다.

 
UNO와 개발환경이나 compiler가 완전히 동일하며, 속도가 빠른 32 Bit MPU 라고 생각하면 된다.
단순하게 UNO는 8 비트이고 DUE는 32 비트이므로 4 배 정도 빠르다고 생각하면 된다.

물론 주변장치의 ADC, DAC, DMA, Timer도 4배 이상 빠르다. Flash나 SRAM도 용량이 크다. 
UNO를 사용하던 실력이면 충분하다. 바로 DUE 기판만 사서 사용하면 된다.

인터넷이 연결되어 있으면, Tool-> Borad Manager ->보드관리 ->찾기창 -> DUE 라고 찾으면, 이렇게 나온다.
버전을 최신버전으로 맞추고 설치를 누르고 기다리면 자동으로 보드추가 설치가 끝난다
.
 

 DUE의 간단한 사용설명 (USB 포트가 2개이고, 누름 switch가 2 개다.
우측에 +5V 2핀, D22~D53의 32개의 포트핀, GND 2핀이 추가된 36 핀 커넥터가 추가되어 있다.
이 커넥터는 Arduion Display Shield를 사용하면 이커넥터 위에 바로 장착할 수 있다.  
그러나 대부분의 정품 color graphic GLCD는 가격이 비싸거나 성능이 떨어진다.
 
USB  Native : Bossa Serial Port라고 나온다. 별도의 Driver는 필요없다.
혹시 설치가 안되면, Driver Upgarde에서 c:>Program Files(X86) >Arduino>Library에서 Arduino.inf를 사용한다.
USB Programing Port ---> Arduino DUE Programming Port 라고 나온다. (FT232를 사용한 정품만 해당)
 
정품이 아니면, DUE 기판에 있는 USB-Serial IC에 따라  IC의 USB Serial Driver를 반드시 설치해야 한다.
주의 : 꼭 맞는 Driver를 설치해도 설치는 되는데, 사용할 수 없음이 나오면, USB Cable 문제다. 

그러다면 2개의 USB포트 중에서 어느것을 사용해야 하는가? 2 포트 모두 문제는 조금씩 있다.

Native Programming Port : 원래 Host USB 포트이다. PC처럼 USB 주변장치를 연결하는 용도이다.
Upload 할때 포트가 죽었다 살았다 한다. 포트번호가 바뀌기도 한다. 그러나 Upload 이후에 자동 Reset이 된다.

DUE Programming Port : 정식 Progamming Port이다. 이것을 사용한다. Upload 이후에 수동 Reset을 해야한다.
그러나 Porgramming USB 포트는 Firmware가 Upload된 이후에도 Power-on Reset이 안되는 포트다. 

 EK-096 (9,000 원)을 구입하여, 다음과 같이 연결해서 사용할 수 있다.
EK-096은 SPI interface와 LED back-light가 들어있다. 저가품이라 touch screen은 없다. 

  
좌측은 5핀으로 뒷면에 장착된 SD card 커넥터이며, GLCD에서 image load용으로 사용된다.
우측은 9핀으로 SPI interface이고 전원과 back-light를 연결한다.

 
 9핀 커넥터의 SPI 연결방법
1 번 =VCC ---> 전원 (DUE는 3.3V 전용이다, 모든 주변장치도 3.3V를 사용해야 한다.)
2 번 =GND ---> 접지
3 번 =CS   ---> Chip Select (GLCD에 들어있는 IC 칩을 선택한다)
4 번 =RST ---> Reset (GLCD를 Reset 한다)
5 번 =DC/RS ---> Data/Control 혹은 Register Select (Data 혹은 Register를 선택한다)
6 번 =SDI/MOSI ---> LCD로 들어가는 SPI 직렬 Data 입력 핀
7 번 =SCK/SCL ---> LCD로 들어가는 SPI 직렬 Data 입력용 Clock
8 번 =LED ---> LED-A 핀으로 +3.3V 혹은 +5V에 연결하여 back-light를 점등한다. (직렬 저항이 필요하다)
9 번 =SDO/MISO ---> LCD에서 SPI 직렬 Data가 나오는 핀 (사용하지 않는다)
 
전원과 Back-light LED-A 핀, 그리고 안쓰는 핀을 제외하면, SPI 연결에 필요한 핀은 3~7 번으로 5 핀이다.   
Arduino GLCD용 Library는 EK-096 규격을 보면 ILI9341 320x240 이라고 표시되어 있다.
 
Library는 <UTFU.h>를 사용한다. Library의 선언은 GLCD subroutine이 소스에 추가된다.
UTFT.cpp를 보면, ILI9341는 4 핀과 5 핀 연결방법이 있다. 5핀을 사용해야 한다.
 
사용방법은 UTFT(Model, SDA, SCL, CS, RST, [RS]), [RS] option 이라고 나온다.
320*240 EK-096을 위한 <UTFT.h> 사용방법은 UTFT(model, SD, SCK, CS, RST, RS) 이다.
DUE의 47~49번 핀을 사용하려고 한다. 물론 다른 핀을 사용해도 전혀 문제없이 잘 된다.
 
 참조 사이트 : Rinky Dink Electronics.com의 UTFT Library
이 Libary는 Arduino의 GLCD용으로 매우 유명한 Library다.

UTFT Library를 받아서 압축을 풀고, 포더를 통째로  >사용자>문서>Arduino>Library> 안에 복사해 준다.
같은 이름의 다른 Library가 있으면, 추가하는 Library의 폴더 이름만 바꾸어 넣으면 된다.
이렇게 Library만 추가하고, Arduino IDE를 실행하면 자동으로 추가된 Library를 인식한다.

먼저 GLCD EK-096에 연결할 SPI 핀을 다음과 같이 정의한다.
#define LCD_CS 49   // CS (LCD-PIN-3)
#define LCD_RST 47  // RESET (LCD-PIN-4)
#define LCD_DC 45   // RS (LCD-PIN-5)
#define LCD_SDI 43  // MOSI (LCD-PIN-6)
#define LCD_SCK 41  // SCL (LCD-PIN-7)

 
Library UTFT.h를 다음과 같이 정의한다.
  
#include <UTFT.
h>
UTFT myGLCD(ILI9341_S5P, LCD_SDI, LCD_SCK, LCD_CS, LCD_RST, LCD_DC);
extern uint8_t SmallFont[];         // Small Font <--- 작은 끌꼴(font) 사용
extern uint8_t BigFont[];           // Big   Font <--- 큰 글꼴(fomt) 사용
extern uint8_t SevenSegNumFont[];   // SevenSegNumFont <--- LED 숫자 표시형 큰 글꼴(숫자 10개)

 
 EK-096 GLCD의 9 핀 커넥터 (좌측은 SD 카드용 5 핀-사용 안함, 우측은 GLCD용 SPI 9 핀)
  
 DUE로 만든 Audio FFT Analizer의 작동화면 
 

PC에서 MP3를 틀어도 Audio 이므로 15KHz 이하만 나온다. 15 KHz 이상은 Generator가 필요하다.
Smartphone에 Audio Generator를 설치하고 20KHz Sinewave를 출력하면 FFT 화면에 나온다.
 
 Smartphone에 App을 설치하면 Audio Generator로 쓸 수 있다. (훌륭한 apk다. 작동 잘됨)
 
 
 1KHz Squarewave를 시험하면, 1, 3, 5, 7, 9 KHz의 홀수 고조파(Harmonics) 들을 볼 수 있다.
 
 
짝수 고조파는 기본파와 위상이 충돌하여 소멸되고, 홀수 고조파만 남는다. FFT에서 확인할 수 있다.
이걸 보면 FFT가 정상적으로 주파수 Spectrum을 분석하는지 확인 할 수 있는 방법이기도 하다.
 
 MP3 Audio-wave의 FFT 측정화면
 
 
우리가 듣는 음악이나 음성은 15 KHz 이하이다. 15 KHz 이상은 사람이 들을 수 없다.
좌측의 청색 눈금(Scale)은 입력신호의 주파수별 진폭이다. 100%는 3.3Vpeak 이다. 
아래의 백색 눈금은 FFT로 분석한 주파수 [KHz]이다. 적색 눈금은 가청주파수가 아니다


 Split Radix Real Power 라이브러리 <SplitRadixRealP.h>
FFT는 ADC로 검출한 진폭/시간 파형을 Split Radix Real Power 분석으로 진폭/주파수를 찾을 수 있다.

Split Radix Real 분석과 Split Radix Real Power 분석 방법이 있는데,
Split Radix Real Power는 분석이 빠르지만, 위상검출이 정확하지 않으므로 주로 Decoration 용이다.
Split Radix Real 분석은 느리지만,  위상검출이 정확하므로 단일 주파수의 진폭과 위상을 검출하는 계측용이다.
 
Split Radix Real 분석: 하나의 진폭으로 통합된 진폭-시간(Time Domain) 신호는,
각각의 Sinewave 주파수로 분리하면, 주파수 영역(Frequency Domain)에서 진폭-주파수로 표현할 수 있다.   
-완벽한 Squarewave는 무한한 순수 Sinewave 들의 완벽한 합성파형이다- 그러므로 분리도 가능하다.

 Split Radix Real Power -FFT Library의 성능
Arduino DUE에서 10 Hz 이하를 제외하면 1-2 % 의 오차로 주파수 성분분석을 할 수 있다.
22 khz 2048 샘플 ---> 5 khz 100mvPP 진폭, 19 개의 주파수 ---> 22khz/2048*465 = 4995Hz
22 khz 2048 샘플 ---> 5 khz 400mvPP 진폭, 1299 개의 주파수 --->22khz/2048*465 = 4995Hz
22 khz 2048 샘플 ---> 250 hz 400mvPP 진폭, 142 개의 주파수 --->22khz/2048*23 = 247Hz
22 khz 2048 샘플 ---> 88 hz 400mvPP 진폭, 149 개의 주파수 ---> 22khz/2048*8 = 86Hz
22 khz 2048 샘플 ---> 400 hz+5 kHz 400mvPP 진폭, 47/42 개의 주파수 --->397Hz/4995Hz


분석 조건 :  Hamng 954, Revb 879, SplitRR 3976, GainR 318, Sqrt 5004, Sqrt2 454,
DUE의 ADC의 샘플링 Interrupt는 22 kHz로, 12 Bit 분해능이다. FFT는 2048  샘플링의 검출시간은 13 ms이다.
참고로 DEO의 SAM3X8E MPU는 ARM Coretex M3계열이다. Clock은 12MHz Oscillator를 장착하고,
내부 PLL에서 84MHz로 작동한다. ADC는 12비 트 8 개, DAC는 12 비트 2개가 있다.
 
주목할 것은 2 개의 DMA Buffer를 설정하면, ADC의 측정값을 설정한 Address로 자동 전송한다.
전송이 끝났는지 DMA buffer Transfer Flag을 보고 2 번째 DMA Buffer Address를 설정해 주면,
DMA는 ADC 측정값을  2 번 Address로 자동전송한다. 그동안 1 번째  Address로 들어온 자료를 처리할 수 있다.
 
즉 DMA가 ADC 변환기를 감시하고 측정한 값을 설정된 Address로 자동 전송해 주기 때문에,
사용자(Code)는 시간적인 여유가 생기며, 이 시간을 활용하여 자료변환과 GLCD에 Graphic 표시를 한다.

 Source Code의 작성 수순
어떤 MPU를 사용하든지 MPU 제어는 MPU의 규격에  종속되므로 거의 이 방법을 많이 사용한다.
1. Library의 선언 ---> #define <UTFT.h> // GLCD에 사용할 subroutine을 선택한다.
2. Library의 설정 ---> UTFT::myGLCD(Model, SDA, SCL, CS, RST, RS);  // GLCD subroutine을 설정한다.
3. 상수들의 설정  ---> #define SMP_RATE 168000UL  // adc는 sample rate를 168KHz로 상수를 선언한다
4. 변수들의 설정 ---> uint16_t inp[2][FFT_SIZE]   = { 0}; // 2 개의 DMA Buffer를 배열변수로 준비한다 
5. setup(); 초기화 함수는 변수값 추가 설정, 각 주변장치의 초기화, 일반 포트의 초기화  및 출력을 한다.
               ( Arduino는 setup()에서 특수 주변장치를 제외하면 거의 개발환경에서 자동으로 설정해 준다)
               ( Timer, Serial, ADC 및 DAC의 초기화는 반복 실행할 필요가 없으므로 setup()에서 coding 한다.)
6. loop();는 본격적인 code 처리를 한다. DUE-FFT Analyzer를 예로 설명한다.
               ( loop()는 일반 Compiler의 main()에서 while(1){ 사용자 코드 }에 해당한다. 무한반복, 탈출 불가다.   
7. subroutine() 보조함수는 main()에서 여러번 사용할 필요가 있는 code들을 따로따로 묶어서 coding 한다.
  같은 일을 반복적으로 수십줄을 매번 main()에 추가하면 매우 비효율 적이다.
 하위함수 subroutine을 잘 활용해야 Code Flash 용량도 줄일 수 있고, 실행 code를 간단하게 만들 수 있다.
 
 FFT Source Code의 설명
Split Radix Real FFT의 소스와 UTFT-Libray그리고 SplitRadixRealP.h는  첨부파일 #1에 있다.
Weidmann의 Split Radix Real FFT-Libarary와 Due 소스, UNO 소스는   첨부파일 #2에 있다.
 
첨부파일 #은 작동이 안되는 배포소스를 수정해서 DUE에서 작동시킨 수정판이다.(작동 확인됨)
첨부파일 #2는 WEidmann 사이트에서 공개한 DUE와 UNO의 Audio FFT Analyzer 소스다.
.
앞으로 시간이 나면 틈틈히 SplitRadixRealP Audio FFT Analyzer의 소스를 설명하도록 하겠다.

 제작 소감
참조 사이트의 원저자는 독일인 인데, coolarduino 사이트는 네덜랜드인 인데 사이트는 폐쇄되었고
macsbug 사이트는 일본인인데, coolcarduino를 원저자로 알고 있다. 조사해 보니 독일인이 원저자이다.
weidmann의 소스는 독일어로 쓰여 있고, 원저자의 표시는 없다. 배포자는 weidermann 사이트의 관리자이다.

원저자의 소스는 설명도 풍부하고, 측정결과와 Library 그리고 UNO의 FFT Sketch 예도 들어 있다.
그러나 다른 사이특의 코드에는 설명도 다 지우고, 보조자료도 없고, 자신들이 만든 것 처럼 수정했는데,

Real-valued fast fourier transform은 M.T. Heideman, C.S. Burrus이 1987년도에 발표하였다. 
Split Radix Real FFT -Library는 original Fortran code를 H.V. Sorensen에서 공개하였다.
Split Radix Real FFT -Library는 coolarduino 사이트에서 UNO-Library로 재수정한 것으로 나온다. 
Splite Radix Real FFT - Library.cpp 내용을 보면 여러 독일인이 Lybrary와 응용 Sketch의 원저자 들이다.

 * "$Id: real2herm.c,v 1.1 1996/09/02 01:47:12 wedgingt Beta $";
 * further optimizations by Joerg Arndt  arndt@jjj.de   <---- 원래 Library의 저자는 Joerg Arndt  이다
 * Adapted and optimized for Arduino UNO (8-bit uCPU) <--- UNO로 포팅한 저자는 Anatoly Kuzmenko 이다.
 * by Anatoly Kuzmenko  k_anatoly@hotmail.com
 * Split Radix Real FFT LIBRARY (UNO version) <--- UNO Library로 재수정한 저자는 coolarduino 사이트 이다.
 * http://coolarduino.wordpress.com

복제 1, 2 사이트에서 공개하는 코드는 결코 작동하지 않는다. 복제한 소스도 아까워 안되는 것을 배포하고 있다.
아무리 인터넷이라지만 기본적인 양심이 있어야 하는데, 그렇지 못한 결과를 좋게 평가하기는 어렵다.

weidmann의 파일에 첨부된 Arduino DUE용 FFT 소스 :  FFT_SplitRRP_ovSerMon_DUE_4a.ino(22.1KB)
weidmann의 파일에 첨부된 Arduino UNO용 FFT 소스 :  SplitRadixRealT_FFT_NANO_3a.ino(19.9KB)

소스 배포 사이트 : www.weidmann-elektronik.de
제 1 복제 사이트 : coolarduino.wordpress.com
제 2 복제 사이트 : macsbug.wordpress.com

 이 펌웨어 소스를 응용한 FFT Analyzer 장치의 개발이나, 주문형 펌웨어가 들어간 모듈 주문 받습니다.

 이자료의 무단 복제 및 무단 배포를 금지합니다.
이 프로그램은 무료 소프트웨어로, 신체와 재산 상의 어떤 위험과 손해를 보상하지 않습니다.
이 프로그램은 GNU 무료 소프트웨어 배포규정을 따릅니다.

 AVRTOOLS™
   
윗글 Wemos-Lolin32 Audio FFT Analyzer 제작
아래글 AD5933 LCR-Impedance Analyzer 제작
    N         제목    글쓴이 작성일 조회 추천
아듀이노 응용소스 게시판 avrtools™ 2016/02/05 (금) 517 0
41 STM32F103C 12비트 정현파 DDS V2 avrtools™ 2018/03/08 (목) 201 0
40 STM32F103C ILI9341 TFTLCD Scope V2 avrtools™ 2018/03/05 (월) 257 0
39 STM32F103C 32비트 ARM-CPU 2채널 Scope avrtools™ 2018/02/25 (일) 232 0
38 STM32F103C의 ILI9341 ILI9163 TFT-LCD 연결방법 avrtools™ 2018/02/19 (월) 231 0
37 STM32F103C+MCP4725 DDS 1KHz 정현파 발생기 avrtools™ 2018/02/18 (일) 258 0
36 STM32F103C 기판의 1~8CH ADC DMA 전송 avrtools™ 2018/02/17 (토) 279 0
35 STM32F103C 기판의 SSD1306 OLED 구동 avrtools™ 2018/02/16 (금) 277 0
34 STM32F103C ARM32 기판의 독립 IDE 소개 avrtools™ 2018/02/14 (수) 310 0
33 STM32F103C ARM32 기판의 Bootloader 개조 avrtools™ 2018/02/14 (수) 313 0
32 ESP32+OLED 기판과 PWM generator avrtools™ 2018/02/11 (일) 226 0
31 Wemos-Lolin32 Audio FFT Analyzer 제작 avrtools™ 2018/02/07 (수) 236 0
30 DUE SAM3X8E Audio FFT Analyzer 제작 avrtools™ 2018/01/30 (화) 247 0
29 AD5933 LCR-Impedance Analyzer 제작 avrtools™ 2012/03/17 (토) 781 0
28 ESP-01 펌웨어 업그레이드와 WiFi 2 Relay Control avrtools™ 2017/12/24 (일) 217 0
27 ESP12E-devKit로 만드는 WiFi 4 Relay 제어장치 avrtools™ 2017/12/23 (토) 243 0
26 M328-mini로 만드는 Touch 용량검출센서 avrtools™ 2017/12/19 (화) 230 0
25 ESP8266 MQTT Relay Control avrtools™ 2016/03/03 (목) 751 0
24 2 채널 ESP8266 WiFi Switch의 제작 avrtools™ 2016/02/25 (목) 975 0
23 ESP-12E SDK 0.9.5 사용방법 avrtools™ 2016/02/18 (목) 806 0
22 ESP8266 ESP-12E WiFi 센서 서버의 제작 avrtools™ 2016/02/17 (수) 763 0
21 Arduino DS3231 RTC to 5110 LCD avrtools™ 2016/02/16 (화) 769 0
20 ESP8266 Weather Server의 제작 avrtools™ 2016/02/15 (월) 841 0
19 Arduino 온습도 센서 DHT-22 avrtools™ 2016/02/12 (금) 632 0
18 ESP8266 WiFi 펌웨어 업그레이드 avrtools™ 2016/02/11 (목) 1056 0
17 Arduion ESP8266 WiFi 설정 방법 avrtools™ 2016/02/10 (수) 1025 0
16 Arduino 정전용량식 수분센서의 분석과 제작 avrtools™ 2016/02/07 (일) 576 0
15 Arduino 전극식 수분센서의 분석과 제작 avrtools™ 2016/02/07 (일) 720 0
14 Arduino 정밀 전력계의 ADC avrtools™ 2016/02/02 (화) 1187 0
13 Arduino 정밀 전력계의 LPF avrtools™ 2016/02/02 (화) 710 0
12 Ardunio 16비트 ADC Data Logger avrtools™ 2016/01/31 (일) 620 0
11 Arduino AC/DC Power Meter의 제작 avrtools™ 2016/01/29 (금) 1259 0
10 Arduino 교류 역율계(power factor)의 제작 avrtools™ 2016/01/29 (금) 767 0
9 Arduino DUE Pezo-SPeaker LCQ Meter 소스 avrtools™ 2016/01/24 (일) 481 0
8 QTouch ADC 근접검출 스위치 avrtools™ 2016/01/21 (목) 784 0
7 Arduino 음성인식 Speech/Voice Recognition avrtools™ 2013/09/14 (토) 1948 0
6 Arduino Uno로 만드는 3축 CNC avrtools™ 2013/09/10 (화) 2920 0
5 Arduino로 만드는 mySpectral 분광기 avrtools™ 2013/09/04 (수) 2424 0
4 8채널 12비트 ADC MCP3208 오실로스코프 avrtools™ 2012/03/29 (목) 811 0
3 교류저항 (impedance) 측정 AD5933 avrtools™ 2012/03/17 (토) 760 0
2 Arduino DMX512 수신기 제작 avrtools™ 2012/03/15 (목) 4069 0
1 TSL2561 조도 측정기의 제작 avrtools™ 2011/09/11 (일) 2955 0
1

바구니 : 0
 보관함 : 0
오늘뷰 : 0
HOME   |   회사소개   |   제휴안내   |   회사위치   |   서비스이용 약관   |   개인정보 보호정책   |   사이트맵
17015 경기도 용인시 기흥구 동백중앙로16번길 16-25, 508호. 전화 : 031-282-3310
사업자 등록번호 : 697-47-00075 / 대표 : 이건영 / 업태 : 제조업 / 종목 : LED조명, LED전원, 제어장치.
개인정보 관리책임자 : 홈페이지 관리자 . Copyright ⓒ2016 아크레즈 (ACLEDS INC.)
HOME TOP PREVNEXT 0 0 0