haoDIY创好电子音响电脑科技DIY小制作发明移动版

主页 > 音响DIY > 功放DIY > 后级DIY >

分体式_DTS解码&卡拉OK功放的设计与制作(参赛)(4)


  喇叭保护电路需要直流12V电源,直接使用400W环形变压器附带的交流12V经过整流滤波后得到,此时要注意滤波电容不能太大(也就是说不能有太高的储能),这样关机时能马上去点,使得继电器能马上断开。由于LM3886自带了比较完善的保护功能,所以本机只在BTL放大部分加入了保护电路。
  喇叭保护电路参考了论坛里三极管搭接方式,直接使用万能板制作,此处不在详细电路,各位可以搜一下相关资料,如有问题,下次再另做说明,实际按装完效果如图:
   分体式_DTS解码&卡拉OK功放的设计与制作(参赛)(4)







    硬件电路设计制作好后,可以先对各个模块进行单独调试,此时要注意不同模块之间的电平幅度,调试时可以通过电脑输出一个额定幅度的信号,在每一级的输出端用示波器查看波形完整性以及电平幅度。如果发现过高或过低,则可以更改相应的匹配衰减电阻,最终要使得5个通道的放大倍数是一致的(这是多声到功放制作中极为重要的一点),而且要保证在DAC输出最大幅度时,最末端输出的波形不失真。

===软件设计===

    系统采用通用C51单片机作为主控制平台,通过按键和红外遥控接收用户指令,并控制相应的功能模块进行工作。 软件设计占了系统工作量的很大一部分,由于C51单片机为单线程处理器,所以设计设计过程中最大程度的利用了中断处理环节,从另一种意义而言,相当于增加了操作线程。
    本机采用了多级采单显示控制方法,这对于单片机的速度来说,具有一定的难度,所以软件处理时,对每一个菜单状态分配一个相应的ID号,
而且把这些ID号与键值相联系组成一个结构体,这样只需要知道当前的ID和键值就能查询到新的ID,很大程度上简化了处理器的操作任务。
    所以,系统的工作流程框图可以简化成下图所示:
    分体式_DTS解码&卡拉OK功放的设计与制作(参赛)(4) 



    和硬件设计一样,软件部分也按模块进行分类,将复杂的控制程序逐个完成;在此把整个软件按功能划分为:DTS解码控制模块,卡拉OK控制模块,音量调节模块,时钟处理模块、LCD显示控制和按键遥控器识别处理等6个部分。
    虽然划分的模块较多,但其底层的通信协议却有很大的相似性,均为三线或两线串行数据传输协议,所以本文只以卡拉OK模块(M65856)的
数据传输协议以及脉冲编码电位器的识别加以举例说明(为了减少篇幅,大家都不太喜欢看长篇分体式_DTS解码&卡拉OK功放的设计与制作(参赛)(4) ),对于个别深入的问题,将在以后开贴和大家讨论...
   
M65856数据通信:   
   M65856卡拉OK混响芯片采用三线串行通信模式,分别为:Latch(加载锁定)、Clock(同步时钟)、Data(数据)三个IO口。按照规格书说明及通信时序图可知,要正确传输16位数据应该遵循的操作要点为:
   a. 将Latch信号置为低电平
   b. 将Clock信号置为低电平,根据当前位的设置Data的电平状态,将Clock置为高电平,这样就把当前位压入寄存器缓存区,循环操作
16次。
   c. 将Latch信号置为高电平,执行此操作后,缓冲区中的最后16位数据将被锁存加载到M65856的控制积存器中,一个16位数据的传输
完成。
    分体式_DTS解码&卡拉OK功放的设计与制作(参赛)(4) 



      数据传输的程序段如下:
#define     SET_HIGH(x)       x = 1
#define     CLEAR_LOW(x)    x = 0
.....

sbit           karaOK_STB   = P2^6;
sbit           karaOK_CLK   = P0^6;
sbit           karaOK_DAT   = P0^0;
.....

void KaraOK_SendData(U16 data)
{
    U8 icount = 0;

    CLEAR_LOW(karaOK_STB);
    for(icount=0;icount<16;icount++)
    {
        CLEAR_LOW(karaOK_CLK);
        karaOK_DAT = data&0x0001;
        SET_HIGH(karaOK_CLK);
        data>>=1;
    }
    SET_HIGH(karaOK_STB);
}
......

脉冲旋转电位器的识别:
    现在比较通用的脉冲电位器有5个引脚:4,5两个引脚用于电位器被按下时的识别,1,2,3三个引脚则用于左右旋转的识别;识别
左右旋转的方法比较多,但本质原理都是利用电位器内部长短不一的金属触片,在旋转时三个引脚内部相互接触的先后顺序不一样来进行判断
    下面是本设计中使用的方法,简单有效:
     将1脚接GND,其余两脚通过上拉电阻到VCC,并作为数据接口连接到MCU,通过示波器可以得到电位器正反转时2,3脚的波形:

      分体式_DTS解码&卡拉OK功放的设计与制作(参赛)(4) 



    由波形时序,我们可以发现:
    1. 向右旋转,当Pin2变为低电平时,Pin3也为低电平
    2. 向左旋转,当Pin2变位低电平时,在一段时间内,Pin3仍保持为高电平

     
    所以在程序处理时,只需要查询Pin2脚的状态作为触发标志,当Pin2出现低电平,立即检测Pin3脚状态,如果Pin3为高电平,则表示电位器左转,否则为右转。

   实际编写的程序代码段如下:
#define    KEY_LEFT      0xf0
#define    KEY_RIGHT    0x0f


sbit          key_A   = P2^0;     
sbit          key_B   = P2^1;

static unsigned char key_code =0x00;


void main(void)
{
    IT1 = 0;
    EX1 = 1;
    EA = 1;

    while(1)
    {
        ;
        /*main function*/
    }
}



void EX1_Int1() interrupt 2
{
    EX1 = 0;

    if(key_A)
   {
       key_code = 0x00;
   }
   else
   {
      _nop();
      _nop();
     _nop();
     

      if(key_B)
     {
         key_code = KEY_LEFT;
     }
     else
     {
        key_code = KEY_RIGHT;
      } (责任编辑:admin)
haoDIY创好电子 版权所有,电话微信13977534587