基于PIC16F628單片機(jī)的CM402型高速貼片機(jī)控制系統(tǒng)改造設(shè)計與實(shí)現(xiàn)
引言
本文引用地址:http://www.ex-cimer.com/article/171842.htm隨著表面貼裝技術(shù)(Surface Mounted Technology,SMT)的不斷優(yōu)化及貼片元器件制作工藝的迅速發(fā)展,貼片機(jī)在電子制造業(yè)中的應(yīng)用日益突出。CM402型高速貼片機(jī)是由日本松下公司研發(fā)和生產(chǎn),針對某些特定工件、按特定工序進(jìn)行批量加工的專用設(shè)備。根據(jù)筆者為期兩周的現(xiàn)場調(diào)查和論證,傳統(tǒng)CM402型高速貼片機(jī)在拼接料生產(chǎn)過程中,若出現(xiàn)拼接料檢知停止時,停機(jī)掃料的時間將影響到生產(chǎn)效率。通過認(rèn)真分析該設(shè)備的工序流程及閱讀其用戶手冊,可將此拼接料檢知、停機(jī)掃料程序進(jìn)行技術(shù)改造,并在原有電控系統(tǒng)上利用PVS控制系統(tǒng)替代Timer(計時器),可實(shí)現(xiàn)接料不停機(jī)控制功能,從而可提升其生產(chǎn)效率。
本文以利用PIC16F628單片機(jī)構(gòu)成PVS控制系統(tǒng)為例,從硬件系統(tǒng)設(shè)計和軟件系統(tǒng)設(shè)計入手,給出了印制電路板圖、電路原理圖及源代碼。
硬件系統(tǒng)設(shè)計
該P(yáng)VS控制系統(tǒng)以PIC16F628單片機(jī)為核心,由PIC16F628單片機(jī)及其外圍元器件、電源模塊、繼電器模塊組成,印制電路板和電路原理圖如圖1、圖2所示。
圖1 印制電路板
圖2 原理圖
PIC16F628單片機(jī)及其外圍元器件
PIC16F628單片機(jī)是由Microchip公司生產(chǎn)的PIC系列8位CMOS閃存單片機(jī)之一,該系列單片機(jī)采用RISC(Reduced Instruction Set Computer)嵌入式結(jié)構(gòu),具有執(zhí)行速度高、功耗低、體積小巧、工作電壓低、驅(qū)動能力強(qiáng)、品種豐富等優(yōu)越性能。其總線結(jié)構(gòu)采取數(shù)據(jù)總線和指令線分離獨(dú)立的哈佛(Harvord)結(jié)構(gòu),具有很高的流水處理速度。與同類8位單片機(jī)相比,程序存儲器可節(jié)省一半,指令運(yùn)行速度可以提高4倍左右。PIC16F628單片機(jī)封裝形式為DIP-18,配合相應(yīng)程序,該芯片可實(shí)現(xiàn)繼電器智能控制功能,即配合其他配套電路可構(gòu)成PVS控制系統(tǒng),實(shí)現(xiàn)CM402型貼片機(jī)接料不停機(jī)控制功能。JP2為報警信號輸入端、JP5為PC機(jī)并口解鎖信號輸入端、SB1、SB2為定時時間調(diào)節(jié)按鈕,LED1~LED6構(gòu)成定時時間顯示電路,單只LED亮表示10s,全部亮表示60s。
電源模塊
電源模塊設(shè)計的質(zhì)量直接關(guān)系到PVS控制系統(tǒng)的穩(wěn)定性。該控制系統(tǒng)直接利用CM402型貼片機(jī)的+24V穩(wěn)壓電源,故采用穩(wěn)壓性能較好的三端穩(wěn)壓集成電路LM7812、LM7805實(shí)現(xiàn)兩級穩(wěn)壓,為單片機(jī)、光電耦合器等元器件提供+5V直流穩(wěn)壓電源。JP1為24V電源輸入端,與CM402貼片機(jī)相應(yīng)插座直接連接。
繼電器模塊
繼電器模塊由晶體管驅(qū)動電路和固態(tài)繼電器構(gòu)成。其中VT1、VT2選用C9014型晶體管;歐姆龍TQ2-24V型24V繼電器。該模塊工作狀態(tài)由單片機(jī)RA4(第3腳)控制,并通過JP3、JP4與CM402型貼片機(jī)相應(yīng)端口相連。
軟件系統(tǒng)設(shè)計
軟件環(huán)鏡基于MPLAB IDE V8.33,編譯器HI-TECH C,仿真器ICD2.0燒寫PIC16F628芯片實(shí)現(xiàn)CM402型貼片機(jī)控制系統(tǒng)改造設(shè)計功能。
實(shí)現(xiàn)程序如下:
#include
__CONFIG(0X1F3C);
#define ulong unsigned long
#define uint unsigned int
#define uchar unsigned char
#define RD (1)
#define WR (11)
#define WREN (12)
#define WRERR (13)
#define FREE (14)
#define CFGS (16)
#define EEPGD (17)
#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;
}
結(jié)束語
該P(yáng)VS控制系統(tǒng)以PIC16F628單片機(jī)為核心,具有集成度高、性能穩(wěn)定、抗干擾能力強(qiáng)、性價比高等優(yōu)點(diǎn)。該P(yáng)VS控制系統(tǒng)已制作成品銷售,由蘇州翔慶精密機(jī)械有限公司等單位經(jīng)過6個月的聯(lián)機(jī)生產(chǎn)驗證,證明該設(shè)計方案可靠、可行。利用該P(yáng)VS控制系統(tǒng)改造CM402型貼片機(jī),預(yù)期可提升生產(chǎn)力約4%,具有良好的實(shí)用價值。
評論