当前位置:文档之家› 电子信息工程综合实验

电子信息工程综合实验

实验一转速测量与控制一、实验目的1.熟悉速度传感器工作原理2.熟悉硬件设计原理3.熟悉软件编程方法二、实验仪器PC机、示波器、综合实验板、数字表,频率计三、实验设计原理1.硬件设计原理(1)整体设计框图图1-1 整体设计方框图其中,图的上半部分为测量部分,下半部分为控制部分CPU: AT89C52I/O:人机接口,7290D/A:5618V =24v直流电机:m(2)硬件主要由三块集成芯片和直流电机、光电转速传感器等组成。

①信号产生与放大整形图1-2 信号产生与放大整形示意图注:圆盘上有360个孔,因此每转输出360个脉冲。

光电转速传感器:传感器的作用是将各种现场的被测物理量按照一定的规律转换成便于测量的模拟电信号(电压或电流)。

转速传感器将电动机转速转化为电压信号,作为整个系统的输入。

本实验中采用光电式转速传感器,其工作原理是:利用电动机带动一个圆周上有均匀分布小孔的圆盘来控制发光二极管的光强,使光的强度呈周期性变化。

光电二极管的回路电流也呈周期性变化,频率f=N/60×360=6N Hz,其中N为转速,单位为 R/min。

信号放大整形:传感器的输出电压信号比较小,一般只有几毫伏到几十毫伏,不足以驱动后边与之相连的芯片,并混有许多干扰信号,因此必须将信号放大到与下一极芯片驱动电压相匹配的程度,并去除干扰,变成一个方波信号。

本实验中电动机、光电传感器及信号放大整形电路都集成到一块,封装在一个圆柱形容器。

输出的信号经过反向器(近一步提供驱动)和缓冲器后输送给AT89C52单片机T0管脚。

②数据采集与处理单稳态触发器测速装置缓冲器单片机1秒1GT0图1-3 数据采集与处理框图电路板上有一个由555集成定时器构成的单稳态触发器,提供1秒钟的定时,来控制74HC244缓冲器的通与断,这样单片机计数器一次所累积的数即为脉冲频率,经换算后可得到电动机的转速。

图1-4 定时电路原理图单稳态触发器的特点是:电路有两个工作状态:个稳态,一个暂态。

在没有外界触发信号时,电路处于稳态,并且能一直保持下去。

在外界信号的作用下,电路由稳态转换为暂稳态。

暂稳态是一个不能长久保持的状态,经过一段时间后,电路会自动返回到稳态。

暂稳态的持续时间,就是电路输出脉冲的宽度,它仅取决于电路本身的参数,而与触发脉冲无关。

输出脉冲宽度为ln 3 1.1w t RC RC =≈,适当选取定时元件R1和C3的数值,使w t =1s 。

这种单稳态触发器电路要求输入触发负脉冲的宽度小于输出脉冲的宽度。

单片机:本实验中,单片机的型号是AT89C52,是整个实验的核心,主要负责数据的数据采集、数据处理和显示,并控制直流电机。

AT89C52是一款具有低功耗和高性能的、CMOS 制造工艺的8位微处理器,有8K 字节的FLASH 可编程和可擦除只读存储器(PEROM )。

有片256×8位部RAM ,32根可编程I/O 线,3个16位定时/计数器,八个中断源,和可编程串行通道等。

电路图如下:图1-5 单片机电路原理图说明:P1口是数据/地址复用口,P2口是地址口;P1口多用途:P10、P11作为2I C 串行总线的两根线,一根数据线,一根时钟线,P12,P13,P14作为与CS5460A 的接口线,本实验中没有用到,P15,P16,P17作为三-八译码器的输入信号线;P30,P31是串行输入/输出通道,P32(INT0)与ZLG7290的中断管脚相连,P33(INT1)与CS5460A 的中断管脚相连。

P34(T0)作为计数器的输入端,P35(T1)作为输出,作为外部芯片的读信号线;使用部晶振,外接起振晶体。

单片机将采集来的数据经过一定的算法处理后,输出给D/A,来控制电机转速。

③状态显示与键盘设置本实验中用ZLG7290作为键盘接口和LED显示驱动。

特点:2I C串行总线接口,提供键盘中断信号,方便与处理器接口;可驱动8位共阴数码管或64只独立LED和64个按键;8个功能键,可检测任意键的连击次数。

因为ZLG7290采用2I C串行总线,而AT89C52部没有集成2I C总线接口,因此利用软件模拟2I C总线接口功能。

本实验中使用了8个数码管,分为两组,数码管的左四位显示数值为当前所处状态,右四位显示数值为对应状态的数值。

以数值表示的状态含义如下:0101――当前电机转速0102――设置电机转速4ⅹ4键盘布键如下:图1-6 4ⅹ4键盘布键示意图实验板的左下方有一4ⅹ4键盘, 配合数码管使用。

