课程设计Word文档格式.docx
- 文档编号:4398509
- 上传时间:2023-05-03
- 格式:DOCX
- 页数:25
- 大小:754.21KB
课程设计Word文档格式.docx
《课程设计Word文档格式.docx》由会员分享,可在线阅读,更多相关《课程设计Word文档格式.docx(25页珍藏版)》请在冰点文库上搜索。
馈元件,两个三极管Q1、Q2组成复合管,用运放的输出端来控制复
合管的导通程度,运放的反向端接在两个分压电阻R1和R2上,运放
的反向端由单片机控制的DAC输出模拟电压来控制,这样就实现了电压的可调。
整个构成了一个闭合反馈回路,如果运放的同相端高于反向端,运放的输出就会升高,导致复合管的导通程度增大,电压就会增大,如果运放的同相端低于反向端,运放的输出就会降低,复合管的导通程度减小,电压就会减小,如此便能使电压保持一个稳定的状态。
电流的大小是通过控制取样电阻两端的电压来实现的,由于取样电阻的电压太小,必须经过放大后送入另一路运放,图中没有画出,但原理与上述一样。
方案一图
此种方案中电池与取样电阻串接在电路中,而且取样电阻一端与地相连。
这种方案的好处是电路简单,取样电阻两端的电压好处理,用来控制电流的大小。
缺点是电池没有接地,不便于测电池两端的电压,而且采用了两个三极管组成复合管,有点复杂。
方案二、基于第一种方案的不足之处,第二种方案采用的是将电池的负极接地,取样电阻接在电池的正极和输出电压之间,其他的接法与第一种方案相同。
方案二图
此种方案的好处是便于测量电池的电压,但是取样电阻的处理比第一种方案复杂。
方案三、第三种方法采用的是大功率的场效应管IRF3205代替复合管,使得电路变的更加简单,而且场效应管能承受的电流很大,导通电压低,能承受的功率大,比复合管好的多。
考虑到要精确的测量电池的电压,所以取样电阻和电池的处理采用第二种方法。
方案三图
综合考虑以上因数,选择方案三最好,既能简化电路,又能达到理想的效果。
三.方案实施
总体实施方案原理图
此方案中最主要部分包括两个方面:
恒流控制和恒压控制,主要的控制器件为运放,运放能构成反馈回路。
恒压控制是通过分压电阻,恒流控制是通过取样电阻。
显示部分采用单片机的ADC,运放同相端的模拟电压采用的是PWM波经过两级滤波产生的。
1、恒压方案
恒压方案原理图
恒压是通过控制场效应管IRF3205漏源之间的导通程度来实现的,
而导通程度则是采用运放构成的负反馈来实现的。
如果电压的波动导致运放的同相端高于反向端,运放的输出就会升高,导致复合管的导通程度增大,电压就会增大,如果运放的同相端低于反向端,运放的输出就会降低,复合管的导通程度减小,电压就会减小,如此便能实现稳压。
运放的数度比较快,而且反应灵敏,所以用运放来做反馈元件能实现需要的功能。
2、恒流方案
取样电阻的阻值为0.1欧姆,流过电池的最大电流也只有500mA,电阻两端的电压最大也只有0.05V,所以必须放大取样电阻两端的电压,才能送入控制电流运放的反向端。
此处采用的是由U2组成的求差电路来放大取样电阻两端的电压,放大倍数为40倍(1000K/25K),如上图所示,R4=R3=25K,R5=R7=1000K,R7为反馈电阻。
求差电路不仅能放大电压,而且能抑制共模信号,放大差模信号,对噪声有一定的抑制做用。
3、DAC方案
本次设计中控制运放同相端的模拟电压是由STC12C5A60S2单片机输出的PWM信号经过两级滤波来完成,PWM信号的占空比越大,输出的模拟电压也就越大,而且呈现一定的比例,比如占空比为50%,则输出的电压接近2.5V。
用此种方法产生模拟电压信号比直接用DAC转换简单。
4、ADC方案
系统中的ADC采样电路模块同上是借助STC12C5A60S2单片机自带的8路10位高速AD转换器,其处理速度可达250KHZ(25万次/秒)。
8路电压输入型A/D,可以做相关温度检测、电池电压检测、按键扫描、频谱检测等。
其上电复位后P1口为弱上拉型I/O口,用户可以通过软件设置将8路中的任何一路设置为A/D转换,不需要作为A/D转换使用的口可以继续做为I/O口使用。
STC12C5A60S2系列单片机的ADC是逐次比较型ADC。
逐次比较型ADC由一个比较器和D/A转换器构成,通过逐次逻辑,从最高位(MSB)开始,顺序地对每一输入电压与内置D/A转换器输出进行比较,经过多次比较,使转换所得的数字量逐次逼近输入模拟量对应值。
逐次比较型ADC转换器具有速度高、功耗低等优点。
显示部分采用的是八位数码管,其中四位显示电压,另外四位显示电流的大小,STC12C5A60S2单片机的AD转换速度高,能够准确的采集到电流和电压的大小,但在显示的时候要做数据处理,以便使数据的显示稳定。
5、总的原理图
最后将稳压部分和恒流部分整合到一起,以实现充电的三个过程。
稳压的运放U3和恒流的运放U4不能直接接到MOS管的栅极,如图所示的接法,是通过一个电阻R9(10K)和二极管D1(单向导通)来将运放的输出端接一起的。
充电过程叙述:
首先在涓流充电的时候,通过控制U4的同相端来调节电流为100mA左右,此时U3的同相端设置成最大充电电压,但此时起主要作用的是电流控制的反馈,而电流的反馈不起作用,电池的电压也不会达到最大的设定值,此过程维持三五分钟左右,接着进入大电流充电过程,此过程与第一个过程相同,只是以最大电流一直充电下去,电压也不会超过设定值,当电池两端电压达到最大设定值的时候,进入恒压充电过程。
恒压的时候,电流反馈不起作用,电压维持稳定,此时流过电池的电流逐渐减小,直到充电完成时为零。
6、软件设计
1)PWM产生模拟电压
voidSTC_PWM(unsignedcharPWM_0,unsignedcharPWM_1)
{
CCON=0;
CL=0;
//ResetPCAbasetimer
CH=0;
CMOD=0x02;
//SetPCAtimerclocksourceasFosc/2
//DisablePCAtimeroverflowinterrupt
CCAP0H=CCAP0L=PWM_0;
//PWM0portoutputPWM_0/256%dutycyclesquarewave
CCAPM0=0x42;
//PCAmodule-0workin8-bitPWMmode
//andnoPCAinterrupt
CCAP1H=CCAP1L=PWM_1;
//PWM1portoutputPWM_1/256%dutycyclesquarewave
CCAPM1=0x42;
//PCAmodule-1workin8-bitPWMmode
CR=1;
//PCAtimerstartrun
}
此程序是仿照STC12C5A60S2手册上的PWM波的产生方法写的,原理比较简单。
2)AD采集
两个通道轮流采集电压
voidadc_isr(void)interrupt5
ADC_CONTR&
=!
ADC_FLAG;
//当A/D转换完成后,由软件清零
if(ch==0)//ADC通道0
{
MCU_ADC0=ADC_RES;
}
if(ch==5)//ADC通道1
MCU_ADC1=ADC_RES;
switch(ch)//ADC通道0和ADC通道1轮番读电压
case0:
ch=5;
break;
case5:
ch=0;
default:
break;
}
3)整体控制
整体的控制过程就是要设定定时时间,涓流充电三分钟后,然后自动跳转到500mA充电过程,最后直到充电结束。
voidTimer1(void)interrupt3
TH1=(65536-20*CLOCK/time/12)/256;
//20ms
TL1=(65536-20*CLOCK/time/12)%256;
JSQ_3MINUTE++;
if(JSQ_3MINUTE>
8999)//3分钟到
JSQ_3MINUTE=0;
JS3MINUTE_F=1;
voidmain()
{
IE=0xa0;
initial595();
Timer0_Init();
adc_init();
STC_PWM(136,228);
while
(1){
//STC_PWM(136,232);
if(JS3MINUTE_F==1){STC_PWM(136,190);
TR1=0;
ADC_CONTR=ADC_POWER|ADC_SPEEDLL|ADC_START|ch;
BackData_Pro(MCU_ADC0,MCU_ADC1);
seg_display();
四.经验总结
本次智能充电器的设计重点在于充电部分的电路设计。
在智能充电器控制系统设计中主要侧重点是保证充电器对充电电池电压的精确控制,设计中元器件的选择也是围绕着这个重点来完成的。
在完成充电器的整个过程中遇到了不少问题。
在确定方案到焊接电路板到调试的过程,每一步都需要极大地耐心和不放弃的决心。
开始调试的时候充电电压和电流不是很精准,经过一步步的调试,又重新更换电阻电容才慢慢符合设计要求。
当完成充电部分电路后,接着就是数据采集遇到了问题,数码管上采集的数据显示一直在闪烁,且与实际测得的电压和电流有误差。
我们又花了不少时间从更改数据采集程序开始一步步更改完善。
终于经过日日夜夜的坚持,我们的充电器完成了。
当完成的那一刻,内心的激动是无法言语的。
拿着自己设计的充电器我们立马把自己的手机电池掰下来进行充电。
那种成功的喜悦冲淡了以前屡次遇到问题的焦躁。
在调试过程中,我们烧坏了了三块单片机芯片,但终于我们的付出的代价得到了回报。
通过这次实物设计我深刻体会到,遇到事情只要不放弃,心平气和的去分析解决终会有成功的一天。
最后还要感谢在遇到问题时田老师给我们的提示和教诲,还有那些帮助过我们的同学。
实验过程中的有关图片
小电流充电,电流为100mA,定时三分钟
大电流充电,电流为300mA,直到充电完成
恒流300mA充电,某一时刻的电压4V
实测电池两端电压
设置最大充电电压4.4V
恒流300mA充电时,取样电阻两端电压放大40倍
相关程序
#include"
reg51.h"
intrins.h"
#defineADC_POWER0X80//ADC电源控制位
#defineADC_FLAG0X10//模数转换器转换结束标志位
#defineADC_START0X08//模数转换启动标志位
#defineADC_SPEEDLL0X00//540个时钟周期转换一次
#defineADC_SPEEDL0X20//360个时钟周期转换一次
#defineADC_SPEEDH0x40//180个时钟周期转换一次
#defineADC_SPPEDHH0X60//90个时钟周期转换一次
sfrCCON=0xD8;
//PCAcontrolregister
sbitCCF0=CCON^0;
//PCAmodule-0interruptflag
sbitCCF1=CCON^1;
//PCAmodule-1interruptflag
sbitCR=CCON^6;
//PCAtimerruncontrolbit
sbitCF=CCON^7;
//PCAtimeroverflowflag
sfrCMOD=0xD9;
//PCAmoderegister
sfrCL=0xE9;
//PCAbasetimerLOW
sfrCH=0xF9;
//PCAbasetimerHIGH
sfrCCAPM0=0xDA;
//PCAmodule-0moderegister
sfrCCAP0L=0xEA;
//PCAmodule-0captureregisterLOW
sfrCCAP0H=0xFA;
//PCAmodule-0captureregisterHIGH
sfrCCAPM1=0xDB;
//PCAmodule-1moderegister
sfrCCAP1L=0xEB;
//PCAmodule-1captureregisterLOW
sfrCCAP1H=0xFB;
//PCAmodule-1captureregisterHIGH
sfrPCAPWM0=0xf2;
sfrPCAPWM1=0xf3;
sfrADC_CONTR=0XBC;
//ADC控制寄存器
sfrP1ASF=0X9D;
//P1口模拟功能控制寄存器
sfrADC_RES=0XBD;
//A/D转换结果寄存器高位
sfrADC_RESL=0XBE;
//A/D转换结果寄存器低位
unsignedcharch=0;
//通道选择
unsignedintMCU_ADC0,MCU_ADC1;
//通道0电压值,通道1电流值
unsignedintVoltage_Val,Current_Val;
//电压值,电流值
unsignedcharcodeleg[8]={0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01};
unsignedcharcodecharcodeziku[20]={0x03,0x9f,0x25,0x0d,0x99,0x49,0x41,0x1f,0x01,0x09,0x02,0x9e,0x24,0x0c,0x98,0x48,0x40,0x1e,0x00,0x08};
unsignedcharseg[8];
unsignedcharDisp_Queue[8];
sbitSH_CP=P2^1;
sbitST_CP=P2^0;
sbitDS=P2^2;
#definetime1000//1ms
#defineCLOCK22118400
//计数寄存器
unsignedcharJSQ_2MS;
//2ms计数器
unsignedcharJSQ_10MS;
//10ms计数器
unsignedcharJSQ_200MS;
//200ms计数器
unsignedcharJSQ_500MS;
//500ms计数器
unsignedintJSQ_3MINUTE;
//3分钟计数器
//标志位
bitJS2MS_F;
//计时2ms标志位
bitJS10MS_F;
//计时10ms标志位
bitJS500MS_F;
//计时500ms标志位
bitJS200MS_F;
//计时200ms标志位
bitJS3MINUTE_F;
//计时3分钟标志位
bitFlag_S;
//闪烁标志位,闪烁频率2HZ
bitLED_Flag_S;
//LED闪烁标志位,闪烁频率2HZ
bitKey_Scan_F;
voidTimer0_Init(void)
TMOD=0X11;
//定时器0和定时器1工作在模式1,16Bit定时器模式//00010001
TH0=(65536-CLOCK/time/12)/256;
//1ms
TL0=(65536-CLOCK/time/12)%256;
TR0=0;
//启动
ET0=1;
//允许中断
TR1=1;
//启动
ET1=1;
/*****************************************************************************/
//定时器0溢出中断服务函数
/****************************************************************************/
voidTimer0(void)interrupt1
JSQ_2MS++;
JSQ_10MS++;
if(JSQ_2MS>
1)//2ms到
JSQ_2MS=0;
JS2MS_F=1;
if(JSQ_10MS>
9)//10ms到
JSQ_10MS=0;
JS10MS_F=1;
Key_Scan_F=1;
JSQ_500MS++;
JSQ_200MS++;
if(JSQ_200MS>
19)//200ms到
{
JSQ_200MS=0;
JS200MS_F=1;
if(JSQ_500MS>
49)//500ms到
JSQ_500MS=0;
JS500MS_F=1;
Flag_S=~Flag_S;
//数码管闪烁标志位取反
LED_Flag_S=~LED_Flag_S;
//LED闪烁标志位取反
/*****************************************************************************///定时器1溢出中断服务函数
//ADC初始化函数
voidadc_init(void)
P1ASF=0X21;
//MCU_ADC0(P1.0),MCU_ADC1(P1.1)
ADC_RES=0;
//AD转换结果寄存器清零
ADC_RESL=0;
ADC_CONTR=ADC_POWER|ADC_SPEEDLL|ADC_START|ch;
_nop_();
//延时
//ADC中断服务函数
MCU_ADC0=ADC_RES;
MCU_ADC1=ADC_RES;
switch(ch)//ADC通道0和ADC通道1轮番读电压
case0:
//InitialPCAcontrolregister
//PCAtimerstoprunning
//ClearCFflag
//Clearallmoduleinterruptflag
//DisablePCAtimeroverflowinterrupt
CCAPM1=0x42;
voidBackData_Pro(unsignedintVoltage_V,unsignedin
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 课程设计