Cảm biến âm thanh tích hợp MAX9814 + AGC

Từ ChipFC Wiki
Phiên bản vào lúc 11:53, ngày 2 tháng 3 năm 2018 của BS135 (Thảo luận | đóng góp) (Sử dụng)
(khác) ← Phiên bản cũ | xem phiên bản hiện hành (khác) | Phiên bản mới → (khác)
Bước tới: chuyển hướng, tìm kiếm

Editor.png

Bài viết này đang được phát triển hoặc chỉnh sửa lớn.
Bạn có thể đóng góp để bài viết hoàn thiện hơn.
Sau khi chỉnh sửa xong thông báo này sẽ được gỡ bỏ.

Giới thiệu

Att2.png
  • Cảm biến âm thanh tích hợp MAX9814 với khả năng tự động điều chỉnh độ khuếch đại (AGC- Automatic Gain Control), điều này có nghĩa là các âm thanh lớn khi qua mạch sẽ tự động giảm tới mức ấn định và cũng tương tự các âm thanh nhỏ khi qua mạch sẽ tự động tăng tới mức ấn định.

Đặc điểm

  • Three Gain Settings (40dB, 50dB, 60dB)
  • Programmable Attack Time
  • Programmable Attack and Release Ratio
  • Nguồn cấp 2.7V - 5.5V
  • Low Input-Referred Noise Density of 30nV/√Hz
  • Low THD: 0.04% (typ)
  • Low-Power Shutdown Mode
  • Internal Low-Noise Microphone Bias, 2V

Sơ đồ chân

Thứ tự chân Tên gọi Mô tả
1 GND mass
2 Vdd Nguồn từ vi điều khiển
3 Gain Nguồn từ vi điều khiển
4 Out tín hiệu đầu ra
5 AR

Sử dụng

Attt5.png
  • Sơ đồ kết nối
Kết nối chân tới Arduino
Thứ tự chân Tên gọi chân tại Arduino
1 GND GND
2 VDD 5V
3 OUT chân A0
4 Gain
5 AR
  • Chúng tôi sử dụng mức âm thanh từ 20Hz - 20kHz để test. tại đây
  • Source code mẫu:
const int sampleWindow = 50; // lấy mẫu 50ms (50 mS = 20Hz)
unsigned int sample;

void setup() 
{
   Serial.begin(9600);
}

void loop() 
{
   unsigned long startMillis= millis();  
   unsigned int peakToPeak = 0;   
   unsigned int signalMax = 0;
   unsigned int signalMin = 1024;

   // collect data for 50 mS
   while (millis() - startMillis < sampleWindow)
   {
      sample = analogRead(0);
      if (sample < 1024)  
      {
         if (sample > signalMax)
         {
            signalMax = sample;  // lưu lại giá trị max
         }
         else if (sample < signalMin)
         {
            signalMin = sample;  // lưu lại giá trị min
         }
      }
   }
   peakToPeak = signalMax - signalMin;  // max - min = peak-peak amplitude
   double volts = (peakToPeak * 5.0) / 1024;  //chuyển sang volts
   Serial.println(volts);
}