ການວິເຄາະແຜນວາດວິທະຍຸໂດຍອີງໃສ່ RDA5807M

ແຜນວາດວົງຈອນນີ້ແມ່ນ ໂມດູນເຄື່ອງຮັບວິທະຍຸ FM ສ້າງຂຶ້ນປະມານ RDA5807M ເປັນ IC ຫຼັກ. ມັນສ່ວນໃຫຍ່ແມ່ນໃຊ້ ການຮັບສັນຍານ FM, ຜົນຜະລິດສຽງ, ແລະ ໜ້າທີ່ຄວບຄຸມພື້ນຖານການວິເຄາະຂ້າງລຸ່ມນີ້ແບ່ງອອກເປັນ ອົງປະກອບຫຼັກ, ໂມດູນທີ່ເຮັດວຽກ, ແລະຕົວກໍານົດການອອກແບບທີ່ສໍາຄັນ.

ແຜນວາດສະແດງຮູບແບບວິທະຍຸ FM RDA5807M

1. ອົງປະກອບຫຼັກ ແລະ ໜ້າທີ່ຂອງ Pin

IC ຫຼັກ: RDA5807M

ໄດ້ RDA5807M ເປັນ IC ຮັບວິທະຍຸ FM ທີ່ປະສົມປະສານສູງເຊິ່ງຮອງຮັບການຮັບສັນຍານອອກອາກາດ FM ແລະ ການຄວບຄຸມອະນຸກົມ I2C / SDIOອີງຕາມແຜນວາດ, ໝຸດກະແຈ ແລະ ການເຊື່ອມຕໍ່ຂອງມັນແມ່ນສະຫຼຸບໄວ້ຂ້າງລຸ່ມນີ້:

ຊື່ Pinຫນ້າທີ່ອົງປະກອບທີ່ເຊື່ອມຕໍ່ / ເນັດລາຍລະອຽດ
ເສັ້ນທາງຜົນຜະລິດສຽງຊ່ອງຂວາຜົນຜະລິດໂດຍກົງ (ບໍ່ມີອົງປະກອບພິເສດສະແດງຢູ່)ໃຫ້ສຽງອະນາລັອກຊ່ອງທາງຂວາ
LOUTຜົນຜະລິດສຽງຊ່ອງຊ້າຍຜົນຜະລິດໂດຍກົງ (ບໍ່ມີອົງປະກອບພິເສດສະແດງຢູ່)ໃຫ້ສຽງອະນາລັອກຊ່ອງທາງຊ້າຍ
RCLKເຂັມສັນຍານໂມງບໍ່ມີການເຊື່ອມຕໍ່ພາຍນອກທີ່ຊັດເຈນ (ອາດຈະເປັນການຊິ້ງພາຍໃນ)ການປະສານໂມງພາຍໃນ
VDDການປ້ອນຂໍ້ມູນພະລັງງານພະລັງງານ 3V3ການສະ ໜອງ ພະລັງງານ 3.3V DC
GNDດິນສຸດທິ GND ທົ່ວໂລກພະລັງງານ ແລະ ພື້ນສັນຍານຮ່ວມ
SDIOການປ້ອນຂໍ້ມູນແບບອະນຸກົມPin 3 (ສັນຍານຄວບຄຸມ)ການສື່ສານກັບ MCU ສຳລັບການປັບແຕ່ງ, ການຄວບຄຸມລະດັບສຽງ, ແລະອື່ນໆ.
SCLKໂມງ Serialຂາ 2 (ສັນຍານໂມງ)ສັນຍານໂມງສຳລັບການສື່ສານ SDIO
FMINສັນຍານ FMເຂັມ 5ຮັບສັນຍານ FM RF ຈາກເສົາອາກາດ
X1ການປ້ອນຂໍ້ມູນ Crystal oscillator32.768 kHz ໄປເຊຍກັນໃຫ້ໂມງອ້າງອີງສຳລັບການເຮັດວຽກຄວາມຖີ່ທີ່ໝັ້ນຄົງ

