📄 acmotor.ls
字号:
784 0157 4d tnz a
785 0158 27d9 jreq L313
786 ; 301 }
789 015a 81 ret
852 .const: section .text
853 0000 L62:
854 0000 00000a00 dc.l 2560
855 ; 313 void ACM_InitSlipFreqReg(u8 OptimumSlip)
855 ; 314 {
856 switch .text
858 xref.b _ACM_InitSlipFreqReg$L
859 015b _ACM_InitSlipFreqReg:
861 015b b700 ld _ACM_InitSlipFreqReg$L,a
863 ; 315 u8 CurrentVoltage = MTC_GetVoltage();
865 015d cd0000 call _MTC_GetVoltage
867 0160 b7ff ld _ACM_InitSlipFreqReg$L-1,a
868 ; 320 Error = MTC_GetSlip() - OptimumSlip;
870 0162 cd0000 call _MTC_GetSlip
872 0165 b000 sub a,_ACM_InitSlipFreqReg$L
873 0167 2401 jrnc L42
874 0169 5a dec x
875 016a L42:
876 016a b7fe ld _ACM_InitSlipFreqReg$L-2,a
877 016c bffd ld _ACM_InitSlipFreqReg$L-3,x
878 ; 321 if (Error > (s16)S8_MAX)
880 016e a080 sub a,#128
881 0170 9f ld a,x
882 0171 a200 sbc a,#0
883 0173 2b04 jrmi L153
884 ; 323 Error_slip = S8_MAX;
886 0175 a67f ld a,#127
888 0177 2010 jra L353
889 0179 L153:
890 ; 327 if (Error < (s16)S8_MIN)
892 0179 b6fe ld a,_ACM_InitSlipFreqReg$L-2
893 017b a080 sub a,#128
894 017d b6fd ld a,_ACM_InitSlipFreqReg$L-3
895 017f a2ff sbc a,#255
896 0181 2a04 jrpl L553
897 ; 329 Error_slip = S8_MIN;
899 0183 a680 ld a,#128
901 0185 2002 jra L353
902 0187 L553:
903 ; 333 Error_slip = (s8)Error;
905 0187 b6fe ld a,_ACM_InitSlipFreqReg$L-2
906 0189 L353:
907 0189 c70010 ld L11_Error_slip,a
908 ; 340 ACM_GetPIParam( MTC_GetStatorFreq() );
910 018c cd0000 call _MTC_GetStatorFreq
912 018f cd03e9 call _ACM_GetPIParam
914 ; 345 Voltage_slip_s32 = 256 * (s32)Kp * (s32)Error_slip;
916 0192 c60010 ld a,L11_Error_slip
917 0195 b703 ld c_lreg+3,a
918 0197 48 sll a
919 0198 4f clr a
920 0199 a200 sbc a,#0
921 019b b702 ld c_lreg+2,a
922 019d b701 ld c_lreg+1,a
923 019f b700 ld c_lreg,a
924 01a1 aef9 ld x,#_ACM_InitSlipFreqReg$L-7
925 01a3 cd0000 call c_rtol
927 01a6 c60016 ld a,L3_Kp
928 01a9 b703 ld c_lreg+3,a
929 01ab 4f clr a
930 01ac b702 ld c_lreg+2,a
931 01ae b701 ld c_lreg+1,a
932 01b0 b700 ld c_lreg,a
933 01b2 a608 ld a,#8
934 01b4 cd0000 call c_llsh
936 01b7 cd0000 call c_lmul
938 01ba ae02 ld x,#high(L12_Voltage_slip_s32)
939 01bc bf00 ld c_x,x
940 01be ae02 ld x,#low(L12_Voltage_slip_s32)
941 01c0 cd0000 call c_rtoxl
943 ; 346 Voltage_slip = (s16) ( Voltage_slip_s32 / 2560 );
945 01c3 ae02 ld x,#high(L12_Voltage_slip_s32)
946 01c5 bf00 ld c_x,x
947 01c7 ae02 ld x,#low(L12_Voltage_slip_s32)
948 01c9 cd0000 call c_xltor
950 01cc ae00 ld x,#high(L62)
951 01ce bf00 ld c_x,x
952 01d0 ae00 ld x,#low(L62)
953 01d2 cd0000 call c_xldiv
955 01d5 b603 ld a,c_lreg+3
956 01d7 be02 ld x,c_lreg+2
957 01d9 c7000b ld L51_Voltage_slip+1,a
958 01dc cf000a ld L51_Voltage_slip,x
959 ; 347 VoltageIntegralTerm = 256 * ( (s32)CurrentVoltage - (s32)Voltage_slip );
961 01df cd0000 call c_itol
963 01e2 aef9 ld x,#_ACM_InitSlipFreqReg$L-7
964 01e4 cd0000 call c_rtol
966 01e7 b6ff ld a,_ACM_InitSlipFreqReg$L-1
967 01e9 b703 ld c_lreg+3,a
968 01eb 4f clr a
969 01ec b702 ld c_lreg+2,a
970 01ee b701 ld c_lreg+1,a
971 01f0 b700 ld c_lreg,a
972 01f2 cd0000 call c_lsub
974 01f5 a608 ld a,#8
975 01f7 cd0000 call c_llsh
977 01fa ae11 ld x,#high(L7_VoltageIntegralTerm)
978 01fc bf00 ld c_x,x
979 01fe ae11 ld x,#low(L7_VoltageIntegralTerm)
980 0200 cd0000 call c_rtoxl
982 ; 350 MinPiOut = FALSE;
984 0203 4f clr a
985 0204 c70001 ld L32_MinPiOut,a
986 ; 351 MaxPiOut = FALSE;
988 0207 c70000 ld L52_MaxPiOut,a
989 ; 353 }
992 020a 81 ret
1085 switch .const
1086 0004 L43:
1087 0004 00000100 dc.l 256
1088 ; 367 u8 ACM_SlipRegulation(u8 OptimumSlip)
1088 ; 368 {
1089 switch .text
1091 xref.b _ACM_SlipRegulation$L
1092 020b _ACM_SlipRegulation:
1094 020b b700 ld _ACM_SlipRegulation$L,a
1096 ; 374 Error = MTC_GetSlip() - OptimumSlip;
1098 020d cd0000 call _MTC_GetSlip
1100 0210 b000 sub a,_ACM_SlipRegulation$L
1101 0212 2401 jrnc L23
1102 0214 5a dec x
1103 0215 L23:
1104 0215 b7fc ld _ACM_SlipRegulation$L-4,a
1105 0217 bffb ld _ACM_SlipRegulation$L-5,x
1106 ; 375 if (Error > (s16)S8_MAX)
1108 0219 a080 sub a,#128
1109 021b 9f ld a,x
1110 021c a200 sbc a,#0
1111 021e 2b04 jrmi L324
1112 ; 377 Error_slip = S8_MAX;
1114 0220 a67f ld a,#127
1116 0222 2010 jra L524
1117 0224 L324:
1118 ; 381 if (Error < (s16)S8_MIN)
1120 0224 b6fc ld a,_ACM_SlipRegulation$L-4
1121 0226 a080 sub a,#128
1122 0228 b6fb ld a,_ACM_SlipRegulation$L-5
1123 022a a2ff sbc a,#255
1124 022c 2a04 jrpl L724
1125 ; 383 Error_slip = S8_MIN;
1127 022e a680 ld a,#128
1129 0230 2002 jra L524
1130 0232 L724:
1131 ; 387 Error_slip = (s8)Error;
1133 0232 b6fc ld a,_ACM_SlipRegulation$L-4
1134 0234 L524:
1135 0234 c70010 ld L11_Error_slip,a
1136 ; 393 ACM_GetPIParam( MTC_GetStatorFreq() ); // Ki and Kp coeff setup
1138 0237 cd0000 call _MTC_GetStatorFreq
1140 023a cd03e9 call _ACM_GetPIParam
1142 ; 397 Voltage_slip_s32 = 256 * (s32)Kp * (s32)Error_slip;
1144 023d c60010 ld a,L11_Error_slip
1145 0240 b703 ld c_lreg+3,a
1146 0242 48 sll a
1147 0243 4f clr a
1148 0244 a200 sbc a,#0
1149 0246 b702 ld c_lreg+2,a
1150 0248 b701 ld c_lreg+1,a
1151 024a b700 ld c_lreg,a
1152 024c aef5 ld x,#_ACM_SlipRegulation$L-11
1153 024e cd0000 call c_rtol
1155 0251 c60016 ld a,L3_Kp
1156 0254 b703 ld c_lreg+3,a
1157 0256 4f clr a
1158 0257 b702 ld c_lreg+2,a
1159 0259 b701 ld c_lreg+1,a
1160 025b b700 ld c_lreg,a
1161 025d a608 ld a,#8
1162 025f cd0000 call c_llsh
1164 0262 cd0000 call c_lmul
1166 0265 ae02 ld x,#high(L12_Voltage_slip_s32)
1167 0267 bf00 ld c_x,x
1168 0269 ae02 ld x,#low(L12_Voltage_slip_s32)
1169 026b cd0000 call c_rtoxl
1171 ; 398 Voltage_slip = (s16) ( Voltage_slip_s32 / 2560 );
1173 026e ae02 ld x,#high(L12_Voltage_slip_s32)
1174 0270 bf00 ld c_x,x
1175 0272 ae02 ld x,#low(L12_Voltage_slip_s32)
1176 0274 cd0000 call c_xltor
1178 0277 ae00 ld x,#high(L62)
1179 0279 bf00 ld c_x,x
1180 027b ae00 ld x,#low(L62)
1181 027d cd0000 call c_xldiv
1183 0280 b603 ld a,c_lreg+3
1184 0282 be02 ld x,c_lreg+2
1185 0284 c7000b ld L51_Voltage_slip+1,a
1186 0287 cf000a ld L51_Voltage_slip,x
1187 ; 400 NewVoltage = Voltage_slip; /* "Proportional" output */
1189 028a bffe ld _ACM_SlipRegulation$L-2,x
1190 028c b7ff ld _ACM_SlipRegulation$L-1,a
1191 ; 405 s32 PreviousVoltageIntegral = VoltageIntegralTerm;
1193 028e c60014 ld a,L7_VoltageIntegralTerm+3
1194 0291 b7fc ld _ACM_SlipRegulation$L-4,a
1195 0293 c60013 ld a,L7_VoltageIntegralTerm+2
1196 0296 b7fb ld _ACM_SlipRegulation$L-5,a
1197 0298 c60012 ld a,L7_VoltageIntegralTerm+1
1198 029b b7fa ld _ACM_SlipRegulation$L-6,a
1199 029d c60011 ld a,L7_VoltageIntegralTerm
1200 02a0 b7f9 ld _ACM_SlipRegulation$L-7,a
1201 ; 407 DeltaVoltage_slip_s32 = 256 * (s32)Ki * (s32)Error_slip;
1203 02a2 c60010 ld a,L11_Error_slip
1204 02a5 b703 ld c_lreg+3,a
1205 02a7 48 sll a
1206 02a8 4f clr a
1207 02a9 a200 sbc a,#0
1208 02ab b702 ld c_lreg+2,a
1209 02ad b701 ld c_lreg+1,a
1210 02af b700 ld c_lreg,a
1211 02b1 aef5 ld x,#_ACM_SlipRegulation$L-11
1212 02b3 cd0000 call c_rtol
1214 02b6 c60015 ld a,L5_Ki
1215 02b9 b703 ld c_lreg+3,a
1216 02bb 4f clr a
1217 02bc b702 ld c_lreg+2,a
1218 02be b701 ld c_lreg+1,a
1219 02c0 b700 ld c_lreg,a
1220 02c2 a608 ld a,#8
1221 02c4 cd0000 call c_llsh
1223 02c7 cd0000 call c_lmul
1225 02ca ae06 ld x,#high(L71_DeltaVoltage_slip_s32)
1226 02cc bf00 ld c_x,x
1227 02ce ae06 ld x,#low(L71_DeltaVoltage_slip_s32)
1228 02d0 cd0000 call c_rtoxl
1230 ; 408 DeltaVoltage_slip = (s32) ( DeltaVoltage_slip_s32 / 2560 );
1232 02d3 ae06 ld x,#high(L71_DeltaVoltage_slip_s32)
1233 02d5 bf00 ld c_x,x
1234 02d7 ae06 ld x,#low(L71_DeltaVoltage_slip_s32)
1235 02d9 cd0000 call c_xltor
1237 02dc ae00 ld x,#high(L62)
1238 02de bf00 ld c_x,x
1239 02e0 ae00 ld x,#low(L62)
1240 02e2 cd0000 call c_xldiv
1242 02e5 ae0c ld x,#high(L31_DeltaVoltage_slip)
1243 02e7 bf00 ld c_x,x
1244 02e9 ae0c ld x,#low(L31_DeltaVoltage_slip)
1245 02eb cd0000 call c_rtoxl
1247 ; 409 if( ((Error_slip>0) && !MaxPiOut) || ((Error_slip<0) && !MinPiOut) )
1249 02ee c60010 ld a,L11_Error_slip
1250 jrle L734
1252 02f5 c60000 ld a,L52_MaxPiOut
1253 02f8 270a jreq L534
1254 02fa L734:
1256 02fa c60010 ld a,L11_Error_slip
1257 02fd 2a17 jrpl L334
1259 02ff c60001 ld a,L32_MinPiOut
1260 0302 2612 jrne L334
1261 0304 L534:
1262 ; 411 VoltageIntegralTerm += DeltaVoltage_slip; /* "integral" output */
1264 0304 ae0c ld x,#high(L31_DeltaVoltage_slip)
1265 0306 bf00 ld c_x,x
1266 0308 ae0c ld x,#low(L31_DeltaVoltage_slip)
1267 030a cd0000 call c_xltor
1269 030d ae11 ld x,#high(L7_VoltageIntegralTerm)
1270 030f bf00 ld c_x,x
1271 0311 ae11 ld x,#low(L7_VoltageIntegralTerm)
1272 0313 cd0000 call c_xlgadd
1274 0316 L334:
1275 ; 414 if ( ( DeltaVoltage_slip >= 0 ) && ( VoltageIntegralTerm < PreviousVoltageIntegral ) )
1277 0316 c6000c ld a,L31_DeltaVoltage_slip
1278 0319 2b20 jrmi L144
1280 031b ae11 ld x,#high(L7_VoltageIntegralTerm)
1281 031d bf00 ld c_x,x
1282 031f ae11 ld x,#low(L7_VoltageIntegralTerm)
1283 0321 cd0000 call c_xltor
1285 0324 aef9 ld x,#_ACM_SlipRegulation$L-7
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -