纸型检测器设计应用

点赞:12449 浏览:55498 近期更新时间:2024-03-23 作者:网友分享原创网站原创

摘 要:本文主要介绍模拟复印机生产组装过程中,在TM与IOT组装前设计一个检测装置,对TM的各组件状态及传感器进行检测,确保组装到IOT整机后,TM均为良品.以此解决原生产方式中的弊端.

关 键 词:单片机串口通信TM(TrayModule)IOT(ImageOutputTerminal)

中图分类号:TS261文献标识码:A文章编号:1672-3791(2012)08(c)-0030-02

1设计构想

多功能复印机现有工程生产方式如图1,这种生产方式操作麻烦,且容易造成二次人为故障,生产效率低.基于这种考虑,将生产过程改良如下,可解决原生产方式的弊端(如图2).

2检测器设计

TM与IOT由物理层,数据连接层,虚拟命令层构成.本设计利用虚拟命令层获取相关信息,完成检测目的.综合考虑成本,设计周期,难易度等因素,最终选定单片机+LCD作为设计课题.

检测器系统如图3所示,单片机:采用ATMEGA48单片机完成整个检测器的控制;LCD:显示TM的动态信息,TM内部故障发生时报警;电源控制:当检测器检测到正确连接到TM时,启动按键,延时1秒钟向TM供电,检测过程中,一时发生故障,系统自动供电电源,防止二次故障发生;LED蜂鸣:LED显示数据的发送接收状态,有数据传输时LED闪烁,异常时蜂鸣器报警.

3程序设计

主程序中各子程序通过标识状态作相应处理.串口数据读取利用单片机串口中断函数,非常方便于数据的连续发送与接收.

3.1程序代码

3.1.1主程序

