![]() |
|
||||||||||||||
| . 网站首页 . 新闻 . 新品 . 方案 . 专访 . 活动 . DSP . EDA . 评测室 . 技术文库 . 会员区 . 商城 . 服务导航 . 邮购 . 资源 . | ||
|
||
|
|||||
| DSP2407A开发的开关磁阻电机控制程序的源代码(2) | |||||
作者:61IC 文章来源:本站原创 点击数: 更新时间:2007-1-16 ![]() |
|||||
|
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_A SET_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_B SET_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_C SET_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_D SET_D LACC MIN SACL COMBD ;比较值等于上限(占空比=100%) GOON_D LACC COMBD LDP #0E8H SACL CMPR3 ;更新D相比较值 SPLK # 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 #0, * ;保存ST0 LDP #0E0H LACC PIVR ;清中断标志 LDP #0E8H SPLK #0FH,EVAIFRB SPLK #07FFFh, T2CNT ;T2编码器计数器赋初值 LDP #0 LACC #0 SACL GPR3 ;允许换相(GPR3=0) MAR *, AR1 ;恢复现场 LST #0, *- ;恢复ST0 LST #1, *- ;恢复ST1 CLRC INTM RET ;--------------------------------------初始化转子位置子程序------------------------------------------- START2 NOP LDP #0E8H SPLK #000EH, ACTRA ;A相通电 SPLK #0CA00H, COMCONA ;立即比较 SPLK #0400, CMPR1 ;占空比=50% SPLK #0,T1CNT SPLK #800,T1PR ;T1周期寄存器 SPLK #9040H,T1CON ;连续增减计数方式,预分频为1,允许T1 LDP #0 LACC #0FFFFH ;准备延时,等待转子到A相对极位置 SACL TMP LACL TMP SUB #1 SACL TMP BCND LACC #0FFFFH ;再延时 SACL TMP LOOP2 LACL TMP SUB #1 SACL TMP BCND LOOP2, NEQ LDP #0E8H SPLK #0, ACTRA ;关闭PWM RET ;--------------------------------------换相处理程序地址表----------------------------------------- SECTOR_TABLE .WORD PHASE_00 ;干扰陷阱程序地址 .WORD PHASE_A ;换相A相处理程序地址 .WORD PHASE_B ;换相B相处理程序地址 .WORD PHASE_C ;换相C相处理程序地址 .WORD PHASE_D ;换相D相处理程序地址 .END |
|||||
| 欢迎点击进入:TI德州中文网 (国内唯一针对TI应用的中文技术网站) 文章录入:admin 责任编辑:admin | |||||
| 【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口】 | |||||
| 最新热点 | 最新推荐 | 相关文章 | ||
| DSP2407A开发的开关磁阻电机… |
| 网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!) |
| | 设为首页 | 加入收藏 | 联系站长 | 友情链接 | 版权申明 | 网站公告 | 管理登录 | | |||
|
|