This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] MSP430F5438A:MSP430F5438A 扩展板上的麦克风

Guru**** 2587365 points
Other Parts Discussed in Thread: MSP430F5438A

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/759670/msp430f5438a-microphone-on-msp430f5438a-exp-board

器件型号:MSP430F5438A

您好!

我正在尝试使用 msp430f5438a 板上的麦克风录制我的语音。 在数据表中、我发现要为麦克风供电、我必须使用引脚6.4。 我的问题是、当 我通过 FET 为电路板供电时、此引脚是否会自动为 MIC 供电? 如果不是、 我应该如何配置引脚来为 MIC 供电? 在记录数据时、是否还建议使用 ADC12基准电压?  

谢谢、

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    大家好、

    请遵循 EVM 用户指南:    

    下载示例代码   并确保示例代码在您的电路板上运行良好。

    此致、

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Ling、

    感谢您的回答。  我实际上介绍了您分享的材料。 在用户指南中、我发现 MIC 链接在输入通道5。 我喜欢直接从通道读取数据。 我尝试编写自己的代码。 您共享的示例代码对我来说看起来很复杂。 它使用内部闪存存储器来存储我不需要用于我的目的的数据。 出于我的目的、我只需要读取数据并通过 UART 将 ADC 值发送到 PC (实际上检查 Teraterm 中的输出)。 请告诉我它是否可以执行? 或者我有误解。 如果我是正确的、请向我证明有关的信息

    如何为6.4 下的 MIC 供电、或者您可以说我应该如何配置引脚(或者当我使用 FET 为电路板供电时它自动加电)?

    在这种情况下、是否有针对 ADC12基准电压的建议?

    我随附了我的代码、以防:

    #include 
    
    unsigned int void;
    
    
    int main (void)
    {
    WDTCTL = WDTPW + WDTHOLD; //停止 WDT
    
    
    REFCTL0 |= REFMSTR + REFVSEL_0 + REFON;//启用内部1.5V 基准
    ADC12CTL0 = ADC12SHT0_8 + ADC12ON; //设置采样时间
    ADC12CTL1 = ADC12SHP; //启用采样计时器
    ADC12MCTL0 = ADC12SREF_1 + ADC12INCH_5;// ADC 输入通道 A5 = MIC
    ADC12IE = 0x001; // ADC12MEMO
    
    __DELAY_CYCLLES (75); //延迟以使 Ref 稳定
    //基于默认 DCO 频率。
    
    ADC12CTL0 |= ADC12ENC;
    
    while (1)
    {
    ADC12CTL0 &=~ADC12SC;
    ADC12CTL0 |= ADC12SC; //采样和转换开始
    
    _bis_SR_register (LPM4_bits + GIE); //启用中断的 LPM4
    __no_operation();
    
    __no_operation();
    }
    }
    
    #if defined (__TI_Compiler_version__)|| defined (__IAR_systems_icc_)
    #pragma vector=ADC12_vector
    __interrupt void ADC12ISR (void)
    #elif defined (__GNU__)
    void __attribute__((interrupt (ADC12_vector)))) ADC12ISR (void
    
    编译器#error!
    #endif
    {
    switch (__even_in_range (ADC12IV、34))
    {
    case 0:break; //向量0:无中断
    情况2:中断; //向量2:ADC 溢出
    情况4:中断; //向量4:ADC 时序溢出
    情况6: //向量6:ADC12IFG0
    语音= ADC12MEM0; //移动结果,IFG 被清除
    _BIC_SR_REGISTER_ON_EXIT (LPM4_BITS);//退出活动 CPU
    中断;
    案例8:中断; //向量8:ADC12IFG1
    大小写10:break; //向量10:ADC12IFG2
    大小写12:break; //向量12:ADC12IFG3
    case 14:break; //向量14:ADC12IFG4
    情况16:中断; //向量16:ADC12IFG5
    情况18:中断; //向量18:ADC12IFG6
    案例20:中断; //向量20:ADC12IFG7
    case 22:break; //向量22:ADC12IFG8
    case 24:break; //向量24:ADC12IFG9
    大小写26:break; //向量26:ADC12IFG10
    case 28:break; //向量28:ADC12IFG11
    case 30:break; //向量30:ADC12IFG12
    大小写32:break; //向量32:ADC12IFG13
    case 34:break; //向量34:ADC12IFG14
    默认值:break;
    }
    } 

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    大家好、

    您的想法是可行的。 正如我说过的、请使用示例代码作为参考、并删除您不需要的任何其他器件。 您也可以找到 ADC 配置和基准电压设置。

    此致、
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    我编写了代码从 MIC 读取数据、然后通过 UART 将其发送到 PC。 在 Tera Term 中进行观察。 但看到输出时我感到困惑。 看起来数据开始增加、在经过一定量的数据之后、数据就会变饱和。 当我讲话或发出声音时、它完全不会改变。 下面是我的代码和输出 ADC 数据。  我在这里出了什么问题? -

    #include 
    
    
    unsigned int void;
    volatile unsigned char volt [5];
    
    void init_serial (void);
    void init_serial (void)
    {
    P5SEL |= 0xC0; //对于 TX/RX- UCA1为5.6和5.7
    UCA1CTL1 |= UCSWRST;
    UCA1CTL1 |= UCSSEL_1; //32768Hz
    UCA1BR0=03; //波特率9600
    UCA1BR1 = 0x00;
    UCA1MCTL = 0x06; //调制 SX=3,FX=0
    UCA1CTL0 = 0x00;
    UCA1CTL1 &=~UCSWRST; //在操作模式
    
    中}
    
    void adc_value (int);
    void adc_value (int adc_Data)
    {
    volatile char x=3;
    伏特[3]=伏特[2]=伏特[1]=伏特[0]= 0x30;
    while (ADC_Data > 0)
    {
    伏特[x]=(ADC_Data%10)| 0x30;//分隔单位数字
    ADC_Data = ADC_Data/10; //剩余的数字比最后一个数字
    X-;
    }
    伏特[4]='\0';
    }
    
    void Send_Serial (void);
    void Send_Serial (void)
    {
    volatile char i=0;
    while (volt [i]!='\0')
    {
    UCA1TXBUF =伏[i];
    
    while (UCA1STAT 和 UCBUSY);
    i++;
    }
    UCA1TXBUF = 0x0a;
    while (UCA1STAT 和 UCBUSY);
    UCA1TXBUF = 0x0d;
    while (UCA1STAT 和 UCBUSY);
    
    }
    
    
    int main (void)
    {
    P6OUT |= BIT4; //麦克风电源
    P6OUT &=~BIT4; //麦克风连接在输入通道5上
    P6SEL |= BIT5;
    WDTCTL = WDTPW + WDTHOLD; //停止 WDT
    
    //初始化共享基准模块*/
    REFCTL0 |= REFMSTR + REFVSEL_0 + REFON;//启用内部1.5V 基准
    
    //初始化 ADC12_A */
    ADC12CTL0 &=~ADC12ENC; //确保 ENC
    ADC12CTL0 = ADC12ON + ADC12SHT02; //设置采样时间
    ADC12CTL1 = ADC12SHP + ADC12SSEL_3; //启用采样计时器
    ADC12MCTL0 = ADC12INCH_5;// ADC 输入通道 A5 => MIC
    
    init_serial ();
    while (1)
    {
    ADC12CTL0 &=~ADC12SC;
    ADC12CTL0 |= ADC12SC + ADC12ENC;
    while (ADC12CTL1和 ADC12BUSY)
    __no_operation();
    语音= ADC12MEM0;
    ADC_Value (语音);
    SEND_Serial ();
    }
    

    感谢你能抽出时间。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    > P6OUT |= BIT4; //麦克风电源
    添加:
    > P6DIR |= BIT4; //打开

    未经请求:我只想提一下、在9600bps 链路上、每秒7字节的采样率、您的有效采样率大约为140Hz。 (话虽如此、如果您大声喊叫、您应该能够看到一些东西。)
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Bruce、您好!

    感谢你能抽出时间。 我添加了命令、并在与 MIC 通话时获取如下数据。 即使在室温安静的情况下、我也得到了 ADC 值2048。 现在、您能否详细解释一下您在"未经请求"部分中建议的内容。 如果 您能帮助我理解录制 语音(比如普通语音)、那么这将是一个很好的设置。 在我的项目中、我实际上正在尝试录制语音以识别呼吸模式。 采样率是否应是典型语音频率范围4kHz 的两倍? 此外、您认为我应该 使用频率范围比这个更高的外部 MIC 吗?  

    感谢你 能抽出时间。  

    谢谢、

        

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我不是 EE、但根据您的观察结果、我想说麦克风运算放大器电路具有 Vref/2偏置、即"0"设计为处于半范围内。 (我忘记了 F5系列上的 Vref、但它在书中。)

    根据电路板用户指南(SLAU263I)第4.5.1秒、滤波器电路(显示为"运算放大器")的截止频率为4kHz、因此根据奈奎斯特、您至少需要采样两倍、例如8kHz。 您受到滤波器的限制、因此更高级的麦克风不会发生太大的变化。 我不知道呼吸声音的频谱[另请参阅:Google]、但我想它们在语音范围内。

    如果您的目标是通过 UART 将所有非板载数据发送到 PC、则需要以相当快的速度运行 UART。 要以十六进制 ASCII 格式发送数据,请使用1字节分隔符('\n'例如)8000*(3+1)*10=320kbps (与当前的9.6kbps 相比)。 这是可行的--我经常以500kbps 的速率运行 MSP430 UART --但是你需要小心编码以保持数据的流动。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Bruce、您好!

    非常感谢您详细地解释了相关内容。 我理解您的观点。 我在这个领域是新的。 努力使每 一步都能正常工作。 您的解释 对我有很大帮助。 我以后再问更多问题、没关系。

    此致、

    行。