4798|5

1万

帖子

25

TA的资源

裸片初长成(高级)

楼主
 

【玩转C2000 Launchpad】数字功放 [复制链接]

用C2000 Launchpad做个音频功放,不知道可行否。近几天间断地搞了一下,开始时用实验板焊,太麻烦,后来又找块PCB焊上部分相关元件。


 

一、电路组成。

音频输入:由ADCIN6输入,将直流电平固定在1.65V

处理方法:ADC转换后的值,直接控制PWM输出,这里使用了PWM1APWM1B

驱动及输出:使用MOSFET驱动器,驱动N-P互补型MOS管。

 

具体电路如下:


二、程序部分。

使用PWM1APWM1B驱动,其波形要求如下:



PWM初始化部分:

void InitEPwm1(void)
{
 EPwm1Regs.TBPRD = 120;                         // Set timer period
 EPwm1Regs.TBPHS.half.TBPHS = 0x0000;            // Phase is 0
 EPwm1Regs.TBCTR = 0x0000;                       // Clear counter

 // Setup TBCLK
 EPwm1Regs.TBCTL.bit.CTRMODE  = TB_COUNT_UP;  // Count up
 EPwm1Regs.TBCTL.bit.PHSEN  = TB_DISABLE;        // Disable phase loading
 EPwm1Regs.TBCTL.bit.PRDLD   = TB_SHADOW; // loaded from its shadow register
 EPwm1Regs.TBCTL.bit.HSPCLKDIV = TB_DIV1;       // Clock ratio to SYSCLKOUT
 EPwm1Regs.TBCTL.bit.CLKDIV  = TB_DIV1;

 EPwm1Regs.CMPCTL.bit.SHDWAMODE = CC_SHADOW;    // Load registers every ZERO
 EPwm1Regs.CMPCTL.bit.SHDWBMODE = CC_SHADOW;
 EPwm1Regs.CMPCTL.bit.LOADAMODE = CC_CTR_ZERO;
 EPwm1Regs.CMPCTL.bit.LOADBMODE = CC_CTR_ZERO;

 // Set actions
 EPwm1Regs.AQCTLA.bit.ZRO = AQ_SET;             // Set PWM1A on Zero
 EPwm1Regs.AQCTLA.bit.CAU = AQ_CLEAR;

 EPwm1Regs.DBCTL.bit.IN_MODE  = 0;
 EPwm1Regs.DBCTL.bit.OUT_MODE = DB_FULL_ENABLE; // enable Dead-band module
 EPwm1Regs.DBCTL.bit.POLSEL   = DB_ACTV_HIC;   // Active Hi complementary
 EPwm1Regs.DBFED = 7;       // FED = 50 TBCLKs initially
 EPwm1Regs.DBRED = 5;       // RED = 70 TBCLKs initially

 // Setup compare
 EPwm1Regs.CMPA.half.CMPA = 60;

 

 //EPwm1Regs.AQCTLB.bit.CAU = AQ_CLEAR;          // Set PWM1A on Zero
 //EPwm1Regs.AQCTLB.bit.PRD = AQ_SET;

 // 触发ADC SOC
 EPwm1Regs.ETSEL.bit.SOCAEN = 1;
 EPwm1Regs.ETSEL.bit.SOCASEL= ET_CTR_PRD;

 EPwm1Regs.ETPS.bit.SOCACNT = ET_1ST;
 EPwm1Regs.ETPS.bit.SOCAPRD  = ET_1ST;
/*
 EALLOW; // Note these registers are protected
 // and act only on ChA
 EPwm1Regs.HRCNFG.all = 0x0; // clear all bits first
 EPwm1Regs.HRCNFG.bit.EDGMODE = HR_FEP; // Control Falling Edge Position
 EPwm1Regs.HRCNFG.bit.CTLMODE = HR_CMP; // CMPAHR controls the MEP
 EPwm1Regs.HRCNFG.bit.HRLOAD = HR_CTR_ZERO; // Shadow load on CTR=Zero
 EDIS;
 MEP_ScaleFactor = 111*256;
*/
}

ADC初始化部分:

void InitAdc(void)
{
 EALLOW;
 SysCtrlRegs.PCLKCR0.bit.ADCENCLK = 1;
 (*Device_cal)();
 EDIS;

 // Please note that for the delay function below to operate correctly the
    // CPU_RATE define statement in the DSP2802x_Examples.h file must
    // contain the correct CPU clock period in nanoseconds.
    EALLOW;
    AdcRegs.ADCCTL1.bit.ADCBGPWD  = 1;      // Power ADC BG
    AdcRegs.ADCCTL1.bit.ADCREFPWD = 1;      // Power reference
    AdcRegs.ADCCTL1.bit.ADCPWDN   = 1;      // Power ADC
    AdcRegs.ADCCTL1.bit.ADCENABLE = 1;      // Enable ADC
    AdcRegs.ADCCTL1.bit.ADCREFSEL = 0;      // Select interal BG
    EDIS;
    DELAY_US(ADC_usDELAY);         // Delay before converting ADC channels

 

    ////////////////////////////////////////////////////////
 EALLOW;
 AdcRegs.ADCCTL2.all   = 0;   // ADC clock = CPU clock
 AdcRegs.ADCCTL1.bit.INTPULSEPOS = 1; //ADCINT1 trips after AdcResults latch

 AdcRegs.INTSEL1N2.bit.INT1E  = 1;  //
 AdcRegs.INTSEL1N2.bit.INT1SEL = 0;  // EOC0 is trigger for ADCINT1
 AdcRegs.INTSEL1N2.bit.INT1CONT  = 1;  // Enable ADCINT1 Continuous mode

 AdcRegs.ADCINTSOCSEL1.bit.SOC0  = 0;  // TRIGSEL field determines SOCx trigger.


 AdcRegs.SOCPRICTL.all   = 0;   // SOC0 is first SOC

 AdcRegs.ADCSOCFRC1.all  = 0;

 //   trigger source
 ///////////////////////////////////////////discarding
 AdcRegs.ADCSOC0CTL.bit.ACQPS = 6; // Sample window is 7 cycles
 AdcRegs.ADCSOC0CTL.bit.CHSEL = 0x0e; // ADCINB6
 AdcRegs.ADCSOC0CTL.bit.TRIGSEL = 5; // ePWM1A, ADCSOCA

 EDIS;

 DELAY_US(ADC_usDELAY);
}

中断处理部分:

interrupt void AdcInt1Isr(void)
{
 ledflash++;
 if (ledflash > 57000)
 {
  GpioDataRegs.GPATOGGLE.bit.GPIO2 = 1;
  ledflash = 0;
 }
 EPwm1Regs.CMPA.half.CMPA = AdcResult.ADCRESULT0>>5;
 PieCtrlRegs.PIEACK.all  = PIEACK_GROUP1;
}

最新回复

这样出来的声音数码味会好浓啊...  详情 回复 发表于 2013-1-28 19:20
 
点赞 关注(1)

回复
举报

7228

帖子

192

TA的资源

五彩晶圆(高级)

沙发
 
支持一下
这个MOS驱动是IR系列的吧  
这个AD采样的是什么信号呢?

点评

程序还要调整,现在的工作频率太高了,静态损耗很大。 驱动是TI的UCC27324 ADC的输入,使用象电脑上的“线路输出” [ 本帖最后由 dontium 于 2013-1-23 11:30 编辑 ]  详情 回复 发表于 2013-1-23 11:23
 
 

回复

1万

帖子

25

TA的资源

裸片初长成(高级)

板凳
 

回复 沙发 常见泽1 的帖子

程序还要调整,现在的工作频率太高了,静态损耗很大。

驱动是TI的UCC27324

ADC的输入,使用象电脑上的“线路输出”

[ 本帖最后由 dontium 于 2013-1-23 11:30 编辑 ]
 
 
 

回复

1万

帖子

25

TA的资源

裸片初长成(高级)

4
 
原来使用500K的频率,MOSFET的功耗太大,在没有接那个电感---仅两个管子时,静态电流就达到了400mA,

后改为200K,

[ 本帖最后由 dontium 于 2013-1-24 21:31 编辑 ]
 
 
 

回复

474

帖子

2

TA的资源

纯净的硅(初级)

5
 
这样出来的声音数码味会好浓啊...

点评

没有用HRPWM,如果用它会好很多。  详情 回复 发表于 2013-1-28 22:23
 
 
 

回复

1万

帖子

25

TA的资源

裸片初长成(高级)

6
 

回复 5楼 zgbkdlm 的帖子

没有用HRPWM,如果用它会好很多。
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/6 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表