聪明文档网

聪明文档网

最新最全的文档下载
当前位置: 首页> 数字信号处理技术 - 05电压信号的采集(交流电机的模拟参数输入)概览

数字信号处理技术 - 05电压信号的采集(交流电机的模拟参数输入)概览

时间:2018-10-04 09:32:09    下载该word文档

3 交流电机的模拟参数输入

3.1交流电机的模拟参数输入

3.1.1交流电机的模拟参数输入硬件电路的组成

3.1 交流电机的模拟参数输入硬件电路

3.1.2交流电机的模拟参数输入过程

3.2 MCP604

3.2.1 MCP604简介

3.2.2 MCP604引脚与引脚功能

3.3 TMS320LF2407 A/D转换模块

3.3.1 模数转换模块ADC工作原理

3.3.2 模数转换模块ADC工作方式

模数转换模块ADC有两种不同的工作方式:连续自动排序模式、启动/停止模式。

3.3.3 ADC模块的寄存器

1. ADC控制寄存器1ADCTRL1

2. ADC控制寄存器2ADCTRL2

3. 最大转换通道寄存器MAXCONV

4. 自动排序状态寄存器AUTO_SEQ_SR

5. ADC输入通道选择排序控制寄存器CHSEL SEQn

6. ADC转换结果缓冲寄存器RESULTn

3.3.4 ADC转换举例

此例中用事件管理器A的定时器2定时时间到来触发A/D采样的启动。采样时采用级连模式,一次做16个转换,转换通道分别是0~15。转换完成后,在A/D中断服务子程序中将转换结果读出。该程序只作一次A/D采样。

7. 所需的复位和中断向量定义文件“vectors.asm

// 该文件利用汇编语言代码定义了复位和中断向量

.title “vectors.asm”

.ref _c_int0_nothing_ADINT

.sect “.vectors”"

reset: b _c_int0 // 复位向量

int1: b _ADINT // A/D中断向量

int2: b _nothing

int3: b _nothing

int4: b _nothing

int5: b _nothing

int6: b _nothing

8. 主程序Adc.c

// 该程序用于进行A/D转换A/D转换的结果保存在DRESULT[16]中,寄

// 存器ceshi用于测试每个A/D转换的结果

#include "register.h"

int ADRESULT[16] // 定义一个数组用于保存AD转换的结果

volatile unsigned int *j // 定义一个指针变量

int i=0x00ceshi

// 屏蔽中断子程序

void inline disable()

{

asm" setc INTM"

}

// 开总中断子程序

void inline enable()

{

asm" clrc INTM"

}

// 系统初始化子程序

void initial()

{

asm" setc SXM" // 符号位扩展有效

asm" clrc OVM" // 累加器中结果正常溢出

asm" clrc CNF" // B0被配置为数据存储空间

*SCSR1=0x81FE // CLKIN=6M HzCLKOUT=4*CLKIN=24M Hz

*WDCR=0x0E8 // 不使能看门狗

*IMR=0x0001 // 允许INT1中断

*IFR=0x0FFFF // 清除全部中断标志,“写10"

}

// AD初始化子程序

void adinit ()

{

*T2CNT=0x0000 // T2计数器清0

*T2CON=0x170C //T2为连续增计数模式,128分频,选用内部时钟源

*T2PER=0x75 // 设置T2的周期寄存器

*GPTCONA=0x400 // T2周期中断标志触发AD转换

*EVAIFRB=0x0FFFF // 清除EVA中断标志,“写10

*ADCTRL1=0x10 // 采样时间窗口预定标位ACQ PS3-ACQ PS00

// 转换时间预定标位CPS0AD为启动/停止模式,

// 排序器为级连工作方式

*ADCTRL2=0x0504 // EVA的一个事件信号触发AD转换,用中断模式1

*MAXCONV=0x0F // 16通道

*CHSELSEQ1=0x3210

*CHSELSEQ2=0x7654

*CHSELSEQ3=0x0BA98

*CHSELSEQ4=0x0FEDC // 转换通道是0~15

}

// 启动AD转换子程序通过启动定时器4的方式间接启动

void ADSOC()

{

*T2CON=*T2CON|0x40 // 启动定时器2

}

// 若是其它中断则直接返回子程序

void interrupt nothing()

{

return

}

// AD中断服务子程序

void interrupt ADINT()

{

asm“ clrc SXM” // 抑制符号位扩展

j=RESULT0 // 取得RESULT0的地址

fori=0i<=15i++j++

{

ADRESULT[i]=*j>>6 // AD转换的结果左移6位后存入规定的数组

ceshi=ADRESULT[i] // 检验每个A/D转换的结果

}

*ADCTRL2=*ADCTRL2|0x4200// 复位SEQ1,且清除INT FLAG SEQ1

enable() // 开总中断,因一进入中断总中断就自动关闭了

}

main()

{

disable // 禁止总中断

initial // 系统初始化

adinit // AD初始化子程序

enable // 开总中断

ADSOC // 启动AD转换

while1

{

ifi==0x10 break

//如果已发生中断,则停止等待(发生中断后,i=0x10

}

*T2CON=*T2CON&0x0FFBF // 停止定时器2,即间接停止A/D转换

while1

{

;

} // 死循环,在实际的工程应用中在此可以利用A/D转换的结果

}

