*FILE: BLDC05_mat.ASM *日期:2005年9月28日* ******************************************* ******************************************* * 无位置和有位置通用,input=20MHZ,T1周期=10us启动AD中断* * 24LC16B读写 * CAN通信 * 18b20通信 * 温度设置:-19C--+40C * ERR-1: 起动失败 * ERR-2 电源电压<150VDC * ERR-3 过流 * ERR-4 电源电压>350VDC * ERR-5 24LC16B W/R错误 * ERR-6 电机温度过高(转头设置错误) * ERR-7 没有负载 * ERR-8 功率管保护 * DATT46: 15-0=1 18B20_RUN 15-1=1 LCD_RUN * 15-2=1 CAN_RUN * DATT30: =112,两秒步进测试; =114,两极电机.再起动 * =119,自动再起动 ; =120 不计时. * DATT31: DATT30=114 速度加减量 * DATT32: DATT30=114 速度加减量 * DATT33: DATT30=114 速度最大值 * DATT34: DATT30=114 速度最大值 * * * ******************************************* ******************************************* ;AS1 .usect "cur_mod",10 ;AS2 .usect "cur_mod",10 ; .ref CAN_F ; .ref CAN_J ; .ref CAN_INIT ; .ref WR_EEPROM ; .ref I2C,I2C_WRITE,I2C_COUNT, ; .ref DISPLAY1 ;LCD ; .ref LCD_PLAY ; .ref LCD_INT ; .ref DISPLAY2 ; .ref LCD_CN ; .ref LCD_DARW ; .ref LCD_DASX ; .ref LCD_CLEAR ; .ref LCD_CL .ref REST_18B20;,RD_DAT6,DS1820CRC1 .ref I2C_R,I2C_W,I2C_W_INT,I2C_R_INT .ref PID,PID_INT .ref RK,U,UK,UF,COMP .ref PID_COUNT2,PID_COUNT4 .ref R_MUN,READ,W_CNT .def T3PRSET,BLDCTABLE1,OFFOUT ******************************************* ******************************************* .sect "VECTORS" ******************************************* int0 B _c_int0 int1 B ADC_INT int2 B BEGIN int3 B BEGIN int4 B BEGIN int5 B SPIINT int6 B BEGIN B BEGIN B BEGIN B BEGIN B BEGIN B BEGIN B BEGIN B BEGIN B BEGIN B BEGIN B BEGIN B BEGIN B BEGIN B BEGIN B BEGIN B BEGIN B BEGIN B BEGIN B BEGIN B BEGIN B BEGIN B BEGIN B BEGIN B BEGIN B BEGIN B BEGIN ******************************************* .include "lf2407a.H" ******************************************* DAT_SET .set 0H *版本编号: VAR .set 50922 ;5=2005;06=6月;26=26日 *T1 周期 T1PRSET .set 400 ;400=100KHZ *PWM调制频率 T3PRSET .set 2000 ;2000=20KHZ *低速起动运行时间设置: LSRUN .set 0 ;2500*2MS=5S *加减速时间常数设置: ASTIME .set 5 *转头判别时间设置: ZHUANTOU1 .set 10 ZHUANTOU2 .set 1300 ZHUANTOU3 .set 4600 ZHUANTOU4 .set 5600 ZHUANTOU5 .set 8500 ZHUANTOU6 .set 9500 ZHUANTOU7 .set 9600 ZHUANTOU8 .set 9700 *初始时间设置: FEN .set 2 ;分 MIAO .set 30 ;秒 *初始转速设置: SPEED0 .set 5000 ;转/分 *最低转速设置: SPEED1 .set 5000 ;转/分 1#类电机 SPEED2 .set 4000 ;转/分 2#类电机 SPEED3 .set 3000 ;转/分 3#类电机 SPEED4 .set 2000 ;转/分 4#类电机 *1#电机最高转速设置: SP1_MAX1 .set 25000 ;转/分 1#转头 SP1_MAX2 .set 25000 ;转/分 2#转头 SP1_MAX3 .set 25000 ;转/分 3#转头 SP1_MAX4 .set 25000 ;转/分 4#转头 SP1_MAX5 .set 25000 ;转/分 5#转头 SP1_MAX6 .set 25000 ;转/分 6#转头 SP1_MAX7 .set 25000 ;转/分 7#转头 SP1_MAX8 .set 25000 ;转/分 8#转头
*定位电流: I1MIX .set 550 ;1#类电机 I2MIX .set 550 ;2#类电机 I3MIX .set 550 ;3#类电机 I4MIX .set 550 ;4#类电机 *切换点以下运行电流: I1MAX .set 650 ;1#类电机 I2MAX .set 650 ;2#类电机 I3MAX .set 650 ;3#类电机 I4MAX .set 650 ;4#类电机 *切换点以上运行电流: I1MAXUP .set 1000 ;1000 I2MAXUP .set 1000 I3MAXUP .set 1000 I4MAXUP .set 1100 ;1000=3A(AC)
*定位时间 T1SP .set 500 ;1000=2秒 T2SP .set 10000 T3SP .set 10000 T4SP .set 10000 *1#电机同步起动初始转速设置 T1ST1 .set 1000 ;1#转头 T1ST2 .set 2500 ;2#转头 T1ST3 .set 3000 ;3#转头 T1ST4 .set 3500 ;4#转头 3000=75 转/分 *2#电机同步起动初始转速设置 T2ST1 .set 6000 T2ST2 .set 6000 T2ST3 .set 6000 T2ST4 .set 6000 *3#电机同步起动初始转速设置 T3ST1 .set 6000 T3ST2 .set 6000 T3ST3 .set 6000 T3ST4 .set 6000 *4#电机同步起动初始转速设置 T4ST1 .set 6000 T4ST2 .set 6000 T4ST3 .set 6000 T4ST4 .set 6000 ************************************************ ************************************************ .text ************************************************ .word 0FFFFh,0FFFFh,0FFFFh,0FFFFh ;写保密区0040H-0043H ******************************************** _c_int0: CLRC XF CLRC CNF CLRC OVM CLRC SXM SETC INTM ;关中 LDP #224 SPLK #0068H,WDCR ;#002BH
******************清DRAM*********************
CLEAR1: MAR *,AR6 LAR AR6,#60H LACL #0 RPT #01FH SACL *+,0,AR6 LAR AR7,#0FFH LAR AR6,#300H MAR *,AR6 CLEAR2: SPLK #0H,*+,AR7 BANZ CLEAR2,AR6 LAR AR7,#0FFH LAR AR6,#200H MAR *,AR6 CLEAR3: SPLK #0H,*+,AR7 BANZ CLEAR3,AR6 LAR AR7,#07FH LAR AR6,#800H MAR *,AR6 CLEAR4: SPLK #DAT_SET,*+,AR7 BANZ CLEAR4,AR6 LAR AR7,#780H LAR AR6,#880H MAR *,AR6 CLEAR5: SPLK #0H,*+,AR7 BANZ CLEAR5,AR6 *********************************************
******************系统初始化***************** SYSINIT: LDP #0 SPLK #0FFFFH,IFR SPLK #00011H,IMR LAR AR4,#060H LDP #6 SPLK #VAR,IN7 ;版本编号5=2005;05=5月;18=18日 SPLK #00H,TEMP ;#00H OUT TEMP,WSGR ;等待 LDP #224 SPLK #002ACH,SYSCR ;#00ACH ,PLL=*4 , #02ACH ,PLL=*2, ;#02ACH:SCLK ;BIT7-ADC,BIT6-SCI,BIT5-SPI,BIT4-CAN ;BIT3-EVB,BIT2-EVA,BIT1-NC,BIT0-NC LDP #225 SPLK #00038H,MCRA ;除CAP1,CAP2,CAP3外,置为I/O方式 SPLK #00014H,MCRB ;#000D4H 除SPICLK,SPISOMO外,置为I/O方式 SPLK #0007EH,MCRC ;除PWM7-12外,置为I/O方式 SPLK #00300H,PADATDIR ;除PA0PA1外 输入,低 SPLK #000FFH,PBDATDIR ;PB输入,高 SPLK #0FF00H,PCDATDIR ;PC输出,低 SPLK #0FF00H,PDDATDIR ;PD输出,低 SPLK #0FF00H,PEDATDIR ;PE输出, 低 SPLK #0FF00H,PFDATDIR ;PF输出, 低 LDP #232 SPLK #00100H,GPTCONA ;#00000H OFF T1PIN,T2PIN SPLK #0A600H,COMCONA ;#0CA07H SPLK #00000H,T1CNT SPLK #T1PRSET,T1PR ;
SPLK #00000H,ATCRA ;全关断 SPLK #00FFFH,ATCRB ;全关断 SPLK #09046H,T1CON ;#9046H, SPLK #0FFFFH,EVAIFRA ;清中断标志 SPLK #0FFFFH,EVAIFRB SPLK #0FFFFH,EVAIFRC SPLK #00000H,EVAIMRA ;#0180H,允许T1周期,比较中断,其余屏蔽 SPLK #00000H,EVAIMRB ;不允许T2T3中断,屏蔽 LDP #232 ;捕捉 SPLK #00000H,EVAIMRC ;允许CAP1,CAP2,CAP3中断,其余屏蔽 SPLK #00000H,T2CNT ;T2 SPLK #0FFFFH,T2PR ; SPLK #007FFH,T2CMPR SPLK #0D740H,T2CON ;#0D740H SPLK #030FCH,CAPCONA ; SPLK #00000H,CAPFIFOA ; LDP #234 SPLK #09046H,T3CON ;T3CON SPLK #00000H,T3CNT ;T3CNT SPLK #T3PRSET,T3PR ;#3000=10KHZ 30MHZ SPLK #00041H,GPTCONB ;#00041H OPEN T3PIN SPLK #0A600H,COMCONB ;#0A600H SPLK #09646H,T4CON ;#09646H 1/64 CLOCK SPLK #00000H,T4CNT ;T4CNT SPLK #0FFFFH,T4PR ; SPLK #0FFFFH,EVBIFRA ;EVBIFRA清中断标志 SPLK #0FFFFH,EVBIFRB ;EVBIFRB SPLK #0FFFFH,EVBIFRC ;EVBIFRC SPLK #00000H,EVBIMRA ;EVBIMRA不允许T3周期中断,其余屏蔽 SPLK #00000H,EVBIMRB ;EVBIMRB允许T4周期中断,其余屏蔽 SPLK #00000H,EVBIMRC ;EVBIMRC
*SPI_INIT: LDP #224 SPLK #0007H,SPICCR SPLK #0006H,SPICTL SPLK #0013h,SPIBRR ;#07h SPLK #0040H,SPIPRI SPLK #00C7H,SPICCR ;#00C7h SPLK #8000H,XINT1CR SPLK #8000H,XINT2CR
*DACINIT: LDP #225 SPLK #04000H,ADCTRL1 ;ADCTRL1 NOP NOP NOP SPLK #03200H,ADCTRL1 ;#03200H:4*Tclk #3000H:2*Tclk SPLK #00500H,ADCTRL2 SPLK #00032H,MAXCONV ;#00032H #7 SPLK #00D3CH,CHSELSEQ1 ;#00D3CH SPLK #0BB22H,CHSELSEQ3 ;#0BBBBH CALL OFFOUT
*@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ HEL00: LDP #0 LACL #W_CNT SACL I2C_CNT LAR AR0,#R_MUN ;AR0:读写的字节数(16BIT)? LAR AR3,#READ ;AR3:输入数据缓冲区 CALL I2C_R ;读24LC16B CALL DATTQT ;数据范围较对 LDP #6 BIT S2,15-4 ;读24LC16B错误? BCND HEL01,NTC SPLK #0,S2 LDP #0 LACL #W_CNT SACL I2C_CNT LAR AR0,#R_MUN ;AR0:读写的字节数(16BIT)? LAR AR3,#READ ;AR3:输入数据缓冲区 CALL I2C_R ;读24LC16B CALL DATTQT ;数据范围较对
LDP #6 BIT S2,15-4 ;读24LC16B错误? BCND HEL01,NTC CALL LOADDATX ;则调出默认参数 HEL01: ******************DAT初始数据*********************** *DATSET: LDP #6 SPLK #50,INK SPLK #1,INNK SPLK #1,TDATT32 ;电机类型设置1-4 SPLK #55,IN13 SPLK #16,IN15 LDP #7 SPLK #600,INN2 SPLK #1,DAT6 ;温度显示 SPLK #18750,SPEEDA0 ;#18750 SPLK #200,SPEEDA1 LT SPEEDA0 MPYU SPEEDA1 PAC SACH SP_H SACL SP_L LDP #7 SPLK #1,DATT0 SPLK #1000,DA20 ;清除密码989 SPLK #2000,DA21 ;清除密码1875 LDP #224 SPLK #002fH,WDCR ;#002BH KICK_DOG CALL PID_INT CALL WUWEI ; LDP #7 BIT DATT46,15-1 BCND CLRC_INTM,NTC LDP #225 SPLK #00014H,MCRB ; call DISPLAY1 CLRC INTM B TEST CLRC_INTM: LDP #7 BIT DATT46,15-2 BCND CLRC_INTM1,NTC LDP #225 SPLK #000D4H,MCRB ; CALL CAN_INIT ;CANINIT CLRC_INTM1: CLRC INTM ;开中
*********************************************** **************** 主程序 ********************* *********************************************** TEST: LDP #6 LACL S1 BCND TEST0,EQ LACL #0 SACL S1 ************* 2ms程序 ******************
KICK_DOG ;REST看门狗 ; CALL LCD_PLAY CALL BLINKPL ;每秒闪灯 CALL INA ;扫描输入 CALL TIMECNT ;起动定位 CALL ZHUANDOU ;转头判别 CALL ERR1START ;再起动 CALL FENGMING ;蜂鸣 CALL PDPINT_DL ;功率管保护延迟 CALL SPI_LED ;显示扫描 B TEST TEST0: LDP #7 LACL SPD_CNT BCND TEST1,EQ SPLK #0,SPD_CNT CALL SPEED_CNT
TEST1: LDP #4 LACL SETH BCND TEST,EQ SPLK #0,SETH CALL I2C_W LDP #7 LACL INN2 SUB #500 BCND TEST,LT CALL PID B TEST ************************************************* ************************************************* PDPINT_DL: LDP #4 LACL PBDR_DL SUB #600 BCND PDPINT_DL1,GT LACL PBDR_DL ADD #1 SACL PBDR_DL SUB #500 BCND PDPINT_DL1,LT SPLK #600,PBDR_DL LDP #234 SPLK #01H,EVBIFRA ;清中断标志 SPLK #00001H,EVBIMRA SPLK #08200H,COMCONB PDPINT_DL1: RET ******************************************************** *****************速度计算******************************* SPEED_CNT: LDP #6 LACL IN11 SUB #1111 BCND SPD_END1,EQ LDP #7 BIT CT,15-0 BCND SPD_END1,NTC LDP #7 LACC SP_H,16 ADD SP_L RPT #15 SUBC SP_TIME0 SACL SPEEDA0 LACC SPEEDA0 ADD SPEEDA1 ADD SPEEDA2 ADD SPEEDA3 ADD SPEEDA4
SACL SPEEDA ;平均速
DMOV SPEEDA3 DMOV SPEEDA2 DMOV SPEEDA1 DMOV SPEEDA0 RET SPD_END1: LDP #7 SPLK #0FFFFH,SP_TIME SPLK #0,SPEEDA0 SPLK #0,SPEEDA1 SPLK #0,SPEEDA2 SPLK #0,SPEEDA3 SPLK #0,SPEEDA4 RET ************************************************** ************************************************** FENGMING: ldp #7 LACL DATT35 SUB #110 BCND FENGMING_1,EQ LDP #6 LACL FMDAT2 BCND FENGMING0,LEQ SUB #1 SACL FMDAT2 LACL #08h LDP #225 OR PFDATDIR SACL PFDATDIR RET FENGMING0: LDP #6 BIT S2,15-15 BCND FENGMING1,NTC BIT CTT0,15-0 BCND FENGMING1,NTC LACL #08h LDP #225 OR PFDATDIR SACL PFDATDIR RET FENGMING1: LACL #0FFF7h LDP #225 AND PFDATDIR SACL PFDATDIR RET FENGMING_1: LDP #6 LACL FMDAT2 BCND FENGMING_10,LEQ SUB #1 SACL FMDAT2 LACL #0FFF7h LDP #225 AND PFDATDIR SACL PFDATDIR RET FENGMING_10: LDP #6 BIT S2,15-15 BCND FENGMING_11,NTC BIT CTT0,15-0 BCND FENGMING_11,NTC LACL #0FFF7h LDP #225 AND |