自动化单片机设计.doc

上传人:啊飒飒 文档编号:11495061 上传时间:2021-08-09 格式:DOC 页数:14 大小:3.35MB
返回 下载 相关 举报
自动化单片机设计.doc_第1页
第1页 / 共14页
自动化单片机设计.doc_第2页
第2页 / 共14页
自动化单片机设计.doc_第3页
第3页 / 共14页
自动化单片机设计.doc_第4页
第4页 / 共14页
自动化单片机设计.doc_第5页
第5页 / 共14页
点击查看更多>>
资源描述

《自动化单片机设计.doc》由会员分享,可在线阅读,更多相关《自动化单片机设计.doc(14页珍藏版)》请在三一文库上搜索。

1、非接触式电机转速仪1.设计信号处理电路(要计算参数)4.分析M法测速原理,写出M法测速的程序流程5.根据程序流程,写出C51程 序代码。6.检验测量误差(写出详细的方法步骤)电路以常用的TCRT5000为例子,R1,D1,C1可以不要,求R2跟R3。PDF要求二极管IF=60ma,IC=100ma,VF=1.25V,Vce=0.4v那么R2=(5V-1.25V)/60ma,R3=(5v-0.4v)/100ma,R4分压电阻比较,按照1K设计。如果光电管RPR220,if=50ma,ic=30ma,vf=1.34v,vce=0.1V。 如果是其他型号,VCE=0.3v,注明“饱和导通时”。M法(

2、测频率,高速使用):M法是测量单位时间内的脉数换算成频率。(r/min)在规定的时间间隔内,测量所产生的脉冲数来获得被测转速值。 p为脉冲发生器每一圈发出的脉冲数(码盘,或其他。)t为采样时间,m为测得的脉冲数。 f=m/t理解为单位时间内的脉冲数,乘以60再除以码盘转一圈的脉冲数也就是每分钟多少转。 (P已知,t是自己给定,只需读取m就可以求出n.)T法(测周期,低速使用):T法是测量两个脉冲之间的时间换算成周期。(r/min)测量相邻两个脉冲的的时间来确定被测速度。f是已知的频率,向计数器发送脉冲,相邻两个脉冲控制其开始和结束。m是计数器读数 (单片机自己发出的脉冲数)。p为脉冲发生器每一

3、圈发出的脉冲数(码盘,或其他) (f自己给定,p已知,只需读取m就可以求出n。)M/T法:应该不考那么难,补考研究。 通电观测输出的指示灯,能否受控?测量发光管的电压,估算发光管的电路无反射时,测集电极的电压,应该为? VCC(接近5V)有反射时,测量集电极的电压,记录数据 GND(接近0V)估算参考电压的大小 (分压电阻可以为两个500欧姆,这样参考电压为1/2 VCC测量实际的参考电压调节参考电压的电阻比例,观测输出的指示灯,能否受控?检验测量误差:在没转速测量工具的情况下把转速降低,计时1分钟转多少圈,并与单片机做对照。 有转速测量工具的情况下,同时测速,观察单片机在不同转速下与标准测量

4、工具显示的数值是否一样。 #include #define uint unsigned int#define uchar unsigned charuchar code Seg=0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90;/共阳数码管码表uchar GW,SW,BW,QW,count0;/定义个十百千位用于数码管显示,count0用于累计频率uint count1,fre;/count1用于累计计数器0的溢出次数,fre用于记录实际频率void Init()TMOD=0x15; /定时器1工作方式1(16位计数器);计数器0,工作方式1(

5、16位定时器)TH1=0xfe;/定时器初值为10ms;TL1=0x0c;ET0=1;/定时器0中断允许ET1=1;/计数器1中断允许TR0=1;TR1=1;EA=1;/开总中断fre=0;void chaizi(uint freg)GW=freg%10;/拆个位freg/=10;SW=freg%10;/拆十位freg/=10;BW=freg%10;/拆百位freg/=10;QW=freg;/拆千位void MMODE()if(count12000)TR0=0;/关计数器0,准备处理数值fre=(count0*65536+TH1*256+TL1);/计数换算TH1=0;/计数器0清数据TL1=

6、0;count1=0;chaizi(fre);/调用拆字子程序TR0=1;/开计数器0,准备下一次计数void main()Init();while(1);void T0_Count() interrupt 1 /计数器0中断程序TH1=0; /每溢出一次清一次数据TL1=0; /累计溢出数值count0加1count0+; void T1_time() interrupt 3uchar t;TL0=0x0c;/定时器初值为5ms;TH0=0xff;count1+;MMODE();t+;switch(t)case 0:P2=0x01;P0=SegGW;break;case 1:P2=0x02;

