📄 lzkfunc.lst
字号:
187 }
188 else // EM Full Bridge,励磁为全桥形式.
189 {
190 if( TrigOutSyncTimCNT == TrigOutPosiA_OnTim ) /* Trig Phase A+ ON */
191 PulseOutPut(0x7f & TrigOutPosiA_ON & TrigOutNegaB_ON);
192 if( TrigOutSyncTimCNT == TrigOutPosiA_OffTim ) /* Trig Phase A+ OFF*/
193 PulseOutPut(0x7f);
194
195 if( TrigOutSyncTimCNT == TrigOutNegaC_OnTim ) /* Trig Phase C- ON */
196 PulseOutPut(0x7f & TrigOutPosiA_ON & TrigOutNegaC_ON);
197 if( TrigOutSyncTimCNT == TrigOutNegaC_OffTim ) /* Trig Phase C- OFF*/
198 PulseOutPut(0x7f);
199
200 if( TrigOutSyncTimCNT == TrigOutPosiB_OnTim ) /* Trig Phase B+ ON */
201 PulseOutPut(0x7f & TrigOutNegaC_ON & TrigOutPosiB_ON);
202 if( TrigOutSyncTimCNT == TrigOutPosiB_OffTim ) /* Trig Phase B+ OFF*/
203 PulseOutPut(0x7f);
204
205 if( TrigOutSyncTimCNT == TrigOutNegaA_OnTim ) /* Trig Phase A- ON */
206 PulseOutPut(0x7f & TrigOutPosiB_ON & TrigOutNegaA_ON);
207 if( TrigOutSyncTimCNT == TrigOutNegaA_OffTim ) /* Trig Phase A- OFF*/
208 PulseOutPut(0x7f);
209
210 if( TrigOutSyncTimCNT == TrigOutPosiC_OnTim ) /* Trig Phase C+ ON */
211 PulseOutPut(0x7f & TrigOutNegaA_ON & TrigOutPosiC_ON);
212 if( TrigOutSyncTimCNT == TrigOutPosiC_OffTim ) /* Trig Phase C+ OFF*/
213 PulseOutPut(0x7f);
214
215 if( TrigOutSyncTimCNT == TrigOutNegaB_OnTim ) /* Trig Phase B- ON */
216 PulseOutPut(0x7f & TrigOutPosiC_ON & TrigOutNegaB_ON);
217 if( TrigOutSyncTimCNT == TrigOutNegaB_OffTim ) /* Trig Phase B- OFF*/
218 PulseOutPut(0x7f);
219 }
220
221 if( TrigOutSyncTimCntEN == 1 )
222 {
223 TrigOutSyncTimCNT++;
224 if( TrigOutSyncTimCNT >= 161 )
225 {
226 TrigOutSyncTimCNT = 0;
227 TrigOutSyncTimCntEN = 0; // 防止因SYNCa错误导致触发脉冲错误
228 }
229 }
230 }
231 else
232 PulseOutPut(0xff); // 输出保护,脉冲输出指示iLED熄灭.
233
234
235 /*****************************************************************
236 *** 相差法测量电动机电源功率因数,PhasePole(DUxCO)为DUx的过零检测波形
237 *****************************************************************/
238 /*
239 uint8 bdata PwrFact_MsrFLAG = 0x00;
C51 COMPILER V7.20 LZKFUNC 09/04/2006 16:29:05 PAGE 5
240 sbit DUxCO_LastVal = PwrFact_MsrFLAG ^ 7; // DUxCO历史状态
241 sbit DUxCO_CurrVal = PwrFact_MsrFLAG ^ 6; // DUxCO当前状态
242 sbit PwrFact_CurLoopMsrOVER = PwrFact_MsrFLAG ^ 5; // 功率因数电流环法单次测量结束
243 sbit PwrFact_CurLoopMsrEN = PwrFact_MsrFLAG ^ 4; // 功率因数电流环法测量使能
244 sbit PwrFact_CalcMsrOVER = PwrFact_MsrFLAG ^ 3; // 功率因数计算法单次测量结束
245 sbit PwrFact_CalcMsrEN = PwrFact_MsrFLAG ^ 2; // 功率因数计算法测量使能
246 sbit PwrFact_PhaDiffMsrOVER = PwrFact_MsrFLAG ^ 1; // 功率因数相差法单次测量结束
247 sbit PwrFact_PhaDiffMsrEN = PwrFact_MsrFLAG ^ 0; // 功率因数相差法测量使能
248
249 uint8 xdata DUxCO_RisTimCNT = 0; // DUxCO上升沿次数
250 uint8 xdata PwrFact_PhaDiffMsrCNT = 0; // 功率因数相差法测量次数
251 INTUC xdata PwrFact_PhaDiffMsrDATA[8]; // 功率因数相差法单次测量数据
252 uint16 xdata PwrFact_PhaDiffMsrResult; // 功率因数相差法测量结果
253 */
254 if( PwrFact_PhaDiffMsrEN == 1 )
255 {
256 DUxCO_LastVal = DUxCO_CurrVal; // 保存DUxCO状态
257 DUxCO_CurrVal = PhasePole; // 读取DUxCO当前状态
258
259 if( DUxCO_CurrVal != DUxCO_LastVal )
260 if( DUxCO_CurrVal == 1 ) // 识别DUxCO上升沿
261 {
262 if( DUxCO_RisTimCNT == 0 ) // TIMER1没有开始计数
263 {
264 SFRPAGE = TIMER01_PAGE; // Change to Timer1 Page
265 TR1 = 1; // T1 Begin.
266 }
267 else
268 DUxCO_RisTimCNT++;
269
270 if( DUxCO_RisTimCNT == 3 ) // 在第三次DUxCO上升沿中止TIMER1
271 {
272 SFRPAGE = TIMER01_PAGE; // Change to Timer1 Page
273 TR1 = 0; // T1 STOP.
274 PwrFact_PhaDiffMsrDATA[PwrFact_PhaDiffMsrCNT].ucVAR[0] = TL1;
275 PwrFact_PhaDiffMsrDATA[PwrFact_PhaDiffMsrCNT].ucVAR[1] = TH1;
276 TH1 = 0; // TH1_INIT = 0x00;
277 TL1 = 0; // TL1_INIT = 0x00;
278
279 DUxCO_RisTimCNT = 0; //
280 PwrFact_PhaDiffMsrCNT++;
281 if( PwrFact_PhaDiffMsrCNT == 8 )
282 {
283 PwrFact_PhaDiffMsrOVER = 1;// 置本轮测量结束标记,等待计算测量结果.
284 PwrFact_PhaDiffMsrEN = 0; // 计算结果期间停止测量.
285 }
286 }
287 }
288 }
289
290
291 /*****************************************************************
292 *** TIMER 0 SLOT 0
293 *** (1)启动录波功能:32 Points / Period; Time Interevl 625uS;
294 *** (2)SYNCa、SYNCb和SYNCc同步信息缺失或相序错误检测;
295 *** (3)失控检测;
296 *****************************************************************/
297 if( TimSlotCNT == 0 ) // Time Slot 1;
298 {
299 /*****************************************************************
300 *** 启动录波功能:32 Points / Period; Time Interevl 625uS;
301 *****************************************************************/
C51 COMPILER V7.20 LZKFUNC 09/04/2006 16:29:05 PAGE 6
302 /*
303 #define ByteNumMaxPerPage 65534
304 #define ExSramWrRdPagMax 2
305
306 MotStaUpEmWaveRecEN;
307 MotStaUpEmVoltRecEN;
308 MotStaUpEmWaveRecOVER;
309
310 uint8 idata ExSramWrRdPag; // 外部SRAM页
311 uint16 idata ExSramWrRdAdr; // 外部SRAM读写地址
312 INTUC idata AD_DataBuff; // A/D数据缓冲
313 */
314 if( MotStaUpEmWaveRecEN == 1 ) // 启动录波功能是否开启
315 {
316 if( MotStaUpEmVoltRecEN == 1 ) // 1/0: EmVolt / EmCurr;
317 ADC0_CH_Setting(0x02); // AIN02 for EmVolt.
318 else
319 ADC0_CH_Setting(0x03); // AIN03 for EmCurr.
320
321 AD0INT = 0; // RST ADC Convert Complete Flag.
322 AD0BUSY = 1; // Start ADC0
323 while( AD0INT == 0 ); // Wait for Convert Over
324
325 if( ExSramWrRdAdr & 0x01 == 0 ) // Even Address.
326 {
327 AD_DataBuff.ucVAR[1] = ADC0H; // Get High 8 Byte.
328 AD_DataBuff.ucVAR[0] = ADC0L & 0xf0; // Get Low 4 Byte.
329
330 ExSRAM_PageSetting( ExSramWrRdPag ); // 切换到外部SRAM
331 ExSramWrRdAdrPt = ExSramWrRdAdr; //
332 *ExSramWrRdAdrPt = AdcDatBuff.ucVAR[1]; // Save High 8 Byte
333 ExSramWrRdAdr++;
334 ExInSRAM_Select(0); // 切换回内部SRAM
335 }
336 else
337 {
338 AD_DataBuff.ucVAR[1] = ADC0H; // Get High 8 Byte.
339 ucTMP = ADC0L; // Get Low 4 Byte.
340 ucTMP = ucTMP >> 4; // Unite with Last Sample's Low 4 Byte.
341 AD_DataBuff.ucVAR[0] = ucTMP | AD_DataBuff.ucVAR[0];
-
342
343 ExSRAM_PageSetting( ExSramWrRdPag ); // 切换到外部SRAM
344 ExSramWrRdAdrPt = ExSramWrRdAdr;
345 *ExSramWrRdAdrPt = AD_DataBuff.ucVAR[0];// Save Low 8 Byte.
346 ExSramWrRdAdr++;
347
348 ExSramWrRdAdrPt = ExSramWrRdAdr;
349 *ExSramWrRdAdrPt = AD_DataBuff.ucVAR[1];// Save High 8 Byte.
350 ExSramWrRdAdr++;
351 ExInSRAM_Select(0); // 切换回内部SRAM
352 }
353
354 if( ExSramWrRdAdr >= ByteNumMaxPerPage ) // 65534.
355 { // 65535 Sample Points/Page( 27Sec/Page ).
356 ExSramWrRdAdr = 0; // RST ExSRAM Address.
357 ExSramWrRdPag++; // ExSRAM Page Number Increase 1.
358 }
359 if( ExSramWrRdPag >= ExSramWrRdPagMax ) // 2
360 { // Motor Startup Wave Record Over.
361 ExSramWrRdAdr = 0; // RST ExSRAM Address.
362 ExSramWrRdPag = 0; // RST ExSRAM Page No.
C51 COMPILER V7.20 LZKFUNC 09/04/2006 16:29:05 PAGE 7
363 MotStaUpEmWaveRecEN = 0; // Disabled Motor Startup Wave Recording.
364 MotStaUpEmWaveRecOVER = 1; // Set Record Over Event Flag.
365 }
366 }
367 /*****************************************************************
368 *** SYNCa、SYNCb和SYNCc同步信息缺失或相序错误检测.
369 *****************************************************************/
370 /*
371 #define SYNCxHalfPeriTimMAX 22 // 22 * 0.625 = 13.75mS.
372 #define SYNCxHalfPeriTimMIN 10 // 10 * 0.625 = 6.25mS.
373 #define SYNCxErrTimMAX 5 // 允许同步信号连续错误次数
374
375 uint8 xdata SYNCaSameLevlTimCNT = 0;
376 uint8 xdata SYNCbSameLevlTimCNT = 0;
377 uint8 xdata SYNCcSameLevlTimCNT = 0;
378 uint8 xdata SYNCaErrTimCNT = 0;
379 uint8 xdata SYNCbErrTimCNT = 0;
380 uint8 xdata SYNCcErrTimCNT = 0;
381 uint8 xdata SYNCbAftSYNCaRiseEdgeTimCNT = 0;
382 uint8 xdata SYNCcAftSYNCaRiseEdgeTimCNT = 0;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -