版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、无位置传感器的无刷直流电动机调速控制程序.include "240x.h".global _c_int0;-以下定义常数和变量 -KP.set 245;电流调节比例系数 , 0.12的Q11格式KPS.set 100;速度调节比例系数.bss CAPT,1;换相控制字.bss COMP,1; 更新占空比的比较值,由电流调节输出.bss IDC_REF,1;电流参考值 ,由速度调节输出.bss IDC_ERRORK,1;电流偏差.bss FLAGCUR,1; 更新比较值和换相标志,1-允许更新 ,0-不允许.bss SPEED_REF,1;给定速度参考.bss V_ERROR
2、K,1;速度偏差.bss SPEED_COUNT,1; 速度调节环计数器.bss V1,1;相电压 1.bss V2,1;相电压 2.bss V3,1;相电压 3.bss NEUTRAL,1; 中性点电压.bss FLAG,1;感应电动势变符号标志,1-变了 ;0-没变.bss FLAGUP,1;转过一机械转标志 ,1-没转过 ,0-转过.bss BCOUNT,1;延迟时间更新值 ,磁定位时临时变量.bss B2COUNT,1;延迟时间.bss STALL,1;磁定位结束标志 ,1-结束 ,0-没结束.bss ASYM,1;延时计算感应电动势计数器.bss SPEEDFLAG ,1;第一转时禁
3、止速度调节标志,1-禁止 ,0-允许.bss TIME,1;每转时间计数器.bss STACK,6;软堆栈区;-定义主向量-.sect "vectors"RSVECTB_c_int0;复位INT1BPHANTOM;INT1INT2BPHANTOM;INT2INT3BPHANTOM;INT3INT4BPHANTOM;INT4INT5BPHANTOM;INT5INT6BADCINT;ADC 中断;略;-以下是程序-.text;-初始化程序-_c_int0SETCCNFCLRCOVMSETCSXM;符号扩展SETCINTM;关中断LARAR1,#STACKLDP#0E0HSPLK
4、#68H, WDCR;不用看门狗SPLK#0284H,SCSR1;10MCLKIN,20MCLKOUTLDP#0E8HSPLK#500,T1PR;PWM 设置 ,周期 50微秒SPLK#0000H,T1CNTSPLK#0FFFH,ACTRA;PWM1 6全部高电平输出SPLK#01F4H,DBTCONA;死区 1.6微秒SPLK#500,CMPR1; 占空比为 0SPLK#500,CMPR2SPLK#500,CMPR3SPLK#8200H,COMCONA;允许比较 ,T1下溢重载SPLK#0840H,T1CON;连续增减计数 ,内部时钟 ,不分频SPLK#0100H,GPTCONA;T1 周期
5、中断标志启动AD 转换LDP#0E1HSPLK#0FC0H, MCRA;引脚设置为 PWMLDP#0LACC#020HSACLIMR;允许 INT6 中断LACCIFR; 清标志SACLIFRLDP#0E8HLACCEVAIFRA;清标志SACLEVAIFRALACCEVAIFRBSACLEVAIFRBLACCEVAIFRCSACLEVAIFRCSPLK#0,EVAIMRA;屏蔽中断SPLK#0,EVAIMRBSPLK#0,EVAIMRCLDP#0E1H;AD 设置SPLK#0500H,ADCTRL2; 允许 EVA 启动 AD 转换SPLK#0900H,ADCTRL1;10分频SPLK#00
6、03H,MAXCONV;4个转换通道SPLK#3210H,CHSELSEQ1;ADCIN00-03 通道CLRCINTM;开总中断;-变量初始化 -LDP#0;变量初始化SPLK#020H,IDC_REF;磁定位电流SPLK#0,IDC_ERRORKSPLK#0300H,SPEED_REF;转速初值SPLK#00112,COMP;最小占空比SPLK#0000H,FLAGCURSPLK#0000H,SPEED_COUNTSPLK#0000H,CAPTSPLK#0000H,V1SPLK#0000H,V2SPLK#0000H,V3SPLK#0000H,NEUTRALSPLK#0000H,FLAGSP
7、LK#0001H,FLAGUP;没转过一转SPLK#0001H,SPEEDFLAG;禁止速度调节SPLK#0000H,BCOUNTSPLK#0000H,B2COUNTSPLK#0000H,STALLSPLK#0000H,ASYMSPLK#0000H, V_ERRORKSPLK#0000H,TIME;-准备磁定位 -LDP#0LACCCOMP;装载比较初值LDP#0E8H;反相驱动SPLK#03FDH,ACTRA;PWM1 低有效 ,PWM6 低电平 ,其它高电平SACLCMPR1;A 相入 ,C相出 ,B相不通电SPLK#0000H,CMPR2SPLK#0000H,CMPR3;-等待磁定位结束
8、 -MAGSTALLLDP#0LACCSTALL;检测磁定位是否结束BCNDMAGSTALL,EQ;没结束继续等待;-磁定位结束换相 -LACCCOMPLDP#0E8HSPLK#03DFH,ACTRA;PWM3 低有效 ,PWM6 低电平 ,其它高电平SACLCMPR2;B 相入 ,C相出 ,A 不通电SPLK#0000H,CMPR3SPLK#0000H,CMPR1LDP#0SPLK#4,CAPT;CAPT 初值;-主循环 -LOOPLDP#0LACCFLAGCUR;检测是否更新比较值BCNDLOOP,EQ; 不更新跳转SPLK#0,FLAGCUR; 更新 ,清标志CALLSEQUENCE;调
9、用更新子程序BLOOP;等待下次更新;-假中断处理 -PHANTOMCLRCINTMRET;-更新比较值或换相子程序 -SEQUENCELDP#0LACCTIME; 每转时间计数器ADD#1SACLTIMELACCCAPT;换相控制字ADD#CAPT_DETER;加起始地址BACCCAPT_DETERBRISING1;相当于 H1 上升沿BFALLING3;相当于 H3 下降沿BRISING2;相当于 H2 上升沿BFALLING1;相当于 H1 下降沿BRISING3;相当于 H3 上升沿FALLING2;相当于 H2 下降沿LACCCOMPLDP#0E8HSPLK#0D3FH,ACTRA;
10、PWM5 低有效 ,PWM4 低电平 ,其它高电平SACLCMPR3;C相入 ,B相出 ,A 相不通电SPLK#0000H,CMPR2SPLK#0000H,CMPR1LDP#0;延时过滤干扰LACCASYM;延时计数器ADD#1; 加1SACLASYMSUB#10;检测是否到计数值BCNDEND,LEQ;没到 ,退出SPLK#10,ASYM;计数值已到 ,测量感应电动势过零点LACCFLAG;感应电动势符号变化 ?BCNDEND,NEQ;变了 ,退出LACCV1,1;没变 ,检测 .V1乘 2ADDV1;ACC=3*(BEMFA + NEUTRAL)SUBNEUTRAL;ACC=3*BEMFA
11、BCNDEND,LT;<0 符号没变 ,退出SPLK#1,FLAG;否则符号改变 ,置过零标志LACCBCOUNTSACLB2COUNT; 更新延迟时间BEND; 退出RISING3LACCCOMPLDP#0E8HSPLK#0DF3H,ACTRA;PWM5 低有效 ,PWM2 低电平 ,其它高电平SACLCMPR3;C相入 , A相出 , B相不通电SPLK#0000H,CMPR2SPLK#0000H,CMPR1LDP#0;延时过滤干扰LACCASYM;延时计数器ADD#1; 加1SACLASYMSUB#10;检测是否到计数值BCNDEND,LEQ;没到 ,退出SPLK#10,ASYM;
12、计数值已到 ,测量感应电动势过零点LDP#0LACCFLAG;感应电动势符号变化 ?BCNDEND,NEQ;变了 ,退出LACCV2,1;没变 ,检测 .V2乘 2ADDV2;ACC=3*(BEMFB + NEUTRAL)SUBNEUTRAL;ACC=3*BEMFBBCNDEND,GEQ; 0符号没变 ,退出SPLK#1,FLAG;否则符号改变 ,置过零标志LACCBCOUNTSACLB2COUNT; 更新延迟时间BEND; 退出FALLING3LACCCOMPLDP#0E8HSPLK#03FDH,ACTRA;PWM1 低有效 ,PWM6 低电平 ,其它高电平SACLCMPR1; A 相入 ,
13、 C相出 , B相不通电SPLK#0000H,CMPR2SPLK#0000H,CMPR3LDP#0;延时过滤干扰LACCASYM;延时计数器ADD#1; 加1SACLASYMSUB#10;检测是否到计数值BCNDEND,LEQ;没到 ,退出SPLK#10,ASYM;计数值已到 ,测量感应电动势过零点LDP#0LACCFLAG;感应电动势符号变化 ?BCNDEND,NEQ;变了 ,退出LACCV2,1;没变 ,检测 .V2乘 2ADDV2;ACC=3*(BEMFB + NEUTRAL)SUBNEUTRAL;ACC=3*BEMFBBCNDEND,LT;<0 符号没变 ,退出SPLK#1,FL
14、AG;否则符号改变 ,置过零标志LACCBCOUNTSACLB2COUNT; 更新延迟时间BEND; 退出RISING2LACCCOMPLDP#0E8HSPLK#03DFH,ACTRA;PWM3 低有效 ,PWM6 低电平 ,其它高电平SACLCMPR2;B 相入 , C相出 , A 相不通电SPLK#0000H,CMPR3SPLK#0000H,CMPR1LDP#0;延时过滤干扰LACCASYM;延时计数器ADD#1; 加1SACLASYMSUB#10;检测是否到计数值BCNDEND,LEQ;没到 ,退出SPLK#10,ASYM;计数值已到 ,测量感应电动势过零点LDP#0LACCFLAG;感
15、应电动势符号变化 ?BCNDEND,NEQ;变了 ,退出LACCV1,1;没变 ,检测 .V1乘 2ADDV1;ACC=3*(BEMFA + NEUTRAL)SUBNEUTRAL;ACC=3*BEMFABCNDEND,GEQ; 0符号没变 ,退出SPLK#1,FLAG;否则符号改变 ,置过零标志LACCBCOUNTSACLB2COUNT; 更新延迟时间BEND; 退出RISING1LACCCOMPLDP#0E8HSPLK#0F3DH,ACTRA;PWM1 低有效 ,PWM4 低电平 ,其它高电平SACLCMPR1;A 相入 , B相出 , C相不通电SPLK#0000H,CMPR2SPLK#0
16、000H,CMPR3LDP#0;延时过滤干扰LACCASYM;延时计数器ADD#1; 加1SACLASYMSUB#10;检测是否到计数值BCNDEND,LEQ;没到 ,退出SPLK#10,ASYM;计数值已到 ,测量感应电动势过零点LDP#0LACCFLAG;感应电动势符号变化 ?BCNDEND,NEQ;变了 ,退出LACCV3,1;没变 ,检测 .V3乘 2ADDV3;ACC=3*(BEMFC + NEUTRAL)SUBNEUTRAL;ACC=3*BEMFCBCNDEND,GEQ; 0符号没变 ,退出SPLK#1,FLAG;否则符号改变 ,置过零标志LACCBCOUNTSACLB2COUNT
17、; 更新延迟时间BEND; 退出FALLING1LACCCOMPLDP#0E8HSPLK#0FD3H,ACTRA;PWM3 低有效 ,PWM2 低电平 ,其它高电平SACLCMPR2; B 相入 , A相出 , C相不通电SPLK#0000H,CMPR3SPLK#0000H,CMPR1LDP#0;延时过滤干扰LACCASYM;延时计数器ADD#1; 加1SACLASYMSUB#10;检测是否到计数值BCNDEND,LEQ;没到 ,退出SPLK#10,ASYM;计数值已到 ,测量感应电动势过零点LDP#0SPLK#0,FLAGUP;转过一机械转 ,置标志LACCFLAG;感应电动势符号变化 ?B
18、CNDEND,NEQ;变了 ,退出LACCV3,1;没变 ,检测 .V3乘 2ADDV3;ACC=3*(BEMFC + NEUTRAL)SUBNEUTRAL;ACC=3*BEMFCBCNDEND,LT;<0 符号没变 ,退出SPLK#1,FLAG;否则符号改变 ,置过零标志LACCBCOUNTSACLB2COUNT; 更新延迟时间ENDRET;-速度计算和调节子程序 -SPEED_REGLDP#0SPLK#32,SPEED_COUNT;25CLRCSXMLACC#0OR#0FFFFH;ACC=FFFFH 无符号数RPT#15SUBCBCOUNT;除 1/12机械转时间AND#0FFFFH
19、;屏蔽高位SETCSXMSUBSPEED_REFNEG;速度偏差 = SPEED_REF-SPEEDBCNDPOS,GEQ; 检测偏差是否超限 . 0跳转ABS;<0 则取绝对值SPLK#-32,SPEED_COUNT;- 25POSSACLV_ERRORK;保存速度偏差SUB#03FFH;检测上限BCNDOKPOS,LEQ;不超上限则跳转SPLK#03FFH, V_ERRORK;否则 =3FFHOKPOSLTV_ERRORK;-1024 < 速度偏差 < 1024MPYSPEED_COUNT;乘 25PACSACLV_ERRORK;速度偏差 <<5LTV_ERR
20、ORK;速度比例调节MPY#KPS;乘比例系数PACADDIDC_REF,16SACHIDC_REF;IDC_REF(K)=IDC_REF(K-1) + KPS*V_ERRORKLACCIDC_REF;检测 IDC_REF 是否超限BCNDRES,GEQ;0跳转SPLK#0,IDC_REF;超下限则 =0RESSPLK#0,SPEED_COUNT;速度调节环计数器清 0RET;-ADC中断子程序-ADCINT;每 50微秒转换一次MAR*,AR1;保存现场MAR*+SST#1, *+; 保存 ST1SST#0, *+; 保存 ST0SACH*+;保存 ACC 高16位SACL*;保存 ACC
21、低 16位;-速度调节与否-LDP#0LACCSTALL;检测磁定位是否完成?BCNDVDC_IDC,EQ;STALL=0( 磁定位没完成 ) 禁止速度调节LACCSPEEDFLAG;禁止速度调节 ?BCNDVDC_IDC,NEQ;SPEEDFLAG=1, 禁止速度调节LACCSPEED_COUNT;检测是否该速度调节?SUB#2000;每 100ms进行一次速度调节BCNDNO_SPEED_REG ,NEQ;时间没到 ,跳转CALLSPEED_REG;时间到 ,调速度调节子程序NO_SPEED_REGLACCSPEED_COUNTADD#1SACLSPEED_COUNT;SPEED_COUN
22、T+1;-读 ADC 转换结果 -VDC_IDCLDP#0E0HLACCPIVR;清 ADC 中断标志LDP#0E8HLACCEVAIFRA;清 T1周期中断标志SACLEVAIFRALDP#0E1HLACCADCTRL2OR#0202HSACLADCTRL2LACCRESULT0,10; 读电流值LDP#0SACHIDC_ERRORKLDP#0E1HLACCRESULT1,10;读A相电压LDP#0SACHV1LDP#0E1HLACCRESULT2,10;读 B相电压LDP#0SACHV2LDP#0E1HLACCRESULT3,10;读 C相电压LDP#0SACHV3;-电流比例调节-SET
23、CSXMLACCIDC_ERRORK,5;Q5 格式SUBIDC_REF,5SACLIDC_ERRORK;保存电流偏差 ,Q5格式LTIDC_ERRORK;电流比例调节MPY#KP;Q11格式PAC;ACC = KP*IDC_ERRORKADDCOMP,16SACHCOMP;KP*IDC_ERRORK + COMP(K-1)LACCCOMP;检测是否超限BCNDSUP_LIM,GTSPLK#0,COMP;超过下限 ,COMP=0BCOMP_OKSUP_LIMSUB#0500BCNDCOMP_OK,LTSPLK#0500,COMP;超过上限 ,COMP=500COMP_OK;在上下限内;-换相准备 -LDP#0LACCFLAG;过零 ?BCNDNEU,EQ; 没过零 ,跳转LACCB2COUNT;过零 ,执行延迟时间SUB#1;延迟时间减 1SACLB2COUNTSETCSXMBCNDNEU,NEQ;延迟时间没到 ,跳转LACCCAPT;否则更新换相控制字ADD#2SACLCAPTSUB#0CHBCNDOKCAPT,NEQ;没超过 12,跳转SPLK#0,CAPT
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 【全程复习方略】2021届高考地理二轮专题突破篇-课时冲关练(二)-专题一-1.1.2地球的运动规律
- 天津市滨海新区2024-2025学年高二上学期期末检测数学试题
- 陕西省渭南市尚德中学2024-2025学年高一上学期第二次阶段性数学试卷(含答案)
- 山东省临沂华盛实验学校2024-2025学年上学期九年级物理期末质量调研试题(二)(含答案)
- 《从因特网获取信息》课件
- 探索六年级语文教学新路:经验与启示
- 英语字母音标课件
- 安徽省芜湖市2024-2025学年第一学期期末考试七年级语文试卷(含答案)
- 【走向高考】2022届高三物理人教版一轮复习习题:第8章-第1讲磁场对电流的作用
- 三年级数学计算题专项练习汇编及答案
- DB23-T 3840-2024非煤矿山隐蔽致灾因素普查治理工作指南
- 机关事业单位财务管理制度(六篇)
- 2025礼品定制合同范本
- 医院消毒隔离制度范文(2篇)
- 2024年01月11026经济学(本)期末试题答案
- 烘干煤泥合同范例
- 人教版六年级上册数学第八单元数学广角数与形单元试题含答案
- 2025年“三基”培训计划
- 第20课 北洋军阀统治时期的政治、经济与文化 教案
- 叉车租赁合同模板
- 住房公积金稽核审计工作方案例文(4篇)
评论
0/150
提交评论