2. ການແຍກໂມດູນໜ້າທີ່

2.1 ໂມດູນການສະຫນອງພະລັງງານ

  • ແຮງດັນ Input: 3.3V DC (ຄວບຄຸມ)
  • ອົງປະກອບການກັ່ນຕອງ:
    • C8 (0.1µF), C9 (0.1µF): ຕົວເກັບປະຈຸແຍກຄວາມຖີ່ສູງລະຫວ່າງ VDD ແລະ GND, ສະກັດກັ້ນສຽງລົບກວນດ້ານພະລັງງານ
    • C10 (22µF): ຕົວເກັບປະຈຸໄຟຟ້າແບບປະລິມານຫຼາຍສຳລັບການກັ່ນຕອງຄວາມຖີ່ຕ່ຳ ແລະ ການເກັບຮັກສາພະລັງງານ
    • C26 (0.1µF): ການແຍກຕົວເພີ່ມເຕີມເພື່ອປັບປຸງຄວາມໝັ້ນຄົງຂອງພະລັງງານຕື່ມອີກ

ການກັ່ນຕອງຫຼາຍຂັ້ນຕອນນີ້ຮັບປະກັນ ການສົ່ງພະລັງງານທີ່ໝັ້ນຄົງ ແລະ ມີສຽງລົບກວນຕ່ຳ ໄປຫາ IC ເຄື່ອງຮັບ FM.


ໂມດູນຮັບສັນຍານ FM 2.2

  • ການປ້ອນຂໍ້ມູນສັນຍານ:
    • ໄດ້ ຂາ FMIN (ຂາ 5) ເຊື່ອມຕໍ່ກັບເສົາອາກາດ FM ພາຍນອກ (ອົງປະກອບເສົາອາກາດບໍ່ໄດ້ສະແດງຢູ່ໃນແຜນວາດ)
    • ຮັບສັນຍານກະຈາຍສຽງ FM ໃນ 87–108 MHz band
  • ວົງຈອນການສັ່ນສະເທືອນຜລຶກ:
    • A ຜລຶກ 32.768 kHz (X1) ໃຫ້ໂມງອ້າງອີງທີ່ຖືກຕ້ອງ
    • ຮັບປະກັນການປັບແຕ່ງ FM ທີ່ຊັດເຈນ ແລະ ປ້ອງກັນການເລື່ອນຄວາມຖີ່ໃນລະຫວ່າງການເລືອກສະຖານີ

2.3 ໂມດູນຄວບຄຸມ ແລະ ການສື່ສານ

  • Interface ການສື່ສານ:
    • SDIO (ຂໍ້ມູນອະນຸກົມ) + SCLK (ໂມງອະນຸກົມ)
    • ທີ່ເຫມາະສົມກັບ I2C ຫຼື ໂປໂຕຄອນການສື່ສານແບບ serial ທີ່ຄ້າຍຄືກັນ
    • ໃຊ້ເພື່ອເຊື່ອມຕໍ່ກັບ MCU ພາຍນອກ (ເຊັ່ນ: ໄມໂຄຣຄອນໂທຣລເລີ)
  • ຕົວຕ້ານທານແບບດຶງຂຶ້ນ:
    • R6 (10kΩ) ສຳລັບ SDIO
    • R7 (10kΩ) ສຳລັບ SCLK
    • ທັງສອງແມ່ນເຊື່ອມຕໍ່ກັບ 3V3, ຮັບປະກັນລະດັບເຫດຜົນທີ່ມີຄວາມໝັ້ນຄົງ ແລະ ການສື່ສານທີ່ໜ້າເຊື່ອຖື

2.4 ໂມດູນສົ່ງສຽງອອກ

  • ສຽງອອກ:
    • ເສັ້ນທາງ: ສຽງອະນາລັອກຊ່ອງຂວາ
    • LOUT: ສຽງອະນາລັອກຊ່ອງຊ້າຍ
  • ຜົນຜະລິດເຫຼົ່ານີ້ສາມາດເປັນ:
    • ເຊື່ອມຕໍ່ໂດຍກົງກັບ ຫູຟັງ
    • ເຊື່ອມຕໍ່ກັບ ລໍາໂພງ (ໝາຍເຫດ: ພາຍນອກ ເຄື່ອງຂະຫຍາຍສຽງ ຈຳເປັນສຳລັບຜົນຜະລິດພະລັງງານທີ່ສູງຂຶ້ນ)