7、P0=SegSW;break;case 2:P2=0x04;P0=SegBW;break;case 3:P2=0x08;P0=SegQW;break;if(t4)t=0; #include #define uint unsigned int#define uchar unsigned charbit control=0;uchar code Seg=0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90;/共阳数码管码表uchar GW,SW,BW,QW,count0;/定义个十百千位用于数码管显示,count0用于累计频率uint count1,f

8、re;/count1用于累计计数器0的溢出次数,fre用于记录实际频率void Init()TMOD=0x11; /定时器1工作方式1(16位计数器);定时器0,工作方式1(16位定时器)TH0=0x3c;/定时器0初值为50ms;TL0=0xb0;TH1=0xfe;/定时器1初值为500us;TL1=0x0c;ET0=1;/定时器0中断允许,用于频率计时ET1=1;/计数器1中断允许,用于数码管显示TR0=0;/定时器0中断控制位暂时关闭TR1=1;/定时器1中断控制位打开IT0=1;/下降沿触发外部中断0IE0=1;/外部中断0允许位EA=1;/开总中断fre=0;void chaizi(

9、uint freg)freg=freg%10;/拆个位freg/=10;SW=freg%10;/拆十位freg/=10;BW=freg%10;/拆百位freg/=10;QW=freg;/拆千位void main()Init();while(1);void IE0_Control() interrupt 0uint time;control=control;/脉冲第一次出现时control为1/脉冲第二次出现时control为0if(control)/第一次检测到下降沿(脉冲第一次出现)TR0=1;/开始计时else/第二次检测到下降沿(脉冲第二次出现)TR0=0;/停止计时time=count

10、0*5;/计算累计用时fre=100000/time;/换算单位:rad/s,且数值放大一千倍,便于数码显示chaizi(fre);/调用拆字子程序/用于频率计时void T0_Count() interrupt 1/定时器0中断程序TL0=0xb0;TH0=0x3c;count0+;/累计计数时间,每50mscount0加1 /用于数码管显示void T1_time() interrupt 3uchar t;TL0=0x0c;/定时器初值为5ms;TH0=0xff;t+;switch(t)case 0:P2=0x01;P0=SegGW&0x7F;/显示带小数点break;case 1:P2=

11、0x02;P0=SegSW;break;case 2:P2=0x04;P0=SegBW;break;case 3:P2=0x08;P0=SegQW;break;if(t4)t=0;电容式水位检测仪文式振荡电路,反比例运算放大器(衰减),微分电路(电容量转换成交流信号),有源滤波电路,整流电路(交流转直流),参数太多,出参数计算不太可能。 程序跟流程图参考AD采集温度传感器项目 简易数字温度计的设计2、方案论证:方案1:ds18b20美国达拉斯公司生产 工作电压3.05.5v,可编程分辨率为912位,温度范围-55+125,在-10+85时精度为0.5度,测量结果直接输出数字温度信号,以“一线总

12、线”串行发送给单片机, 同时可传送CRC校验码。方案2:ad590 美国哈里斯公司生产的采用激光修正的精密集成温度传感器。AD590等效于一个高阻抗的恒流源。工作电压430V,测量范围-55+150,对应于热力学T没变化1K,就输出1ua电流。在298.2k(对应25。2度)时输出电流恰好等于298.2ua。最大非线性误差为正负0.3度方案3:热敏电阻 通过半导体热敏电阻的电阻-温度特性,温度变化时电阻组织也跟着变化,热敏电阻与一电阻串联分压,通过测量分得的电压既可换算成温度。一般精度小于0.5级,测量范围有-6070,价格便宜。 以上三种方案都符合设计要求,DS18B20内带AD转换,但读取

13、复杂。热敏电阻的电阻-温度曲线为非线性,数据拟合复杂。使用AD590转换速度快,转换精度高,非线性小集合了电路简单跟控制简单的有点,故选择AD590。VR6=(273+T)ua *R6 T为摄氏温度。例如AD590输出298.2ua时,实际摄氏度为25.2度程序:#include reg51.h#include intrins.hvoid InitADC() P1ASF = 0xff; /Set all P1 as analog input port ADC_RES = 0; /Clear previous result ADC_CONTR = ADC_POWER | ADC_SPEEDLL

14、| ADC_START | ch;void main()InitADC(); /Init ADC sfr IE = 0xa0; /Enable ADC interrupt and Open master while (1)led_disp(); /显示程序 以前的项目中用过了caizi() /拆字程序 根据温度项目要适当修改void adc_isr() interrupt 5 using 1 ADC_CONTR &= !ADC_FLAG; /Clear ADC interrupt flag adc_temp=ADC_RES; wendu=adc_temp*k; /温度计算公式应该从试验数据获得

