DSP课件第六章

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

第六章TMS320LF240x应用实例第六章TMS320LF240x应用实例3线-8线译码器数字PID控制器第六章TMS320LF240x应用实例6.13线-8线译码器本节以3线-8线译码器为例,介绍基于DSP的点对点控制实现方法。输入信号输出信号IOPE3IOPE2IOPE1IOPB7IOPB6IOPB5IOPB4IOPB3IOPB2IOPB1IOPB00000000000100100000010010000001000110000100010000010000101001000001100100000011110000000退出第六章TMS320LF240x应用实例6.1.1设计思路1.TMS320LF2407A的I/O引脚处理本设计采用TMS320LF2407A来实现。由于本设计要用到的输入、输出引脚较多,而TMS320LF2407A芯片中独立使用的I/O引脚较少,大多数的I/O引脚都是和特殊功能的引脚复用。因此在初始化程序中要先把选定的引脚设置成通用的I/O功能。另外,为防止外界信号的干扰,译码器的输入引脚应接上拉电阻。为保证有一个稳定的输出和防止外界的干扰,应采用锁存器把输出的电平进行锁定。退出第六章TMS320LF240x应用实例2.硬件电路3输入信号用3个按键开关来实现,且均接4.7kΩ的上拉电阻。当按键未按下时,IOPE输入高电平,当按键按下时,IOPE输入变为低电平,通过3个按键的不同状态组合,即可实现译码器的8种不同状态输入。译码器的输出用8个发光二极管来指示,对于某种按键的组合输入,只有一个相应的发光二极管点亮,表示输出一个控制信号,图中的1kΩ电阻为发光二极管的限流电阻。退出第六章TMS320LF240x应用实例SN74HC574N为8D锁存器,用于输出信号的锁存和驱动2407A的复位信号经74HC04反相后和SN74HC574N使能端相接,当2407A复位时,为低电平,为高电平,SN74HC574N无输出;当TMS320LF2407A正常工作时,为高电平,为低电平,SN74HC574N正常输出。用TMS320LF2407A的IOPC6引脚作为SN74HC574N的CLK信号,IOPC6通常应输出低电平,当IOPE6变为高电平时,SN74HC574N输出正常译码信号。OERSRSOEOERS退出第六章TMS320LF240x应用实例3.编程时应注意的问题一般而言,DSP程序包括主程序、系统初始化程序和存储器配置文件。如果系统没有正确初始化或存储器配置不正确,那么,即使主程序正确,系统也不能正确运行。DSP包含很多存储器映射的CPU寄存器和外设寄存器,在编程时经常要对它们进行配置,因此需先编写一个头文件,把这些寄存器的名称和数据存储空间对应起来,然后再使用。退出第六章TMS320LF240x应用实例6.1.2参考程序1.头文件F2407REGS.H参见附录C。2.汇编语言文件(.ASM).include“F2407REGS.H”;引用头文件.def_c_int0.data;定义程序的数据段input_temp.word00h;输入暂存寄存器output_flag.word00h;按键值暂存寄存器1flag_temp.word00h;按键值暂存寄存器2io_decode_flag.word00h;输出译码暂存寄存器退出第六章TMS320LF240x应用实例;(1)主程序.text;定义程序段_c_int0:NOPCALLsystem_init;调系统初始化程序CALLioport_init;调I/O口初始化程序NOPDecode_3_8_loop:CALLread_button;调按键读入程序LDP#4;DP指针指向数据存储B0区SPLK#0001h,io_decode_flag;给输出译码赋初值,;表示DS0亮LToutput_flag;output_flag中的值加载到TREG中LACTio_decode_flag;io_decode_flag中的值左移SACLio_decode_flag;左移的位数由TREG中的低4位决定LDP#DP_PF2;DP指针指向7080h-70FFh退出第六章TMS320LF240x应用实例LACLPCDATDIR;PCDATDIR中值加载到ACCOR#04040h;IOPC6设置为输出方式,输出值为高电平SACLPCDATDIR;IOPC6输出高电平,使74HC547的CLK为高LDP#4;DP指针指向数据存储B0区(200h-27Fh)LACLio_decode_flag;io_decode_flag的值加到ACCLDP#DP_PF2;DP指针指向7080h-70FFhSACLPBDATDIR;通过IOPB0-7送出译码控制信号LACLPCDATDIR;PCDATDIR中值加载到ACCAND#0FFBFh;保持IOPC6为输出方式,输出低电平,;关闭74HC574SACLPCDATDIRCALLcy_delay;调延时程序LDP#4;DP指针指向数据存储B0区(200h-27Fh)SPLK#0h,io_decode_flag;对程序中的各种变量均清零SPLK#0h,output_flag;用来保证本次结果不会影响;到下次操作退出第六章TMS320LF240x应用实例SPLK#0h,flag_tempSPLK#0h,input_flagNOPBdecode_3_8_loop;返回到程序主体;(2)系统初始化程序system_init:SETCINTM;禁止中断CLRCOVM;ACC中的结果正常溢出CLRCSXM;抑制符号扩展CLRCCNF;B0区被配置为数据空间LDP#DP_PF1;DP指针指向7000h-707FhSPLK#081FEh,SCSR1;CLKOUT输出CPU时钟,PLL=4SPLK#0E8h,WDCR;WDCR[6]置1,表示禁止看门狗,;WDCR[3-5]=101LDP#0;DP指向数据存储器的页0(0000h-007Fh)SPLK#0000h,IMR;屏蔽所有的CPU中断退出第六章TMS320LF240x应用实例SPLK#0FFFFh,IFR;清除所有的CPU中断RET;(3)I/O端口初始化程序ioport_init:LDP#DP_PF2;DP指向7080h-70FFhLACLMCRA;IOPB0-7配置为通用I/O口AND#00FFhSACLMCRALACLMCRB;IOPC6配置为通用I/O口AND#0FFBFhSACLMCRBLACLMCRC;IOPE1-3配置为通用I/O口AND#0FFF1hSACLMCRCLACLPBDATDIR;IOPB0-7配置为输出方式退出第六章TMS320LF240x应用实例OR#0FF00hSACLPBDATDIRLACLPCDATDIR;IOPC6配置为输出方式OR#04000hSACLPCDATDIRLACLPEDATDIR;IOPE1-3配置为输入方式AND#0F1FFhSACLPEDATDIRRET;(4)读按键程序read_button:CALLcy_read;第一次读输入按键值LDP#4;DP指向数据存储器B0区LACLoutput_flag;第一次读的按键值存入flag_tempSACLflag_temp;用来和第二次读的按键值相比较CALLcy_delay;延迟50ms,用于消除按键抖动退出第六章TMS320LF240x应用实例CALLcy_read;第二次读输入按键的状态LDP#4LACLoutput_flagSUBflag_temp;第二次读按键值和第一次相比较BCNDright_read,EQ;两者相等转到right_readSPLK#0,output_flag;若两次不等,需重新读取,;同时把output_flag清0right_read:NOPRETcy_read:LDP#DP_PF2;DP指向7080h-70FFhLACLPEDATDIR;PEDATDIR加载到ACC,读IOPE1-3SFR;ACC右移1位,即移到;PEDATDIF[3-1]到PEDATDIR[2-0]退出第六章TMS320LF240x应用实例AND#0007h;提取PEDATDIR[2~0]LDP#4SACLinput_temp;PEDATDIR[2~0]存到input_tempLACL#7;无按键按下时,IOPE1~3为高电平SUBinput_temp;减PEDATDIR[2~0],以得相应的译码值SACLoutput_flag;译码值存到output_flagRETCy_delay:LACL#2400;本例采用6MHz时钟,PLL=4,故系统时;钟为24MHzCy_delay1:;此处采用循环等待的方法实现延时SUB#1;2400×500/(24×103)=50msRPT#499;循环500次NOPBCNDcy_delay1,NEQ;ACC不为0时返回cy_delay1RET.END退出第六章TMS320LF240x应用实例MEMORY;声明可以被使用的存储器范围{PAGE0:;程序空间VECS:origin=0000h,length=0040h;中断向量存储空间PVECS:origin=0044h,length=0100h;外设中断子向量PM:origin=0150h,length=7EB0h;片内Flash存储空间PAGE1:;数据空间BLOCK_B2:origin=0060h,length=0020h;块B2BLOCK_B0:origin=0200h,length=0100h;块B0,若CNF=0,;则配为DARAMBLOCK_B1:origin=0300h,length=0100h;块B1,若正确配;置SCSR2,则为数据空间中2K的SARAMSARAM:origin=0800h,length=0800hEX_DM:origin=8000h,length=8000h;片外数据RAM}3.系统配置命令文件(.CMD)退出第六章TMS320LF240x应用实例SECTIONS;描述在存储器上如何分配程序和数据段{.text:{}PMPAGE0;程序段.data:{}BLOCK_B0PAGE1;数据段}退出第六章TMS320LF240x应用实例6.1.3注意问题1.TMS320LF2407A芯片内涉及的寄存器较多,对片内各个寄存器的定义很重要。编写程序时,一定要通过.include汇编伪指令把头文件F2407REGS.H包括进来。2.用汇编语言编写程序时也要注意模块化的设计方法,以使程序结构清晰、便于理解。对于各个已编写好的子程序,可在主程序中通过CALL等调用汇编指令来调用。3.编写系统程序时,要注重系统初始化程序的编写,否则程序运行时将会得到不可预测的结果。虽然各个系统程序的初始化不尽相同,但也有一定的规律可遵循,在具体编写时应根据系统的具体要求来进行。4.为保证输出信号在规定的时间内能保持稳定,一般需设置锁存器。退出第六章TMS320LF240x应用实例5.对于某些需按键输入的电路,要注意按键抖动的消除。6.一个DSP程序离不开系统配置命令文件.CMD,该文件实现对程序存储空间和数据存储空间的分配。由于DSP的程序空间和数据空间是分开的,因此在PAGE0和PAGE1中的地址可以重叠,但在物理存储器上一定要分离,在同一页存储空间上地址不能重叠。退出第六章TMS320LF240x应用实例6.2数字PID控制器PID控制技术是一种最成熟的控制方法,广泛应用于过程控制、运动控制、速度伺服控制及位置控制等系统中。PID控制原理简单、实现方便,并且适应性广、鲁棒性强,其控制品质对被控对象的特性不是很敏感。随着计算机技术的发展,在PID基础上,出现了很多改进的数字PID控制方法,对于数字PID控制方法,又分为增量式PID控制算式和位置式PID控制算式。本例将利用TMS320LF2407和外接的D/A转换芯片实现数字PID控制,采用增量式PID算法。在DSP内部设置参考输入量,通过DSP内的ADC,

1 / 47
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功