|
小弟初学dsp 在做直接电机的PWM控制 其中电流反馈用到了ad转换
程序中用事件管理器A的定时器1的周期中断启动ad转换
程序已经可以进入中断
我只设了一个转换通道
但是每次采样读数都是0
可能是什么样的问题啊
程序在下面
.INCLUDE \"LF2407.H\"
.include \"vector.h\"
.DEF _c_int0
;-----------------------------------以下定义变量合常数--------------------------------------------
.BSS N_KP,1 ;速度调节比例系数
.BSS N_KI,1 ;速度调节积分系数
.BSS N_KC,1 ;速度调节积分饱和修正参数
.BSS I_KP,1 ;电流调节比例系数
.BSS I_KI,1 ;电流调节积分系数
.BSS I_KC,1 ;电流调节积分饱和修正系数
.BSS I_REF,1 ;电流参考值
.BSS N_REF,1 ;速度参考值
.BSS DIRECTION,1 ;速度方向标志
.BSS STACK,6 ;软堆栈初始地址
.BSS I_EK,1 ;电流偏差
.BSS I_RK,1 ;电流第K次积分调节累计
.BSS I_U,1 ;电流调节输出
.BSS I_ELPI,1 ;电流极限偏差
.BSS TMP1,1 ;临时变量
.BSS TMP2,1
.BSS ENCODEROLD,1 ;前一次编码器读数
.BSS ENCINCR,1 ;编码增量
.BSS SPEEDTMP,1 ;编码脉冲累计
.BSS SPEEDSTEP,1 ;速度调节计数器
.BSS KSPEED,1 ;编码脉冲-速度转换系数
.BSS N,1 ;速度反馈量
.BSS N_EK,1 ;速度偏差
.BSS N_RK,1 ;速度第K次积分调节累计
.BSS N_U,1 ;速度调节输出
.BSS N_ELPI,1 ;速度极限偏差
.BSS I_MIN,1 ;电流最小值
.BSS I_MAX,1 ;电流最大值
.BSS PWM,1 ;PWM波的占空比对应的比较点
;---------------------------------------以下始主程序--------------------------------------------
.TEXT
;---------------------------------------初始化程序------------------------------------------------
_c_int0
CLRC CNF
CLRC OVM
SETC SXM ;符号扩展
SETC INTM ;关中断
LAR AR1,#STACK ;软堆栈指针
LDP #0E0H
SPLK #0E8H,WDCR ;不用看门狗
SPLK #0684H,SCSR1 ;20MCLKIN,20MCLKOUT
LDP #0E1H
SPLK #03D8H,MCRA ;引脚设置为PWM1~4,QEP1~2
LDP #0E8H
SPLK #0FFFFH,T2PR ;最大周期
SPLK #0000H,T2CNT
SPLK #9870H,T2CON ;定向增减,允许编码接口
SPLK #500,T1PR ;PWM设置,周期50微秒
SPLK #0000H,T1CNT
SPLK #01F4H,DBTCONA ;死区1.6微秒
SPLK #250,CMPR1 ;占空比为50%
SPLK #250,CMPR2
SPLK #8200H,COMCONA ;允许比较,T1下溢重载
SPLK #084CH,T1CON ;连续增减计数,内部时钟,不分频
SPLK #0100H,GPTCONA ;T1周期中断标志启动AD转换
LDP #0
SPLK #0001H,IMR ;允许INT1中断
SPLK #0FFFFH,IFR ;清标志
LDP #0E8H
SPLK #0FFFFH,EVAIFRA ;清标志
SPLK #0FFFFH,EVAIFRB
SPLK #0FFFFH,EVAIFRC
SPLK #0,EVAIMRA
SPLK #0,EVAIMRB
SPLK #0,EVAIMRC
LDP #0E1H ;A/D设置
SPLK #0500H,ADCTRL2 ;允许EVA启动AD转换
SPLK #0910H,ADCTRL1 ;10分频,级连模式
SPLK #0000H,MAXCONV ;一个转换通道
SPLK #0007H,CHSELSEQ1 ;ADCIN7通道
LDP #4 ;变量初始化
SPLK #1,DIRECTION ;正转
SPLK #0,I_REF
SPLK #0,N_REF ;100对应额定转速3000r/min
SPLK #0C8H,I_KP ;给电流比例系数赋值
SPLK #15H,I_KI ;给电流积分系数赋值,Q22格式
SPLK #2H,I_KC ;给电流积分饱和修正系数赋值,Q26格式
SPLK #2AH,N_KP ;给速度比例系数赋值
SPLK #70H,N_KI ;给速度积分系数赋值,Q16格式
SPLK #3H,N_KC ;给速度积分饱和系数赋值,Q16格式
SPLK #0,I_RK
SPLK #0,I_ELPI
SPLK #0,SPEEDTMP
SPLK #1,SPEEDSTEP ;使得第一次就进行速度调节,以后每1000PWM周期调节一次
SPLK #313BH,KSPEED ;编码脉冲-速度转换系数,Q13格式
SPLK #0,N_RK
SPLK #0,I_MIN ;给电流最下值赋值
SPLK #2304,I_MAX ;给电流最大值赋值
CLRC INTM ;开总中断
LOOP
LDP #4
BIT DIRECTION,15 ;检查转向标志
BCND CW,TC ;正转跳转
LDP #0E8H
SPLK #0096H,ACTRA ;PWM1,4高有效,2,3低有效
B LOOP
CW
LDP #0E8H
SPLK #0069H,ACTRA ;PWM1,4低有效,2,3高有效
B LOOP
;------------------------------------------假中断处理----------------------------------------------------
PHANTOM
CLRC INTM
RET
;-------------------------------------------AD转换处理子程序---------------------------------------------
ADCINT
MAR *,AR1 ;保存现场
MAR *+
SST #1,*+ ;保存ST1
SST #0,* ;保存ST0
LDP #0E0H
LACC PIVR ;清ADC中断标志
LDP #0E8H
SPLK #0FFFFH,EVAIFRA ;清T1周期中断标志
LDP #0E1H
LACC ADCTRL2
OR #0202H
SACL ADCTRL2
;-------------------------------------------电流的PI调节---------------------------------------------
LACC RESULT7
LDP #0E8H
SACL CMPR2
SACL CMPR1 ;更新看空比
;---------------------------------------恢复现场退出-----------------------------------------------------
GO
MAR *,AR1 ;恢复现场
LST #0,*- ;恢复ST0
LST #1,*- ;恢复ST1
CLRC INTM
RET
.END
|
|