欢迎来到聚芯龙人计算机 电话: +086-0755-83757070 / 83662100

服务中心

SERVICE

传真:

+086-0755-83676377

电话:

+086-0755-83757070

AD转换和 PWM 程序设计方法

  方法 1:在主程序中左右声道 PWM 开始的同时,进行左右声道 AD 采样,在 AD 采样子程序中一次采样左右声道,完成后等待一段时间再刷新左右声道 PWM0、PWMl 的 CCAPL0、CCAPLl比较寄存器,作为下一次 PWM 的数据。这样做的好处是,在 PWM 的同时可以进行 AD 转换,充分利用 CPU时间,其缺点是 AD 采样时可能会引入 PWM 噪声,并且不能准确控制刷新 PWM比较寄存器的时间
  方法2:与方法1相似, 只要是使能PWM中断, 在中断处理程序中刷新左右声道PWMO、 PVMl的 CCAPL0、CCAPLl 比较寄存器。
  方法 3:在主程序中开启左右声道 PWM,并使能 PWM 中断,进入无限循环。在中断处理程序中进行 AD 采样,然后刷新 PWM 比较寄存器。其缺点是:PWM 完成后才进行 AD 转换,令采样频率变低。
  经反复比较后,笔者选用了方法 2,部分程序如下:
  主程序:
  void main(void)
  {Init_System 0;
  CR=1;///开始 PWM
  while(1)
  {DA 0;DA();DA();DA();DA();DA();DA();DA 0;DA ();DA ();
  WDT_CONTR=0x3C;
  }}
  AD采样子程序:
  voidAD(void) ////方法2
  {//采样左声道 8.4μ,s//
  ADC_CONTR=0xEC;∥选择通道 p1.4 并开始转换。
  _nop_();_nop_();_op_();_nop_();_nop_0;
  while(ADC_CONTR!=OxF4);/////等待 AD转换完成
  ADC_CONTR=0xE4;
  AD_resuIt_LEFT=(0xFF-ADC_DATA)   ; ////STCl2C5202AD单片机 PWM 默认 CCAPLO小于
  待比较值时输出低电平,且此模式不像 MEGA 系类单片机那样可以设置。为了 PWM 和采样值一
  致,需与 OxFF 做差值。
  //采样右声道 8.4μs//
  ADC_CONTR=0xEE;//选择通道p1.6 并开始转换。
  _nop_();_nop_();-nop_();_nop_();_nop_0;
  while(ADC_CONTR!=0xF6);/////等待 AD转换完成
  ADC_CONTR=0xE6;
  AD_result_RIGHT=(OxFF-ADC_DATA);
  PWM 中断子程序:
  voidPCA_nt(void)interrupt 7/////2///3
  {
  CF=0;//清空溢出标志
  CCAPOH=AD_result_LEFT;////PWM0//刷新比较寄存器的数据
  CCAPlH=AD_result RIGHT;////PWMl
  }
  D 类功放是一个脉冲控制的大电流开关放大器,把比较器输出的 PWM 信号变成高电压、大电流的大功率 PWM 信号。其最大输出功率由负载、电源电压和晶体管允许流过的电流来决定。
  设计这部分电路时,笔者为了方便给单片机供电,采用单电源供电,曾尝试用 OTL 功放电路不加自举电路,工作时输出耦合电容前端电压约为 2.5V,表现为输出功率和效率很低。这是因为单片机输出的0~5V的PWM脉冲信号不能使这只NPN型管子完全导通所致(输出耦合电容前端电压会抬高,正常工作时这点电压约为 1/2 供电电压),电路见图 3 所示。
  考虑到经典 OTL 电路分立元件较多,焊接组装后印制板难看,调试不方便,笔者采用了将单片机输出的 PWM 经过运放 TL082 组成的 2.5V 比较电路,当高于 2.5V 时输出+12V 电压,低于 2.5V时输出-12V电压,以此驱动后级由 IRF7389 组成的功放电路的方式。
  此部分的作用,是把大功率 PWM 波形中的声音信息还原出来,其方法是用一个低通滤波器。
  由于此时电流很大,而 RC 结构的低通滤波器电阻会耗能,不能采用,因此必须使用 LC 低通滤波器。当占空比大于 1:1 的脉冲到来时,C 的充电时间大于放电时间,输出电平上升;当窄脉冲到来时,放电时间大于充电时间,输出电平下降,正好与原音频信号的幅度变化一致,所以原音频信号被恢复出来
  低通滤波器的性能对音质的影响很大,该低通滤波器工作在大电流下,负载就是音箱。好在D类功放的输出阻抗小对音响的阻抗,如 4Ω、8Ω不是很敏感。由于 PWM 频率足够高,笔者只设计了一个电感和一电容的低通滤波器。
  以上介绍的是笔者实践的过程,论述并不严谨,而且有很多方面需要改进,比如程序设计、供电电压(正负供电)、功放电路(可以用两片单片机,或带 4路 PWM 功能的 STCl2C,5608AV单片机分别制作左右声道,采用 H 桥功放电路)、输出滤波电路等等,有兴趣的朋友可以按自己的想法改进设计,还可以增加红外遥控音量调节等功能。