3.4 TMS320LF240x常用汇编指令

3.4.1 TMS320LF240x DSP汇编指令的寻址方式

1. 立即数寻址

2. 直接寻址

3. 间接寻址

3.4.2 TMS320LF240x DSP的常用汇编指令

1. ABS,累加器取绝对值

2. ADD,累加器加

3. ADDC,带进位的累加器加

4. ADDS,符号扩展抑制的累加器加

5. ADRK,辅助寄存器加短立即数

6. AND,和累加器进行与操作

7. B,无条件跳转

8. BACC,跳转到累加器指定的地址

9. BANZ,辅助寄存器非0跳转

10. BCND,条件跳转

11. CALA,累加器指定地址的子程序调用

12. CALL,无条件子程序调用

13. CC,条件子程序调用

14. CLRC,控制位清零

15. CMPL,累加器逻辑取反

16. CMPR辅助寄存器与AR0比较

17. IN,从端口读入数据

18. INTR,软件中断

19. LACC,带移位的累加器装载

20. LACL,装载累加器低16位,高16位清0

21. LAR,辅助寄存器装载

22. LDP,数据页指针装载

23. LT,暂存寄存器装载

24. LST,状态寄存器装载

25. LTDTREG寄存器装载、累加前一次乘积并数据移动

26. MAR,修改辅助寄存器

27. MPY,乘

28. MPYU,乘无符号数

29. NEG

30. NMI,非屏蔽中断

31. NOP,空操作

32. OR,与累加器进行或操作

33. OUT,输出数据到端口

34. PAC,乘积寄存器内容装载到累加器

35. POP,堆栈顶内容弹出到累加器低16

36. PUSH,累加器低16位压入堆栈

37. RET,子程序返回

38. RPT,重复执行下一条指令

39. SACH,存储累加器移位后的高16

40. SACL,存储累加器移位后的低16

41. SAR,存储辅助寄存器

42. SBRK,辅助寄存器减去短立即数

43. SETC,控制位置位

44. SPAC,累加器减乘积寄存器

45. SPH,存储乘积寄存器的高16

46. SPLK,长立即数存储到数据存储单元

47. SPM,将立即数赋给乘积移位模式PM

48. SST,存储状态寄存器

49. SUB,累加器减

3.5 交流电机的模拟参数输入程序

3.5.1交流电机的模拟参数输入汇编语言主程序

1. 所需的复位和中断向量定义文件“vectors. asm

// 该文件利用汇编语言代码定义了复位和中断向量

.title “vectors .asm” ;此文件名为vectors .asm

.sect “.vectors” ;定义主向量段

reset: b _c_int0 复位向量

int1: b GISR1 ;中断优先级1ADC中断属于INT1

int2: b PHANTOM

int3: b PHANTOM

int4: b PHANTOM

int5: b PHANTOM

int6: b PHANTOM

reserved b PHANTOM

sw_int8 b PHANTOM

sw_int31 b PHANTOM

.sect “.pvecs” ;定义子向量段

PVECTORS b PHANTOM ;保留向量地址偏移量0000H

b PHANTOM ;保留向量地址偏移量0001H

b PHANTOM 保留向量地址偏移量0002H

b PHANTOM 保留向量地址偏移量0003H

b ADCINT_ISR 向量地址偏移量0004HADC中断

b PHANTOM 保留向量地址偏移量0005H

b PHANTOM 保留向量地址偏移量00041H

2. 主程序Dyxhcj.asm

主程序:

.include "register.h" 引用头部文件

st0_temp .usect.b20,1 ;分配1个字的空间给st0_temp

st1_temp .usect.b20,1 ;分配1个字的空间给st1_temp

context .usect.b20,7 ;分配7个字的空间给context

STACK .usect.stack, 40 ;分配40个字的空间给STACK

ADRESULT .usect.data0,8 ;分配8个字的空间给ADRESULT

.def _c_int0 ;定义标号_c_int0

.text ;下列指令为可执行代码

_c_int0

SETC INTM

CLRC SXM

CLRC OVM

CLRC CNF

LDP #0E0H

SPLK #81FEH, SCSR1 CLKIN=6M HzCLKOUT=4*CLKIN=24M Hz

SPLK #0E8H, WDCR 关看门狗

LDP #0

SPLK #0001H,IMR 允许INT1 中断

SPLK #0FFFFH,IFR 所有中断标志

CALL ADINIT 初始化ADC 程序

CLRC INTM 全局中断

CALL AD 启动模数转换程序

WAIT: NOP

B WAIT

ADC 初始化程序

ADINIT:

LDP #232 设置通用定时器2

SPLK #0000H, T2CNT ;计数器清0

SPLK #170CH, T2CON ;连续增计数模式,输入时钟=CPU时钟/128

SPLK #075H, T2PR ;定时器周期中断时间

SPLK #0400H, GPTCONA ;由定时器2的周期中断启动模数转换

SPLK #0FFFFH, EVAIFRB

