![]() |
|
||||||||||||||
| . 网站首页 . 新闻 . 新品 . 方案 . 专访 . 活动 . DSP . EDA . 评测室 . 技术文库 . 会员区 . 商城 . 服务导航 . 邮购 . 资源 . | ||
|
||
|
|||||
| DSP2407A开发的开关磁阻电机控制程序的源代码(1) | |||||
作者:61IC 文章来源:本站原创 点击数: 更新时间:2007-1-16 ![]() |
|||||
|
.INCLUDE "240x.H" ;--------------------------------------以下定义变量---------------------------------------------------- .DATA .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 START ;地址0000H,复位,优先级1 INT1 B PHANTOM ;地址0002H,INT1,优先级4 INT2 B T1PERIOD_ISR ;地址0004H,INT2,优先级5 INT3 B T2PERIOD_ISR ;地址0006H,INT3,优先级6 INT4 B PHANTOM ;地址0008H,INT4,优先级7 INT5 B PHANTOM ;地址000AH,INT5,优先级8 INT6 B PHANTOM ;地址000CH,INT6,优先级9 RESERVED B PHANTOM ;地址000EH,测试,优先级10 SW_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,优先级3 EMU_TRAP B PHANTOM ;地址0026H,仿真Trap,优先级2 SW_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 ;--------------------------------------系统初始化程序-------------------------------------------------- START 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 XX X3 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 GOOUT X1 LACC #4 ;修改GPR0=4 SACL GPR0 B GOOUT FORWARD ;(CW) LACC GPR2 ;检查转向是否改变 SUB #0 BCND REVERSE, EQ ;如果转向改变则跳转 LACC GPR0 ;调整当前换相标志 ADD #1 SACL GPR0 SUB #5 BCND X2, EQ ;GPR0>5跳转 B GOOUT X2 LACC #1 ;修改GPR0=1 SACL GPR0 GOOUT LACC #1 SACL GPR3 ;修改换相标志为不换相 ;--------------------------------------调用电流检测子程序--------------------------------------------- |
|||||
| 欢迎点击进入:TI德州中文网 (国内唯一针对TI应用的中文技术网站) 文章录入:admin 责任编辑:admin | |||||
| 【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口】 | |||||
| 最新热点 | 最新推荐 | 相关文章 | ||
| DSP2407A开发的开关磁阻电机… |
| 网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!) |
| | 设为首页 | 加入收藏 | 联系站长 | 友情链接 | 版权申明 | 网站公告 | 管理登录 | | |||
|
|