《开关磁阻程序》word版.doc_第1页
《开关磁阻程序》word版.doc_第2页
《开关磁阻程序》word版.doc_第3页
《开关磁阻程序》word版.doc_第4页
《开关磁阻程序》word版.doc_第5页
已阅读5页,还剩5页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

四相8/6结构开关磁阻电动机调速控制程序 .include 240x.h .global _c_int0;-以下定义变量- .bss ADDRESS,1 ;换相处理程序地址 .bss GPR0,1 ;当前通电相标志(1,2,3,4-A,B,C,D) .bss GPR2,1 ;转向标志,1(CW),0(CCW) .bss GPR3,1 ;换相标志,1(不允许),0(允许) .bss CMD,1 ;电流参考值 .bss CMDAC,1 ;A/C相电流参考值 .bss CMDBD,1 ;B/D相电流参考值 .bss MAX,1 ;最小占空比(0%)比较值 .bss MIN,1 ;最大占空比(100%)比较值 .bss COMAC,1 ;A/C相比较值 .bss COMBD,1 ;B/D相比较值 .bss CURRAC,1 ;A/C相电流检测值 .bss CURRBD,1 ;B/D相电流检测值 .bss NUM,1 ;电流修正值 .bss TMP,1 ;临时变量 .bss STACK,6 ;软堆栈初始地址;-定义主向量段- .sect .vectors ;定义主向量段RESET B _c_int0 ;地址0000H,复位,优先级1INT1 B PHANTOM ;地址0002H,INT1,优先级4INT2 B T1PERIOD_ISR ;地址0004H,INT2,优先级5INT3 B T2PERIOD_ISR ;地址0006H,INT3,优先级6INT4 B PHANTOM ;地址0008H,INT4,优先级7INT5 B PHANTOM ;地址000AH,INT5,优先级8INT6 B PHANTOM ;地址000CH,INT6,优先级9 RESERVED B PHANTOM ;地址000EH,测试,优先级10SW_INT8 B PHANTOM ;地址0010H,自定义软中断SW_INT9 B PHANTOM ;地址0012H,自定义软中断SW_INT10 B PHANTOM ;地址0014H,自定义软中断SW_INT11 B PHANTOM ;地址0016H,自定义软中断SW_INT12 B PHANTOM ;地址0018H,自定义软中断SW_INT13 B PHANTOM ;地址001AH,自定义软中断SW_INT14 B PHANTOM ;地址001CH,自定义软中断SW_INT15 B PHANTOM ;地址001EH,自定义软中断SW_INT16 B PHANTOM ;地址0020H,自定义软中断TRAP B PHANTOM ;地址0022H,TRAP矢量NMI B PHANTOM ;地址0024H,NMI,优先级3EMU_TRAP B PHANTOM ;地址0026H,仿真Trap,优先级2SW_INT20 B PHANTOM ;地址0028H,自定义软中断SW_INT21 B PHANTOM ;地址002AH,自定义软中断SW_INT22 B PHANTOM ;地址002CH,自定义软中断SW_INT23 B PHANTOM ;地址002EH,自定义软中断SW_INT24 B PHANTOM ;地址0030H,自定义软中断SW_INT25 B PHANTOM ;地址0032H,自定义软中断SW_INT26 B PHANTOM ;地址0034H,自定义软中断SW_INT27 B PHANTOM ;地址0036H,自定义软中断SW_INT28 B PHANTOM ;地址0038H,自定义软中断SW_INT29 B PHANTOM ;地址003AH,自定义软中断SW_INT30 B PHANTOM ;地址003CH,自定义软中断SW_INT31 B PHANTOM ;地址003EH,自定义软中断;-以下是主程序- .text;-系统初始化程序-_c_int0 SETC INTM ; 屏蔽中断 LDP #0E0H SPLK #0068H, WDCR ;不用看门狗 SPLK #0284H, SCSR1 ;CLKIN=10MHz,CLKOUT=20MHz;-中断初始化程序- LDP #0 SPLK #0FFH,IFR ;清所有系统中断标志 SPLK #00000110B,IMR ;开INT2, INT3中断 LDP #0E8H LACC EVAIFRA ;清事件管理器A所有中断标志 SACL EVAIFRA LACC EVAIFRB SACL EVAIFRB LACC EVAIFRC SACL EVAIFRC SPLK #0,EVAIMRA ;屏蔽所有中断 SPLK #0,EVAIMRB SPLK #0,EVAIMRC ;-初始化转子位置为A相- CALL START2 ;调用初始化转子位置子程序;-ADC初始化- LDP #0E1H SPLK #0900H,ADCTRL1 ;ADC预分频10,1MHZ SPLK #0001H,MAXCONV ;两个通道 SPLK #0010H,CHSELSEQ1 ;选择ADCIN0和ADCIN1通道 LACC MCRA OR #0FD8H ;设置PWM1-6,QEP1-2 SACL MCRA;-初始化事件管理器A程序- LDP #0E8H SPLK #0000H,ACTRA ;引脚PWM1-6强制低 SPLK #0,CMPR1 ;占空比初值为100% SPLK #0,CMPR2 SPLK #0,CMPR3 SPLK #8200H,COMCONA ;定时器下溢比较器重载,允许比较 SPLK #0800,T1PR ;周期寄存器值800(25kHzPWM) SPLK #0,T1CNT SPLK #9040H,T1CON ;连续增计数方式,预分频为1,允许T1 SPLK #9872H,T2CON ;定向增减,允许编码接口 SPLK #0803BH, T2PR ;T2周期寄存器(7FFFH+60) SPLK #07FC3H, T2CMPR ;T2比较寄存器(7FFFH-60) SPLK #07FFFH, T2CNT ;编码器计数器初值;-开中断- LDP #0E8H LACC EVAIFRA ;清事件管理器A所有中断标志 SACL EVAIFRA LACC EVAIFRB SACL EVAIFRB LACC EVAIFRC SACL EVAIFRC SPLK #0080H,EVAIMRA ;开T1周期中断 SPLK #0003H,EVAIMRB ;开T2周期中断和比较中断 SPLK #0,EVAIMRC LAR AR1,#STACK ;软堆栈指针 CLRC INTM ;开中断;-变量初始化- LDP #0H LACC #0 SACL CMD ;电流参考初值(通过速度环求得) SACL CMDAC ;A/C相电流参考值 SACL CMDBD ;B/D相电流参考值 LACC #10 SACL NUM ;电流修正值 LDP #0E8H LACC T1PR LDP #0 SACL MAX ;MAX =T1PR,占空比=0% LACC #00 SACL MIN ;MIN = 0,占空比=100% LACC MIN SACL COMAC ;A/C相占空比=100% SACL COMBD ;B/D相占空比=100% LACC #0 SACL CURRAC ;A/C相电流=0 SACL CURRBD ;B/D相电流=0 LACC GPR2 ;转向,由用户外部输入 SUB #1 BCND X3, EQ ;正转(CW)则跳转 LACC #4 ;反转(CCW) SACL GPR0 ;当前换相是D相 B XXX3 LACC #2 ;正转(CW) SACL GPR0 ;当前换相是B相XX LACC #1 SACL GPR3 ;禁止换相;-初始化结束-;-用户可添加包括转速和转向输入的应用程序-WAIT B WAIT ;-主模块结束-;-假中断处理子程序-PHANTOM CLRC INTM RET;-T1周期中断处理子程序-T1PERIOD_ISR MAR *,AR1 ;保存现场 MAR *+ SST #1, *+ ;保存ST1 SST #0, * ;保存ST0 LDP #0E0H LACC PIVR ;清中断标志 LDP #0E8H SPLK #0FFFH,EVAIFRA;-检测是否换相- LDP #0 LACC GPR3 SUB #1 BCND NOCOM, EQ ;不换相则跳转;-转向识别,调整当前换相标志- LACC GPR2 ;换相 SUB #1 BCND FORWARD, EQ ;正转则跳转REVERSE ;反转(CCW) LACC GPR0 ;调整当前换相标志 SUB #1 SACL GPR0 BCND X1, EQ ;GPR0=0跳转 B GOOUTX1 LACC #4 ;修改GPR0=4 SACL GPR0 B GOOUTFORWARD ;(CW) LACC GPR2 ;检查转向是否改变 SUB #0 BCND REVERSE, EQ ;如果转向改变则跳转 LACC GPR0 ;调整当前换相标志 ADD #1 SACL GPR0 SUB #5 BCND X2, EQ ;GPR05跳转 B GOOUTX2 LACC #1 ;修改GPR0=1 SACL GPR0GOOUT LACC #1 SACL GPR3 ;修改换相标志为不换相;-调用电流检测子程序-NOCOM CALL DATAINT;-电流调节- LACC #SECTOR_TABLE ;表头地址 ADD GPR0 ;加偏移量 TBLR ADDRESS ;查表 LACC ADDRESS ;取跳转地址 BACC ;跳转PHASE_00 LACC #0DEADH ;干扰陷阱 B PPP ;退出;-A相-PHASE_A ;A相电流调整 LACC CMDAC ;A/C相电流参考值 SUB CURRAC ;与测量值比较 BCND DEC_A, LT ;测量值大于参考值则跳转 LACC COMAC ;否则小于参考值 SUB NUM ;减修正值,使占空比增加 SACL COMAC ;保存新比较值 LACC MIN ;检测是否超出上限 SUB COMAC BCND SET_A, GEQ ;超过则跳转 B GOON_A ;没超过则退出DEC_A ;测量值大于参考值 LACC COMAC ADD NUM ;加修正值,使占空比减小 SACL COMAC ;保存新比较值 LACC MAX ;检测是否超出下限 SUB COMAC BCND GOON_A, GEQ ;没超过则退出 LACC MAX ;超出 SACL COMAC ;比较值等于下限(占空比=0%) B GOON_ASET_A LACC MIN SACL COMAC ;比较值等于上限(占空比=100%)GOON_A LACC COMAC LDP #0E8H SACL CMPR1 ;更新A相比较值 SPLK #000EH, ACTRA ;PWM1高有效,PWM2强制高,其它强制低 LDP #0 LACC MIN SACL COMBD ;B/D相占空比初值=100% LACC #0 SACL CURRBD ;电流检测值清零 B PPP ;退出;-B相-PHASE_B ;B相电流调整 LACC CMDBD ;B/D相电流参考值 SUB CURRBD ;与测量值比较 BCND DEC_B, LT ;测量值大于参考值则跳转 LACC COMBD ;否则小于参考值 SUB NUM ;减修正值,使占空比增加 SACL COMBD ;保存新比较值 LACC MIN ;检测是否超出上限 SUB COMBD BCND SET_B, GEQ ;超过则跳转 B GOON_B ;没超过则退出DEC_B ;测量值大于参考值 LACC COMBD ADD NUM ;加修正值,使占空比减小 SACL COMBD ;保存新比较值 LACC MAX ;检测是否超出下限 SUB COMBD BCND GOON_B, GEQ ;没超过则退出 LACC MAX ;超出 SACL COMBD ;比较值等于下限(占空比=0%) B GOON_BSET_B LACC MIN SACL COMBD ;比较值等于上限(占空比=100%)GOON_B LACC COMBD LDP #0E8H SACL CMPR2 ;更新B相比较值 SPLK #00E0H, ACTRA ;PWM3高有效,PWM4强制高,其它强制低 LDP #0 LACC MIN SACL COMAC ;A/C相占空比初值=100% LACC #0 SACL CURRAC ;电流检测值清零 B PPP ;退出;-C相-PHASE_C ;C相电流调整 LACC CMDAC ;A/C相电流参考值 SUB CURRAC ;与测量值比较 BCND DEC_C, LT ;测量值大于参考值则跳转 LACC COMAC ;否则小于参考值 SUB NUM ;减修正值,使占空比增加 SACL COMAC ;保存新比较值 LACC MIN ;检测是否超出上限 SUB COMAC BCND SET_C, GEQ ;超过则跳转 B GOON_C ;没超过则退出DEC_C ;测量值大于参考值 LACC COMAC ADD NUM ;加修正值,使占空比减小 SACL COMAC ;保存新比较值 LACC MAX ;检测是否超出下限 SUB COMAC BCND GOON_C, GEQ ;没超过则退出 LACC MAX ;超出 SACL COMAC ;比较值等于下限(占空比=0%) B GOON_CSET_C LACC MIN SACL COMAC ;比较值等于上限(占空比=100%)GOON_C LACC COMAC LDP #0E8H SACL CMPR3 ;更新C相比较值; SPLK #020CH, ACTRA ;PWM5高有效,PWM2强制高,其它强制低 LDP #0 LACC MIN SACL COMBD ;B/D相占空比初值=100% LACC #0 SACL CURRBD ;电流检测值清零 B PPP ;退出;-D相-PHASE_D ;D相电流调整 LACC CMDBD ;B/D相电流参考值 SUB CURRBD ;与测量值比较 BCND DEC_D, LT ;测量值大于参考值则跳转 LACC COMBD ;否则小于参考值 SUB NUM ;减修正值,使占空比增加 SACL COMBD ;保存新比较值 LACC MIN ;检测是否超出上限 SUB COMBD BCND SET_D, GEQ ;超过则跳转 B GOON_D ;没超过则退出DEC_D ;测量值大于参考值 LACC COMBD ADD NUM ;加修正值,使占空比减小 SACL COMBD ;保存新比较值 LACC MAX ;检测是否超出下限 SUB COMBD BCND GOON_D, GEQ ;没超过则退出 LACC MAX ;超出 SACL COMBD ;比较值等于下限(占空比=0%) B GOON_DSET_D LACC MIN SACL COMBD ;比较值等于上限(占空比=100%)GOON_D LACC COMBD LDP #0E8H SACL CMPR3 ;更新D相比较值 SPLK #08C0H, ACTRA ;PWM6高有效,PWM4强制高,其它强制低 LDP #0 LACC MIN SACL COMAC ;A/C相占空比初值=100% LACC #0 SACL CURRAC ;电流检测值清零PPP MAR *, AR1 ;恢复现场 LST #0, *- ;恢复ST0 LST #1, *- ;恢复ST1 CLRC INTM RET;-电流采样和AD转换子程序-DATAINT LDP #0E1H SPLK #2000H,ADCTRL2 ;启动AD转换CONVERSION BIT ADCTRL2,3 ;将忙状态位复制到TC BCND CONVERSION,TC ;等待转换结束 LACC RESULT0,10 ;读A/C相电流转换结果 LDP #0 SACH CURRAC ;保存 LDP #0E1H LACC RESULT1,10 ;读B/D相电流转换结果 LDP #0 SACH CURRBD ;保存 RET;-T2周期和比较中断处理子程序-T2PERIOD_ISR MAR *,AR1 ;保存现场 MAR *+ SST #1, *+ ;保存ST1 SST

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论