生产实习报告.docx
- 文档编号:23995741
- 上传时间:2023-05-23
- 格式:DOCX
- 页数:20
- 大小:603.44KB
生产实习报告.docx
《生产实习报告.docx》由会员分享,可在线阅读,更多相关《生产实习报告.docx(20页珍藏版)》请在冰豆网上搜索。
生产实习报告
北京化工大学
生产实习报告
专业测控技术与仪器
姓名李成强刘佩奇
学号20120142622012014258
指导教师唐喜明
2015年7月13日
基于SPCE061A单片机的温度测量系统
一、[摘要]本温度采集系统采用SPCE061A作为主控芯片,铂电阻温度传感器采集温度,用二位共阳级显示电路实现温度的显示,同时该系统能够通过单片机自带的按键设置温度上下限,当所测温度超过设定的的范围时扬声器进行报警,适用于多种环境的温度采集,显示效果好,使用方便,操作简单。
[关键词]SPCE061A;温度测量;铂电阻
Abstract:
ThetemperatureacquisitionsystemSPCE061AasthemasterchipPT100temperaturesensorofasinglebusacquisitiontemperature,fourtotalanodecircuittemperaturedisplay,whilethelowerlimitofthebuttonsonthesettemperatureofthesystemthroughthemicrocontrollercomeswhenthemeasuredtemperatureexceedsthesetrangeofspeakersalarmforavarietyofenvironmentaltemperatureacquisition,display,easytouse,easytooperate.
Keywords:
SPCE061A,Temperatureacquisition,pt100
内容
二:
传感器的选择及放大电路的设计
(1)传感器
采用温度传感器铂电阻(Pt100)。
铂电阻的物理化学性在高温和氧化性介质中很稳定,它能用作工业测温元件,且此元件线性较好。
在0~100℃时,最大非线性偏差小于0.5℃。
铂电阻与温度关系是
其中Rt是温度为t℃时的电阻;R0是温度为0℃时的电阻;t为任意温度值,A、B为温度系数。
(2)硬件电路放大电路如图
该系统硬件电路的设计分为三小块:
电桥、放大电路以及调零电路的设计
由实验要求可知,铂电阻的电阻变化为100—138.5欧姆,相应的输出电压范围为0—3V,铂电阻的测温范围控制在0—100摄氏度之间。
我们采取桥路设计为第二对称,单臂工作的三线连接,由桥路相关知识,在一定的线性度和耗散功率下,设供电电压为5V,以及桥路电阻设为R2=R4=3.8K,R=R3=100Ω能够产生最大的输出电压为—0.0476V,由此可以确定放大器的放大倍数为63倍,,实验中我们采取放大器芯片LM324。
由于电压范围为0—3V,并且我们发现当电路输入为零的时候放大器电路的输出并不为零,所以我们需要一个调零反相电路来满足实验的要求。
LM324系列运算放大器是价格便宜的带差动输入功能的四算放大器。
可工作在单电源下,电压范围是3.0V-32V或+16V.
LM324的特点:
1.短跑保护输出
2.真差动输入级
3.可单电源工作:
3V-32V
4.低偏置电流:
最大100nA(LM324A)
5.每封装含四个运算放大器。
6.具有内部补偿的功能。
7.共模范围扩展到负电源
8.行业标准的引脚排列
9.输入端具有静电保护功能
(3)放大电路的PCB图如图所示
(4)放大电路芯片选择
LM324是四运放集成电路,它采用14脚双列直插塑料封装。
它的内部包含四组形式完全相同的运算放大器,除电源共用外,四组运放相互独立。
因其具有差分输入、短路保护、单电源供电、四组运算放大器封装等诸多特性,故本次实习采用LM324运算放大器芯片。
LM324管脚图
3.SPCE061A单片机的介绍
61版是SPCE061AEMUBOARD的简称,是以凌阳16位单片机SPCE061A为核心的精简开发-仿真-实验板,大小相当于一张扑克牌,是“凌阳科技大学计划”专为大学生、电子爱好者等进行电子实习、课程设计、毕业设计、电子制作及电子竞赛所设计的,也可作为单片机项目初期研发使用。
61板除了具备单片机最小系统电路外,还包括有电源电路、音频电路(含MIC输入部分和DAC音频输出部分)、复位电路等,采用电池供电,方便学生随身携带!
!
!
使学生在掌握软件的同时,熟悉单片机硬件的设计制作,锻炼学生的动手能力,也为单片机学习者和开发者创造了一个良好的学习条件和开发新产品的机会!
SPCE061A开发板
SPCE061A的结构比较简单,在芯片内部集成了ICE仿真路接口FLASH程序存储器、SRAM数据存储器、通用I/O端定时器/计数器、中断控制、CPU时钟、模-数转换器A/DDAC输出、通用异步串行输入输出接口、串行输入输出接、低压监测/低电压复位等若干部分,并且各个部分之间存在着直接或间接的联系。
SPCE061A板实物图
4.整体调试部分
调试主要分为以下几个方面:
1.电源部分
电源部分在板子的左上角。
以下就采用万用表分别测试以下12个点的电压,注意数字万用表的使用方式(黑色的表笔接电源“-”端,红色的表笔接电源“+”端),此时请勿将芯片插入座中,以免电源部分有问题造成芯片烧坏。
Step1:
目的:
测试61板电源和地是否有短路;
条件:
断开电源并拔掉电池盒,将J5的2、3脚用跳线帽短接;
步骤:
用万用表测量J10的两脚的电阻是否为零;
现象:
电阻大于300欧姆;
Step2:
目的:
测试61板电源部分器件是否工作正常;
条件:
将三节5号电池装入电池盒中,接到J10处,将电池盒开关拨到ON处;
步骤:
将电池盒开关拨到ON处;
现象:
发光二极管D1点亮;
Step3:
目的:
测试61板上各器件电源供电是否正常;
条件:
用跳线冒把S5的1、2脚短接(选择了PROBE端);
步骤:
测试U1的第7脚电压----3.3v左右;
测试U4的第20脚电压----3.3v左右;
测试J4的第1脚电压----3.3v左右;
测试U2的第7、8脚电压----3.3v左右;
测试J6、J7、J8、J9的+端电压----3.3v左右(同上);
现象:
电压正常
2.键盘部分
目的:
测试键盘输入是否正确
条件:
U1、U2、U4芯片座中不安放元件;给61板通电,万用表选择电压档,利用万用表的负端(黑色表笔)接板子上的地(标示“-”的地方),万用表笔的正端(红色表笔)分别检测接IOA0、IOA1、IOA2;
步骤:
把万用表笔的正端(红色表笔)放在IOA0上时,按下K1键,读取万用表上的电压值并记录,之后用同样的方法分别检测K2、K3电压值;
现象:
电压为高电平;
结论:
正常
3.单片机I/O部分
目的:
查看是否有漏焊或虚焊;
条件:
U1、U2、U4芯片座中安放好元件(请确保芯片的正确插入),不接喇叭,;给61板通电,用下载器将程序1下载到61板上,若程序无法下载,先跳至数字部分74HC244的检查步骤。
步骤:
利用万用表的负端(黑色表笔)接板子上的地点(表示“-”的地方),万用表笔的正端(红色表笔)分别检测接各I/O并记录;
现象:
电压正确(IOA口全为低,IOB口全为高)
结论:
正常
4.放大电路的调试
根据焊接好的放大电路图,pt=100Ω时,调节调零放大器使得输出为0,当pt=138.51Ω时,能够输出电压为0V左右,实验测试失败。
5.整体调试
由于放大电路调试失败,检查不出问题,导致整体结果显示不出温度值,整体调试失败。
5.实验结论
本实验后不能够通过spce061A单片机来实现对铂电阻的温度测量采集与显示。
整个过程出现了某一方面的错误导致调试不成功以及最终的显示失败。
6.附录
(1)放大电路图与LED显示电路
(2)主程序
intmain(void){
intiKeyValue;
status=system_temperature_set;
guifgSpeechPlay=0;
System_Initial();
PIDinit();
while
(1){
iKeyValue=SP_GetCh();//取键值
key_value_process(iKeyValue);//键值处理
if(guifgSpeechPlay)
temperature_speech_play();//语音播放
if(status==system_temperature_control)
display_speech_ADC_temperature();//测量温度显示、温度播报、PID计算
Clear_WatchDog();//清看门狗
System_ServiceLoop();//键盘扫描
if(fOut<=0)turn_off_timerB();//加热时间到,关闭定时器B
//ADC_Init();
}
}
//函数:
voidPIDinit(void)
//语法:
voidPIDinit(void)
//描述:
PID初始化
//参数:
无
//返回:
无
voidPIDinit(void)
{
stPID.LastError=0;
stPID.PrevError=0;
stPID.SumError=0;
}
//函数:
floatPIDCalc(PID*pp,intNextPoint)
//语法:
floatPIDCalc(PID*pp,intNextPoint)
//描述:
PID计算
//参数:
1、PID数值2、采样温度值
//返回:
PID输出值
floatPIDCalc(PID*pp,intNextPoint)
{
intdError,
Error;
Error=pp->SetPoint*10-NextPoint;//偏差
pp->SumError+=Error;//积分
dError=pp->LastError-pp->PrevError;//当前微分
pp->PrevError=pp->LastError;
pp->LastError=Error;
return(pp->Proportion*Error//比例项
+pp->Integral*pp->SumError//积分项
+pp->Derivative*dError//微分项
);
}
//函数:
voiddisplay_speech_ADC_temperature(void)
//语法:
voiddisplay_speech_ADC_temperature(void)
//描述:
整理温度显示值、语音播放资源、PID控制
//参数:
无
//返回:
无
voiddisplay_speech_ADC_temperature(void){
floatfT,K;
intadc_data;
staticintsiTlast=0;
if(G_ADC_flag){//判断是否有温度采样1,有0,无
G_ADC_flag=0;
adc_data=adc_data_cmp();
adc_data/=SET_ADC_TIME;//计算温度平均值
if(adc_data>0x0255)K=0.079;//确定温度系数
elseK=0.076;
fT=adc_data*K;//换算成温度值
guiLED_Value[0]=(int)fT/10;//将温度值转换成十进制用于LED显示
guiLED_Value[1]=(int)fT%10;
guiLED_Value[2]=(int)(fT*10)%10;
if((int)fT!
=siTlast){//判断温度的整数值是否变化
temperature_speech_index(guiLED_Value);//温度整数值语音播放排序
SACM_A2000_Initial(0);//非自动方式播放的初始化
SACM_A2000_InitDecoder(DAC2+DAC1);//开始对A2000的语音数据以非自动方式解码
SP_INT_IRQ6();
iAddrSpeech=speech_start_address(iaSpeech_index[0]);//语音播放始地址
guifgSpeechPlay=1;//设置语音为播放状态
siTlast=(int)fT;
}
stPID.Proportion=1;//设置PID比例值
stPID.Integral=0.5;//设置PID积分值
stPID.Derivative=0.0;//设置PID微分值
fOut=100*PIDCalc(&stPID,(int)(fT*10));//PID计算
active();
}
}
//函数:
voidactive()
//语法:
voidactive()
//描述:
PID输出值的处理
//参数:
无
//返回:
无
voidactive(){
if(fOut<=0){
turn_off_relay();//温度高于设定值,关闭电炉
turn_off_timerB();//停止计时
}
else{
if(fOut>30*stPID.Proportion)//温度低于设定值2摄氏度
turn_on_relay();//开电炉加热
else{turn_on_relay();SP_INT_TIMEB();}//初始化定时器,开始定时加热
}
}
//函数:
intadc_data_cmp()
//语法:
intadc_data_cmp()
//描述:
ADC采样数据的均值处理,抗干扰作用
//参数:
无
//返回:
无
intadc_data_cmp()
{
intmax;
intmin;
intSum;
inti;
max=giADC_DataSave[0];
for(i=0;i<10;i++){
if(giADC_DataSave[i]>max)
max=giADC_DataSave[i];//取出最大值
}
min=giADC_DataSave[i];
for(i=0;i<10;i++){
if(giADC_DataSave[i] min=giADC_DataSave[i];//取出最小值 } for(i=0;i<10;i++) Sum+=giADC_DataSave[i];//累计值 Sum=Sum-max-min;//排除最大最小值 return(Sum); } //函数: voidkey_value_process(intkey) //语法: voidkey_value_process(intkey) //描述: 按键值的处理 //参数: 键值 //返回: 无 voidkey_value_process(intkey) { intiAddr; switch(key){ case0: break; case1: if(status==system_temperature_set){//温度设置状态下 guiLED_Value[0]++;//温度值增加 if(guiLED_Value[0]==10) guiLED_Value[0]=0; } break; case2: if(status==system_temperature_set){ guiLED_Value[1]++; if(guiLED_Value[1]==10) guiLED_Value[1]=0; } break; case4: if(status==system_temperature_set){ temperature_speech_index(guiLED_Value); status=system_temperature_control; SACM_A2000_Initial(0);//非自动方式播放的初始化 SACM_A2000_InitDecoder(DAC1+DAC2);//开始对A2000的语音数据以非自动方式解码 SACM_A2000_InitQueue(); guifgSpeechPlay=1; stPID.SetPoint=guiLED_Value[0]*10+guiLED_Value[1]; iAddrSpeech=speech_start_address(iaSpeech_index[0]); } else{ turn_off_IRQ5();//禁止ADC status=system_temperature_set;//系统状态恢复为设置状态 } break; default: break; } } //函数: voidtemperature_speech_index(unsignedint*p_speech) //语法: voidtemperature_speech_index(unsignedint*p_speech) //描述: 排列语音播放序号 //参数: 设置或采样的温度值 //返回: 无 voidtemperature_speech_index(unsignedint*p_speech) { if(*p_speech! =0){//判断设置温度的十位是否为零 iaSpeech_index[0]=*p_speech;//不为零则设置语音播放序号 iaSpeech_index[1]=10;//设置播放语音十 p_speech++; if(*p_speech! =0){//判断播放个位数字是否为零 iaSpeech_index[2]=*p_speech;//不为零,设置语音序号 iaSpeech_index[3]=11;//设置摄氏度 iPlay_times=4;//设置播放语音次数 } else{ iPlay_times=3;//如果个位数字为零,则设置播放次数为3 iaSpeech_index[2]=11;//设置摄氏度 } } else{ p_speech++;//如果设置温度的十位为零, iaSpeech_index[0]=*p_speech;//设置个位数字的播放序号 iaSpeech_index[1]=11;//设置摄氏度 iPlay_times=2;//设置播放次数 } } //函数: intspeech_start_address(intn) //语法: intspeech_start_address(intn) //描述: 取语音播放的开始地址 //参数: 1、语音序号 //返回: 语音地址 intspeech_start_address(intn) { intiAddress; switch(n){ case0: iAddress=RES_T046_16K_SA;break; case1: iAddress=RES_T047_16K_SA;break; case2: iAddress=RES_T048_16K_SA;break; case3: iAddress=RES_T049_16K_SA;break; case4: iAddress=RES_T050_16K_SA;break; case5: iAddress=RES_T051_16K_SA;break; case6: iAddress=RES_T052_16K_SA;break; case7: iAddress=RES_T053_16K_SA;break; case8: iAddress=RES_T054_16K_SA;break; case9: iAddress=RES_T055_16K_SA;break; case10: iAddress=RES_T056_16K_SA;break; case11: iAddress=RES_T034_16K_SA;break; default: break; } return(iAddress); } //函数: speech_end_address(intm) //语法: speech_end_address(intm) //描述: 取语音播放的结束地址 //参数: 1、语音序号 //返回: 语音地址 intspeech_end_address(intm) { intiEndAddress; switch(m){ case0: iEndAddress=RES_T046_16K_EA;break; case1: iEndAddress=RES_T047_16K_EA;break; case2: iEndAddress=RES_T048_16K_EA;break; case3: iEndAddress=RES_T049_16K_EA;break; case4: iEndAddress=RES_T050_16K_EA;break; case5: iEndAddress=RES_T051_16K_EA;break; case6: iEndAddress=RES_T052_16K_EA;break; case7: iEndAddress=RES_T053_16K_EA;break; case8: iEndAddress=RES_T054_16K_EA;break; case9: iEndAddress=RES_T055_16K_EA;break; case10: iEndAddress=RES_T056_16K_EA;break; case11: iEndAddress=RES
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 生产 实习 报告
![提示](https://static.bdocx.com/images/bang_tan.gif)