![]() |
|
||||||||||||||
| . 网站首页 . 新闻 . 新品 . 方案 . 专访 . 活动 . DSP . EDA . 评测室 . 技术文库 . 会员区 . 商城 . 服务导航 . 邮购 . 资源 . | ||
|
||
|
|||||
| TMS320LF2407无刷直流电动机调速控制程序(2) | |||||
作者:61IC 文章来源:本站原创 点击数: 更新时间:2007-1-16 ![]() |
|||||
|
LDP #0 LACC COMP ;装载比较初值 LDP #0E8H ;反相驱动 SPLK #03FDH,ACTRA ;PWM1低有效,PWM6低电平,其它高电平 SACL CMPR1 ;A相入,C相出,B相不通电 SPLK #0000H,CMPR2 SPLK #0000H,CMPR3 ;--------------------------------------等待磁定位结束------------------------------------------------------ MAGSTALL LDP #0 LACC STALL ;检测磁定位是否结束 BCND MAGSTALL,EQ ;没结束继续等待 ;--------------------------------------磁定位结束换相---------------------------------------------------- LACC COMP LDP #0E8H . SPLK #03DFH,ACTRA ;PWM3低有效,PWM6低电平,其它高电平 SACL CMPR2 ;B相入,C相出,A不通电 SPLK #0000H,CMPR3 SPLK #0000H,CMPR1 LDP #0 SPLK #4,CAPT ;CAPT初值 ;--------------------------------------主循环----------------------------------------------------------------- LDP #0 LACC FLAGCUR ;检测是否更新比较值 BCND LOOP,EQ ;不更新跳转 SPLK #0,FLAGCUR ;更新,清标志 CALL SEQUENCE ;调用更新子程序 B LOOP ;等待下次更新 ;--------------------------------------假中断处理------------------------------------------------------------- PHANTOM CLRC INTM RET ;--------------------------------------更新比较值或换相子程序----------------------------------------- SEQUENCE LDP #0 LACC TIME ;每转时间计数器 ADD #1 SACL TIME LACC CAPT ;换相控制字 ADD #CAPT_DETER ;加起始地址 BACC CAPT_DETER B RISING1 ;相当于H1上升沿 B FALLING3 ;相当于H3下降沿 B RISING2 ;相当于H2上升沿 B FALLING1 ;相当于H1下降沿 B RISING3 ;相当于H3上升沿 FALLING2 ;相当于H2下降沿 LACC COMP LDP #0E8H SPLK #0D3FH,ACTRA ;PWM5低有效,PWM4低电平,其它高电平 SACL CMPR3 ;C相入,B相出,A相不通电 SPLK #0000H,CMPR2 SPLK #0000H,CMPR1 LDP #0 ;延时过滤干扰 LACC ASYM ;延时计数器 ADD #1 ;加1 SACL ASYM SUB #10 ;检测是否到计数值 BCND END,LEQ ;没到,退出 SPLK #10,ASYM ;计数值已到,测量感应电动势过零点 LACC FLAG ;感应电动势符号变化? BCND END,NEQ ;变了,退出 LACC V1,1 ;没变,检测.V1乘2 ADD V1 ;ACC=3*(BEMFA + NEUTRAL) SUB NEUTRAL ;ACC=3*BEMFA BCND END,LT ;<0符号没变,退出 SPLK #1,FLAG ;否则符号改变,置过零标志 LACC BCOUNT SACL B2COUNT ;更新延迟时间 B END ;退出 RISING3 LACC COMP LDP #0E8H SPLK #0DF3H,ACTRA ;PWM5低有效,PWM2低电平,其它高电平 SACL CMPR3 ;C相入, A相出, B相不通电 SPLK #0000H,CMPR2 SPLK #0000H,CMPR1 LDP #0 ;延时过滤干扰 LACC ASYM ;延时计数器 ADD #1 ;加1 SACL ASYM SUB #10 ;检测是否到计数值 BCND END,LEQ ;没到,退出 SPLK #10,ASYM ;计数值已到,测量感应电动势过零点 LDP #0 LACC FLAG ;感应电动势符号变化? BCND END,NEQ ;变了,退出 LACC V2,1 ;没变,检测.V2乘2 ADD V2 ;ACC=3*(BEMFB + NEUTRAL) SUB NEUTRAL ;ACC=3*BEMFB BCND END,GEQ ;≥0符号没变,退出 SPLK #1,FLAG ;否则符号改变,置过零标志 LACC BCOUNT SACL B2COUNT ;更新延迟时间 B END ;退出 FALLING3 LACC COMP LDP #0E8H SPLK #03FDH,ACTRA ;PWM1低有效,PWM6低电平,其它高电平 SACL CMPR1 ; A相入, C相出, B相不通电 SPLK #0000H,CMPR2 SPLK #0000H,CMPR3 LDP #0 ;延时过滤干扰 LACC ASYM ;延时计数器 ADD #1 ;加1 SACL ASYM SUB #10 ;检测是否到计数值 BCND END,LEQ ;没到,退出 SPLK #10,ASYM ;计数值已到,测量感应电动势过零点 LDP #0 LACC FLAG ;感应电动势符号变化? BCND END,NEQ ;变了,退出 LACC V2,1 ;没变,检测.V2乘2 ADD V2 ;ACC=3*(BEMFB + NEUTRAL) SUB NEUTRAL ;ACC=3*BEMFB BCND END,LT ;<0符号没变,退出 SPLK #1,FLAG ;否则符号改变,置过零标志 LACC BCOUNT SACL B2COUNT ;更新延迟时间 B END ;退出 RISING2 LACC COMP LDP #0E8H SPLK #03DFH,ACTRA ;PWM3低有效,PWM6低电平,其它高电平 SACL CMPR2 ;B相入, C相出, A相不通电 SPLK #0000H,CMPR3 SPLK #0000H,CMPR1 LDP #0 ;延时过滤干扰 LACC ASYM ;延时计数器 ADD #1 ;加1 SACL ASYM SUB #10 ;检测是否到计数值 BCND END,LEQ ;没到,退出 SPLK #10,ASYM ;计数值已到,测量感应电动势过零点 LDP #0 LACC FLAG ;感应电动势符号变化? BCND END,NEQ ;变了,退出 LACC V1,1 ;没变,检测.V1乘2 ADD V1 ;ACC=3*(BEMFA + NEUTRAL) SUB NEUTRAL ;ACC=3*BEMFA BCND END,GEQ ;≥0符号没变,退出 SPLK #1,FLAG ;否则符号改变,置过零标志 LACC BCOUNT SACL B2COUNT ;更新延迟时间 B END ;退出 RISING1 LACC COMP LDP #0E8H SPLK # SACL CMPR1 ;A相入, B相出, C相不通电 SPLK #0000H,CMPR2 SPLK #0000H,CMPR3 LDP #0 ;延时过滤干扰 LACC ASYM ;延时计数器 ADD #1 ;加1 SACL ASYM SUB #10 ;检测是否到计数值 BCND END,LEQ ;没到,退出 SPLK #10,ASYM ;计数值已到,测量感应电动势过零点 LDP #0 LACC FLAG ;感应电动势符号变化? BCND END,NEQ ;变了,退出 LACC V3,1 ;没变,检测.V3乘2 ADD V3 ;ACC=3*(BEMFC + NEUTRAL) SUB NEUTRAL ;ACC=3*BEMFC BCND END,GEQ ;≥0符号没变,退出 SPLK #1,FLAG ;否则符号改变,置过零标志 LACC BCOUNT SACL B2COUNT ;更新延迟时间 B END ;退出 FALLING1 LACC COMP LDP #0E8H SPLK #0FD3H,ACTRA ;PWM3低有效,PWM2低电平,其它高电平 SACL CMPR2 ; B相入, A相出, C相不通电 SPLK #0000H,CMPR3 SPLK #0000H,CMPR1 LDP #0 ;延时过滤干扰 LACC ASYM ;延时计数器 ADD #1 ;加1 SACL ASYM SUB #10 ;检测是否到计数值 BCND END,LEQ ;没到,退出 SPLK #10,ASYM ;计数值已到,测量感应电动势过零点 LDP #0 SPLK #0,FLAGUP ;转过一机械转,置标志 LACC FLAG ;感应电动势符号变化? BCND END,NEQ ;变了,退出 LACC V3,1 ;没变,检测.V3乘2 ADD V3 ;ACC=3*(BEMFC + NEUTRAL) SUB NEUTRAL ;ACC=3*BEMFC BCND END,LT ;<0符号没变,退出 SPLK #1,FLAG ;否则符号改变,置过零标志 LACC BCOUNT SACL B2COUNT ;更新延迟时间 | |||||