测量当前电机转速,则按一下“电机”键,数码管右四位即表示当前电机转速;若要改变转速,则按一下设置键,这时,数码管左四位显示“0102”,即可进行设置转速,设置好后再按“确定”键。

再按一次“电机”键,即可看到电机当前转速,再按一次又回到设置转速;设置时如想修改,按“取消”,即可重新输入设置值(设置值500-2500R/M,否则无效)。

电路图如下:图1-7 4ⅹ4键盘电路示意图④控制电路本实验中,要通过设置转速来控制电机的转速,需要将数字信号转换为模拟信号,电路中使用了D/A转换芯片TLV5618。

芯片特点:12位双通道串行接口;可编程设置转换时间,高速模式下为2.5us,低速模式下为12us;89C52将保存的设置预期转速值转换成串行数据输出到5618的SDI 端,从SDI端输入的数字信号经TLV5618转换成模拟信号,由OUTB端输出,经放大后作用于直流电机,达到闭环控制目的。

电路图:图1-8 控制电路示意图驱动电路:直流电机的驱动电流和电压都比较大,一般要0-24V的电压,而D/A输出的信号电压和电流比较小,电压围为0-5V,不能直接驱动,中间要经过电压、电流放大。

图1-9 驱动电路示意图图1-10 信号放大器电路示意图根据理想运放的性质,输出电压与输入电压的关系为:11120*55.1fm outB outB outBRV V V VR+++==≈当outBV在0~5V之间变化时,mV+约在0~24V之间变化,变换后的电压控制直流电机的转速,直至电机转速达到预期设定值,从而实现闭环控制。

但是因为放大电路的非线性性,会带来转速误差。

⑤直流调速电机在本实验中为受控对象,在一定的输入电压下,输出相应的转速。

输入电压的围为0~24V。

2.软件设计原理图1-11 软件设计流程图实验程序见附录 四、实验步骤1. 按实验要求连接电路,检查没有连接错误后,给综合实验板上电,开始实验。

在实验的整个过程中要注意安全。

2. 用键盘设置电机转速,从500R/min 开始,当数码管显示的当前转速在设定转速附近上下小幅波动时或稳定在设定转速时,用示波器测量TLV5618的OUTB 端的信号频率,用万用表测量OUTB 端的信号电压、直流电机的输入电压m V +(测试点为f 对应m2,VOUTB 对应R23,m V +对应m+). 3. 改变设定的转速,依次输入500R/min ~2500R/min 之间的值,重复步骤2。

4. 记录数据,处理数据。

