无传感器无刷程序Word文档下载推荐.docx
《无传感器无刷程序Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《无传感器无刷程序Word文档下载推荐.docx(20页珍藏版)》请在冰点文库上搜索。
![无传感器无刷程序Word文档下载推荐.docx](https://file1.bingdoc.com/fileroot1/2023-4/30/7976821d-a893-49d8-a2db-bb7440f5a506/7976821d-a893-49d8-a2db-bb7440f5a5061.gif)
磁定位结束标志,1-结束,0-没结束
.BSSASYM,1;
延时计算感应电动势计数器
.BSSSPEEDFLAG,1;
第一转时禁止速度调节标志,1-禁止,0-允许
.BSSTIME;
每转时间计数器
.BSSSTACK,6;
软堆栈区
--------------------------------------定义主向量-------------------------------------------------------------
.SECT"
VECTORS"
RSVECTB_C_INT0;
复位
INT1BPHANTOM;
INT1
INT2BPHANTOM;
INT2
INT3BPHANTOM;
INT3
INT4BPHANTOM;
INT4
INT5BPHANTOM;
INT5
INT6BADCINT;
ADC中断
… ;
略
--------------------------------------以下是程序-------------------------------------------------------------
.TEXT
--------------------------------------初始化程序--------------------------------------------------------------
_C_INT0
SETCCNF
CLRCOVM
SETCSXM;
符号扩展
SETCINTM;
关中断
LARAR1,#STACK
LDP#0E0H
SPLK#68H,WDCR;
不用看门狗
SPLK#0284H,SCSR1;
10MCLKIN,20MCLKOUT
LDP#0E8H
SPLK#500,T1PR;
PWM设置,周期50微秒
SPLK#0000H,T1CNT
SPLK#0FFFH,ACTRA;
PWM1~6全部高电平输出
SPLK#01F4H,DBTCONA;
死区1.6微秒
SPLK#500,CMPR1;
占空比为0
SPLK#500,CMPR2
SPLK#500,CMPR3
SPLK#8200H,COMCONA;
允许比较,T1下溢重载
SPLK#0840H,T1CON;
连续增减计数,内部时钟,不分频
SPLK#0100H,GPTCONA;
T1周期中断标志启动AD转换
LDP#0E1H
SPLK#0FC0H,MCRA;
引脚设置为PWM
LDP#0
LACC#020H
SACLIMR;
允许INT6中断
LACCIFR;
清标志
SACLIFR
LACCEVAIFRA;
SACLEVAIFRA
LACCEVAIFRB
SACLEVAIFRB
LACCEVAIFRC
SACLEVAIFRC
SPLK#0,EVAIMRA;
屏蔽中断
SPLK#0,EVAIMRB
SPLK#0,EVAIMRC
LDP#0E1H;
AD设置
SPLK#0500H,ADCTRL2;
允许EVA启动AD转换
SPLK#0900H,ADCTRL1;
10分频
SPLK#0003H,MAXCONV;
4个转换通道
SPLK#3210H,CHSELSEQ1;
ADCIN00-03通道
CLRCINTM;
开总中断
--------------------------------------变量初始化---------------------------------------------------------
LDP#0;
变量初始化
SPLK#020H,IDC_REF;
磁定位电流
SPLK#0,IDC_ERRORK
SPLK#0300H,SPEED_REF;
转速初值
SPLK#00112,COMP;
最小占空比
SPLK#0000H,FLAGCUR
SPLK#0000H,SPEED_COUNT
SPLK#0000H,CAPT
SPLK#0000H,V1
SPLK#0000H,V2
SPLK#0000H,V3
SPLK#0000H,NEUTRAL
SPLK#0000H,FLAG
SPLK#0001H,FLAGUP;
没转过一转
SPLK#0001H,SPEEDFLAG;
禁止速度调节
SPLK#0000H,BCOUNT
SPLK#0000H,B2COUNT
SPLK#0000H,STALL
SPLK#0000H,ASYM
SPLK#0000H,V_ERRORK
SPLK#0000H,TIME
--------------------------------------准备磁定位-------------------------------------------------------------
LACCCOMP;
装载比较初值
LDP#0E8H;
反相驱动
SPLK#03FDH,ACTRA;
PWM1低有效,PWM6低电平,其它高电平
SACLCMPR1;
A相入,C相出,B相不通电
SPLK#0000H,CMPR2
SPLK#0000H,CMPR3
--------------------------------------等待磁定位结束------------------------------------------------------
MAGSTALL
LDP#0
LACCSTALL;
检测磁定位是否结束
BCNDMAGSTALL,EQ;
没结束继续等待
--------------------------------------磁定位结束换相----------------------------------------------------
LACCCOMP
LDP#0E8H.
SPLK#03DFH,ACTRA;
PWM3低有效,PWM6低电平,其它高电平
SACLCMPR2;
B相入,C相出,A不通电
SPLK#0000H,CMPR1
SPLK#4,CAPT;
CAPT初值
--------------------------------------主循环-----------------------------------------------------------------
LOOP
LACCFLAGCUR;
检测是否更新比较值
BCNDLOOP,EQ;
不更新跳转
SPLK#0,FLAGCUR;
更新,清标志
CALLSEQUENCE;
调用更新子程序
BLOOP;
等待下次更新
--------------------------------------假中断处理-------------------------------------------------------------
PHANTOM
CLRCINTM
RET
--------------------------------------更新比较值或换相子程序-----------------------------------------
SEQUENCE
LACCTIME;
ADD#1
SACLTIME
LACCCAPT;
ADD#CAPT_DETER;
加起始地址
BACC
CAPT_DETER
BRISING1;
相当于H1上升沿
BFALLING3;
相当于H3下降沿
BRISING2;
相当于H2上升沿
BFALLING1;
相当于H1下降沿
BRISING3;
相当于H3上升沿
FALLING2;
相当于H2下降沿
SPLK#0D3FH,ACTRA;
PWM5低有效,PWM4低电平,其它高电平
SACLCMPR3;
C相入,B相出,A相不通电
延时过滤干扰
LACCASYM;
延时计数器
ADD#1;
加1
SACLASYM
SUB#10;
检测是否到计数值
BCNDEND,LEQ;
没到,退出
SPLK#10,ASYM;
计数值已到,测量感应电动势过零点
LACCFLAG;
感应电动势符号变化?
BCNDEND,NEQ;
变了,退出
LACCV1,1;
没变,检测.V1乘2
ADDV1;
ACC=3*(BEMFA+NEUTRAL)
SUBNEUTRAL;
ACC=3*BEMFA
BCNDEND,LT;
<
0符号没变,退出
SPLK#1,FLAG;
否则符号改变,置过零标志
LACCBCOUNT
SACLB2COUNT;
更新延迟时间
BEND;
退出
RISING3
LACCCOMP
SPLK#0DF3H,ACTRA;
PWM5低有效,PWM2低电平,其它高电平
C相入,A相出,B相不通电
LACCV2,1;
没变,检测.V2乘2
ADDV2;
ACC=3*(BEMFB+NEUTRAL)
ACC=3*BEMFB
BCNDEND,GEQ;
≥0符号没变,退出
FALLING3
LDP#0E8H
A相入,C相出,B相不通电
RISING2
B相入,C相出,A相不通电
LACCBCOUNT
RISING1
SPLK#0F3DH,ACTRA;
PWM1低有效,PWM4低电平,其它高电平
A相入,B相出,C相不通电
LACCV3,1;
没变,检测.V3乘2
ADDV3;
ACC=3*(BEMFC+NEUTRAL)
ACC=3*BEMFC
FALLING1
SPLK#0FD3H,ACTRA;
PWM3低有效,PWM2低电平,其它高电平
B相入,A相出,C相不通电
SPLK#0,FLAGUP;
转过一机械转,置标志
END
--------------------------------------速度计算和调节子程序------------------------------------------------
SPEED_REG
SPLK#32,SPEED_COUNT;
25
CLRCSXM
LACC#0
OR#0FFFFH;
ACC=FFFFH无符号数
RPT#15
SUBCBCOUNT;
除1/12机械转时间
AND#0FFFFH;
屏蔽高位
SETCSXM
SUBSPEED_REF
NEG;
速度偏差=SPEED_REF-SPEED
BCNDPOS,GEQ;
检测偏差是否超限.≥0跳转
ABS;
0则取绝对值
SPLK#-32,SPEED_COUNT;
-25
POS
SACLV_ERRORK;
保存速度偏差
SUB#03FFH;
检测上限
BCNDOKPOS,LEQ;
不超上限则跳转
SPLK#03FFH,V_ERRORK;
否则=3FFH
OKPOS
LTV_ERRORK;
-1024<
速度偏差<
1024
MPYSPEED_COUNT;
乘25
PAC
5
速度比例调节
MPY#KPS;
乘比例系数
ADDIDC_REF,16
SACHIDC_REF;
IDC_REF(K)=IDC_REF(K-1)+KPS*V_ERRORK
LACCIDC_REF;
检测IDC_REF是否超限
BCNDRES,GEQ;
≥0跳转
SPLK#0,IDC_REF;
超下限则=0
RES
SPLK#0,SPEED_COUNT;
速度调节环计数器清0
--------------------------------------ADC中断子程序---------------------------------------------------
ADCINT;
每50微秒转换一次
MAR*,AR1;
保存现场
MAR*+
SST#1,*+;
保存ST1
SST#0,*+;
保存ST0
SACH*+;
保存ACC高16位
SACL*;
保存ACC低16位
--------------------------------------速度调节与否---------------------------------------------------------------
检测磁定位是否完成?
BCNDVDC__IDC,QE;
STALL=0(磁定位没完成)禁止速度调节
LACCSPEEDFLAG;
禁止速度调节?
BCNDVDC__IDC,NQE;
SPEEDFLAG=1,禁止速度调节
LACCSPEED_COUNT;
检测是否该速度调节?
SUB#2000;
每100ms进行一次速度调节
BCNDNO_SPEED_REG,NQE;
时间没到,跳转
CALLSPEED_REG;
时间到,调速度调节子程序
NO_SPEED_REG
LACCSPEED_COUNT
SACLSPEED_COUNT;
SPEED_COUNT+1
--------------------------------------读ADC转换结果-------------------------------------------------------
VDC__IDC
LACCPIVR;
清ADC中断标志
清T1周期中断标志
LACCADCTRL2
OR#0202H
SACLADCTRL2
LACCRESULT0,10;
读电流值
SACHIDC_ERRORK
LACCRESULT1,10;
读A相电压
SACHV1
LACCRESULT2,10;
读B相电压
SACHV2
LACCRESULT3,10;
读C相电压
SACHV3
--------------------------------------电流比例调节-----------------------------------------------------------
LACCIDC_ERRORK,5;
Q5格式
SUBIDC_REF,5
SACLIDC_ERRORK;
保存电流偏差,Q5格式
LTIDC_ERRORK;
电流比例调节
MPY#KP;
Q11格式
PAC;
ACC=KP*IDC_ERRORK
ADDCOMP,16
SACHCOMP;
KP*IDC_ERRORK+COMP(K-1)
检测是否超限
BCNDSUP_LIM,GT
SPLK#0,COMP;
超过下限,COMP=0
BCOMP_OK
SUP_LIM
SUB#0500
BCNDCOMP_OK,LT
SPLK#0500,COMP;
超过上限,COMP=500
COMP_OK;
在上下限内
--------------------------------------换相准备-----------------------------------------------------------------
LACC