แผนผังวงจรนี้คือ โมดูลรับสัญญาณวิทยุ FM สร้างขึ้นรอบ ๆ RDA5807M ในฐานะวงจรไอซีหลัก มันทำหน้าที่หลักๆ ในการใช้งานต่างๆ การรับสัญญาณวิทยุ FM, การส่งสัญญาณเสียงออก และฟังก์ชันควบคุมพื้นฐานการวิเคราะห์ด้านล่างนี้แบ่งออกเป็น ส่วนประกอบหลัก โมดูลการทำงาน และพารามิเตอร์การออกแบบที่สำคัญ.

1. ส่วนประกอบหลักและหน้าที่ของขาเชื่อมต่อ
ชิปหลัก: RDA5807M
การขอ RDA5807M เป็นไอซีรับสัญญาณวิทยุ FM ที่ผสานรวมฟังก์ชันการทำงานสูง ซึ่งรองรับการรับสัญญาณวิทยุ FM และ การควบคุมแบบอนุกรม I2C / SDIOจากแผนผังวงจร สามารถสรุปตำแหน่งขาสำคัญและการเชื่อมต่อได้ดังต่อไปนี้:
| ชื่อพิน | ฟังก์ชัน | ส่วนประกอบที่เชื่อมต่อ / เน็ต | รายละเอียด |
|---|---|---|---|
| ปราชัย | เอาต์พุตเสียงช่องขวา | เอาต์พุตโดยตรง (ไม่มีส่วนประกอบเพิ่มเติมแสดงในภาพ) | ให้เสียงอนาล็อกแบบช่องสัญญาณขวา |
| คนหยาบคาย | เอาต์พุตเสียงช่องซ้าย | เอาต์พุตโดยตรง (ไม่มีส่วนประกอบเพิ่มเติมแสดงในภาพ) | ให้เสียงอนาล็อกช่องซ้าย |
| อาร์ซีแอลเค | ขาสัญญาณนาฬิกา | ไม่มีการเชื่อมต่อภายนอกที่ชัดเจน (น่าจะเป็นการซิงค์ภายใน) | การซิงโครไนซ์นาฬิกาภายใน |
| VDD | แหล่งจ่ายไฟ | โครงข่ายไฟฟ้า 3V3 | 3.3V แหล่งจ่ายไฟ DC |
| GND | พื้น | เครือข่าย GND ทั่วโลก | กราวด์ร่วมสำหรับไฟเลี้ยงและสัญญาณ |
| SDIO | การรับส่งข้อมูลแบบอนุกรม | ขาพิน 3 (สัญญาณควบคุม) | สื่อสารกับไมโครคอนโทรลเลอร์ (MCU) เพื่อปรับแต่งเสียง ควบคุมระดับเสียง ฯลฯ |
| ส.ค.ส | นาฬิกาอนุกรม | ขา 2 (สัญญาณนาฬิกา) | สัญญาณนาฬิกาสำหรับการสื่อสาร SDIO |
| เอฟมิน | อินพุตสัญญาณ FM | ปักหมุด 5 | รับสัญญาณวิทยุ FM จากเสาอากาศ |
| X1 | อินพุตออสซิเลเตอร์คริสตัล | คริสตัล 32.768 kHz | ให้สัญญาณนาฬิกาอ้างอิงเพื่อการทำงานที่ความถี่คงที่ |
2. การแบ่งย่อยโมดูลการทำงาน
2.1 โมดูลพาวเวอร์ซัพพลาย
- แรงดันไฟฟ้าอินพุต: 3.3V DC (ควบคุม)
- ส่วนประกอบการกรอง:
- C8 (0.1µF), C9 (0.1µF): ตัวเก็บประจุแยกสัญญาณความถี่สูงระหว่าง VDD และ GND ช่วยลดสัญญาณรบกวนทางไฟฟ้า
- C10 (22µF): ตัวเก็บประจุอิเล็กโทรไลต์ขนาดใหญ่สำหรับกรองความถี่ต่ำและเก็บพลังงาน
- C26 (0.1µF): มีการแยกส่วนเพิ่มเติมเพื่อปรับปรุงเสถียรภาพของพลังงานให้ดียิ่งขึ้น
ระบบการกรองหลายขั้นตอนนี้ช่วยให้มั่นใจได้ว่า การจ่ายพลังงานที่เสถียรและมีเสียงรบกวนต่ำ ไปยังไอซีตัวรับสัญญาณ FM
2.2 โมดูลรับสัญญาณ FM
- อินพุตสัญญาณ:
- การขอ ขา FMIN (ขา 5) เชื่อมต่อกับเสาอากาศ FM ภายนอก (ส่วนประกอบเสาอากาศไม่ได้แสดงในแผนผัง)
- รับสัญญาณวิทยุ FM ใน 87–108 เมกะเฮิรตซ์ วงดนตรี
- วงจรออสซิลเลเตอร์คริสตัล:
- A คริสตัล 32.768 kHz (X1) ให้นาฬิกาอ้างอิงที่แม่นยำ
- ช่วยให้การปรับจูนคลื่นวิทยุ FM มีความแม่นยำและป้องกันการเบี่ยงเบนของความถี่ขณะเลือกสถานี
2.3 โมดูลควบคุมและการสื่อสาร
- อินเตอร์เฟซการสื่อสาร:
- SDIO (พอร์ตข้อมูลอนุกรม) + SCLK (นาฬิกาอนุกรม)
- เข้ากันได้กับ I2C หรือโปรโตคอลการสื่อสารแบบอนุกรมที่คล้ายคลึงกัน
- ใช้สำหรับเชื่อมต่อกับ MCU ภายนอก (เช่น ไมโครคอนโทรลเลอร์)
- ตัวต้านทานแบบดึงขึ้น (Pull-up Resistors):
- R6 (10kΩ) สำหรับ SDIO
- R7 (10kΩ) สำหรับ SCLK
- ทั้งสองเชื่อมโยงกัน 3V3เพื่อให้มั่นใจได้ถึงระดับตรรกะที่เสถียรและการสื่อสารที่เชื่อถือได้
2.4 โมดูลเอาต์พุตเสียง
- เอาต์พุตเสียง:
- ปราชัย: เสียงอนาล็อกช่องขวา
- คนหยาบคาย: เสียงอนาล็อกช่องซ้าย
- ผลลัพธ์เหล่านี้อาจเป็น:
- เชื่อมต่อโดยตรงกับ หูฟัง
- เชื่อมต่อกับ ลำโพง (หมายเหตุ: ภายนอก) เครื่องขยายเสียง (จำเป็นสำหรับกำลังไฟฟ้าที่สูงขึ้น)
2.5 โมดูลการกรองและการจับคู่เสริม
- ตัวนำกระแส:
- L1, L2 (100 nH): น่าจะใช้สำหรับการจับคู่ความต้านทาน RF หรือการกรองสัญญาณอินพุตที่ส่วนหน้าของวงจร FM
- ช่วยลดการสะท้อนของสัญญาณและเพิ่มความไวในการรับสัญญาณ
- ตัวเก็บประจุแบบ:
- C13 (100 pF), C14 (24 pF): ทำงานร่วมกับตัวเหนี่ยวนำเพื่อสร้าง วงจรกรอง LC
- ลดสัญญาณรบกวนความถี่สูงและทำให้สัญญาณ FM บริสุทธิ์ขึ้น
- สายดิน:
- การเชื่อมต่อ GND หลายจุดบ่งชี้ว่า การออกแบบจุดร่วมระดับโลก
- ลดเสียงรบกวนและเพิ่มเสถียรภาพโดยรวมของวงจร
3. พารามิเตอร์หลักและคุณลักษณะการออกแบบ
- แรงดันในการทำงาน: 3.3V
- ใช้งานร่วมกับไมโครคอนโทรลเลอร์ (MCU) ทั่วไปได้อย่างสมบูรณ์โดยไม่ต้องแปลงระดับแรงดันไฟฟ้า
- ความถี่คริสตัล: เฮิร์ทซ์ 32.768
- ความถี่อ้างอิงมาตรฐานอุตสาหกรรมเพื่อการกำหนดเวลาที่เสถียร
- วิธีการควบคุม: อินเทอร์เฟซอนุกรม SDIO + SCLK
- การกำหนดเส้นทางที่ง่ายขึ้น ต้องการเพียงสายควบคุมสองเส้นเท่านั้น
- การออกแบบการกรอง:
- ตัวเก็บประจุแยกกำลังไฟฟ้าหลายตัว (0.1µF + 22µF)
- การกรอง LC ที่ส่วนหน้าของวงจร RF เพื่อความต้านทานต่อสัญญาณรบกวนสูง
- เอาท์พุทเสียง:
- ระบบเสียงอนาล็อกแบบสองช่องสัญญาณ (ROUT / LOUT)
- รองรับการเล่นวิทยุ FM สเตอริโอ
4. ตัวอย่างการใช้งานและข้อเสนอแนะในการขยายผล
การใช้งานทั่วไป
- วิทยุ FM แบบพกพา
- ลำโพงอัจฉริยะพร้อมฟังก์ชั่นวิทยุ FM
- ระบบรับสัญญาณ FM ที่ควบคุมด้วย MCU
ตัวเลือกการขยายตัว
- ใช้ เสาอากาศแบบยืดหดได้ภายนอกหรือเสาอากาศ PCB เพื่อปรับปรุงความไวในการรับสัญญาณ
- เพิ่ม เครื่องขยายเสียง (เช่น LM386) ต่อกับ ROUT/LOUT เพื่อขับลำโพงขนาดใหญ่ขึ้น
- เปิดใช้งานคุณสมบัติขั้นสูงผ่านการควบคุม MCU:
- การสแกนสถานีอัตโนมัติ
- การจัดเก็บช่องสัญญาณที่ตั้งค่าไว้ล่วงหน้า
- การควบคุมระดับเสียงแบบดิจิทัล
5. หมายเหตุและข้อควรระวังในการออกแบบ
- เสถียรภาพด้านพลังงาน:
- ตรวจสอบให้แน่ใจว่าแรงดันไฟ 3.3V มีความผันผวนต่ำ เพื่อหลีกเลี่ยงเสียงรบกวนหรือการรับสัญญาณที่ไม่เสถียร
- สายดิน:
- ใช้จุดอ้างอิงภาคพื้นดินที่มั่นคงและสม่ำเสมอ
- หลีกเลี่ยงความต่างศักย์ระหว่างสายดินของแหล่งจ่ายไฟและสายดินของระบบเสียง เพื่อป้องกันเสียงรบกวน
- การจับคู่อิมพีแดนซ์:
- เสาอากาศที่เชื่อมต่ออยู่กับ เอฟมิน ควรมีการจับคู่ค่าความต้านทาน (โดยทั่วไป) 50Ω) เพื่อการรับสัญญาณที่ดีที่สุด
- การเลือกส่วนประกอบ:
- ใช้ คริสตัลความแม่นยำสูง 32.768 kHz
- ชอบ ตัวเก็บประจุ NP0 / C0G เหมาะสำหรับชิ้นส่วน RF และชิ้นส่วนที่เกี่ยวข้องกับจังหวะเวลา เนื่องจากมีเสถียรภาพที่เหนือกว่า
รหัสโปรแกรมวงจรวิทยุ
RDA5807.H
/*
**==============================================================================
** RDA5807.H:
**
** Description:
**
**==============================================================================
*/
#ifndef __RDA5807__
#define __RDA5807__
//------------------------------------------------------------------------------
#ifdef RDA5807_GLOBALS
#define RDA5807_EXT
#else
#define RDA5807_EXT extern
#endif // RDA5807_GLOBALS
//------------------------------------------------------------------------------
//==============================================================================
void RDA5807Init(void);
//------------------------------------------------------------------------------
RDA5807_EXT uint16_t g_nRDA5807Channel;
//------------------------------------------------------------------------------
void RDA5807Setup(void);
void RDA5807I2CWrite(uint8_t * pucData, int nLength);
void RDA5807SetChannel(float freq);
//==============================================================================
// END OF THE FILE : RDA5807.H
//------------------------------------------------------------------------------
#endif // __RDA5807__
/*
**==============================================================================
** RDA5807.C:
**
**==============================================================================
*/
//------------------------------------------------------------------------------
#include "stm32f0xx_hal.h"
#include "stm32f0xxa.h"
#define RDA5807_GLOBALS 1 // Define the global variables
#include "RDA5807.H"
//------------------------------------------------------------------------------
#define RDA5807_BOOT_LENGTH 12
uint8_t RDA5807_boot_config[] = {
0xc1, 0x03, // Register 0x2
0x00, 0x00, // Register 0x3
0x0a, 0x00, // Register 0x4
0x88, 0x0f, // Register 0x5
0x00, 0x00, // Register 0x6
0x42, 0x02, // Register 0x7
};
//------------------------------------------------------------------------------
#define RDA5807_TUNE_CONFIG_LENGTH 4
uint8_t RDA5807_tune_config[] = {
0xc0, 0x01, // Register 2
0x00, 0x00, // Reigster 3
};
void RDA5807SetTuneConfig(uint16_t channel) {
RDA5807_tune_config[2] = (uint8_t)(channel >> 2);
RDA5807_tune_config[3] = (uint8_t)(((channel & 0x3) << 6) | 0x10);
}
//------------------------------------------------------------------------------
void RDA5807Init(void) {
/* Assumin band starts at 87.0MHz(per setting below)
* and channel spaceing of 100kHz(0.1Mhz)(per settings below)
* then channel can be derive as floowins:
* channel = (<desired freq in MHz> - 87.0) / 0.1
*
* which is ave as:
* <10x desired ferq in MHz> - 870
*/
g_nRDA5807Channel = 6;
RDA5807Setup();
}
//------------------------------------------------------------------------------
extern I2C_HandleTypeDef hi2c1;
void RDA5807I2CWrite(uint8_t * pucData, int nLength) {
HAL_I2C_Master_Transmit(&hi2c1, 0x20, pucData, nLength, 10);
}
//------------------------------------------------------------------------------
void RDA5807Setup(void) {
RDA5807I2CWrite(RDA5807_boot_config, RDA5807_BOOT_LENGTH);
RDA5807SetTuneConfig(g_nRDA5807Channel);
RDA5807I2CWrite(RDA5807_tune_config, RDA5807_TUNE_CONFIG_LENGTH);
}
void RDA5807SetChannel(float freq) {
g_nRDA5807Channel = (int)((freq - 87.0) * 10.0 + 0.5);
RDA5807SetTuneConfig(g_nRDA5807Channel);
RDA5807I2CWrite(RDA5807_tune_config, RDA5807_TUNE_CONFIG_LENGTH);
}
//==============================================================================
// END OF THE FILE : RDA5807.C
//------------------------------------------------------------------------------




