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.

[参考译文] TLV320DAC3120:音频发生器问题

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

https://e2e.ti.com/support/audio-group/audio/f/audio-forum/629928/tlv320dac3120-tone-generator-issue

部件号:TLV320DAC3120

大家好,我正在使用TLV320DAC3120并尝试使用蜂鸣器(PRB_P25)为所选频率(参数FHz)生成纯正弦波,我有其他模式从PIC32发送I2S (使用内部PLL在板上配置FS=48kHz时,效果很好) 但在这个模式下,我想用音频板生成正弦波,并重复使它持续播放,直到其中一个参数发生变化。

我按照数据表中的说明进行了计算和配置,我还检查了发送到寄存器的值,并将它们与固定示例进行了比较,结果看起来是正确的:

UINT8_t match_Config[10][2];//{Register address,Register value}
AppData.match.sine = floor (sin (2 * M_PI * FHz)/(4.8万)*(pow (2,15)));
AppData.match.cosine = floor (cos (2 * M_PI * FHz /(4.8万))*(pow (2,15)));
appData.MATCH.beepLength = floor ((4.8万)* 1000 / fHz);//1000个周期

Match_Config[0][0]= 0x00;//选择页面0
match_Config[0][1]= 0x00;

match_Config[1][0]= 0x49;
Match_Config[1][1]=(int)((appData.MATCH.beepLength)和0xff);//注册73
match_Config[2][0]= 0x4A;
Match_Config[2][1]=(int)((((appData.MATCH.beepLength)>> 8)和0xff);//注册74
match_Config[3][0]= 0x4B;
match_Config[3][1]=(int)((((appData.MATCH.beepLength)>> 16)和0xff);//注册75
match_Config[4][0]= 0x4C;
Match_Config[4][1]=(int)(((AppData.Match.Sine)>> 8));//注册76 -正弦MSB
Match_Config[5][0]= 0x4D;
Match_Config[5][1]=(int)(((AppData.Match.Sine))和0xff);//注册77 -正弦LSB
match_Config[6][0]= 0x4E;
Match_Config[6][1]=(int)(((AppData.Match.cosine)>> 8));//注册78 - cosine MSB
match_Config[7][0]= 0x4F;
Match_Config[7][1]=(int)(((AppData.Match.cosine))和0xff);//注册79 - cosine LSB

//如数据表中所述的卷,与二进制值表(第68页REG 65)对应
match_Config[8][0]= 0x41;
Match_Config[8][1]= 0x00;//AppData.Match.volume;第0页注册65
match_Config[9][0]= 0x47;
Match_Config[9][1]= 0x80;//Page 0 Reg 71 0x80 (beepr的最大卷)

/*通过I2C */发送
I2C_Transmit ((sizeof (match_Config)/ 2),match_Config); 

当我探测结果时(例如FHz=200Hz),我得到一个320Hz的方波,而不是正弦波:

我为什么会得到这一错误结果? 使用PurePath Studio I输出,使用"ToneGenerator"模块和探针,我获得完美的正弦波。

此致,

EE学生。

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

    我想从您的设置中了解一些内容:
    正弦和余弦运算符必须以弧度返回其结果。 我认为您的代码就是这样做的,只是想确保。
    -必须将十六进制值写入设备寄存器。 (int)是否将数据转换为十六进制16位值?
    在这些行上,您不会遮挡:
    Match_Config[4][1]=(int)(((AppData.Match.Sine)>> 8));//注册76 -正弦MSB
    Match_Config[6][1]=(int)(((AppData.Match.cosine)>> 8));//注册78 - cosine MSB
    您是否也需要在此处进行掩蔽?

    您是否有机会读回这些寄存器以验证您写入的数据?

    此致,
    Ivan Salazar
    音频应用工程师-低功率音频和执行器
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好Ivan:

    感谢您的回复!

    我检查了一切,一切都很好,我解决了一个没有正弦波的问题,这是因为我选择了最大音量,现在我控制了音量,它工作正常。

    我仍然面临的问题是,范围上的频率错误,我检查了I2C寄存器中的值,这些值计算正确并与数据表中的值和公式匹配,我甚至使用了数据表中给出的值(第37页的表5-18) 对于1kHz的示例,我得到1.7Khz,我有相同的FS=48kHz。

    我使用 数据表的表5-23第47页中给出的值为PLL_CLCKIN=2.048Mhz:{Register, value}配置了FS

    {0x04,0x03},//03,用于使用PPL_CLK的内部生成
    {0x05,0x93},//要配置PLL_CLK和采样频率,请参阅TLV320DAC3120数据表的第46/47页
    {0x06,0x0E},
    {0x07,0x00},
    {0x08,0x00},
    {0x0B,0x82},
    {0x0C,0x87},
    {0x0D,0x00},
    {0x0E,0x80} 

     这是我发出蜂鸣音的代码,我使用了FFFFFF表示最大蜂鸣音长度:

    UINT8_t match_Config[9][2];//{Register address,Register value}
    AppData.match.sine = sinf ((2 * M_PI * FHz)/(4.8万)*(pow (2,15));
    AppData.match.cosine =(cosf (2 * M_PI * FHz /(4.8万))*(pow (2,15)));
    /*
    *如果需要定义匹配蜂鸣音的定义长度,请使用此选项
    AppData.match.cyclesNb = 349 * FHz;
    appData.MATCH.beepLength =(4.8万 * AppData.match.cyclesNb)/ FHz;
    */
    AppData.match.volume = abs ((volume * 0.63 - 63));// beep REG的DB中的容积
    //AppData.match.volume = abs(((volume * 0.875 - 63.5)*2)-48);// dac volume - 0用于测试
    
    Match_Config[0][0]= 0x00;//选择页面0
    match_Config[0][1]= 0x00;
    
    match_Config[1][0]= 0x49;
    Match_Config[1][1]= 0xFF;//((appData.MATCH.beepLength)>> 16)和0xff)//注册73 -用于定义的BEEPLENGTH
    match_Config[2][0]= 0x4A;
    Match_Config[2][1]= 0xFF;//((appData.MATCH.beepLength)>> 8)和0xff);//Reg 74 -用于定义的BEEPLENGTH
    match_Config[3][0]= 0x4B;
    Match_Config[3][1]= 0xFF;//( appData.MATCH.beepLength & 0xff);//Reg 75 -用于定义的BEEPLENGTH
    match_Config[4][0]= 0x4C;
    Match_Config[4][1]=((AppData.Match.sine)>> 8)和0xff;//注册76 -正弦MSB
    Match_Config[5][0]= 0x4D;
    Match_Config[5][1]=(((AppData.Match.Sine))和0xff);//注册77 -正弦LSB
    match_Config[6][0]= 0x4E;
    Match_Config[6][1]=(((AppData.Match.cosine)>> 8)和0xff);//注册78 - cosine MSB
    match_Config[7][0]= 0x4F;
    Match_Config[7][1]=(((AppData.Match.cosine))和0xff);//注册79 - cosine LSB
    
    //如数据表中所述的卷,与二进制值表(第68页REG 65)对应
    //match_Config[8][0]= 0x41;
    //match_Config[8][1]= AppData.match.volume;//Page 0 Reg 65
    match_Config[8][0]= 0x47;
    match_Config[8][1]= 0x80 + AppData.match.volume;//Page 0 Reg 71 0x80 (由滑块控制的最大蜂鸣音量/ DAC音量)
    
    I2C_Transmit ((sizeof (match_Config)/ 2),match_Config); 

    是否有任何东西我丢失了,这会导致频率错误?

    谢谢!

    胺。

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

    我在一个评估板上使用此脚本尝试了您的蜂鸣音设置:
    W 30 49 00 09 60 10 B5 7e E7
    W 30 41 00
    W 30 47 80

    我可以在输出上看到正确的波形。
    您是否对音频播放和哔声使用相同的整体设置? 音频播放工作正常?
    您是否可以共享其余的注册设置以进行查看?

    此致,
    Ivan Salazar
    音频应用工程师-低功率音频和执行器
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好Ivan:

    波形良好,但正弦波的频率似乎不正确。

    是的,我保留相同的整体设置来执行哔声代码,我不知道音频播放的含义,您可以在这里找到启动时的配置: https://codeshare.io/5XKeKz

    谢谢!

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

    时钟设置寄存器似乎适用于MCLK = 2.048MHz和FS = 48kHz
    数据表表5-18中的值对于1kHz音调不准确。
    您编写的值如下所示?:
    0x4C - 0x10
    0x4D - 0xB5
    0x4E - 0x7E
    0x4F - 0xE8

    音频的变化应与您写入寄存器0x4C至0x4F或采样频率FS的值相关。

    此致,
    Ivan Salazar
    音频应用工程师-低功率音频和执行器
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    是的,我的代码输出了1kHz (正弦/余弦)的精确十六进制值,但生成的正弦波为1.58Khz而不是1kHz,其他频率也是错误的。

    我的整体配置是否有任何问题? (您所谈论的播放?)

    使用这些值,您是否可以使用TLV320DAC3120获得1kHz正弦波?

    非常感谢!

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    播放是指将音频发送到设备的I2S输入。
    我已经检查了您的注册设置,目前为止找不到错误。
    是的,当我使用0x4C - 0x10,0x4D - 0xB5,0x4E - 0x7E,0x4F - 0xE8时,我得到1kHz正弦波。
    2.048MHz时钟信号进入引脚8?
    我将继续尝试帮助您调试此问题。

    此致,
    Ivan Salazar
    音频应用工程师-低功率音频和执行器
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好Ivan:

    感谢您的回答。

    我检查了配置,看不到任何会影响蜂鸣器输出频率的东西。 我也尝试了不同的主板,所以它不是硬件。

    我确实进行了一些测量(实际频率和预期频率之间的比率),在计算之前将此系数包括在内后,我获得了范围上的大致正确频率:

    您对这里可能会出现的问题有什么想法吗?

    谢谢!