分享
2023年基于PIC16F628单片机的CM402型高速贴片机控制系统改造设计与实现.doc
下载文档

ID:2150161

大小:85.50KB

页数:13页

格式:DOC

时间:2023-04-25

收藏 分享赚钱
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,汇文网负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。
网站客服:3074922707
2023 基于 PIC16F628 单片机 CM402 高速 贴片机 控制系统 改造 设计 实现
基于PIC16F628单片机的CM402型高速贴片机控制系统改造设计与实现[图] :// ( 2023/4/26 11:28 ) 引言 随着外表贴装技术〔Surface Mounted Technology,SMT〕的不断优化及贴片元器件制作工艺的迅速开展,贴片机在电子制造业中的应用日益突出。CM402型高速贴片机是由日本松下公司研发和生产,针对某些特定工件、按特定工序进行批量加工的专用设备。根据笔者为期两周的现场调查和论证,传统CM402型高速贴片机在拼接料生产过程中,假设出现拼接料检知停止时,停机扫料的时间将影响到生产效率。通过认真分析该设备的工序流程及阅读其用户手册,可将此拼接料检知、停机扫料程序进行技术改造,并在原有电控系统上利用PVS控制系统替代Timer〔计时器〕,可实现接料不停机控制功能,从而可提升其生产效率。 本文以利用PIC16F628单片机构成PVS控制系统为例,从硬件系统设计和软件系统设计入手,给出了印制电路板图、电路原理图及源代码。 硬件系统设计 该PVS控制系统以PIC16F628单片机为核心,由PIC16F628单片机及其外围元器件、电源模块、继电器模块组成,印制电路板和电路原理图如图1、图2所示。 图1 印制电路板 图2 原理图 PIC16F628单片机及其外围元器件 PIC16F628单片机是由Microchip公司生产的PIC系列8位CMOS闪存单片机之一,该系列单片机采用RISC〔Reduced Instruction Set Computer〕嵌入式结构,具有执行速度高、功耗低、体积小巧、工作电压低、驱动能力强、品种丰富等优越性能。其总线结构采取数据总线和指令线别离独立的哈佛〔Harvord〕结构,具有很高的流水处理速度。与同类8位单片机相比,程序存储器可节省一半,指令运行速度可以提高4倍左右。PIC16F628单片机封装形式为DIP-18,配合相应程序,该芯片可实现继电器智能控制功能,即配合其他配套电路可构成PVS控制系统,实现CM402型贴片机接料不停机控制功能。JP2为报警信号输入端、JP5为PC机并口解锁信号输入端、SB1、SB2为定时时间调节按钮,LED1~LED6构成定时时间显示电路,单只LED亮表示10s,全部亮表示60s。 电源模块 电源模块设计的质量直接关系到PVS控制系统的稳定性。该控制系统直接利用CM402型贴片机的+24V稳压电源,故采用稳压性能较好的三端稳压集成电路LM7812、LM7805实现两级稳压,为单片机、光电耦合器等元器件提供+5V直流稳压电源。JP1为24V电源输入端,与CM402贴片机相应插座直接连接。 继电器模块 继电器模块由晶体管驱动电路和固态继电器构成。其中VT1、VT2选用C9014型晶体管;欧姆龙TQ2-24V型24V继电器。该模块工作状态由单片机RA4〔第3脚〕控制,并通过JP3、JP4与CM402型贴片机相应端口相连。 软件系统设计 软件环镜基于MPLAB IDE V8.33,编译器HI-TECH C,仿真器ICD2.0烧写PIC16F628芯片实现CM402型贴片机控制系统改造设计功能。 实现程序如下: #include __CONFIG(0X1F3C); #define ulong unsigned long #define uint unsigned int #define uchar unsigned char #define RD (1) #define WR (1<<1) #define WREN (1<<2) #define WRERR (1<<3) #define FREE (1<<4) #define CFGS (1<<6) #define EEPGD (1<<7) #define START_READ_EEPROM() EECON1=EECON1|RD #define START_WRITE_EEPROM() EECON1=EECON1|WR #define ENABLE_WRITE_EEPROM() EECON1=EECON1|WREN #define DISABLE_WRITE_EEPROM() EECON1=EECON1&(~WREN) #define SELECT_EEPROM() EECON1=EECON1&(~(EEPGD|CFGS)) #define out RA3 uint js=1; uchar Key_Num = 0x00,Key_Num1 = 0x00; //本次键码 uchar Key_Backup = 0x00,Key_Backup1 = 0x00; //备份键码 uchar key,temp,key1,temp1; bit Key_Dis_F = 0,Key_Dis_F1 = 0,OFF_ON=0; uchar ES=1,ES_DATA=1; bit a; ulong z=1; uchar ES_BC_DATA; void ms(uint b); void keyscan(void); char readByte(char addr); void writeByte(char addr, char data); void X_Y_IN(void); void main() { TRISB2=0; TRISB3=0; TRISB4=0; TRISB5=0; TRISA6=0; TRISA7=0; RB2=1; RB3=1; RB4=1; RB5=1; RA6=1; RA7=1; TRISB0=1; TRISB1=1; RB0=1; RB1=1; TRISB6=1; TRISB7=1; RB7=1; RB6=1; GIE=1; PEIE=1; T1CON=0X01; TMR1IE=1; TMR1IF=0; TMR1L=0XEF; TMR1H=0XD8; CM0=1; CM1=0; CM2=1; C2OUT=0; C2INV=1; TRISA4=0; RA4=1; TRISA3=0; RA3=1; a=out=1; ES_BC_DATA=readByte(0x00); ES_DATA=ES=ES_BC_DATA; while(1) { asm("clrwdt");//清看门狗 keyscan(); X_Y_IN(); if((C2OUT==1)&(OFF_ON==1)&(a==0)) { ms(4); if((C2OUT==1)&(OFF_ON==1)&(a==0)) { C2OUT=0; ES_DATA=ES_BC_DATA; OFF_ON=0; a=out=1; z=1; } } switch(ES) { case 1: RB2=1; RB3=1; RB4=1; RB5=1; RA6=1; RA7=0; break; case 2: RB2=1; RB3=1; RB4=1; RB5=1; RA6=0; RA7=0; break; case 3: RB2=1; RB3=1; RB4=1; RB5=0; RA6=0; RA7=0; break; case 4: RB2=1; RB3=1; RB4=0; RB5=0; RA6=0; RA7=0; break; case 5: RB2=1; RB3=0; RB4=0; RB5=0; RA6=0; RA7=0; break; case 6: RB2=0; RB3=0; RB4=0; RB5=0; RA6=0; RA7=0; break; } } } void ms(uint b) { uchar c; while(b--) for(c=123;c>0;c--); } void interrupt tmr1(void) { if(TMR1IF==1) { TMR1IF=0; TMR1L=0XEF; TMR1H=0XD8; js++; if(js==1000) { js=1; if(OFF_ON==1) { if(ES_DATA!=0); { ES_DATA--; if(ES_DATA==0) { a=out=0; } } } } } } void X_Y_IN(void) { if((RB0==0)&(RB1==0)) { ms(2); if((RB0==0)&(RB1==0)&((z++)==500)) { temp1=1; } } else { z=1; temp1=0; } Key_Num1=temp1; if((Key_Num1!=0x00)&&(Key_Num1 == Key_Backup1 )) { if(!Key_Dis_F1) { Key_Dis_F1 = 1; asm("clrwdt"); if((RB0==0)&(RB1==0)) { OFF_ON=1; } } } else { Key_Backup1 = Key_Num1; Key_Dis_F1 = 0; } } void keyscan(void) { if((RB7==0)|(RB6==0)) { ms(10); if((RB7==0)|(RB6==0)) { temp=1; } } else { temp=0; } Key_Num=temp; if((Key_Num!=0x00)&&(Key_Num == Key_Backup )) { if(!Key_Dis_F) { Key_Dis_F = 1; asm("clrwdt"); if((RB6==0)&(RB7==1)) { ES--; if(ES<=1) { ES=1; } if(ES!=ES_BC_DATA) { ES_DATA=ES_BC_DATA=ES; writeByte(0x00,ES_BC_DATA); writeByte(0x01,out); writeByte(0x02,RA4); writeByte(0x03,RB1); writeByte(0x04,RB0); writeByte(0x05,z); } } if((RB6==1)&(RB7==0)) { ES++; if(ES>=6) { ES=6; } if(ES!=ES_BC_DATA) { ES_DATA=ES_BC_DATA=ES; writeByte(0x00,ES_BC_DATA); } } } } else { Key_Backup = Key_Num; Key_Dis_F = 0; } } char readByte(char addr) { char tmpEEPROM; EEADR = addr; SELECT_EEPROM(); START_READ_EEPROM(); tmpEEPROM = EEDATA; return tmpEEPROM; } void writeByte(char addr, char data) { EEADR = addr; EEDATA = data; SELECT_EEPROM(); ENABLE_WRITE_EEPROM(); EECON2 = 0X55; EECON2 = 0Xaa; START_WRITE_EEPROM(); ENABLE_WRITE_EEPROM(); while(1 != EEIF); EEIF = 0; } 结束语 该PVS控制系统以PIC16F62

此文档下载收益归作者所有

下载文档
你可能关注的文档
收起
展开