15、 ADC_CONTR = ADC_POWER | ADC_SPEEDLL | ADC_START | ch; 温度传感器标定和校准:用PT100做参考,把温度传感器和PT100同时放入标准热源,通过试验台的仪表观察PT100测量的温度和自己设计的传感器显示的温度,并记录数据,再通过数据拟合得出一个计算公式,将单片机的数据进行校准。实用电子称方案论证:电子秤的精度决定于ADC的精度, 方案1 单片机内部集成ADC 不用外置芯片,控制简单,精度高(10位) 方案2 ISP接口的ADC 时序控制,复杂 方案3 并口高速ADC 速度快,占用口多方案4 的高精度ADC 信号处理电路的方案论证 三运放组成

16、仪表放大电路 需要外围元件, 电路不太复杂,便宜 专用仪表放大电路 不需要过多外元件围,贵电路图改为重力传感器直接接仪表放大器的+ -端。程序流程跟温度一样,程序一样。wendu=adc_temp*k;改为测重量的。电子秤标定和校准在书上P151。RG调节放大倍数如果想放大1000倍,或者把题目给定的电压放大到05V就先选定R3,R4的阻值,可以是1K,然后再计算RG。右边那个R4=20K可以按照试验箱的图,改为零点调节。标定过程及步骤(1)零点调节和满度调节:利用标准仪器分别给出测量设备量程的起始值和满量程值,反复调试测量设备使其输出显示量与标准量一致;(2)正向分度测试:将测量设备传感器全

17、量程(测量范围)分成若干个等间隔点;按照等间隔点,由起始值到满量程值逐一输入标准量值,并记录下与各输入值相对应的输出值;(3)逆向分度测试:再由满量程值到起始值逐一输入标准量值,同时记录对应的各输出值;(4)重复检验:按(2)、(3)重复多次测试,(5)数据处理:将得到的输出、输入测试数据用表格列出,并用EXCEL作趋势线;(6)计算指标:计算传感器的线性度、灵敏度、滞后和重复性等静态特性指标。 如:利用应变片传感器连接制作一个02000g的电子秤完成时,电子秤的标定和校准过程如下: (1)零点调节:电子秤不加任何东西,调节测量电桥平衡电阻,使电子秤输出为零;(2)满度调节:再给电子秤加上20

18、00g砝码,调节放大器放大倍数,使电子秤输出显示为2000g;(3)正反向分度测量:将砝码从0开始,每次加200g,直至2000g,再依次拿出200 g,至0。 分别记录砝码和电子秤读数值。(4)数据处理,计算误差和线性度;(5)接入单片机时,可利用误差数据进行修正。霍尔流量计设计#includeUchar t1,t2,f;Void init_timer()Tmod=0x15;TH0=0x3c;TL0=0xaf;Tr0=1;Tr1=1;Ie=0x88;Void main()Init_timer();Ea=1;While(1)Led_dis();Led_chaizi(flew);Void tim

19、er_isr()Th0=0x3c;Tl0=0xaf;T1=th0;T2=tl0;Th0=tl0=0;F=f*k; /计算公式,考试应该会给超声波测距离(http:/ P20/Echo= P32#include #define uchar unsigned char#define uintunsigned intvoid delay(uint z)uint x,y;for(x=z;x0;x-)for(y=110;y0;y-);void delay_20us()uchar a ;for(a=0;a100;a+);void display(uint temp)void main()uint dist

20、ance;test =0;Trig=0;/首先拉低脉冲输入引脚EA=1;/打开总中断0TMOD=0x10;/定时器1,16位工作方式while(1)EA=0;/关总中断Trig=1;/超声波输入端delay_20us();/延时20usTrig=0;/产生一个20us的脉冲while(Echo=0); /等待Echo回波引脚变高电平succeed_flag=0; /清测量成功标志EA=1;EX0=1;/打开外部中断0TH1=0;/定时器1清零TL1=0;/定时器1清零TF1=0;/计数溢出标志TR1=1;/启动定时器1delay(20);/等待测量的结果TR1=0;/关闭定时器1EX0=0;/

21、关闭外部中断0if(succeed_flag=1)time=timeH*256+timeL;distance=time*0.172;/厘米display(distance);if(succeed_flag=0)distance=0;/没有回波则清零test = !test;/测试灯变化/外部中断0,用做判断回波电平void exter()interrupt 0/ 外部中断0是0号timeH =TH1;/取出定时器的值timeL =TL1;/取出定时器的值succeed_flag=1;/至成功测量的标志EX0=0;/关闭外部中断/定时器1中断,用做超声波测距计时void timer1() interrupt 3/TH1=0;TL1=0;

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 科普知识


经营许可证编号:宁ICP备18001539号-1