2.5 ໂມດູນການກັ່ນຕອງ ແລະ ການຈັບຄູ່ແບບຊ່ວຍ

  • Inductors:
    • L1, L2 (100 nH): ອາດຈະໃຊ້ສຳລັບການຈັບຄູ່ຄວາມຕ້ານທານ RF ຫຼື ການກັ່ນຕອງອິນພຸດຢູ່ທີ່ດ້ານໜ້າຂອງ FM
    • ຊ່ວຍຫຼຸດຜ່ອນການສະທ້ອນສັນຍານ ແລະ ປັບປຸງຄວາມອ່ອນໄຫວຕໍ່ການຮັບສັນຍານ
  • ຕົວເກັບປະຈຸ:
    • C13 (100 pF), C14 (24 pF): ເຮັດວຽກກັບຕົວກະຕຸ້ນເພື່ອສ້າງ ເຄືອຂ່າຍການກັ່ນຕອງ LC
    • ສະກັດກັ້ນການລົບກວນຄວາມຖີ່ສູງ ແລະ ເຮັດໃຫ້ສັນຍານ FM ບໍລິສຸດ
  • ພື້ນຖານ:
    • ການເຊື່ອມຕໍ່ GND ຫຼາຍອັນຊີ້ບອກເຖິງ ການອອກແບບພື້ນຖານຮ່ວມກັນທົ່ວໂລກ
    • ຫຼຸດຜ່ອນສຽງລົບກວນ ແລະ ປັບປຸງຄວາມໝັ້ນຄົງຂອງວົງຈອນໂດຍລວມ

3. ພາລາມິເຕີຫຼັກ ແລະ ລັກສະນະການອອກແບບ

  • ແຮງດັນທີ່ໃຊ້ງານ: 3.3V
    • ເຂົ້າກັນໄດ້ຢ່າງເຕັມທີ່ກັບ MCU ຫຼັກໂດຍບໍ່ມີການປ່ຽນລະດັບ
  • ຄວາມຖີ່ຂອງຜລຶກ: 32.768 kHz
    • ຄວາມຖີ່ອ້າງອີງມາດຕະຖານອຸດສາຫະກຳສຳລັບເວລາທີ່ໝັ້ນຄົງ
  • ວິທີການຄວບຄຸມ: ອິນເຕີເຟດຊີຣຽວ 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 ເພື່ອຫຼີກລ່ຽງສຽງລົບກວນ ຫຼື ການຮັບສັນຍານທີ່ບໍ່ໝັ້ນຄົງ
  • ພື້ນຖານ:
    • ໃຊ້ການອ້າງອີງພື້ນຖານທີ່ໜັກແໜ້ນ ແລະ ສອດຄ່ອງກັນ
    • ຫຼີກລ່ຽງຄວາມແຕກຕ່າງທີ່ອາດເກີດຂຶ້ນລະຫວ່າງພື້ນດິນພະລັງງານ ແລະ ພື້ນດິນສຽງເພື່ອປ້ອງກັນສຽງລົບກວນ
  • ການຈັບຄູ່ impedance:
    • ເສົາອາກາດທີ່ເຊື່ອມຕໍ່ກັບ FMIN ຄວນຈະກົງກັນກັບຄວາມຕ້ານທານ (ໂດຍປົກກະຕິ 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
//------------------------------------------------------------------------------

ອອກຄວາມເຫັນໄດ້

ທີ່ຢູ່ອີເມວຂອງທ່ານຈະບໍ່ໄດ້ຮັບການຈັດພີມມາ. ທົ່ງນາທີ່ກໍານົດໄວ້ແມ່ນຫມາຍ *