资源描述
地税局自动盖章系统设计 地税局自动盖章系统是一种集自动盖章和页码打印于一体的办公设备,它能够自动实现收费票据的盖章,收费票据的页码打印功能。系统设计的主要任务围绕步进电机的控制展开。 步进电机是一种将电脉冲转化为角位移的执行机构。通俗一点讲:当步进驱动器接收到一个脉冲信号,它就驱动步进电机按设定的方向转动一个固定的角度(即步进角)。您可以通过控制脉冲个数来控制角位移量,从而达到准确定位的目的;同时您还可以通过控制脉冲频率来控制电机转动的速度和加速度,从而达到调速的目的。 随着运动控制系统中数字化技术的发展与成熟,步进电机在自动化控制中得到广泛的应用。 1 系统功能说明地税局自动盖章系统根据其使用的不同环境,具有以下的几种功能,以满足不同客户的使用要求。1.1票据进/出仓功能该功能主要用于操作人员把票据送入或者取出打印设备,其工作原理与电脑的光驱设备的进出仓原理相同。首次按下“进/出仓”键,设备的票据仓在步进电机的驱动下伸出来,以便操作人员放入票据,再次按下“进/出仓”键,设备的票据仓在步进电机的驱动下收回,准备进行下一步的操作。1.2盖章功能 当操作人员放入票据以后,再按下“盖章”键,设备在检测到票据仓有纸的情况下,进行票据的自动盖章,同时盖章指示灯亮,表明设备正在进行盖章操作;当把所有的票据页盖章完毕后,盖章结束的指示灯亮,表明盖章结束。1.3打印页码功能 当操作人员放入票据以后,再按下“打印页码”键,设备在检测到票据仓有纸的情况下,进行票据的页码打印,同时页码打印指示灯亮,表明设备正在进行票据的页码打印操作;当把所有票据的页码完毕后,页码打印结束的指示灯亮,表明票据页码打印结束。1.4取消功能当操作人员按下“取消”键,设备取消正在进行的操作,并进入复位后的等待状态。1.5复位功能当操作人员按下“复位”键,设备进行系统的复位操作。并随后进入等待状态。2 应用系统设计2.1应用系统结构设计根据1.1节所述的地税局自动盖章系统的功能,该系统需要完成步进电机的驱动,盖章电磁铁的击打,打印电磁铁的击打,票据进/出仓的位置传感器、纸张有/无的传感器的信号检测,指示灯的驱动,票据翻页的机械手步进电机的驱动等操作,系统的结构框图如图1所示。2.2设备及器件选型本设计采用Atmel公司的AT90S8535高性能低功耗的AVR单片机作为设备的核心控制器。根据图81所设计的系统结构,选择合适功能器件,以完成完整的系统控制电路设计。控制系统需要选择稳压电源单元,步进电机及电机驱动器单元,功能键盘单元,位置传感器单元和驱动电磁击打锤的固态继电器单元。2.2.1 稳压电源1.稳压电源的分类常用的稳压电源有开关稳压电源、输出电压值固定的稳压电源和输出电压值可以调节的稳压电源。开关稳压电源:开关电源的特点如下:价格低、可靠性高;适用AC输入电源;效率高、工作温度低;软启动电流、能有效降低AC输入冲击;有短路保护、过载保护;体积小、重量轻;内有EMI滤波器、纹波极小。开关型稳压电源通常由输入滤波电路、工频整流电路、功率因数校正电路、直流变换器和输出滤波器等部分组成,如图2所示。 输入滤波器的主要作用是衰减电网中的高频谐波分量,同时也可防止开关电源产生的高频谐波分量进入电网,影响其他用电设备,输入滤波器通常采用LC低通滤波器,为了更大地衰减高次谐波分量,也可以采用几个单级滤波器组成的多级滤波器;工频整流器的主要作用是将交流输入电压变换成直流电压,该整流器通常采用单相或者三相桥式整流电路,为了使输入电压比较平稳,输出端还必须加入滤波电容;功率因数校正电路的主要作用是:通过升高整流器输出的直流电压,迫使交流输入电流与交流输入电压的波形及相位基本相同,从而使功率因数接近1,该电路通常采用直流升压变换器;直流变换器的主要作用是将功率因数校正电路输出的直流高压变换成设备所需的电压值,通常采用的变换器有单端变换器、推挽变换器和桥式变换器;输出滤波器的主要作用是衰减直流变换器输出电压中的高频分量,降低输出电压的纹波,从而满足电子设备的要求,输出滤波器也采用LC滤波电路。 在简单了结了开关型稳压电源的基础上,同时考虑了电源的性能、价格和系统本身对电源功率的要求等因素。本系统选择了复旦大学科教实业有限公司的S-350-36(36V/5A)型开关型稳压电源。输出电压值固定的稳压电源:输出电压值固定的稳压电源的结构相对比较简单,通常使用输出电压固定的集成稳压器件来实现,由于它只有输入、输出和公共引出端,故称之为三端式稳压器。三端式稳压器的型号很多,本系统选用的三端式稳压器是具有正电压输出的78M05。具体的电路图如图3所示。图3 5V稳压电源电路图输出电压值可以调节的稳压电源输出电压值可以调节的稳压电源通常使用三端可调式集成稳压器,以LM317为例,其电路结构和常用的外接元件如图4所示。LM317的内部有比较放大器、偏置电路(图中未画出)、恒流电路和带隙基准电压VREF等,它的公共端改接到输出端,器件本身无接地端。所以消耗的电流都从输出端流出,内部的基准电压(约1.2V)接至比较放大器的同相端和调整端之间。若接上外部的调整电阻R1、R2后,输出电压为: (1)。LM317的VREF1.2V,IADJ=50A,由于调整端电流IADJI1 ,故可以忽略,式8.1可以简化为: (2)。 2.2.2 步进电机及驱动器1. 步进电机的分类步进电机分通常两种:反应式步进电机,感应子式步进电机。反应式步进电机由于反应式步进电机工作原理比较简单。下面是三相反应式步进电机的工作原理。 电机转子均匀分布着很多小齿,定子齿有三个励磁绕阻,其几何轴线依次分别与转子齿轴线错开。0、1/3、2/3,(相邻两转子齿轴线间的距离为齿距以表示),即A与齿1相对齐,B与齿2向右错开1/3,C与齿3向右错开2/3,A与齿5相对齐,(A就是A,齿5就是齿1)定转子的展开图如图85所示。图5定转子的展开图如A相通电,B,C相不通电时,由于磁场作用,齿1与A对齐,(转子不受任何力以下均同)。如B相通电,A,C相不通电时,齿2应与B对齐,此时转子向右移过1/3,此时齿3与C偏移为1/3,齿4与A偏移(-1/3)=2/3。如C相通电,A,B相不通电,齿3应与C对齐,此时转子又向右移过1/3,此时齿4与A偏移为1/3对齐。 如A相通电,B,C相不通电,齿4与A对齐,转子又向右移过1/3。这样经过A、B、C、A分别通电状态,齿4(即齿1前一齿)移到A相,电机转子向右转过一个齿距,如果不断地按A,B,C,A通电,电机就每步(每脉冲)1/3,向右旋转。如按A,C,B,A通电,电机就反转。 由此可见:电机的位置和速度由导电次数(脉冲数)和频率成一一对应关系。而方向由导电顺序决定。感应子式步进电机感应子式步进电机与传统的反应式步进电机相比,结构上转子加有永磁体,以提供软磁材料的工作点,而定子激磁只需提供变化的磁场而不必提供磁材料工作点的耗能,因此该电机效率高,电流小,发热低。因永磁体的存在,该电机具有较强的反电势,其自身阻尼作用比较好,使其在运转过程中比较平稳、噪音低、低频振动小。 感应子式步进电机某种程度上可以看作是低速同步电机。一个四相电机可以作四相运行,也可以作二相运行。(必须采用双极电压驱动),而反应式电机则不能如此。例如:四相,八相运行(A-AB-B-BC-C-CD-D-DA-A)完全可以采用二相八拍运行方式。不难发现其条件为C=,D=. 一个二相电机的内部绕组与四相电机完全一致,小功率电机一般直接连接为二相,而功率大一点的电机,为了方便使用,灵活改变电机的动态特点,往往将其外部接线为八根引线(四相),这样使用时,既可以作四相电机使用,可以作为二相电机绕组串联或并联使用。本系统选用的是三相反应式步进电机。步进电机驱动器步进电机驱动器是能够实现使用、控制步进电机必须的环形脉冲,功率放大等功能组成的控制器。其结构框图如图86所示。其中各个接线端子的具体功能如下:CP 接CPU脉冲信号(负信号,低电平有效);OPTO接CPU+5V;FREE脱机,与CPU地线相接,驱动电源不工作;DIR方向控制,与CPU地线相接,电机反转;VCC 直流电源正端;GND直流电源负端; A接电机引出线红线; 接电机引出线绿线; B接电机引出线黄线; 接电机引出线蓝线;2.2.3 功能键盘本系统的功能键盘采用了独立式动态扫描键盘,该键盘的结构及功能在12章中有详细的介绍,这里不再过多介绍了。2.2.4 位置传感器本系统的位置传感器采用由发光二极管和光敏二极管组成的电路来实现,在下一节中将结合电路原理图进行说明。2.2.5 固体继电器固体继电器(亦称固态继电器)英文名称为Solid State Relay,简称SSR。它是用半导体器件代替传统电接点作为切换装置的具有继电器特性的无触点开关器件,单相SSR为四端有源器件,其中两个输入控制端,两个输出端,输入输出间为光隔离,输入端加上直流或脉冲信号到一定电流值后,输出端就能从断态转变成通态。固体继电器工作可靠,寿命长,无噪声,无火花,无电磁干扰,开关速度快,抗干扰能力强,且体积小,耐冲击,耐振荡,防爆、防潮、防腐蚀、能与TTL、DTL、HTL等逻辑电路兼容,以微小的控制信号达到直接驱动大电流负载。主要不足是存在通态压降(需相应散热措施),有断态漏电流,交直流不能通用,触点组数少,另外过电流、过电压及电压上升率、电流上升率等指标差。固体继电器目前已广泛应用于计算机外围接口装置,电炉加热恒温系统,数控机械,遥控系统、工业自动化装置;信号灯、闪烁器、照明舞台灯光控制系统;仪器仪表、医疗器械、复印机、自动洗衣机;自动消防,保安系统,以及作为电网功率因素补偿的电力电容的切换开关等等,另外在化工、煤矿等需防爆、防潮、防腐蚀场合中都有大量使用。本系统驱动电磁击打锤和抓纸机械手是通过AVR单片机的输出控制直流固体继电器来实现的。直流固体继电器的输出量程既能够满足驱动电磁击打锤所需要的较大的电流,又可以起到隔离作用,防止电磁击打锤的线圈的在通断电时产生的脉冲尖峰对系统的干扰,提高控制系统的抗干扰能力。3 硬件设计地税局自动盖章系统的控制电路原理如图7所示,下面对各单元电路进行说明。图8 自动盖章系统的控制电路原理图 3.1电源设计本系统的电源共有36V、 12V、5V三种。其中36V电源由开关电源输出,用来作为电机及系统其它电源的输入。系统的12V电源用于击打电磁和抓纸机械手的供电,它由可调三端稳压电源器件LM350将36V降压得到,LM350和LM317为同一系列的可调三端稳压器件,工作原理完全相同,只在具体的参数上有所差别。控制系统的5V电源由固定值三端稳压电源器件78M05对12V电压进行降压得到,它为单片机及其接口系统提供电源。其中电阻R2和发光二极管D7组成电源工作指示灯。系统电源设计的电路原理图如图9所示。图9系统电源的电路原理图8.3.2步进电机接口电路设计本系统共有三个独立工作的步进电机,分别是控制进/出仓的步进电机,控制翻票据的步进电机和控制页码字轮旋转的步进电机,各个步进电机的功率不同,因此选用了三个步进电机控制器。但是三个步进电机不同时工作,因此可以共用一个方向控制线。其具体电路图如图10所示。图10步进电机控制电路图3.3功能键盘接口电路设计本系统的功能键盘设计采用的是独立式键盘结构,并设计了盖章和打印页码的工作指示灯,具体电路如图11所示。 图11系统功能键盘电路图其中S1为进/出仓功能键,S2为盖章功能键,S3为打印页码功能键,S4为取消功能键,S5为复位功能键。绿色发光二极管D5为盖章工作指示灯,红色发光二极管D6为盖章结束指示,绿色灯发光二极管D7为打印页码工作指示灯,红色发光二极管D8为打印页码结束指示灯。3.4位置传感器接口电路设计本设计的位置传感器采用了由发光二极管和光敏二极管组成的电路来实现,它们分别位于被探测的物体的两侧。其工作原理框图如图812所示。 图12 传感器工作原理框图光敏二极管是利用硅结受光照后产生光电流的一种光电器件,光敏二极管使用时要反向接入电路中,即正极接电源负极,负极接电源正极。系统工作时,发光二极管通电发出可见光,当没有物体遮挡时,高灵敏度光敏二极管接收可见光,使得自身阻值变小,电路输出逻辑低电平到AVR单片机;当有物体遮挡时,高灵敏度光敏二极管无法接收可见光,使得自身阻值增大,电路输出逻辑高电平到AVR单片机。单片机通过高低电平来判断有无遮挡物,进而判断物体的位置。其具体的电路图如图13所示。 图 13 传感器的电路原理图其中发光二极管D2和电阻R1组成发光电路,为传感器提供光源;电阻R5和光敏二极管D3组成光电接收和逻辑转换电路,为AVR单片机提供逻辑电平的输入。其它的6个 传感器的构成和工作原理与该电路完全相同,在图8和图10中进行了省略,实际系统中共有7个这种传感器。3.5固态继电器接口电路设计本系统的三个固体继电器接口电路有两种用途,其中的两个分别用来驱动盖章和打印页码的电磁击打锤,另外一个用来驱动抓票据所用的机械手。其接口电路如图814所示。不同型号的固体继电器的输入驱动电流不同,为了保护单片机,减少其功耗,在单片机输出引脚增加了功率放大的74LS04,用它的输出来驱动固体继电器。4 系统程序系统程序给出了地税局自动盖章系统的软件,包含头文件及各种变量的定义,键盘扫描函数,盖章函数,打印页码函数,以及中断复位函数,初始化函数和主程序。4.1 头文件及全局变量定义#include #include #define unsigned int uint#define unsigned char uchar/管脚功能#define SIGN_ON PD0 /PD0 盖章工作指示灯输出管脚#define SIGN_OFF PD1 /PC7 盖章结束指示灯输出管脚#define PRINT_ON PD3 /PD3 打印页码工作指示灯输出管脚#define PD4 PRINT_OFF /PD4 打印页码结束指示灯输出管脚#define PC7 M1_pulse /PC7 装票电机脉冲输出管脚#define PC6 M2_pulse /PC6 行走电机脉冲输出管脚#define PC5 M3_pulse /PC5 字轮电机脉冲输出管脚#define PC4 M_DIR /PC4 电机方向输出管脚#define PC3 SIGN_ACT /PC3 盖章击打电磁铁输出管脚#define PC2 PRINT_ACT /PC2 字轮击打电磁铁输出管脚#define PC1 GRASP_ACT /PC1 抓纸机械手输出管脚#define PB6 SONSOR_6 /PB6 行走右传感器#define PB5 SONSOR_5 /PB5 行走左传感器#define PB4 SONSOR_4 /PB4 字轮传感器#define PB3 SONSOR_3 /PB3 纸传感器#define PB2 SONSOR_2 /PB2 后传感器#define PB1 SONSOR_1 /PB1 中传感器#define PB0 SONSOR_0 /PB0 前传感器#define PA2 KEY_2 /PA2 打印页码键#define PA1 KEY_1 /PA1 盖章键#define PA0 KEY_0 /PA0 装票键bit keydown, cancelflag;unsigned int u;;unsigned char i,j, x,y,k,m,n,funkeynum,r_step,b,c, void cancel() interrupt 0 cancelflag=1; /功能键扫描void funkeyscan() keydown=0; funkeynum=3; if(KEY_0=0) Delayl(10); if(KEY_0=0) funkeynum=0; keydown=1; /PA0 装票 if(KEY_1=0) Delayl(10); if(KEY_1=0) funkeynum=1; keydown=1; /PA1 盖章 if(KEY_2=0) Delayl(10); if(KEY_2=0) funkeynum=2; keydown=1; /PA2 打码void delays(uint j) uint i; for(i=0;ij;i+) ; void delay1(unsigned int j) uint i; for(i=0;ij;i+) uint l;for(l=0;l1000;l+); void pulsezhuangpiao() /装票频率 delays(45); /装票周期45 M1_pulse=1; /Pc7=1 delays(45); /装票周期45 M1_pulse=0; /Pc7=0void pulsexingzou() delays(35); /行走周期35 M2_pulse=1; /Pc6=1 delays(35); /行走周期35 M2_pulse=0; /Pc6=0void pulsezilun() /字轮电机脉冲 delays(55); /字轮电机周期35 M3_pulse=0; /Pc5=0 delays(55); /字轮电机周期35 M3_pulse=1; /Pc5=1 void print_act() PRINT_ACT=1; delay1(5); /打字电磁铁打下时间延时20(*1000) PRINT_ACT=0; delay1(20); /打字电磁铁上升时间延时20(*1000)void sign_act() SIGN_ACT=1; delay1(20); /盖章电磁铁打下时间延时20(*1000) SIGN_ACT=0; delay1(20); /盖章电磁铁上升时间延时20(*1000)void num_step() M_DIR=0; /反转 for(u=0;u40;u+) /行走电机距离即字间距40 pulsexingzou(); void reverse_step() unsigned int i; for(i=0;i350;i+) /居中以后再走100吸纸 M_DIR=0; /反转 pulsexingzou(); GRASP_ACT=1; /吸纸 while(SONSOR_5=0) /等待开关 M_DIR=0; /反转 pulsexingzou(); void forward_step() GRASP_ACT=0; /不吸纸 while(SONSOR_6=0) /等待开关 M_DIR=1; /正转 pulsexingzou(); M_DIR=0; /反转 for(u=0;u10)r_step=(20-b)*12; M_DIR=1; else r_step=b*12; M_DIR=0; void judge2() /判断字轮正反转 if(b10)r_step=(20-b)*12; M_DIR=0; else r_step=b*12; M_DIR=1; void motorxizhi() reverse_step(); u=0; delay1(5); /吸纸延时10*(1000) while(SONSOR_6=0) /等待开关 M_DIR=1; /往右转 u+; pulsexingzou(); if(u=380) GRASP_ACT=0; /抓纸机械手往右走380步放纸 void motor3qianzou() M_DIR=1; /方向 while(SONSOR_0=0) /前传感器 pulsezhuangpiao(); /承票板往前走 void motor3houzhong() uchar e; while(SONSOR_1=0) /中传感器 M_DIR=0; /方向 pulsezhuangpiao(); /承票板往hou走 for(e=0;e55;e+) /修正位置误差55 M_DIR=0; /方向 pulsezhuangpiao(); /承票板往hou走 void motor3houzou() M_DIR=0; /方向while(SONSOR_2=0) /后传感器 pulsezhuangpiao(); /承票板往hou走void motor30()motor3qianzou();motor3houzhong();void motor3qianzhong() M_DIR=1; /方向 while(SONSOR_1=0) /中传感器 pulsezhuangpiao(); /承票板往前走 for(i=0;i20;i+) pulsezhuangpiao();void motor1_fuwei() reverse_step(); COM8255=0x03; /正空蹦不动作 delay1(5); while(SONSOR_6=0) /等待开关 M_DIR=1; /正转 pulsexingzou(); M_DIR=0; /反转 /以上程序初始定位void motor2_fuwei() M_DIR=0; while(SONSOR_4=0) /字轮光电传感器 pulsezilun(); void motor12_dama()unsigned char k=0,p;/n,while(SONSOR_3=0) /纸张结束标志位为0时循环执行 for(u=0;u150;u+) M_DIR=0; pulsexingzou(); /电机进入打印位置 motor2_fuwei(); /字轮复位 p=0; if(k10) b=k+k; judge1(); for(u=0;ur_step;u+) /字轮电机转到打印位置 pulsezilun(); print_act(); else b=k/10+k/10; /取整的yushu judge1(); for(u=0;ub) b=p-b; judge1(); else b=b-p; judge2(); for(u=0;ur_step;u+) /字轮电机转到打印位置 pulsezilun(); print_act(); k+; motorxizhi(); if(cancelflag=1) goto OUT2; OUT2: cancelflag=0; for(u=0;u450;u+) M_DIR=0; pulsexingzou(); void motor30()uint i;for(i=0;i350;i+) /居中以后再往左走100吸纸 M_DIR=0; /反转 pulsexingzou(); GRASP_ACT=1; /吸纸 while(SONSOR_5=0) /等待开关 M_DIR=0; /反转 pulsexingzou(); M_DIR=1; /往右转 for(u=0;u500;u+) /往右走的脉冲个数500 pulsexingzou(); GRASP_ACT=1; /行走电机居中 motor3qianzou();void motorjuzhong() for(u=0;u450;u+) M_DIR=0; pulsexingzou(); void motorgaizhang() while(SONSOR_3=0) /纸张结束标志位为1时循环执行 motor3houzou(); sign_act(); motor3qianzhong(); motorxizhi(); motorjuzhong(); if(cancelflag=1) goto OUT3; OUT3: cancelflag=0;void main(void)begin: cancelflag=0; SIGN_ACT0; /盖章击打电磁铁1吸起 PRINT_ACT0; /打印页码击打电磁铁2吸起 GRASP_ACT0; /抓纸机械手不动作forward_step(); /翻页步进电机复位motor3houzou(); /承票板往后走 motor3qianzhong(); /承票板往中间走进行复位IT1 = 0; /设外部中断1为低电平触发EA = 1; /开中断EX1 = 1; /开中断1do do funkeyscan(); while(keydown=0); switch(funkeynum)case 1 : /装票操作 motor3(); break; case 3 : /盖章motor30(); /装票 wait1: while(KEY_1!=0); while(KEY_1=0) DelayMs(50); if(KEY_1=0) motor3houzhong(); else goto wait1; SIGN_ON0; SIGN_OFF1; /盖章进行中指示灯亮 motor3houzou();motorgaizhang(); / 盖章 motor3qianzhong(); SIGN_ON1; SIGN_OFF0; /盖章结束指示灯亮break;case 3 : /打印页码 motor30(); /装票wait2: while(KEY_2!=0); while(KEY_2=0) DelayMs(50); if(KEY_2=0) motor3houzhong(); else goto wait2; PRINT_ON0; PRINT_OFF1; /打印页码进行指示灯亮 motor1_fuwei(); motor12_dama(); /打印页码 PRINT_ON1; PRINT_OFF0;/打印页结束指示灯亮break;while(1);5系统集成与调试地税局自动盖章系统的测试主要有以下几部分:电源的测试、传感器电路的测试、电机驱动电路的测试、电磁击打锤电路的测试和键盘电路的测试。对电机驱动电路的测试应编写相应的测试程序,其它电路单元的测试应该以硬件电路调试为主。5.1.电机驱动电路的测试根据图710所设计的步进电机驱动电路,在硬件电路焊接完成之后,可以编制如下的测试程序,对步进电机单元进行测试。测试的目的是为了调试电机的转速以符合实际工作状况的需要。#include void delay( int j ) int i; for(i=0;ij;i+) /步进电机转速周期j ; void pulse() delay(35);Pc6=1; /Pc5=1;/Pc4=1; delay(35);Pc6=0; /Pc5=0;/Pc4=0;main() int i;while(1) Pc3=1; /正转 for(i=0;i200;i+) /正转200个脉冲 pulse(); Pc3=0; /反转 for(u=0;u200;u+) /反转200个脉冲 pulse();
展开阅读全文