写了半个小时的帖子,最后却被自己不小心弄没了。好吧,是命不好,但是我还是得问下去。
我试试用文字和图片将我要问的问题表达清楚。
我要做的是点焊机的程序设计,其中焊接部分主要是可控硅的控制。
硬件设计
将电源的过零检测脉冲输给PIC16F74的PORTA,4/T0CKI引脚。过零检测的脉冲周期为10ms。
软件设计
程序安排
将TMR0设为外部计数中断模式,且设初值为0FFH,这样就将TMR0转换为外部中断模式。
将TMR1设为定时中断模式,初值由焊接电流值设定。
TMR0中断==》重新赋TMR0=0FFH+对TMR1赋初值+开启TMR1中断使能+清PORTC,3
TMR1中断==》置PORTC,3+清TMR1中断使能和计数使能位
程序
;中断服务子程序
;-----------------------
INTSEV NOP ;中断程序体
BTFSS T0IE ;查询允许TMR0外部计数中断吗?
GOTO CHK01 ;没有就查询TMR1是否中断
BTFSC T0IF ;中断溢出,就执行中断
GOTO INT00
CHK01 BANK1
BTFSS TMR1IE ;判断是否允许TMR1定时中断
GOTO BACK0 ;没有就查询TMR2是否中断
BANK0
BTFSC TMR1IF;中断溢出就执行中断
GOTO INT01
BACK0 POP ;退出中断
BANK0
RETFIE
;-----各个中断处理----
INT00 BANK0;检测过零点,-开启TMR1和设定其初值
BSF FL2;焊接阶段时的时间基值
BCF PORTC,3;焊接指示灯点亮
MOVLW 0FFH;定时常数
MOVWF TMR0;重新装载TMR0
BCF TMR1ON;TMR1重新赋值
MOVF R6, W
MOVWF TMR1L
MOVF R7, W
MOVWF TMR1H
BSF TMR1ON
BANK1
BSF TMR1IE;开启TMR1,等待延时后输出脉冲
BANK0
BCF T0IF
GOTO BACK0;退出中断
INT01 BANK0 ;可控硅的导通时间
BCF TMR1IF;清中断标志
BSF PORTC,3;点亮焊接指示灯
BCF TMR1ON;清计数使能
BANK1
BCF TMR1IE;清中断允许位
GOTO BACK0;退出中断
;以下是焊接阶段程序
;R10为焊接时间
L001 BANK0
MOVF R10, 1;焊接阶段
BTFSC Z
GOTO TWO
L00P; BTFSC CGK
; BCF HJLED3
BSF T0IE ;可控硅控制焊接
BCF CTRGK
L00P1 BTFSS FL2 ;判断10ms到了没有
GOTO L00
GOTO L00 ;回循环程序
TWO BANK0;焊接时间到,结束焊接阶段
BCF TMR1IF ;清TMR1和TMR0的定时设置参数
BCF TMR1ON
BCF T0IF
BCF T0IE
BCF PORTC,3
BANK1
BCF TMR1IE
这里出现的问题是加和不加蓝颜色标记的两条指令。
当没有加蓝颜色指令时,出现的波形图是附件中a的部分,如a00表示焊接电流设为0.0ms;a99表示焊接电流设为9.9ms。这时候,可控硅的触发脉冲中第一个脉冲高电平会持续到第二个脉冲高电平的结束。当负载接电灯时,电灯闪烁,严重的时候电灯会长亮,用示波器测试这时的波形是高电平,时间大概为2.4s。当焊接电流设置为0.0到0.4ms的时候,灯会时不时的闪烁。
当加上蓝颜色的指令时,出现的波形图是附件b的部分,后面的数字意思同上。这时候,可控硅触发脉冲通常会掉第二个脉冲,且焊接电流设置为大于等于9.1ms后,输出电流不大。
这两种波形都不是完全的正确波形,这是为什么呢?还请各位大侠帮个忙,指点一二。 |