/***************************************************************************************

#include"mon.h"

等等

intmain(void)

{Sys_Init();//系统初始化

等等.

TIMSK0|等于(1<

sei();

while(1)

{wdt_reset();//喂狗

if(Key_Ctr等于等于1){Key_Control();Key_Ctr等于0;}//按键处理

if(Buzzer_F!等于0){Buzzer_On(Buzzer_F);Buzzer_F等于0;}//蜂鸣

if((Error_F!等于0)&&(Run_F!等于0)){Buzzer_F等于1;}//报警处理

if(Send_F等于等于1){USART_Data_Send();Send_F等于0;}//数据传送

if(rx_buffer.flag等于等于FLAG_RECEIVE_OK)//如果串口接收到完整的数据帧,则进行处理

{USART_CMDProcess();

USART_ClearRXBuffer();

Time_Out等于0;//通信超时计时结束

Time_Out_Sec等于0;}

if(tx_buffer.flag等于等于FLAG_SEND_REQUEST)//如果串口发送缓冲区有发送请求,执行发送


{USART_SendString();

tx_buffer.flag等于FLAG_EMPTY;

Time_Out等于1;//通信超时计时开始}

if(RefreshLCD_F){RefreshLCD();RefreshLCD_F等于0;}//如果LCD有刷新请求,则刷新LCD}}

3.1.2串口中断程序代码

#include"mon.h"

等等

RX_BUFFERrx_buffer;//接收数据结构体实例

TX_BUFFERtx_buffer;//发送数据结构体实例

staticucharNO_CMD_D5[5]等于{0xD5,0x00,0x00,0x00,0x55};

等等等.

/************************************************************************串口初始化

voidUSART_init(uintbaud)

{UBRR0H等于baud>>8;

UBRR0L等于baud&0x00FF;

UCSR0A等于0x00;//U2xn等于0,波特率无倍速

UCSR0B等于(1<

UCSR0C等于(1<

USART_ClearRXBuffer();

USART_ClearTXBuffer();}

/*************************************************************************数组发送

voidUSART_Data_Send(void)

{uchari;

switch(Data_F)

{

case1:{for(i等于0;i

case6:{for(i等于0;i

default:;}}

/*******************************************************************TRAY-STS数据处理

voidUSART_CMDProcess(void)

{if(rx_buffer.buff[1]等于等于0x03)//本组数据为TM版本数据

{Ver_D等于(rx_buffer.buff[3]>>3)&0x03;;//实验/恒久

Ver_H等于rx_buffer.buff[3]&0x07;//TM版本上位

Ver_L等于rx_buffer.buff[2]&0x3F;//TM版本下位

RefreshLCD_F等于2;}

elseif(rx_buffer.buff[1]等于等于0x04)//本组数据为TRAY_STS

{TM_No等于rx_buffer.buff[2]&0x03;//取出TRAY编号00->No201->No310->No4

TM_Status等于(rx_buffer.buff[2]>>2)&0x07;//TRAY状态000->准备好001->上升010->Tary拔

出011->无纸100->上升NG101->NC110->上升3次NG111->SizeSensorNG

ASize等于(rx_buffer.buff[2]>>5)|(rx_buffer.buff[3]<<2);//SizeSensor模拟电压AD值

DSize等于(rx_buffer.buff[3]>>6)&0x01;//SizeSensor数字位0,1

RefreshLCD_F等于3;}

else;}

/********************************************************************清空接收缓冲区

voidUSART_ClearRXBuffer(void)

{uchari;

for(i等于0;i

rx_buffer.rxcount等于0;//计数值清零

rx_buffer.flag等于FLAG_EMPTY;}

/*******************************************************向接收缓冲区中添加一个字节

ucharUSART_AddToRXBuffer(ucharch)

{if(rx_buffer.rxcount>等于RX_MAX){returnERROR_RXBUFFER_FULL;}//缓冲区满

else

{rx_buffer.buff[rx_buffer.rxcount]等于ch;//将要添加的字节保存到当前计数值指向的位置

rx_buffer.rxcount++;//缓冲区的长度增加1

wdt_reset();//喂狗

returnADD_CHAR_OK;//返回添加成功信息}}

纸型检测器设计应用参考属性评定
有关论文范文主题研究: 关于数据结构的文章 大学生适用: 在职研究生论文、函授毕业论文
相关参考文献下载数量: 83 写作解决问题: 毕业论文怎么写
毕业论文开题报告: 论文提纲、论文目录 职称论文适用: 职称评定、职称评初级
所属大学生专业类别: 毕业论文怎么写 论文题目推荐度: 经典题目

/***********************************************************清空发送缓冲区

voidUSART_ClearTXBuffer(void)

{uchari;

for(i等于0;i

{tx_buffer.buff[i]等于0x00;//缓冲区当前元素清空

wdt_reset();//喂狗}

tx_buffer.txcount等于0;//计数值清零

tx_buffer.flag等于FLAG_EMPTY;}

/***********************************************************向发送缓冲区中添加一个字节

ucharUSART_AddToTXBuffer(ucharch)

{if(tx_buffer.txcount>TX_MAX){returnERROR_TXBUFFER_FULL;}//缓冲区满

else

{wdt_reset();

tx_buffer.buff[tx_buffer.txcount]等于ch;//将要添加的字节保存到当前计数值指向的位置

tx_buffer.txcount++;//缓冲区的长度增加1

wdt_reset();//喂狗

if(tx_buffer.txcount等于等于TX_MAX)

{tx_buffer.flag等于FLAG_SEND_REQUEST;//填充完毕指定数量数据,设置发送请求}

returnADD_CHAR_OK;//返回添加成功信息}}

/***************************************************将发送缓冲区的内容一次性发送

voidUSART_SendString(void){UDR0等于tx_buffer.buff[0];//从结构数据的第1个数开始发送

tx_buffer.txcount等于0;}

/****************************************************串口发送中断怎么写作函数

SIGNAL(SIG_USART_TRANS)

{if(++tx_buffer.txcount

elseif(tx_buffer.txcount等于等于TX_MAX)

{USART_ClearTXBuffer();//发送完毕

USART_ClearRXBuffer();//作好接收准备}

else;}

/*****************************************************串口接收完毕中断怎么写作函数

SIGNAL(SIG_USART_RECV)

{rx_buffer.buff[rx_buffer.rxcount]等于UDR0;

rx_buffer.rxcount++;

if(rx_buffer.rxcount>等于RX_MAX){rx_buffer.flag等于FLAG_RECEIVE_OK;}}

3.1.3LCD显示程序代码(纸型检出部份)

voidRefreshLCD(void)/*刷新LCD显示*/

{if(RefreshLCD_F等于等于1)//LCD刷新标识0:无效1:框架显示2:版本显示3:数据显示4:刷新机种

{if(TM_Status等于等于2){disp_String(x,y,(uchar*)"已取出");}//纸盒拔出

else{

if((199{disp_String(x,y,(uchar*)"A5SEF");}

elseif((184{disp_String(x,y,(uchar*)"B5SEF");}

等等等..

elseif((0{disp_String(x,y,(uchar*)"11x17SEF");}

else{disp_String(x,3,(uchar*)"ErrorSize");}//纸型错误}}

4结果测试

只要是TM组件自身的故障都就能检出,如TM纸型感知传感器未安装或接触不良、TM控制器版本错误等.目前为止,没有一件因TM不良而导致整机拆卸的维修事件,提高了生产效率.