SPLK #0000H, EVAIMRB 屏蔽定时器2的周期中断,但不影响

;定时器2定时周期到时相应的中断标

;志位置1,从而启动模数转换。

LDP #DP_PF2 设置ADC 控制寄存器

SPLK #0000H, ADCCTRL1 ;双排序器工作模式,启动/停止模式,CPS=0

ADC中断请求为高优先级

SPLK #0400H, ADCCTRL2 SEQ1采用中断模式1,不使能SEQ2中断

SPLK #0007H, MAXCONV 8个通道的转换

SPLK #0000H, CHSELSEQ1

SPLK #0000H, CHSELSEQ2

RET

启动模数转换程序

AD:

LDP #DP_PF2

LACL ADCCTRL2

OR #2000H EVA事件触发启动SEQ1

SACL ADCCTRL2

LDP #232

LACL T2CON

OR #40H 启动定时器2

SACL T2CON

RET

中断程序

GISR1: INT1 中断子程序入口

保护现场

LDP #0 保存上下文

SST #0, st0_temp ;保存ST0的内容到st0_temp

SST #1, st1_temp 保存ST1的内容到st1_temp

SACL context 保存ACC 的低16 context=AL

SACH context+1 保存ACC 的高16 context+1=AH

SAR AR1, context+2 context+2=AR1

SAR AR2, context+3 context+3=AR2

SAR AR3, context+4 context+4=AR3

SAR AR4, context+5 context+5=AR4

SAR AR5, context+6 context+6=AR5

LDP #0E0H DP=E0H页首地址为7000HE0H*80H

LACC PIVR,1 PIVR的内容左移一位后送入ACC

ADD #PVECTORS 加上外设中断入口地址

BACC 跳到相应的中断服务子程序

ADCINT_ISR:

CLRC SXM 抑制符号扩展

LDP #DP_SARAM2

LAR AR0, #8 ;(AR0 =8

LAR AR1, #ADRESULT ;(AR1 = ADRESULT

LAR AR2, #RESULT0;(AR2= RESULT0,转换结果存储在位15~6

MAR *, AR2

ADC1: 得到8个转换结果依次存放在地址为AR1+2*n的存储器区间

LACC *+, 10, AR1;(ACC=((AR2))<<10,AR2= AR2+1

SACH * ;((AR1))= AH=右对齐的转换结果

ADRK #2 ;(AR1 = AR1+2

MAR *, AR0

BANZ ADC1,*-, AR2

;若(AR00,则跳转到ADC1;(AR0 = AR0-1

LDP #DP_PF2 ;一次转换结束,8个通道的转换结果全部读出

LACL ADCCTRL2 ;(ACC= ADCCTRL2 = 0000 0400H

OR #4000H 复位 SEQ1

AND #0FFDFH INT FLAG SEQ1

LACL T2CON

AND #0FFBFH 停止定时器2即停止A/D 转换

SACL T2CON

GISR1_RET: 中断返回出口

LDP #DP_EVA

SPLK #0FFFFH, EVAIFRA

LDP #0

LAR AR5, context+6

LAR AR4, context+5

LAR AR3, context+4

LAR AR2, context+3

LAR AR1, context+2

LACC context+1, 16

ADDS context

LST #1, st1_temp

LST #0, st0_temp

恢复现场

CLRC INTM 开总中断因为一进中断就自动关闭了总中断

RET

假中断程序

PHANTOM

KICK_DOG 复位看门狗

RET

END

3.5.2交流电机的模拟参数输入汇编语言主程序分析

1. 程序执行过程

2. 采样过程说明

3. 数字量与模拟量的关系

            (3.1

4. ADCINT中断向量地址的获取

5. A/D转换的转换周期

A/D转换的转换周期可被分成5个阶段:

1 启动时序同步(SOS同步)。

2 采样时间(ACQ)。

3 转换时间(CONV)。

4 结束转换时间(EOC)。

5 序列转换完成后设置标志位时间(EOS)。

此设计中A/D转换的转换周期=2+16+80+8+1=107CLKOUT时钟周期。

6. 定时器2的定时周期中断时间T

定时器在连续增计数模式下,定时器周期的时间为TxPR+1个定标的时钟输入周期,此设计中,,T=117+1*128/CPU时钟频率=118*128CLKOUT时钟周期。

作业

3.2简述模数转换模块ADC的工作原理。

3.3简述模数转换模块ADC的两种工作方式的特点。

3.5 简述TMS320LF2407A实现交流电机转速测量的过程。

  • 29.8

    ¥45 每天只需1.0元
    1个月 推荐
  • 9.9

    ¥15
    1天
  • 59.8

    ¥90
    3个月

选择支付方式

  • 微信付款
郑重提醒:支付后,系统自动为您完成注册

请使用微信扫码支付(元)

订单号:
支付后,系统自动为您完成注册
遇到问题请联系 在线客服

常用手机号:
用于找回密码
图片验证码:
看不清?点击更换
短信验证码:
新密码:
 
绑定后可用手机号登录
请不要关闭本页面,支付完成后请点击【支付完成】按钮
遇到问题请联系 在线客服