📄 ileg2drv.asm
字号:
;*************************************************************
; 文件名: ileg2drv.asm
;
; 模块名: ILEG2DRV
;
; 初始化程序名: ILEG2DRV_INIT
;
; 公司: 达盛科技
;
; 功能描述: 设置ADC选项,将采样的两路电流信号通过可变的增益和偏
; 移量进行处理,获得可用电流信号。
;
; |~~~~~~~~~~~~~~~~~~|
; I_ch_sel o------->| |
; Ia_gain o------->|Q13 ILEG2DRV Q15|----->o Ia_out
; Ib_gain o------->|Q13 Q15|----->o Ib_out
; Ia_offset o------->|Q15 |
; Ib_offset o------->|Q15 |
; |__________________|
;
; 目标板cpu: x2407
;
;=====================================================================================
; 修改记录:
;-------------------------------------------------------------------------------------
; 最后更新时间:2005.6.15 版本号: Ver 1.0
;======================================================================
; 设置说明
;-----------------------------------------------------------
; 1. Ix_gain 范围 -3.999999 --> +3.99999 (i.e. Q13)
; 2. Ix_offset 范围 -0.999999 --> +0.99999 (i.e. Q15)
; 3. Ix_out 范围 -0.999999 --> +0.99999 (i.e. Q15)
; with:
; 1.0 x (VrefHi - VrefLo) = +0.999999 (7FFFh)
; 0.5 x (VrefHi - VrefLo) = 0 (0000/FFFFh)
; 0.0 x (VrefHi - VrefLo) = -0.999999 (8000h)
;
; I_ch_sel 16进制值与 采样通道的对应关系:
; _________________________________________________
; | x | x | Ib select | Ia select |
; -------------------------------------------------
; Ia 选择: 0,1,2...F --> Ch0,1,2,...15
; Ib 选择: 0,1,2...F --> Ch0,1,2,...15
;-----------------------------------------------------------
; 变量声明
;-----------------------------------------------------------
; .ref ILEG2DRV, ILEG2DRV_INIT ;子程序调用
; .ref Ia_gain,Ib_gain,Ia_offset,Ib_offset ;输入
; .ref Ia_out, Ib_out,V_ref ;输出
;-----------------------------------------------------------
; 变量声明
;-----------------------------------------------------------
.def ILEG2DRV, ILEG2DRV_INIT ;子程序调用
.def Ia_gain,Ib_gain,Ia_offset,Ib_offset ;输入
.def Ia_out, Ib_out, V_ref ;输出
******************************************************
* 变量定义
******************************************************
.include "x24x_app.h"
******************************************************
I_ch_sel1 .usect "ileg2drv",1
I_ch_sel2 .usect "ileg2drv",1
Ia_gain .usect "ileg2drv",1
Ib_gain .usect "ileg2drv",1
Ia_offset .usect "ileg2drv",1
Ib_offset .usect "ileg2drv",1
Ia_out .usect "ileg2drv",1
Ib_out .usect "ileg2drv",1
V_ref .usect "ileg2drv",1
V_gain .usect "ileg2drv",1
V_offset .usect "ileg2drv",1
******************************************************
* 参数设置
******************************************************
I_ch_sel1_ .set 3111h;3311H;6886h
I_ch_sel2_ .set 2233H;6CC6h;6886h
; 实验箱(6CC6h)或者'techv2407'(1331H)
ACQ_PS_ .set 0001b ; 采样时钟 p/s=1/2*(conv p/s)
CON_PS_ .set 0 ; 转换时钟 p/s=1/1
CAL_ .set 0 ; 自动校准寄存器 = 0
Ia_offset_ .set 0;530h ; 通过 XOR 产生偏置
Ib_offset_ .set 0;430h ;
V_offset_ .set 1520;
Ia_gain_ .set 1fffh ; gain=1.0 (Q13)
Ib_gain_ .set 1fffh ; gain=1.0 (Q13)
V_gain_ .set 1fffh ; gain=1.0 (Q13)
ILEG2DRV_INIT
LDP #I_ch_sel1 ;
SPLK #I_ch_sel1_,I_ch_sel1 ; 设置通道选择初始化
SPLK #I_ch_sel2_,I_ch_sel2 ;
SPLK #Ia_gain_,Ia_gain ; 增益设置初始化
SPLK #Ib_gain_,Ib_gain ;
SPLK #Ia_offset_,Ia_offset ; 偏置设置初始化
SPLK #Ib_offset_,Ib_offset ;
SPLK #V_offset_,V_offset ;
SPLK #V_gain_,V_gain ;
ldp #GPTCON>>7 ; 设置 T1下溢触发 ADC
lacc GPTCON
and #0FE7Fh ;
or #01b<<7
sacl GPTCON
LDP #CALIBRATION>>7 ;
SPLK #CAL_,CALIBRATION ; 初始化自动校准寄存器
SPLK #4000h,ADCL_CNTL1 ; 复位AD模块
SPLK #(03000h+ACQ_PS_<<8+CON_PS_<<7),ADCL_CNTL1 ; 设置 ADCL_CNTL1
SPLK #0342h,ADCL_CNTL2 ; 允许 EVA 启动转换
SPLK #7,MAXCONV ; 8 转换通道
bldd #I_ch_sel1,CHSELSEQ1 ; 设置通道选择
bldd #I_ch_sel2,CHSELSEQ2
ret
ILEG2DRV:
ldp #ADCL_CNTL2>>7 ; 检查 SEQ_BSY 位,判断转换是否完成
Wait
bit ADCL_CNTL2,BIT12 ;
bcnd Wait,TC ;
LACC ADC_RESULT2 ; 读取通道1转换值
XOR #8000h ; 转换成 Q15
ldp #Ia_out
SACL Ia_out
LT Ia_gain ; Ia_gain,Q13
MPY Ia_out ; Q13 x Q15 = Q28
PAC
ADD Ia_offset,13 ; 加偏置,Q28
; neg ; 正方向对应流入电机的方向
SACH Ia_out,3 ; 最终结果转换成 Q15
LDP #ADC_RESULT1>>7 ; 读取通道2转换值
LACC ADC_RESULT5
XOR #8000h ; 转换成 Q15
ldp #Ib_out
SACL Ib_out
LT Ib_gain ; Ib_gain,Q13
MPY Ib_out ; Q13 x Q15 = Q28
PAC
ADD Ib_offset,13 ; 加偏置,Q28
; neg ; 正方向对应流入电机的方向
SACH Ib_out,3 ; 最终结果转换成 Q15
LDP #ADC_RESULT1>>7 ; 读取通道3转换值
LACC ADC_RESULT7
XOR #8000h ; 转换成 Q15
ldp #V_ref
SACL V_ref
LT V_gain ; V_gain,Q13
MPY V_ref ; Q13 x Q15 = Q28
PAC
ADD V_offset,13 ; 加偏置,Q28
neg ; 如果需要可以反向
SACH V_ref,3 ; 最终结果转换成 Q15
bldd I_ch_sel1,#CHSELSEQ1 ; 重新设置通道选择
bldd I_ch_sel2,#CHSELSEQ2
; ldp #ADCL_CNTL2>>7 ;通道清零
; lacl ADCL_CNTL2
; OR #4000h
; sacl ADCL_CNTL2 ;
RET
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -