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

📄 pidcalc.lis

📁 平缝机的单片机伺服控制系统源代码。本程序为用单片机控制永磁同步电机的低成本方案
💻 LIS
📖 第 1 页 / 共 2 页
字号:
 0196           ;   
 0196           ;       if( 200 < Error < 1000 )// 偏差小于1000线性积分       
 0196 88EC              ldi R24,200
 0198 90E0              ldi R25,0
 019A 8C15              cp R24,R12
 019C 9D05              cpc R25,R13
 019E 1CF4              brge L15
 01A0 81E0              ldi R24,1
 01A2 5C01              movw R10,R24
 01A4 02C0              rjmp L16
 01A6           L15:
 01A6 AA24              clr R10
 01A8 BB24              clr R11
 01AA           L16:
 01AA C501              movw R24,R10
 01AC 883E              cpi R24,232
 01AE E3E0              ldi R30,3
 01B0 9E07              cpc R25,R30
 01B2 5CF4              brge L13
 01B4                   .dbline 75
 01B4           ;       {                               
 01B4                   .dbline 76
 01B4           ;         Ki = 10 - ( Error - 200 ) / 80;   
 01B4 20E5              ldi R18,80
 01B6 30E0              ldi R19,0
 01B8 8601              movw R16,R12
 01BA 085C              subi R16,200
 01BC 1040              sbci R17,0
 01BE 00D0              rcall div16s
 01C0 8AE0              ldi R24,10
 01C2 90E0              ldi R25,0
 01C4 E82E              mov R14,R24
 01C6 E01A              sub R14,R16
 01C8 F10A              sbc R15,R17
 01CA                   .dbline 78
 01CA           ;                         
 01CA           ;       }
 01CA           L13:
 01CA                   .dbline 80
 01CA           ;   
 01CA           ;       if( Error <= 200 )// 全积分 
 01CA 88EC              ldi R24,200
 01CC 90E0              ldi R25,0
 01CE 8C15              cp R24,R12
 01D0 9D05              cpc R25,R13
 01D2 14F0              brlt L17
 01D4                   .dbline 81
 01D4           ;       {
 01D4                   .dbline 82
 01D4           ;         Ki = 10;                       
 01D4 8AE0              ldi R24,10
 01D6 E82E              mov R14,R24
 01D8                   .dbline 83
 01D8           ;     } 
 01D8           L17:
 01D8                   .dbline 85
 01D8           ;  
 01D8           ;       dError = pp->LastError - pp->PrevError;// 当前微分  
 01D8 EE85              ldd R30,y+14
 01DA FF85              ldd R31,y+15
 01DC 2284              ldd R2,z+10
 01DE 3384              ldd R3,z+11
 01E0 EE85              ldd R30,y+14
 01E2 FF85              ldd R31,y+15
 01E4 A084              ldd R10,z+8
 01E6 B184              ldd R11,z+9
 01E8 A218              sub R10,R2
 01EA B308              sbc R11,R3
 01EC                   .dbline 87
 01EC           ;                                                                                     
 01EC           ;       pp->PrevError = pp->LastError;// 当前误差Error[-1]赋给上次误差Error[-2] 
 01EC EE85              ldd R30,y+14
 01EE FF85              ldd R31,y+15
 01F0 2084              ldd R2,z+8
 01F2 3184              ldd R3,z+9
 01F4 EE85              ldd R30,y+14
 01F6 FF85              ldd R31,y+15
 01F8 3386              std z+11,R3
 01FA 2286              std z+10,R2
 01FC                   .dbline 88
 01FC           ;     pp->LastError = Error;// 取当前误差
 01FC EE85              ldd R30,y+14
 01FE FF85              ldd R31,y+15
 0200 D186              std z+9,R13
 0202 C086              std z+8,R12
 0204                   .dbline 91
 0204           ;       
 0204           ;     // result=[(pp->P*Error)+ (Kp*pp->I*pp->SumError/10)+(pp->D*dError)]/10 
 0204           ;     result =       pp->P * Error;              // 比例项       
 0204 EE85              ldd R30,y+14
 0206 FF85              ldd R31,y+15
 0208 0281              ldd R16,z+2
 020A 1381              ldd R17,z+3
 020C 9601              movw R18,R12
 020E 00D0              rcall empy16s
 0210 1801              movw R2,R16
 0212 4424              clr R4
 0214 37FC              sbrc R3,7
 0216 4094              com R4
 0218 5524              clr R5
 021A 47FC              sbrc R4,7
 021C 5094              com R5
 021E FE01              movw R30,R28
 0220 2082              std z+0,R2
 0222 3182              std z+1,R3
 0224 4282              std z+2,R4
 0226 5382              std z+3,R5
 0228                   .dbline 92
 0228           ;       result += Ki * pp->I * pp->SumError  / 10; // 积分项
 0228 EE85              ldd R30,y+14
 022A FF85              ldd R31,y+15
 022C 2481              ldd R18,z+4
 022E 3581              ldd R19,z+5
 0230 0E2D              mov R16,R14
 0232 1127              clr R17
 0234 00D0              rcall empy16s
 0236 1801              movw R2,R16
 0238 4424              clr R4
 023A 37FC              sbrc R3,7
 023C 4094              com R4
 023E 5524              clr R5
 0240 47FC              sbrc R4,7
 0242 5094              com R5
 0244 EE85              ldd R30,y+14
 0246 FF85              ldd R31,y+15
 0248 6484              ldd R6,z+12
 024A 7584              ldd R7,z+13
 024C 8684              ldd R8,z+14
 024E 9784              ldd R9,z+15
 0250 9A92              st -y,R9
 0252 8A92              st -y,R8
 0254 7A92              st -y,R7
 0256 6A92              st -y,R6
 0258 8101              movw R16,R2
 025A 9201              movw R18,R4
 025C 00D0              rcall empy32s
 025E 4AE0              ldi R20,10
 0260 50E0              ldi R21,0
 0262 60E0              ldi R22,0
 0264 70E0              ldi R23,0
 0266 7A93              st -y,R23
 0268 6A93              st -y,R22
 026A 5A93              st -y,R21
 026C 4A93              st -y,R20
 026E 00D0              rcall div32s
 0270 FE01              movw R30,R28
 0272 2080              ldd R2,z+0
 0274 3180              ldd R3,z+1
 0276 4280              ldd R4,z+2
 0278 5380              ldd R5,z+3
 027A 200E              add R2,R16
 027C 311E              adc R3,R17
 027E 421E              adc R4,R18
 0280 531E              adc R5,R19
 0282 FE01              movw R30,R28
 0284 2082              std z+0,R2
 0286 3182              std z+1,R3
 0288 4282              std z+2,R4
 028A 5382              std z+3,R5
 028C                   .dbline 93
 028C           ;       result +=      pp->D * dError;             // 微分项
 028C EE85              ldd R30,y+14
 028E FF85              ldd R31,y+15
 0290 0681              ldd R16,z+6
 0292 1781              ldd R17,z+7
 0294 9501              movw R18,R10
 0296 00D0              rcall empy16s
 0298 1801              movw R2,R16
 029A 4424              clr R4
 029C 37FC              sbrc R3,7
 029E 4094              com R4
 02A0 5524              clr R5
 02A2 47FC              sbrc R4,7
 02A4 5094              com R5
 02A6 FE01              movw R30,R28
 02A8 6080              ldd R6,z+0
 02AA 7180              ldd R7,z+1
 02AC 8280              ldd R8,z+2
 02AE 9380              ldd R9,z+3
 02B0 620C              add R6,R2
 02B2 731C              adc R7,R3
 02B4 841C              adc R8,R4
 02B6 951C              adc R9,R5
 02B8 FE01              movw R30,R28
 02BA 6082              std z+0,R6
 02BC 7182              std z+1,R7
 02BE 8282              std z+2,R8
 02C0 9382              std z+3,R9
 02C2                   .dbline 94
 02C2           ;       result /= 1000;
 02C2 48EE              ldi R20,232
 02C4 53E0              ldi R21,3
 02C6 60E0              ldi R22,0
 02C8 70E0              ldi R23,0
 02CA FE01              movw R30,R28
 02CC 2080              ldd R2,z+0
 02CE 3180              ldd R3,z+1
 02D0 4280              ldd R4,z+2
 02D2 5380              ldd R5,z+3
 02D4 7A93              st -y,R23
 02D6 6A93              st -y,R22
 02D8 5A93              st -y,R21
 02DA 4A93              st -y,R20
 02DC 8101              movw R16,R2
 02DE 9201              movw R18,R4
 02E0 00D0              rcall div32s
 02E2 FE01              movw R30,R28
 02E4 0083              std z+0,R16
 02E6 1183              std z+1,R17
 02E8 2283              std z+2,R18
 02EA 3383              std z+3,R19
 02EC                   .dbline 96
 02EC           ;       
 02EC           ;       if (result <= 0)
 02EC 40E0              ldi R20,0
 02EE 50E0              ldi R21,0
 02F0 60E0              ldi R22,0
 02F2 70E0              ldi R23,0
 02F4 FE01              movw R30,R28
 02F6 2080              ldd R2,z+0
 02F8 3180              ldd R3,z+1
 02FA 4280              ldd R4,z+2
 02FC 5380              ldd R5,z+3
 02FE 4215              cp R20,R2
 0300 5305              cpc R21,R3
 0302 6405              cpc R22,R4
 0304 7505              cpc R23,R5
 0306 54F0              brlt L19
 0308                   .dbline 97
 0308           ;       {
 0308                   .dbline 98
 0308           ;               result = 0;
 0308 40E0              ldi R20,0
 030A 50E0              ldi R21,0
 030C 60E0              ldi R22,0
 030E 70E0              ldi R23,0
 0310 FE01              movw R30,R28
 0312 4083              std z+0,R20
 0314 5183              std z+1,R21
 0316 6283              std z+2,R22
 0318 7383              std z+3,R23
 031A                   .dbline 100
 031A           ;               
 031A           ;       }
 031A 41C0              rjmp L20
 031C           L19:
 031C                   .dbline 102
 031C           ;       else 
 031C           ;       {
 031C                   .dbline 103
 031C           ;               if (result > 1000) 
 031C 48EE              ldi R20,232
 031E 53E0              ldi R21,3
 0320 60E0              ldi R22,0
 0322 70E0              ldi R23,0
 0324 FE01              movw R30,R28
 0326 2080              ldd R2,z+0
 0328 3180              ldd R3,z+1
 032A 4280              ldd R4,z+2
 032C 5380              ldd R5,z+3
 032E 4215              cp R20,R2
 0330 5305              cpc R21,R3
 0332 6405              cpc R22,R4
 0334 7505              cpc R23,R5
 0336 4CF4              brge L21
 0338                   .dbline 104
 0338           ;                       result = 1000;
 0338 48EE              ldi R20,232
 033A 53E0              ldi R21,3
 033C 60E0              ldi R22,0
 033E 70E0              ldi R23,0
 0340 FE01              movw R30,R28
 0342 4083              std z+0,R20
 0344 5183              std z+1,R21
 0346 6283              std z+2,R22
 0348 7383              std z+3,R23
 034A           L21:
 034A                   .dbline 106
 034A           ;                       
 034A           ;               result *= 0xff;
 034A FE01              movw R30,R28
 034C 2080              ldd R2,z+0
 034E 3180              ldd R3,z+1
 0350 4280              ldd R4,z+2
 0352 5380              ldd R5,z+3
 0354 4FEF              ldi R20,255
 0356 50E0              ldi R21,0
 0358 60E0              ldi R22,0
 035A 70E0              ldi R23,0
 035C 5A92              st -y,R5
 035E 4A92              st -y,R4
 0360 3A92              st -y,R3
 0362 2A92              st -y,R2
 0364 8A01              movw R16,R20
 0366 9B01              movw R18,R22
 0368 00D0              rcall empy32s
 036A FE01              movw R30,R28
 036C 0083              std z+0,R16
 036E 1183              std z+1,R17
 0370 2283              std z+2,R18
 0372 3383              std z+3,R19
 0374                   .dbline 107
 0374           ;               result /=1000;
 0374 48EE              ldi R20,232
 0376 53E0              ldi R21,3
 0378 60E0              ldi R22,0
 037A 70E0              ldi R23,0
 037C FE01              movw R30,R28
 037E 2080              ldd R2,z+0
 0380 3180              ldd R3,z+1
 0382 4280              ldd R4,z+2
 0384 5380              ldd R5,z+3
 0386 7A93              st -y,R23
 0388 6A93              st -y,R22
 038A 5A93              st -y,R21
 038C 4A93              st -y,R20
 038E 8101              movw R16,R2
 0390 9201              movw R18,R4
 0392 00D0              rcall div32s
 0394 FE01              movw R30,R28
 0396 0083              std z+0,R16
 0398 1183              std z+1,R17
 039A 2283              std z+2,R18
 039C 3383              std z+3,R19
 039E                   .dbline 108
 039E           ;       }
 039E           L20:
 039E                   .dbline 110
 039E           ;               
 039E           ;       i = result;
 039E FE01              movw R30,R28
 03A0 A080              ldd R10,z+0
 03A2                   .dbline 111
 03A2           ;     return i;                              
 03A2 0A2D              mov R16,R10
 03A4                   .dbline -2
 03A4           L2:
 03A4 2496              adiw R28,4
 03A6 00D0              rcall pop_gset5
 03A8 2496              adiw R28,4
 03AA                   .dbline 0 ; func end
 03AA 0895              ret
 03AC                   .dbsym r i 10 c
 03AC                   .dbsym r dError 10 I
 03AC                   .dbsym r Ki 14 c
 03AC                   .dbsym r Error 12 I
 03AC                   .dbsym l result 0 L
 03AC                   .dbsym r Fact_Value 10 i
 03AC                   .dbsym l pp 14 pS[PID]
 03AC                   .dbend

⌨️ 快捷键说明

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