《基于dsp2812的遥控型开关电源的设计与制作(共16页).doc》由会员分享,可在线阅读,更多相关《基于dsp2812的遥控型开关电源的设计与制作(共16页).doc(16页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、精选优质文档-倾情为你奉上上海电力学院课程报告课程设计名称: 遥控型开关电源设计与制作 班级: 指导老师: 曹以龙 姓名: 郭茂 学号: 电子与信息工程学院1. 前言 随着电子技术的迅猛发展红外遥控技术已渗透到国民经济的各部门及人们的日常生活中,在工业自动化控制,信息通信,环境检测,安全防范,家用电气控制,国防工业及日常生活等许多方面都得到了广泛的应用。 通常稳压电源的输出是固定不变的,然而某些测试仪器却需要电源的输出在一定范围内可调,甚至这些测试仪器还工作在非常恶劣的环境下,如果能够实现对这类测试仪器的电源进行遥控,可以大大提高操作的便捷性,并且能够有效地保护人身安全。 本文介绍可调遥控型电
2、源开关的设计,该设计采用红外遥控系统,由红外遥控发射电路发射红外信号,通过红外遥控接收电路接收信号并进行解调,控制电源电路输出所需电压。关键词:红外遥控系统;可调电源开关;电子产品2.设计方案原理 2.1系统设计方案 遥控型开关电源设计与制作系统设计原理框图如图三所示。图中所列模块有:遥控器红外线接收模块,51CPU最小系统模块,RS-485通信模块,DSP主控制数据分析处理芯片,PWM输出滤波DA以及电压跟随器等模拟电路,Boost升压电路,输出电压AD采样数码管显示模块。 本作品的特色之处主要体现在红外遥控技术:无需手动调试电路,轻轻一按,输出电压随心所欲,很大程度上增强了人机交互能力,而
3、且没有直接的硬件接触,用户的安全性得到了最大程度上的保障,具有很强的快捷性与普遍实用性。 图一:遥控器模块 图二:Boost升压电路红外接收管51MCU遥控器 485通信DSP数据分析处理 AD采样数码显示Boost开关电源PWM滤波DA电路图三:基于DSP的遥控型开关电源设计与制作系统设计原理框图2.2系统工作流程(1) 遥控器向装有红外接收管的51MCU发送相关指令,51MCU将接收到的指令处理分析以RS-485的通信方式发送至DSP处理系统;(2) DSP主控制系统接收不同的数据比较生成不同占空比的PWM波,经DA滤波电路,电压跟随器后连接Boost电路中3483反馈控制芯片的feedb
4、ack引脚;(3) 随着滤波电压不同的幅值,Boost电路输出不同的幅值的电压,再将输出电压AD采样至DSP主控制系统,将当前电压值用数码管显示。3. 单元电路设计 DSP数据分析处理控制模块是本设计的核心部分,是整个系统的基石。利用DSP的事件管理器中的输出比较模块,可产生占空比及频率均可调的六路互补对称带死区的PWM波,它的强大之处就是在于此; Boost升压电路采用3843主控芯片控制MOS管的导通与关断,并将输出电压分压拉回比较,实现了闭环稳定调节,具体电路如图四所示; 遥控器及红外接收管部分硬件较为简单,主要是程序数据获得部分,见软件代码附录; 3.1 PWM滤波DA及电压跟随器电路
5、:选取合适的电阻电容将DSP输出的PWM波虑为直流电压信号,再经一个电压跟随器起缓冲作用,输出电压信号与Boost电路输出电压分压后分别接运放的反相和同相输入端,反馈端电阻和电容并联,输出接入3483芯片的feedback引脚。同时,该运放的同相输入端可接入DSP进行AD采样。图四(1):PWM滤波DA及电压跟随器电路 3.2 Boost升压电路:在Boost电路中,feedback引脚的电压与reference引脚电压做差所得直流信号与固定频率的锯齿波电压比较所得不同占空比的周期信号作为MOS管的输入。在高电平时,MOS管导通,电容放电电压降低;在低电平时,MOS管截止,电感放电,电压升高。
6、场效应管的不断导通,截止的脉冲宽度使电容上的电压上升,而且电容上的电压最终稳定在一个预期值,开关导通时的压降和截止时上升的电压相等,开关频率快,最终得到稳定的直流电压输出波形。图四(2):Boost升压电路由以上分析,feedback引脚的任一电压必将对应一个输出电压幅值。在图二的综合电路中,随着PWM占空比的增大,DA后得到的直流电压也将增大,在2号运放的反相输入端电压增大,输出电压增大,MOS管的截止脉冲宽度增大,输出电压增大,使运放的同相输入端电压增大,在反馈回路中和运放输出电压稳定。由此构成一个完整的反馈闭环控制电路。整个电路的输出电压随着DA电压的变化而变化,而且稳定可控。4 实验过
7、程及系统软件设计 本设计软件使用C语言编程实现,主要软件程序思维如图五;遥控器数据获取处理DSP数据分析DSP输出PWM占空比改变DSP AD采样输出电压 图五:软件程序思维导势图 51主要程序如代码附录:主要包括红外信号数据获取处理,并将按键值以RS-485的通信方式发送至DSP。 由程序分析易得,红外接收管所获得的时域信号为一系列的脉冲信号,包括前置引导判别和数据信号,数据与脉冲宽度时间相对应,计算延时即可得。下图四为红外接收管获取的脉冲信号;由此遥控器的红外协议分析可得,如果我们了解了相关类型的协议,完全可以自己做出一个万能遥控器!图四:红外接收管获取的脉冲信号 DSP主要程序如代码附录
8、:主要包括接收51所发数据,并调整所产生的PWM波的占空比及开启AD采样中断和数码管显示部分。主要用到了Gpio,485通信,事件管理器和AD转换等模块。包括所用到的初始化和中断函数等; DSP软件的整体逻辑可概括为一下几步:(1) 开启SCI中断接收遥控数据,并将所得遥控数据与事件管理器输出PWM的比较值挂钩;(2) 使能事件管理器输出比较模块,并使能周期中断,在中断服务子程序中调整比较值,使其输出随遥控器键值而变化的不同占空比的PWM波;(3) 开启AD中断,采样输出电压,将AD值所代表的电压值通过数码管显示,数码管的显示程序部分应放到周期中断服务子程序中。5.设计成果展示及心得体会: 在
9、输入电压12V时,遥控器按键可分别调控输出电压达到20V到40V,而且输出稳定可控,同时数码管会将当前电压值显示。在上学期开关电源课程学习的基础上,在DSP课程上我通过对DSP中Gpio口,事件管理器,AD采样,中断等等模块的学习重组,将二者结合完成了基于DSP的遥控型开关电源设计与制作。在设计过程中也遇到了些许困难,但在老师的帮助和自己的坚持下完成了此次自我设计,加深了对开关电源电路的理解和认识。自我感觉尤其在PWM滤波电路及后面的运放电路中,自己对运放的理解更加深入,模电的理解有了新的进步。总体而言,此次设计中涵盖的东西较广,自己也从中学到了很多,软件的逻辑性思维,硬件电路的调试技巧以及动
10、手能力的培养等。6.代码附录:51部分:void main(void) IRIN=1; /I/O口初始化,红外接收管数据引脚UsartConfiguration(); /串口初始化函数 while(1) /数据分析获取 while(IRIN=0) delay(15); if (IRIN!=1) while (!IRIN) /等IR变为高电平,跳过9ms的前导低电平信号。 delay(1); for (j=0;j4;j+) /收集四组数据 for (k=0;k 1; /数据最高位补“0” if (N=8) IRCOMj = IRCOMj | 0x80; /数据最高位补“1” N=0; /end
11、for k /end for j switch(IRCOM2) case 0x1C: distemp=0x05;break; case 0x5A: distemp=0x06; break; case 0x42: distemp=0x07;break; case 0x52: distemp=0x08; break; case 0x4A: distemp=0x09;break;default: distemp=0x00;break; RS485E=1; /485的使能脚SBUF = distemp; /将要发送的数据放入到发送寄存器while(!TI); /等待发送数据完成TI=0; /清除发送完
12、成标志位 IRIN=1;delay1(100); /delay很重要 else break; 标准Delay函数:void delay(uchar x) /x*0.14MS unsigned char i; while(x-) for (i = 0; i13; i+) 串口初始化函数:void UsartConfiguration()SCON=0X50;/设置为工作方式1TMOD=0X20;/设置计数器工作方式2PCON=0X00;/8080/波特率加倍TH1=0XFD;/F3 FA /计数器初始值设置,注意波特率是9600的TL1=0XFD; /F3 FAES=1;/打开接收中断EA=1;/
13、打开总中断TR1=1; /打开计数器DSP主要程序函数部分:/主函数部分;unsigned char i;/选段码unsigned int m=1000;/占空比double k;/AD采样值void main(void)InitSysCtrl();/初始化系统函数DINT;/关总中断IER=0x0000;/禁止CPU中断IFR=0x0000;/清除CPU中断标志InitPieCtrl();/初始化PIE控制寄存器InitPieVectTable();/初始化PIE中断向量表/-EALLOW;PieVectTable.RXAINT = &SCIA_RX_isr;/SCIA接收中断PieVect
14、Table.ADCINT = &ADC_SAMPLE_isr;/AD中断入口PieVectTable.T1PINT = &T1_isr;/周期中断入口/PieVectTable.TINT0 = &cpu_timer0_isr;/CPU定时器0中断入口EDIS;/-Init_Gpio();/初始化GPIO口Init_ADC();/初始化ADC模块Init_EV();/初始化EVInit_Sci();/初始化SCI/-使能PIE- PieCtrlRegs.PIEIER9.bit.INTx1=1; /使能PIE模块中的SCI接收中断PieCtrlRegs.PIEIER2.bit.INTx4=1;/使
15、能.PIE的T1周期中断 PieCtrlRegs.PIEIER1.bit.INTx6=1;/使能PIE的ADC中断ADCINT /PieCtrlRegs.PIEIER1.bit.INTx7=1; /使能PIE模块中的CPU定时器0中断/-使能CPU中断- IER|=M_INT2;/开CPU中断 IER|=M_INT9;/开CPU中断sci IER|=M_INT1;/开CPU中断/ IER|=M_INT1;/开CPU中断 EINT;/开全局中断 ERTM;/开实时中断 EvaRegs.T1CON.bit.TENABLE=1;/开定时器T1计数操作 while(1)/i为接收数据判断,m为占空比比
16、较值设定; switch(i) case 5: m=4500;break; case 6: m=5375;break; case 7: m=6245;break; case 8: m=7120;break;default: m=0;break; /初始化Gpio口;void Init_Gpio(void)EALLOW;/-/LED部分GpioMuxRegs.GPFMUX.bit.MFSRA_GPIOF11=0; /设置为通用I/O口GpioMuxRegs.GPFDIR.bit.GPIOF11=1; /IO口方向为输出GpioMuxRegs.GPFMUX.bit.MCLKXA_GPIOF8=0;
17、 /设置为通用I/O口GpioMuxRegs.GPFDIR.bit.GPIOF8=1; /IO口方向为输出GpioMuxRegs.GPFMUX.bit.MFSXA_GPIOF10=0; /设置为通用I/O口GpioMuxRegs.GPFDIR.bit.GPIOF10=1; /IO口方向为输出GpioMuxRegs.GPFMUX.bit.MCLKRA_GPIOF9=0; /设置为通用I/O口/-/数码管部分 GpioMuxRegs.GPBMUX.all = 0x0000; /GPIOB口设置为输出通用IO口,数码管显示使用 GpioMuxRegs.GPBDIR.all = 0xffff; /RS
18、485通讯 /GpioMuxRegs.GPFMUX.bit.SCITXDA_GPIOF4=1; /设置SCIA的发送引脚 GpioMuxRegs.GPFMUX.bit.SCIRXDA_GPIOF5=1; /设置SCIA的接收引脚 GpioMuxRegs.GPDMUX.bit.T3CTRIP_PDPB_GPIOD5 = 0;/将485控制引脚设置为通用的数字IO口 GpioMuxRegs.GPDDIR.bit.GPIOD5 = 0; /将控制IO口设置为输入引脚 /EV模块部分 GpioMuxRegs.GPAMUX.bit.T1PWM_GPIOA6=1;/设置T1PWM功能引脚 GpioMuxR
19、egs.GPAMUX.bit.T2PWM_GPIOA7=1;/设置T2PWM功能引脚 GpioMuxRegs.GPAMUX.bit.PWM1_GPIOA0=1;/设置PWM1引脚 GpioMuxRegs.GPAMUX.bit.PWM2_GPIOA1=1;/设置PWM2引脚 GpioMuxRegs.GPAMUX.bit.PWM3_GPIOA2=1;/设置PWM3引脚 GpioMuxRegs.GPAMUX.bit.PWM4_GPIOA3=1;/设置PWM4引脚 GpioMuxRegs.GPAMUX.bit.PWM5_GPIOA4=1;/设置PWM5引脚 GpioMuxRegs.GPAMUX.bit
20、.PWM6_GPIOA5=1;/设置PWM6引脚EDIS;/初始化ADC采样模块/=void Init_ADC(void)unsigned int ad;/定义一个局部变量i用来短延时AdcRegs.ADCTRL1.bit.RESET=1;/复位ADC模块for(ad=0;ad1;ad+);/空指令延时一个机器周期AdcRegs.ADCTRL1.bit.RESET=0;AdcRegs.ADCTRL1.bit.SUSMOD=3;/仿真暂停时序列发生器和其他数字电路逻辑立即停止AdcRegs.ADCTRL1.bit.ACQ_PS=0;/采样脉冲宽度ts=(ACQ_PS+1)*Tadcclk;这里为
21、一个ADCclk周期AdcRegs.ADCTRL1.bit.CPS=0;/这里ADC时钟分频器没有两分频AdcRegs.ADCTRL1.bit.CONT_RUN=0;/启动-停止模式AdcRegs.ADCTRL1.bit.SEQ_CASC=1;/序列发生器为级联模式AdcRegs.ADCTRL3.bit.ADCBGRFDN=3;/带隙和参考电路上电for(ad=0;ad10000;ad+);AdcRegs.ADCTRL3.bit.ADCPWDN=1;/ADC模块的模拟电路上电for(ad=0;ad5000;ad+);AdcRegs.ADCTRL3.bit.ADCCLKPS=30;/设定ADC内
22、核时钟分频器150/(2*30)=2.5MAdcRegs.ADCTRL3.bit.SMODE_SEL=0;/选择顺序采样模式AdcRegs.ADCMAXCONV.bit.MAX_CONV1=11;/12个转换通道AdcRegs.ADCCHSELSEQ1.all=0x3210;/通道依次采样AdcRegs.ADCCHSELSEQ2.all=0x7654;AdcRegs.ADCCHSELSEQ3.all=0xBA98;AdcRegs.ADCCHSELSEQ4.all=0xFEDC;AdcRegs.ADCST.bit.INT_SEQ1_CLR=1;/写1清除SEQ1中断标志位AdcRegs.ADCT
23、RL2.bit.INT_ENA_SEQ1=1;/使能排序器SEQ1的中断AdcRegs.ADCTRL2.bit.INT_MOD_SEQ1=0;/排序器SEQ1每个序列结束,产生中断AdcRegs.ADCTRL2.bit.EVA_SOC_SEQ1=0;/禁止EVA触发排序器SEQ1AdcRegs.ADCTRL2.bit.SOC_SEQ1=1;/软件写1触发SEQ1进行A/D转换/初始化SCI模块/=void Init_Sci(void)/中断方式接收SciaRegs.SCICCR.bit.STOPBITS=0; /1位停止位SciaRegs.SCICCR.bit.PARITYENA=0; /禁止
24、极性功能SciaRegs.SCICCR.bit.LOOPBKENA=0; /禁止回送测试模式功能SciaRegs.SCICCR.bit.ADDRIDLE_MODE=0; /空闲线模式SciaRegs.SCICCR.bit.SCICHAR=7; /8位数据位/SciaRegs.SCICTL1.bit.TXENA=0; /SCIA模块的发送使能SciaRegs.SCICTL1.bit.RXENA=1; /SCIA模块的接收使能SciaRegs.SCIHBAUD=0x01;SciaRegs.SCILBAUD=0xE7; /波特率为9600SciaRegs.SCICTL2.bit.RXBKINTENA
25、=1;SciaRegs.SCICTL1.bit.SWRESET=1; /重启SCI/初始化EV模块/=void Init_EV(void)/无死区,单控制占空比;int j;EvaRegs.T1CON.bit.TMODE=1;/连续增减模式EvaRegs.T1CON.bit.TPS=1;/预定标因子设置为1,T1CLK=HSPCLK/2=37.5MHzEvaRegs.T1CON.bit.TENABLE=0;/先暂停T1计数EvaRegs.T1CON.bit.TCLKS10=0;/使用内部时钟T1CLKEvaRegs.T1CON.bit.TECMPR=1;/使能定时器比较操作/EvaRegs.T
26、1PR=23;/周期寄存器78.125us/4=2*T1PR(5860)*6.67ns/4EvaRegs.T1PR=0x493E;/1k hz; 18750EvaRegs.T1CNT=0;/计数器初始值为0EvaRegs.COMCONA.bit.CENABLE=1;/使能比较单元的比较操作EvaRegs.COMCONA.bit.FCOMPOE=1;/全比较输出,各引脚由各自的比较逻辑驱动EvaRegs.COMCONA.bit.CLD=2;/比较器的重新装载条件为立即装载EvaRegs.CMPR1=0;EvaRegs.CMPR2=0;EvaRegs.CMPR3=0;for(j=0;j5000;j
27、+);/输出动作EvaRegs.ACTRA.all=0x0999;/PWM1,3,5高有效;PWM2,4,6低有效/T1CMP设置EvaRegs.GPTCONA.bit.T1CTRIPE=0;/禁止保护作用EvaRegs.GPTCONA.bit.T1CMPOE=1;/高电平有效,使能定时器1比较输出EvaRegs.GPTCONA.bit.T1PIN=1;/T1CMP底电平有效/中断使能EvaRegs.EVAIMRA.bit.T1PINT=1;/使能定时器T1周期中断EvaRegs.EVAIFRA.bit.T1PINT=1;/清除T1周期中断的标志位EvaRegs.GPTCONA.bit.T1T
28、OADC=2;/周期中断启动ADC/ADC 中断服务子程序interrupt void ADC_SAMPLE_isr(void)LED1 1 ; AD_sample(&AD_sample_parameter); k=AD_sample_parameter.AD_1;AdcRegs.ADCTRL2.bit.RST_SEQ1=1;/复位排序器SEQ1AdcRegs.ADCST.bit.INT_SEQ1_CLR=1;/写1清除排序器SEQ1的中断标志位PieCtrlRegs.PIEACK.all = PIEACK_GROUP1;/释放应答寄存器以响应其他的中断LED1 0;EINT;/周期计数器T1
29、中断/*interrupt void T1_isr(void) int numBuf2; static int numFlag=0; AdcRegs.ADCTRL2.bit.SOC_SEQ1=1;/软件写1触发排序器SEQ1进行A/D转换 EvaRegs.CMPR1=m; numFlag=(+numFlag)%2; if( m=4500) numBuf0=2; numBuf1=5; NUMOUT=csnumFlag+number(numBufnumFlag); if( m=5375) numBuf0=3; numBuf1=0; NUMOUT=csnumFlag+number(numBufnum
30、Flag); if( m=6245) numBuf0=3; numBuf1=5; NUMOUT=csnumFlag+number(numBufnumFlag); if( m=7120) numBuf0=4; numBuf1=0; NUMOUT=csnumFlag+number(numBufnumFlag); PieCtrlRegs.PIEACK.all = PIEACK_GROUP2;/释放应答寄存器以响应其他的中断 EvaRegs.EVAIFRA.bit.T1PINT=1;/清除中断标志位 EINT;/开全局中断/SCI接收中断interrupt void SCIA_RX_isr(void) int j; LED1 1; i = SciaRegs.SCIRXBUF.all; /接收数据 for(j=0;j30000;j+) /加一个延时有助于稳定 LED1 0; PieCtrlRegs.PIEACK.all=0x0100; /使得同组其他中断能够得到响应 EINT; /开全局中断vcc 专心-专注-专业