基于dsp2812的遥控型开关电源的设计与制作资料.docx
- 文档编号:9574875
- 上传时间:2023-02-05
- 格式:DOCX
- 页数:22
- 大小:84.17KB
基于dsp2812的遥控型开关电源的设计与制作资料.docx
《基于dsp2812的遥控型开关电源的设计与制作资料.docx》由会员分享,可在线阅读,更多相关《基于dsp2812的遥控型开关电源的设计与制作资料.docx(22页珍藏版)》请在冰豆网上搜索。
基于dsp2812的遥控型开关电源的设计与制作资料
上海电力学院
课程报告
课程设计名称:
遥控型开关电源设计与制作
班级:
2014071指导老师:
曹以龙
姓名:
郭茂学号:
20140898
电子与信息工程学院
1.前言
随着电子技术的迅猛发展红外遥控技术已渗透到国民经济的各部门及人们的日常生活中,在工业自动化控制,信息通信,环境检测,安全防范,家用电气控制,国防工业及日常生活等许多方面都得到了广泛的应用。
通常稳压电源的输出是固定不变的,然而某些测试仪器却需要电源的输出在一定范围内可调,甚至这些测试仪器还工作在非常恶劣的环境下,如果能够实现对这类测试仪器的电源进行遥控,可以大大提高操作的便捷性,并且能够有效地保护人身安全。
本文介绍可调遥控型电源开关的设计,该设计采用红外遥控系统,由红外遥控发射电路发射红外信号,通过红外遥控接收电路接收信号并进行解调,控制电源电路输出所需电压。
关键词:
红外遥控系统;可调电源开关;电子产品
2.设计方案原理
2.1系统设计方案
遥控型开关电源设计与制作系统设计原理框图如图三所示。
图中所列模块有:
遥控器红外线接收模块,51CPU最小系统模块,RS-485通信模块,DSP主控制数据分析处理芯片,PWM输出滤波DA以及电压跟随器等模拟电路,Boost升压电路,输出电压AD采样数码管显示模块。
本作品的特色之处主要体现在红外遥控技术:
无需手动调试电路,轻轻一按,输出电压随心所欲,很大程度上增强了人机交互能力,而且没有直接的硬件接触,用户的安全性得到了最大程度上的保障,具有很强的快捷性与普遍实用性。
图一:
遥控器模块图二:
Boost升压电路
红外接收管
51MCU
遥控器
485通信
DSP数据分析处理
AD采样数码显示
Boost开关电源
PWM滤波DA电路
图三:
基于DSP的遥控型开关电源设计与制作系统设计原理框图
2.2系统工作流程
(1)遥控器向装有红外接收管的51MCU发送相关指令,51MCU将接收到的指令处理分析以RS-485的通信方式发送至DSP处理系统;
(2)DSP主控制系统接收不同的数据比较生成不同占空比的PWM波,经DA滤波电路,电压跟随器后连接Boost电路中3483反馈控制芯片的feedback引脚;
(3)随着滤波电压不同的幅值,Boost电路输出不同的幅值的电压,再将输出电压AD采样至DSP主控制系统,将当前电压值用数码管显示。
3.单元电路设计
DSP数据分析处理控制模块是本设计的核心部分,是整个系统的基石。
利用DSP的事件管理器中的输出比较模块,可产生占空比及频率均可调的六路互补对称带死区的PWM波,它的强大之处就是在于此;
Boost升压电路采用3843主控芯片控制MOS管的导通与关断,并将输出电压分压拉回比较,实现了闭环稳定调节,具体电路如图四所示;
遥控器及红外接收管部分硬件较为简单,主要是程序数据获得部分,见软件代码附录;
3.1PWM滤波DA及电压跟随器电路:
选取合适的电阻电容将DSP输出的PWM波虑为直流电压信号,再经一个电压跟随器起缓冲作用,输出电压信号与Boost电路输出电压分压后分别接运放的反相和同相输入端,反馈端电阻和电容并联,输出接入3483芯片的feedback引脚。
同时,该运放的同相输入端可接入DSP进行AD采样。
图四
(1):
PWM滤波DA及电压跟随器电路
3.2Boost升压电路:
在Boost电路中,feedback引脚的电压与reference引脚电压做差所得直流信号与固定频率的锯齿波电压比较所得不同占空比的周期信号作为MOS管的输入。
在高电平时,MOS管导通,电容放电电压降低;在低电平时,MOS管截止,电感放电,电压升高。
场效应管的不断导通,截止的脉冲宽度使电容上的电压上升,而且电容上的电压最终稳定在一个预期值,开关导通时的压降和截止时上升的电压相等,开关频率快,最终得到稳定的直流电压输出波形。
图四
(2):
Boost升压电路
由以上分析,feedback引脚的任一电压必将对应一个输出电压幅值。
在图二的综合电路中,随着PWM占空比的增大,DA后得到的直流电压也将增大,在2号运放的反相输入端电压增大,输出电压增大,MOS管的截止脉冲宽度增大,输出电压增大,使运放的同相输入端电压增大,在反馈回路中和运放输出电压稳定。
由此构成一个完整的反馈闭环控制电路。
整个电路的输出电压随着DA电压的变化而变化,而且稳定可控。
4实验过程及系统软件设计
本设计软件使用C语言编程实现,主要软件程序思维如图五;
遥控器数据获取处理
DSP数据分析
DSP输出PWM占空比改变
DSPAD采样输出电压
……
图五:
软件程序思维导势图
51主要程序如代码附录:
主要包括红外信号数据获取处理,并将按键值以RS-485的通信方式发送至DSP。
由程序分析易得,红外接收管所获得的时域信号为一系列的脉冲信号,包括前置引导判别和数据信号,数据与脉冲宽度时间相对应,计算延时即可得。
下图四为红外接收管获取的脉冲信号;由此遥控器的红外协议分析可得,如果我们了解了相关类型的协议,完全可以自己做出一个万能遥控器!
图四:
红外接收管获取的脉冲信号
DSP主要程序如代码附录:
主要包括接收51所发数据,并调整所产生的PWM波的占空比及开启AD采样中断和数码管显示部分。
主要用到了Gpio,485通信,事件管理器和AD转换等模块。
包括所用到的初始化和中断函数等;
DSP软件的整体逻辑可概括为一下几步:
(1)开启SCI中断接收遥控数据,并将所得遥控数据与事件管理器输出PWM的比较值挂钩;
(2)使能事件管理器输出比较模块,并使能周期中断,在中断服务子程序中调整比较值,使其输出随遥控器键值而变化的不同占空比的PWM波;
(3)开启AD中断,采样输出电压,将AD值所代表的电压值通过数码管显示,数码管的显示程序部分应放到周期中断服务子程序中。
5.设计成果展示及心得体会:
在输入电压12V时,遥控器按键可分别调控输出电压达到20V到40V,而且输出稳定可控,同时数码管会将当前电压值显示。
在上学期开关电源课程学习的基础上,在DSP课程上我通过对DSP中Gpio口,事件管理器,AD采样,中断等等模块的学习重组,将二者结合完成了基于DSP的遥控型开关电源设计与制作。
在设计过程中也遇到了些许困难,但在老师的帮助和自己的坚持下完成了此次自我设计,加深了对开关电源电路的理解和认识。
自我感觉尤其在PWM滤波电路及后面的运放电路中,自己对运放的理解更加深入,模电的理解有了新的进步。
总体而言,此次设计中涵盖的东西较广,自己也从中学到了很多,软件的逻辑性思维,硬件电路的调试技巧以及动手能力的培养等。
6.代码附录:
51部分:
voidmain(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;j<4;j++)//收集四组数据
{
for(k=0;k<8;k++)//每组数据有8位
{
while(IRIN)//等IR变为低电平,跳过4.5ms的前导高电平信号。
{delay
(1);}
while(!
IRIN)//等IR变为高电平
{delay
(1);}
while(IRIN)//计算IR高电平时长
{
delay
(1);
N++;
}//高电平计数完毕
IRCOM[j]=IRCOM[j]>>1;//数据最高位补“0”
if(N>=8)
{IRCOM[j]=IRCOM[j]|0x80;}//数据最高位补“1”
N=0;
}//endfork
}//endforj
switch(IRCOM[2])
{
case0x1C:
{
distemp=0x05;
break;
}
case0x5A:
{
distemp=0x06;
break;
}
case0x42:
{
distemp=0x07;
break;
}
case0x52:
{
distemp=0x08;
break;
}
case0x4A:
{
distemp=0x09;
break;
}
default:
{
distemp=0x00;
break;
}
}
RS485E=1;//485的使能脚
SBUF=distemp;//将要发送的数据放入到发送寄存器
while(!
TI);//等待发送数据完成
TI=0;//清除发送完成标志位
IRIN=1;
delay1(100);//delay很重要
}
else
{
break;
}
}
}
}
标准Delay函数:
voiddelay(ucharx)//x*0.14MS
{
unsignedchari;
while(x--)
{
for(i=0;i<13;i++){}
}
}
串口初始化函数:
voidUsartConfiguration()
{
SCON=0X50;//设置为工作方式1
TMOD=0X20;//设置计数器工作方式2
PCON=0X00;//8080//波特率加倍
TH1=0XFD;//F3FA//计数器初始值设置,注意波特率是9600的
TL1=0XFD;//F3FA
ES=1;//打开接收中断
EA=1;//打开总中断
TR1=1;//打开计数器
}
DSP主要程序函数部分:
//主函数部分;
unsignedchari;//选段码
unsignedintm=1000;//占空比
doublek;//AD采样值
voidmain(void)
{
InitSysCtrl();//初始化系统函数
DINT;//关总中断
IER=0x0000;//禁止CPU中断
IFR=0x0000;//清除CPU中断标志
InitPieCtrl();//初始化PIE控制寄存器
InitPieVectTable();//初始化PIE中断向量表
//---------------------------------------------------------
EALLOW;
PieVectTable.RXAINT=&SCIA_RX_isr;//SCIA接收中断
PieVectTable.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();//初始化EV
Init_Sci();//初始化SCI
//-----------------------使能PIE----------------------------
PieCtrlRegs.PIEIER9.bit.INTx1=1;//使能PIE模块中的SCI接收中断
PieCtrlRegs.PIEIER2.bit.INTx4=1;//使能.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为占空比比较值设定;
{
switch(i)
{
case5:
{
m=4500;
break;
}
case6:
{
m=5375;
break;
}
case7:
{
m=6245;
break;
}
case8:
{
m=7120;
break;
}
default:
{
m=0;
break;
}
}
//初始化Gpio口;
voidInit_Gpio(void)
{
EALLOW;
//----------------------------------------------------------------
//LED部分
GpioMuxRegs.GPFMUX.bit.MFSRA_GPIOF11=0;//设置为通用I/O口
GpioMuxRegs.GPFDIR.bit.GPIOF11=1;//IO口方向为输出
GpioMuxRegs.GPFMUX.bit.MCLKXA_GPIOF8=0;//设置为通用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;
//RS485通讯
//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功能引脚
GpioMuxRegs.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.PWM6_GPIOA5=1;//设置PWM6引脚
EDIS;
}
//初始化ADC采样模块
//=================================================================
voidInit_ADC(void)
{
unsignedintad;//定义一个局部变量i用来短延时
AdcRegs.ADCTRL1.bit.RESET=1;//复位ADC模块
for(ad=0;ad<1;ad++);//空指令延时一个机器周期
AdcRegs.ADCTRL1.bit.RESET=0;
AdcRegs.ADCTRL1.bit.SUSMOD=3;//仿真暂停时序列发生器和其他数字电路逻辑立即停止
AdcRegs.ADCTRL1.bit.ACQ_PS=0;//采样脉冲宽度ts=(ACQ_PS+1)*Tadcclk;这里为一个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;ad<10000;ad++);
AdcRegs.ADCTRL3.bit.ADCPWDN=1;//ADC模块的模拟电路上电
for(ad=0;ad<5000;ad++);
AdcRegs.ADCTRL3.bit.ADCCLKPS=30;//设定ADC内核时钟分频器150/(2*30)=2.5M
AdcRegs.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.ADCTRL2.bit.INT_ENA_SEQ1=1;//使能排序器SEQ1的中断
AdcRegs.ADCTRL2.bit.INT_MOD_SEQ1=0;//排序器SEQ1每个序列结束,产生中断
AdcRegs.ADCTRL2.bit.EVA_SOC_SEQ1=0;//禁止EVA触发排序器SEQ1
AdcRegs.ADCTRL2.bit.SOC_SEQ1=1;//软件写1触发SEQ1进行A/D转换
}
//初始化SCI模块
//=================================================================
voidInit_Sci(void)//中断方式接收
{
SciaRegs.SCICCR.bit.STOPBITS=0;//1位停止位
SciaRegs.SCICCR.bit.PARITYENA=0;//禁止极性功能
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;//波特率为9600
SciaRegs.SCICTL2.bit.RXBKINTENA=1;
SciaRegs.SCICTL1.bit.SWRESET=1;//重启SCI
}
//初始化EV模块
//=================================================================
voidInit_EV(void)//无死区,单控制占空比;
{
intj;
EvaRegs.T1CON.bit.TMODE=1;//连续增减模式
EvaRegs.T1CON.bit.TPS=1;//预定标因子设置为1,T1CLK=HSPCLK/2=37.5MHz
EvaRegs.T1CON.bit.TENABLE=0;//先暂停T1计数
EvaRegs.T1CON.bit.TCLKS10=0;//使用内部时钟T1CLK
EvaRegs.T1CON.bit.TECMPR=1;//使能定时器比较操作
//EvaRegs.T1PR=23;//周期寄存器78.125us/4=2*T1PR(5860)*6.67ns/4
EvaRegs.T1PR=0x493E;//1khz;18750
EvaRegs.T1CNT=0;//计数器初始值为0
EvaRegs.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;j<5000;j++);
//输出动作
EvaRegs.ACTRA.all=0x0999;//PWM1,3,5高有效;PWM2,4,6低有效
//T1CMP设置
EvaRegs.GPTCONA.bit.T1CTRIPE=0;//禁止保护作用
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 dsp2812 遥控 开关电源 设计 制作 资料
![提示](https://static.bdocx.com/images/bang_tan.gif)