⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 err_debug.lst

📁 平缝机的单片机伺服控制系统源代码。本程序为用单片机控制永磁同步电机的低成本方案
💻 LST
📖 第 1 页 / 共 3 页
字号:
    0106 9380011F  STS	g_ErrCode01,R24
(0194) 		return 1;
    0108 E001      LDI	R16,1
    0109 C001      RJMP	0x010B
(0195) 	}
(0196) 	else
(0197) 		return 0;
    010A 2700      CLR	R16
    010B 9508      RET
(0198) 
(0199) }
(0200) 
(0201) // 电机堵转检测
(0202) // 在定时器中断服务函数中检测
(0203) byte det_err_motor_block(void)
(0204) {
(0205) 	if (g_MotorBlock)
_det_err_motor_block:
    010C 90200116  LDS	R2,g_MotorBlock
    010E 2022      TST	R2
    010F F039      BEQ	0x0117
(0206) 	{
(0207) 		g_ErrCode01  |= 0x80;
    0110 9180011F  LDS	R24,g_ErrCode01
    0112 6880      ORI	R24,0x80
    0113 9380011F  STS	g_ErrCode01,R24
(0208) 		return 1;
    0115 E001      LDI	R16,1
    0116 C001      RJMP	0x0118
(0209) 	}
(0210) 	else
(0211) 		return 0;
    0117 2700      CLR	R16
    0118 9508      RET
(0212) 
(0213) }
(0214) 
(0215) // 电机HALL信号故障检测
(0216) // 需在连续10次上停针中断而FG_MCU中断信号未监测到1次
(0217) // 置起 标志g_HallErr
(0218) byte det_err_motor_hall(void)
(0219) {
(0220) 	if (g_HallErr)
_det_err_motor_hall:
    0119 90200114  LDS	R2,g_HallErr
    011B 2022      TST	R2
    011C F039      BEQ	0x0124
(0221) 	{
(0222) 		g_ErrCode02  |= 0x01;
    011D 9180011E  LDS	R24,g_ErrCode02
    011F 6081      ORI	R24,1
    0120 9380011E  STS	g_ErrCode02,R24
(0223) 		return 1;
    0122 E001      LDI	R16,1
    0123 C001      RJMP	0x0125
(0224) 	}
(0225) 	else
(0226) 		return 0;
    0124 2700      CLR	R16
    0125 9508      RET
(0227) 
(0228) }
(0229) 
(0230) #if 0
(0231) // 硬件过流处理
(0232) // 红灯LED长亮,绿灯熄灭
(0233) void deal_err_over_flow(void)
(0234) {
(0235) 	RED_ON();
(0236) 	GREEN_OFF();
(0237) }
(0238) 
(0239) // 反转保护检测
(0240) // 红灯LED闪烁2下,绿灯熄灭
(0241) void deal_err_inver_protect(void)
(0242) {
(0243) 	led_flicker(1,2);
(0244) 	GREEN_OFF();
(0245) }
(0246) 
(0247) // 欠压检测
(0248) // 红灯LED闪烁3下,绿灯熄灭
(0249) void deal_err_low_vol(void)
(0250) {
(0251) 	led_flicker(1,3);
(0252) 	GREEN_OFF();
(0253) }
(0254) 
(0255) // 无停针信号检测
(0256) // 红灯LED闪烁4下,绿灯熄灭
(0257) void deal_err_no_stop_needle(void)
(0258) {
(0259) 	led_flicker(1,4);
(0260) 	GREEN_OFF();
(0261) }
(0262) 
(0263) // 过压检测
(0264) // 红灯LED闪烁5下,绿灯熄灭
(0265) void deal_err_over_vol(void)
(0266) {
(0267) 	led_flicker(1,5);
(0268) 	GREEN_OFF();
(0269) }
(0270) 
(0271) // 电磁阀驱动回路过流短路故障检测
(0272) // 红灯LED长亮,绿灯闪烁1下
(0273) void deal_err_solenoid_short(void)
(0274) {
(0275) 	RED_ON();
(0276) 	led_flicker(0,1);
(0277) }
(0278) 
(0279) // 同步编码器故障检测
(0280) // 红灯LED长亮,绿灯闪烁2下
(0281) void deal_err_syn_encoder(void)
(0282) {
(0283) 	RED_ON();
(0284) 	led_flicker(0,2);
(0285) }
(0286) 
(0287) // 电机堵转检测
(0288) // 红灯LED长亮,绿灯闪烁3下
(0289) void deal_err_motor_block(void)
(0290) {
(0291) 	RED_ON();
(0292) 	led_flicker(0,3);
(0293) }
(0294) 
(0295) // 电机HALL信号故障检测
(0296) // 红灯LED长亮,绿灯闪烁4下
(0297) void deal_err_motor_hall(void)
(0298) {
(0299) 	RED_ON();
(0300) 	led_flicker(0,4);
(0301) }
(0302) #endif
(0303) 
(0304) /****************************************************
(0305) 
(0306) 
(0307) 控制LED 灯闪烁函数
(0308) 参数type : 1 表示控制红灯  0 表示控制绿灯
(0309) 参数times : 闪烁的次数
(0310) 
(0311) *****************************************************/
(0312) void led_flicker(byte type,byte times)
(0313) {
(0314) 	g_LedTimesT1 = 0;
_led_flicker:
  times                --> R18
  type                 --> R16
    0126 2422      CLR	R2
    0127 92200110  STS	g_LedTimesT1,R2
(0315) 	g_LedTimesT2 = 0;
    0129 9220010F  STS	g_LedTimesT2,R2
(0316) 	g_LedTimesT3 = 0;
    012B 2433      CLR	R3
    012C 92300101  STS	g_LedTimesT3+1,R3
    012E 92200100  STS	g_LedTimesT3,R2
(0317) 	
(0318) 	g_LedType = type;
    0130 93000113  STS	g_LedType,R16
(0319) 	g_LedTimes = times;
    0132 93200111  STS	g_LedTimes,R18
(0320) 	g_LedTimesCnt = times;
    0134 93200112  STS	g_LedTimesCnt,R18
(0321) 	g_StartLedFlick = 1;
    0136 E081      LDI	R24,1
    0137 9380010E  STS	g_StartLedFlick,R24
    0139 9508      RET
_electromagne_ctrl:
  ctrl                 --> R18
  target               --> R16
    013A D16C      RCALL	push_gset1
(0322) }
(0323) 
(0324) 
(0325) 
(0326) 
(0327) // 电磁铁控制函数
(0328) // 参数 target  : 电磁铁序号1~3
(0329) // 参数 ctrl  : 1 	启动    0  停止
(0330) void electromagne_ctrl(byte target ,byte ctrl)
(0331) {
(0332) 	switch (target)
    013B 2F40      MOV	R20,R16
    013C 2755      CLR	R21
    013D 3041      CPI	R20,1
    013E E0E0      LDI	R30,0
    013F 075E      CPC	R21,R30
    0140 F049      BEQ	0x014A
    0141 3042      CPI	R20,2
    0142 E0E0      LDI	R30,0
    0143 075E      CPC	R21,R30
    0144 F059      BEQ	0x0150
    0145 3043      CPI	R20,3
    0146 E0E0      LDI	R30,0
    0147 075E      CPC	R21,R30
    0148 F069      BEQ	0x0156
    0149 C011      RJMP	0x015B
(0333) 	{
(0334) 		case 1:
(0335) 			if (ctrl)
    014A 2322      TST	R18
    014B F011      BEQ	0x014E
(0336) 			{
(0337) 				 E_MAG1_ON();
    014C 982B      CBI	0x05,3
(0338) 			}
    014D C00D      RJMP	0x015B
(0339) 			else
(0340) 			{
(0341) 				E_MAG1_OFF();
    014E 9A2B      SBI	0x05,3
(0342) 			}
(0343) 			break;
    014F C00B      RJMP	0x015B
(0344) 			
(0345) 		case 2:
(0346) 			if (ctrl)
    0150 2322      TST	R18
    0151 F011      BEQ	0x0154
(0347) 			{
(0348) 				 E_MAG2_ON();
    0152 985D      CBI	0x0B,5
(0349) 			}
    0153 C007      RJMP	0x015B
(0350) 			else
(0351) 			{
(0352) 				E_MAG2_OFF();
    0154 9A5D      SBI	0x0B,5
(0353) 			}
(0354) 			break;
    0155 C005      RJMP	0x015B
(0355) 			
(0356) 		case 3:
(0357) 			if (ctrl)
    0156 2322      TST	R18
    0157 F011      BEQ	0x015A
(0358) 			{
(0359) 				 E_MAG3_ON();
    0158 982A      CBI	0x05,2
(0360) 			}
    0159 C001      RJMP	0x015B
(0361) 			else
(0362) 			{
(0363) 				E_MAG3_OFF();
    015A 9A2A      SBI	0x05,2
(0364) 			}
(0365) 			break;
(0366) 			
(0367) 		default:
(0368) 			break;
    015B D14E      RCALL	pop_gset1
    015C 9508      RET
(0369) 	}
(0370) 
(0371) }
(0372) 
(0373) 
(0374) 
(0375) 
(0376) //  10 ms 中断 一次
(0377) // 需要提供低于220V 的信号g_singleLowVol
(0378) // 电机停机信号g_MotorStop
(0379) // 高于400V 的信号g_singleOverVol
(0380) // 电机正在运行标志g_MotorRun
(0381) // 电机速度小于10 RPM 标志g_LowSpeed
(0382) void timer1_ovf_isr_(void)
(0383) {
(0384) 	if (!g_MotorRun)
_timer1_ovf_isr_:
    015D 9020011D  LDS	R2,g_MotorRun
    015F 2022      TST	R2
    0160 F009      BEQ	0x0162
    0161 C045      RJMP	0x01A7
(0385) 	{
(0386) 		if (g_singleLowVol)
    0162 9020011C  LDS	R2,g_singleLowVol
    0164 2022      TST	R2
    0165 F051      BEQ	0x0170
(0387) 		{
(0388) 			g_Lower220VCnt ++;
    0166 91800108  LDS	R24,g_Lower220VCnt
    0168 91900109  LDS	R25,g_Lower220VCnt+1
    016A 9601      ADIW	R24,1
    016B 93900109  STS	g_Lower220VCnt+1,R25
    016D 93800108  STS	g_Lower220VCnt,R24
(0389) 		}
    016F C009      RJMP	0x0179
(0390) 		else
(0391) 		{
(0392) 			g_Over220VCnt ++;
    0170 9180010A  LDS	R24,g_Over220VCnt
    0172 9190010B  LDS	R25,g_Over220VCnt+1
    0174 9601      ADIW	R24,1
    0175 9390010B  STS	g_Over220VCnt+1,R25
    0177 9380010A  STS	g_Over220VCnt,R24
(0393) 		}
(0394) 		if (g_Lower220VCnt + g_Over220VCnt > 300)
    0179 9020010A  LDS	R2,g_Over220VCnt
    017B 9030010B  LDS	R3,g_Over220VCnt+1
    017D 90400108  LDS	R4,g_Lower220VCnt
    017F 90500109  LDS	R5,g_Lower220VCnt+1
    0181 0C42      ADD	R4,R2
    0182 1C53      ADC	R5,R3
    0183 E28C      LDI	R24,0x2C
    0184 E091      LDI	R25,1
    0185 1584      CP	R24,R4
    0186 0595      CPC	R25,R5
    0187 F4C0      BCC	0x01A0
(0395) 		{
(0396) 			if (g_Lower220VCnt > g_Over220VCnt)
    0188 90400108  LDS	R4,g_Lower220VCnt
    018A 90500109  LDS	R5,g_Lower220VCnt+1
    018C 1424      CP	R2,R4
    018D 0435      CPC	R3,R5
    018E F420      BCC	0x0193
(0397) 			{
(0398) 				g_LowVol = 1;
    018F E081      LDI	R24,1
    0190 9380011A  STS	g_LowVol,R24
(0399) 			}
    0192 C003      RJMP	0x0196
(0400) 			else
(0401) 			{
(0402) 				g_LowVol = 0;
    0193 2422      CLR	R2
    0194 9220011A  STS	g_LowVol,R2
(0403) 			}
(0404) 			g_Lower220VCnt = 0;
    0196 2422      CLR	R2
    0197 2433      CLR	R3
    0198 92300109  STS	g_Lower220VCnt+1,R3
    019A 92200108  STS	g_Lower220VCnt,R2
(0405) 			g_Over220VCnt = 0;
    019C 9230010B  STS	g_Over220VCnt+1,R3
    019E 9220010A  STS	g_Over220VCnt,R2
(0406) 		}
(0407) 		g_LowSpeedCnt = 0;
    01A0 2422      CLR	R2
    01A1 2433      CLR	R3
    01A2 92300103  STS	g_LowSpeedCnt+1,R3
    01A4 92200102  STS	g_LowSpeedCnt,R2
(0408) 	}
    01A6 C030      RJMP	0x01D7
(0409) 	else
(0410) 	{
(0411) 		g_Lower220VCnt = 0;
    01A7 2422      CLR	R2
    01A8 2433      CLR	R3
    01A9 92300109  STS	g_Lower220VCnt+1,R3
    01AB 92200108  STS	g_Lower220VCnt,R2
(0412) 		g_Over220VCnt = 0;	
    01AD 9230010B  STS	g_Over220VCnt+1,R3
    01AF 9220010A  STS	g_Over220VCnt,R2
(0413) 		if (g_LowSpeed)
    01B1 90200115  LDS	R2,g_LowSpeed
    01B3 2022      TST	R2
    01B4 F051      BEQ	0x01BF
(0414) 		{
(0415) 			g_LowSpeedCnt ++;
    01B5 91800102  LDS	R24,g_LowSpeedCnt
    01B7 91900103  LDS	R25,g_LowSpeedCnt+1
    01B9 9601      ADIW	R24,1
    01BA 93900103  STS	g_LowSpeedCnt+1,R25
    01BC 93800102  STS	g_LowSpeedCnt,R24
(0416) 		}
    01BE C006      RJMP	0x01C5
(0417) 		else
(0418) 		{
(0419) 			g_LowSpeedCnt = 0;
    01BF 2422      CLR	R2
    01C0 2433      CLR	R3
    01C1 92300103  STS	g_LowSpeedCnt+1,R3
    01C3 92200102  STS	g_LowSpeedCnt,R2
(0420) 		}
(0421) 		if (g_LowSpeedCnt > 200)
    01C5 EC88      LDI	R24,0xC8
    01C6 E090      LDI	R25,0
    01C7 90200102  LDS	R2,g_LowSpeedCnt
    01C9 90300103  LDS	R3,g_LowSpeedCnt+1
    01CB 1582      CP	R24,R2
    01CC 0593      CPC	R25,R3
    01CD F448      BCC	0x01D7
(0422) 		{
(0423) 			g_MotorBlock = 1;
    01CE E081      LDI	R24,1
    01CF 93800116  STS	g_MotorBlock,R24
(0424) 			g_LowSpeedCnt = 0;
    01D1 2422      CLR	R2
    01D2 2433      CLR	R3
    01D3 92300103  STS	g_LowSpeedCnt+1,R3
    01D5 92200102  STS	g_LowSpeedCnt,R2
(0425) 		}	
(0426) 	}
(0427) 
(0428) 
(0429) 	if (g_SingleOverVol)
    01D7 90200118  LDS	R2,g_SingleOverVol
    01D9 2022      TST	R2
    01DA F051      BEQ	0x01E5
(0430) 	{
(0431) 		g_Lower400VCnt ++;
    01DB 91800104  LDS	R24,g_Lower400VCnt
    01DD 91900105  LDS	R25,g_Lower400VCnt+1
    01DF 9601      ADIW	R24,1
    01E0 93900105  STS	g_Lower400VCnt+1,R25
    01E2 93800104  STS	g_Lower400VCnt,R24
(0432) 	}
    01E4 C009      RJMP	0x01EE
(0433) 	else
(0434) 	{
(0435) 		g_Over400VCnt ++;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -