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