五、数据的采集和分析1.数据采集表1-1 所测参数2.数据分析 理论上,出f =60360/ m R ⨯)转速(,(即理论值),A=outB m V V ∆∆+(不能用表1-1中数据直接计算,因为有初始值)=dR dV dR dV outB m //+=12K K ,η=理论值理论值实测-×100%。

经过表1-1中数据计算,__A =4.9(1)在实验数据选择上,设定参数的前五个转速由上而下的以300R/m 递增,同时测得数据outB V 的值也相应以相似的差值递增,因此,我们设想outB V 和转速R 成线性关系。

设 outB V = aR + c ——式① 其中a 和c 为未定常量。

因为d outB V /Dr = a = ΔoutB V /ΔR ——式② 将表1-1中数据代入式①和式②,可得到表1-2表1-2 参数a 和c 的值因此,_a = , _c = 0.558 因此,outB V = 0.00148R + 0.558(2)由表1-1可知,outB V 和 +m V 成 倍的关系。

由(1)中同样的分析方法可得:+m V = 0.00739R + 1.04综上,转速方程为:outB V = 0.00148R + 0.558+mV = 0.00739R + 1.04 (3)验证转速方程的正确性选取转速为 1300 R/m ,测量得outB V = 2.49 V ,+m V = 10.74 VoutB V (理论值)=2.482 V ,+mV (理论值)= 10.647 V 计算得到η1=,η2=,η=(η1+η2 )/2S=(10-η)×10 =表1-3 所测参数的值outB V η1 +m V η2 η S2.49 0.322% 10.74 0.873% 0.59 94.14.用Matlab 画出转速特性曲线(1)outB V :(2)+m V :六、实验思考题1、在测量转速时,本实验设计是采用的硬件定时,若用软件定时,该如何设计?请用C51设计出基于软件定时的转速测量程序。

#include <REG52.H>#define uchar unsigned char#define uint unsigned int#define ulong unsigned long#define LED_DAT P0sbit LED_SEG0 = P2^7;sbit LED_SEG1 = P2^6;sbit LED_SEG2 = P2^5;sbit LED_SEG3 = P2^4;//sbit pin_SpeedSenser = P3^5; //速度传感器信号接在T1上#define TIME_CYLC 100 //12M晶振,定时器10ms 中断一次我们1秒计算一次转速// 1000ms/10ms = 100#define PLUS_PER 50 //码盘的齿数,这里假定码盘上有50个齿,即传感器检测到50个脉冲,认为1圈#define K 100.0 //校准系数uchar code loops[] = {0xFE,0xFD,0x0FB,0x0F7,0x0EF,0x0DF,0x0BF,0x7F};uchar code table[]={0x28,0xEB,0x32,0xA2,0xE1,0xA4,0x24,0xEA,0x20,0xA0,// 0 1 2 3 4 5 6 7 8 90x60,0x25,0x3C,0x23,0x34,0x74,0x00,0x00,0xF7,0x00,0xFF };// A B C D E F H L - 全亮全灭uchar data Disbuf[4];// 显示缓冲区uint Tcounter = 0; //时间计数器bit Flag_Fresh = 0; // 刷新标志bit Flag_clac = 0; //计算转速标志bit Flag_Err = 0; //超量程标志//在数码管上显示一个四位数void DisplayFresh();//计算转速,并把结果放入数码管缓冲区void ClacSpeed();//初始化定时器T0void init_timer0();//初始化定时器T1void init_timer1();//延时函数void Delay(uint ms);void it_timer0() interrupt 1 /* interrupt address is 0x000b */{TF0 = 0; //d定时器 T0用于数码管的动态刷新//TH0 = 0xC0; /* init values */TL0 = 0x00;Flag_Fresh = 1;Tcounter++;if(Tcounter>TIME_CYLC){ Flag_clac = 1;//周期到,该重新计算转速了}}void it_timer1() interrupt 3 /* interrupt address is 0x001b */{TF1 = 0; //定时器T1用于单位时间收到的脉冲数//要速度不是很快,T1永远不会益处Flag_Err = 1; //如果速度很高,我们应考虑另外一种测速方法,:脉冲宽度算转速}void main(void){Disbuf[0] = 0; //开机时,初始化为0000Disbuf[1] = 0;Disbuf[2] = 0;Disbuf[3] = 0;init_timer0();init_timer1();while(1){if(Flag_Fresh){ Flag_Fresh = 0;DisplayFresh(); // 定时刷新数码管显示}if(Flag_clac){ Flag_clac = 0;ClacSpeed(); //计算转速,并把结果放入数码管缓冲区 Tcounter = 0;//周期定时清零TH1=TL1 = 0x00;//脉冲计数清零}if(Flag_Err) //超量程处理{//数码管显示字母‘EEEE’Disbuf[0] = 0x74; //开机时,初始化为0000Disbuf[1] = 0x74;Disbuf[2] = 0x74;Disbuf[3] = 0x74;while(1){ DisplayFresh();//不再测速等待复位i}}}}//在数码管上显示一个四位数void DisplayFresh(){P2 |= 0xF0;LED_SEG0 = 0;LED_DAT = table[Disbuf[0]];Delay(1);P2 |= 0xF0;LED_SEG1 = 0;LED_DAT = table[Disbuf[1]];Delay(1);P2 |= 0xF0;LED_SEG2 = 0;LED_DAT = table[Disbuf[2]];Delay(1);P2 |= 0xF0;LED_SEG3 = 0;LED_DAT = table[Disbuf[3]];Delay(1);P2 |= 0xF0;}//计算转速,并把结果放入数码管缓冲区void ClacSpeed(){uint speed ;uint PlusCounter;PlusCounter = TH1*256 + TL1;speed = K*(PlusCounter/PLUS_PER);//K是校准系数,如速度不准,调节K的大小Disbuf[0] = (speed/1000)%10;Disbuf[1] = (speed/100)%10;Disbuf[2] = (speed/10)%10;Disbuf[3] = speed%10;}//初始化定时器T0void init_timer0(){TMOD &= 0xD8; //定时10毫秒 /* Timer 0 mode 1 with software gate */ TMOD |= 0xF0; /* GATE0=0; C/T0#=0; M10=0; M00=1; */TH0 = 0xC0; /* init values */TL0 = 0x00;ET0=1; /* enable timer0 interrupt */EA=1; /* enable interrupts */TR0=1; /* timer0 run */}//延时函数void Delay(uint ms){uchar i;while(ms--)for(i=0;i<100;i++);}//初始化定时器T1void init_timer1(){TMOD &= 0x0F; /* Counter 1 mode 1 with software gate */TMOD |= 0x50; /* GATE0=0; C/T0#=1; M10=0; M00=1; */TH1 = 0x00; /* init values */TL1 = 0x00;ET1=1; /* enable timer1 interrupt */EA=1; /* enable interrupts */TR1=1; /* timer1 run */}2.结合该实验的硬件结构,查阅有关资料设计一个步进电机的控制程序。

相关主题