DSP技术及应用
实验报告
学 院:
班 级:
姓 名:
学 号:
指导老师:
完成日期:
CODEC(模数/数模转换)
一、实验目的
1. 熟悉DSK板的结构和设置(DSK板注意事项在第2页);
2. 掌握利用CODEC进行AD/DA转换;
3. 熟悉McBSP, DMA的使用;
4. 掌握C和汇编混合编程封装具体实现。
二、实验设备
1.集成开发环境CCS
2.5402DSK实验板
3. 实验代码:
a). 混合编程:codec_c.h(.h、.h54均由程序自动加载,可不加,后同), dsp_cnst.h54, codec.s54, codec_c.c, rts.lib和codec_c.cmd,c5402_dsk.gel(同上用来做gel初始设置, c5402_dsk.gel与 c5402.gel稍有区别,注意比较其中的异同)。
b). 汇编(时间多的同学做):codec_cnst.h54, dsp_cnst.h54, macro.h54, codec_init.s54, dsp_init.s54, main.s54和codec.cmd,c5402_dsk.gel(说明同前)。
三、实验内容及步骤
1. 阅读理解McBSP, CODEC和DMA的相关文档
2. 阅读和理解相关实验代码
3. 本实验由于用到DSK板,环境设置与前不同,要特别注意。打开CCS前,用并口电缆将TMS320VC5402DSK与PC机相连,出现发现硬件提示,安装驱动(驱动程序在D:\DSP\driver5000。一般会要求装3次,2次装USB,driver5000\USBDevice目录,如无则可跳过;1次装driver,即 driver5000中setup.exe,注意driver驱动的安装路径要求与CCS的安装路径一致,故要先找出CCS的安装目录)。
4. 接通DSK板电源,配置工作环境: 双击打开Code Composer (Studio)配置程序,如图:点击“Clear”按钮,清除原有配置。然后,在列表框“Available Configurations”中加亮“ICETEK-5100 USB Emulator”选项。如图中圆圈所示:,点击对话框中的“Import”按钮,然后点击“Save and Quit”按钮,退出并确认同时打开CCS主程序。
5. 建立项目,添加代码,编译并连接,各事项如下:
a) 混合编程中改设置:Build option子菜单linker中Basic项Autoinit Model 改为Load-time Initialization或Run-time Initialization。用No Initialization编译不过,有1 Errors, 1 Warnings。为:
error: symbol referencing errors
undefined first referenced
symbol in file
pinit D:\Program Files\TI\myprojects\..\lab56\51_codec\C\rts.lib
cinit D:\Program Files\TI\myprojects\..\lab56\51_codec\C\rts.lib
warning:
"codec_c.c", line 63: warning: statement is unreachable
修改后只有1 Warnings,同上,但是可以做出实验结果。
b) 汇编编程中: Build option子菜单linker中Basic项Autoinit Model 则可用No Initialization,用load-time Initialization或Run-time Initialization将有1 Warnings,为:warning: entry point other than _c_int00 specified,都可做出实验结果。
6. Build得到.out程序,然后加载程序并调试。
7. 输入声音信号或自己的语音并听取DA端输出。
四、实验结果和提示
1. DSK实验板上有两块CODEC(编译码器)芯片,一块与DAA口相联,另一块与音频模块相联。5402有两个McBSP口,在DSK板上的缺省设置为McBSP0的信号源为DAA,McBSP1的信号源为音频模块。如果想更改缺省设置必须写相应的CPLD寄存器,具体情况请参考《数字信号处理器开发实践》4.2.3节。本实验中使用了音频模块作为输入输出端口,因此实验中使用的是相应的CODEC及McBSP1口。
2. 使用CODEC必须设置相应的控制寄存器,实验使用的TLC320AD50C共有7个寄存器,其中4个为控制寄存器,要写这些控制寄存器必须将CODEC切换到第二串行通信方式,切换方式有两种:硬件方式和软件方式。本实验采用了硬件方式,这样必须将FC在FS的上跳沿前拉高,然后CODEC会在128个SCLK后切换到第二串行通信,然后就可以向CODEC发送控制字。具体可参阅《数字信号处理器开发实践》5.1.2及5.1.3节。
3. 要设置CODEC必须通过McBSP1口发送数据,为使McBSP1口正常工作要设置相应的控制寄存器,McBSP1的15个控制寄存器采用同址访问的方式进行访问,将要访问的寄存器的子地址写入子地址寄存器SPSA1后再访问同一个数据寄存器即可。具体控制寄存器的设置请参阅《数字信号处理系统的应用和设计》5.4.2节。要注意的是由于板上McBSP1口与CODEC相联时FS, CLK信号均由CODEC驱动,所以相应的管脚必须设置为输入脚并置好对应的标志位,可以参考实验代码中的寄存器参数注释。
4. 音频信号经CODEC采集后通过McBSP再由DMA通道送往数据区缓冲区,这样可以在不影响CPU的情况下完成数据的传输。5402的DMA共有6个通道,每个通道有5个独立的控制寄存器,此外还共享10个全局寄存器。由于全局寄存器中有四个重载寄存器,可以对1个通道实现自动初始化,这样可以很方便的对输入(或输出)信号进行连续传输。由于输入输出必须占用两个DMA通道,这样就必须对另一个通道手动重载,这些在中断中完成。由于5402中断资源有限,DMA中断是与其他外设中断复用的,这个通过DMPREC寄存器中的中断复用位进行设置。对以上这40个寄存器的访问也采用与McBSP相同的同址访问方式。具体设置请参阅《数字信号处理系统的应用和设计》5.5.2节和实验代码中的寄存器参数注释。
5. 要实现数据连续的数据采集和发送必须在数据缓冲区开辟两块区域交替使用,为了辨别使用哪块区域要设置一个相应标志位,这就是常用的乒乓法。在DMA中断处理程序中要根据此标志位更新缓冲区地址。
6. 数据输入的DMA通道中断后必须对输入数据进行处理,然后送入输出缓冲区,这就要在中断中设置一个中断标志位,然后在主程序中查询此标志位判断是否要进行数据处理。本实验中没有对数据进行任何处理直接送入输出缓冲区,但是可以很方便地加入各种信号处理代码。
7. 将汇编程序分模块封装成C函数后可以使整个流程简洁明了,一目了然。同时留下的接口可以让用户很方便地对CODEC进行设置并加入自己想要采用的信号处理代码。在混合编程中要注意的是函数名和变量在C和汇编中的命名规则;C语言接口的汇编函数可以自由使用的寄存器和使用前必须先保存的寄存器;C语言中的状态标志位缺省值以及C语言和汇编的相互调用通过堆栈来进行参数和返回值的传递,同时通过堆栈可以方便的实现局部数据的使用。具体情况可以参阅《数字信号处理系统的应用和设计》7.1节。
五、实验思考题:
1、整个语言程序是如何实现的?
答:整个语言程序由主程序和子程序构成,主函数中由亮灯程序、延时程序、初始化程序、CODEC程序等,子函数中是各函数的定义,还有中断函数。音频信号经CODEC采集后通过McBSP再由DMA通道送往数据区缓冲区,CODEC 中的A/D 出来的语音采样数据由串行口ISR (中断服务控制) 通过DSS_ rxP ipe
触发软件中断, 在这里语音采样数据被编码存储, 然后再被解码通过DSS_ txP ipe 发送至串行口ISR , 经由CODEC 中的D/A 可以播放出来。
2、语言程序由哪个模块组成?
答:语言程序由语音模块组成,进行语音信号的处理。
3、如果要对语音进行处理的话,可以在哪个地方添加处理程序?
答:在_enable_codec:函数中可以添加处理程序,如图所示:
4、比较C5402.gel和CS402_dsk.gel的区别?
答:
在C5402.gel文件中;
在CS402_dsk.gel文件中;
由上两图可知:两个gel文件中SWWSR中地址不同,还有在在CS402_dsk.gel文件中添加了语句SWWSR = SWWSR_VAL。
六:实验心得
这个实验碰到了点麻烦 下次还是要耐心一点的好
第二篇:DSP实习报告
DSP实习报告
课题名称: DSP应用技术
学 院:电气信息工程学院
专 业: 自动化11-1
姓 名: xxxxxxxx
班级学号: 0 0
指导教师: 吴 勇
实验日期:2014.12.22--2017.12.26
目录
一 、开发板调试.............................................................................. 3
1.1实习目的............................................................................................................ 3
1.2实习要求............................................................................................................ 3
1.3实习内容............................................................................................................ 3
1.3.1 CPU 定时器0实验...................................................................................................................... 3
1.3.2 CPU 定时器2实验...................................................................................................................... 4
1.3.3 EVtime1 实验................................................................................................................................ 5
1.3.4数码管显示实验............................................................................................................................ 9
1.3.5外部RAM实验........................................................................................................................... 11
1.3.6外部Flash读写实验................................................................................................................... 12
1.3.7直流电机控制实验...................................................................................................................... 14
二 、基于DSP的直流电动机的闭环调速的系统设计.............. 16
2.1 硬件设计......................................................................................................... 16
2.1.1系统硬件设计总体框图................................................................................ 16
2.1.2 主电路......................................................................................................... 17
2.1.3 驱动电路...................................................................................................... 17
2.1.4 电流电压采样电路....................................................................................... 18
2.1.5 电动机转速检测电路................................................................................... 18
2.1.6 控制电路...................................................................................................... 21
2.1.7 保护电路...................................................................................................... 22
2.1.8 显示电路...................................................................................................... 22
三、总结.......................................................................................... 23
3.1 实习心得......................................................................................................... 23
四、参考文献
一 、开发板调试
1.1实习目的
1)学习DSP内部定时器0、定时器2的使用
2)掌握DSP的SPI工作原理
3)理解DSP控制步进电机原理
1.2实习要求
1)通过使用DSP内部的定时器0来实现对LED灯的控制实现LED灯循环闪烁
2):QQ2812通过SPI接口控制LED数码管实现数码管从0~F循环显示
3)由DSP输出的PWM3~6做为步进电机的4个信号线输入完成DSP控制步进电机
1.3实习内容
1.3.1 CPU 定时器0实验
#include "DSP28_Device.h" //8个LED灯的地址,由CPLD得知
unsigned int * Led8 = (unsigned int *) 0x4100;
unsigned int LedCount;
Uint16 LedCode[]={0xfe,0xfd,0xfc,0xf7}; 左四循环右四灭
//定时器0中断函数,这里我们是另外写了,大家也可以把他直接放在#include "DSP28_Device.h"中.
interrupt void ISRTimer0(void);
void main(void)
{
/*初始化系统*/
InitSysCtrl();
/*关中断*/
DINT;
IER = 0x0000;
IFR = 0x0000; //清中断
LedCount = 0;
/*初始化PIE*/
InitPieCtrl();
/*初始化PIE中断矢量表*/
InitPieVectTable();
/*初始化定时器0*/
InitCpuTimers();
/*初始化外设*/
InitPeripherals();
/*受EALLOW保护的定时器0中断矢量*/
EALLOW; //允许访问EALLOW保护的寄存器
PieVectTable.TINT0 = &ISRTimer0;//指向中断服务寄存器定时器0的地址
EDIS; //重新EALLOW保护
/*设置CPU,配置定时器0多长时间中断一次,这里的配置可参见课本P61*/
ConfigCpuTimer(&CpuTimer0, 10, 1000000);
CpuTimer0Regs.TCR.bit.TSS = 0; ///开启CPU定时器0
//StartCpuTimer0();
/*开中断,查看中断向量表可知CPU定时器0位于INT1.7,见课本P82*/
IER |= M_INT1;
PieCtrl.PIEIER1.bit.INTx7=1;
EINT; // 开放全局中断,Enable Global interrupt INTM
ERTM; // 开放全局实时中断,Enable Global realtime interrupt DBGM
for(;;);
}
interrupt void ISRTimer0(void)
{
//响应中断寄存器清除,写1清0,进而才能接收下一外围中断
PieCtrl.PIEACK.bit.ACK7=1;
//向CPLD控制的LED灯地址写数据,进而实现对灯的控制
*Led8 = LedCode[LedCount]; LedCount++;
if (LedCount>=6) LedCount=0;
}
1.3.2 CPU 定时器2实验 奇亮偶灭
#include "DSP28_Device.h"
unsigned int * Led8 = (unsigned int *) 0x4100;//二极管地址,由CPLD提供
unsigned int Led_Flag; //二极管全亮,全灭标志位
interrupt void ISRTimer2(void); //中断服务寄存器定时器2函数
void main(void)
{
/*初始化系统*/
InitSysCtrl();
/*关中断*/
DINT;
IER = 0x0000;
IFR = 0x0000;
Led_Flag = 0;
/*初始化PIE*/
InitPieCtrl();
/*初始化PIE中断矢量表*/
InitPieVectTable();
/*初始化外设*/
InitPeripherals();
EALLOW;
PieVectTable.TINT2 = &ISRTimer2;
EDIS;
/*设置CPU*/
ConfigCpuTimer(&CpuTimer2, 50, 1000000);
CpuTimer2Regs.TCR.bit.TSS = 0; //启动定时器2
///StartCpuTimer2();
/*开中断*/
IER |= M_INT14; //内部定时器在PIE分组中位于14
EINT; // Enable Global interrupt INTM
ERTM; // Enable Global realtime interrupt DBGM
for(;;);
}
interrupt void ISRTimer2(void)
{
CpuTimer2.InterruptCount++; //中断计数
if(Led_Flag == 1)
{
*Led8 = 0x55; //全亮
Led_Flag = 0;
}
else
{
*Led8 = 0xaa; //全灭
Led_Flag = 1;
}
}
1.3.3 EVtime1 实验
实验目的:了解事件管理器的定时器的应用,大家在学习时要结合第四章的事件管理器来进行 实验说明:这里我们只使用了EvaTimer1来控制LED灯的亮灭,你在学习中可通过它来了解
EV的定时器工作原理,对以后做电机之类的控制时可以引用部分函数
实验结果:可看到板上8个发光二极管产生左2灭右2亮中间4循环的效果
1.3.4数码管显示实验
实验目的:通过学习本实验来掌握DSP的SPI工作原理 **
实验说明:QQ2812通过SPI接口控制LED数码管SPI是一高速同步的串行输入输出口,它的通信速率和通信数据长度都是可编程的,可以接收和发送16位的数据位,并且带有双缓冲的.SPI的4个外部引脚由:从输出主输入(SPISOMI),从输入主输出(SPISIMO),从发送使能(/SPISTE),串行时钟引脚(SPICLK)组成。主要硬件部分:DSP,CPLD,74HC595(串入并出的移位器)共阳数码管。SPIMOSI和SPICLK直接从DSPJIE接到了74HC595的 **
SER和SRCLK,作为数据和时钟信号的输入,SPICS由CPLD引出来控制74HC595的选通。 实验结果:可看到数码管从0~F循环显示
#include "DSP28_Device.h"
void WriteLED(unsigned char data); //送给数码管的数据函数
//void delay(unsigned long t);
unsigned int * SPI_CS = (unsigned int *) 0x4500; //0X4500是CPLD的SPICS地址
unsigned long int a;
Uint16 SpiCode[]={0x2222,0xe0e0,0xb1b1,0x6868,0xa1a1,0xa3a3,0xffff};
//数码管的笔画对应关系如下:
// 6
// 3 7
// 4
// 2 0
// 1 5
//就是说0~7分别对应笔画的a~h,在原理图看就是分别连接的Q0~Q7
//这个数码管的型号是LG3611BH,是共阳级的,也就是说某个笔画为0的时候,
//这个笔画被点亮。
//我们以 "1",0x7E7E为例说明
//7E的二进制是01111110,对应点亮的就是Q0和Q7,也就是'1'了。
//其他的自己拿笔画一下就清楚了。
void main(void)
{ int k;
/*初始化系统*/
InitSysCtrl();
/* 关中断 */
DINT;
IER = 0x0000;
IFR = 0x0000;
/* 初始化PIE控制寄存器 */
InitPieCtrl();
/* 初始化PIE参数表 */
InitPieVectTable();
/* 初始化外设寄存器 */
InitPeripherals();
/*设置CPU*/
EINT; // Enable Global interrupt INTM
ERTM; // Enable Global realtime interrupt DBGM
*SPI_CS=0x00; //写0,低电平选中
for(;;)
{
for(k=0;k<17;k++) //循环发送16个数据
{WriteLED(SpiCode[k]); //发送数据函数
for(a=0;a<500000;a++);
}
}
}
void WriteLED(unsigned char data)
{
if(Spi_TxReady() == 1) //当检测到SPI发送准备信号致1时,开始发送数据
SpiaRegs.SPITXBUF = data; //把数据写如SPI发送缓冲区
while( Spi_TxReady()!=1); //没检测到发送准备信号
*SPI_CS=0x01; //关片选
*SPI_CS=0x00; //退出时开片选
}
/*void delay(unsigned long t)
{
while(t>0)
t--;
}*/
1.3.5 外部RAM实验
实验目的:通过学习DSP与外部RAM的读写数据
实验说明:能够为以后写比较大的程序时,在仿真运行时内部RAM不够用时,可利用外部RAM来进行,当然这需要.CMD文件来配置
实验结果:在指定位置设置断点后可观察通过函数来写到地址里面的值
#include "DSP28_Device.h"
#include "ext_inf.h"
void main(void)
{
/*初始化系统*/
InitSysCtrl();
/*关中断*/
DINT;
IER = 0x0000;
IFR = 0x0000;
/*初始化PIE*/
InitPieCtrl();
/*初始化PIE中断矢量表*/
InitPieVectTable();
InitExRam(0); //以下任一行停下后观察内存地址的值
RamRead(0x4000);//这里设置断点可查看到外部RAM中写入我们的数据
InitExRam1(0x0);
for(;;); //这里设置断点可查看到外部RAM里面全部清0
}
1.3.7 直流电机控制实验
实验目的:通过学习直流电机实验,了解PWM波如何配置,来控制电机的转动。大家在学习时还是要在去熟悉下我们课本的事件管理器那一章,对其寄存器有个了解,好再去看程序,就都明白了
实验说明:因为直流电机就两根线,我们取了DSP的PWM1和PWM2来进行控制,然后经过了两级放大输出。
实验结果:运行程序可看到电机在转动,若要改变电机转速或转向,可在DSP28_EV.c文件里按相应注释修改,即实现PWM波来控制电机
void InitEv(void)
{
EvaRegs.ACTR.all = 0x0006; ///通过对比较方式控制寄存器的配置,得PWM2低有效,PWM1高有效,改变设置可使电机反转
EvaRegs.DBTCONA.all = 0x0530;///使能死区定时器,分频45/16=2.8125M,死区时间5*0.356us=1.78us
EvaRegs.COMCONA.all = 0xa600; ///比较器控制A
EvaRegs.T1PR =5000; ////定时器1周期值0.356us*N
EvaRegs.T1CMPR =2500; ///定时器1比较值,没什么用,没用这种方式
EvaRegs.T1CNT = 0; ///定时器1初值设为0
EvaRegs.T1CON.all = 0x144E; ///连续增模式,TPS系数45M/2/16,T1使能
/*
EvaRegs.T2PR = 5000; ////定时器2周期值0.356us*N
EvaRegs.T2CMPR =4000; ///定时器2比较值
EvaRegs.T2CNT = 0; ///定时器2初值设为0
EvaRegs.T2CON.all = 0x144E; ///连续增模式,TPS系数45M/2/16,T2使能
EvaRegs.GPTCONA.bit.TCOMPOE=1;
EvaRegs.GPTCONA.bit.T1PIN=1;
EvaRegs.GPTCONA.bit.T2PIN=2;
*/
EvaRegs.CMPR1=500;// 占空比越小,转得越快
//EvaRegs.CMPR2=2000;
//EvaRegs.CMPR3=3000;
}
二、基于DSP的直流电动机的闭环调速的系统设计
2.1 硬件设计
2.1.1系统硬件设计总体框图
该设计包含DSP控制单元、功率驱动单元、检测单元、显示单元、通信单元五个部分。
DSP控制单元:对来自上位机的给定信号和来自传感器的反馈信号按一定的算法进行处理,输出相应的PWM波,经过光电隔离部分,送给功率驱动单元;
功率驱动单元:对来自DSP控制器的PWM信号进行功率放大后送给直流电动机的电枢两端,驱动电机与负载;
速度检测单元:采集电机的速度信息,并送给主控制器;
显示单元:将采集到的电机转速信息予以显示;
通信单元:负责主控制器与上位机及外设的信息交换。
2.1.2 主电路
2.1.3 驱动电路
本设计的功率驱动电路采用的是基于双极型H桥型脉宽调制方式(PWM)的集成电路L298N[14]。L298N是SGS公司的产品,内部包含二个H桥的高电压大电流桥式驱动器,接收标准TTL逻辑电平信号,可驱动46伏、2安培以下的电机,工作温度范围从零下25°到130°。表3-1是其使能引脚,输入引脚和输出引脚之间的逻辑关系。EnA是控制使能端,控制OUT1和OUT2之间电机的停转, IN1、IN2脚接入控制电平,控制OUT1和OUT2之间电机的转向。当使能端EnA为高,IN1为高电平IN2为低电平时,电机正转;反之电机则反转。当IN1和IN2电平相同时,电机停转。
表L298N功能逻辑表
图中的EnA(PWM)输入对应LF2407上的IOPA6引脚,IN1和IN2分别对应LF2407上的IOPF3和IOPF4引脚。接口电路如图3-3所示。图中二极管的作用是消除电机的反向电动势,保护电路,因此采用整流二极管比较合适。
需要注意的是,三个引脚信号都应通过光电隔离的变换后再作用于L298N,目的是为了防止因电机启动停止瞬间产生的尖峰脉冲对主控制器的影响。本设计中的光电隔离采用的是高速光耦6N137,信号经过6N137的隔离后不改变逻辑状态。
当电机要求正转时,IOPF3给出高电平信号,IOPF4给出低电平信号,此时IOPA6的逻辑信号就决定了电机正转的速度,也就是说DSP产生的PWM信号的占空比决定了电机两端电枢电压的大小,从而实现电机调速。
同样,当电机要求反转时,IOPF3给出低电平信号,IOPF4给出高电平信号。
2.1.4 电流电压采样电路
电压检测电路
电流检测电路
2.1.5 电动机转速检测电路
电机测速模型如图1-5.1,将栅格圆盘变化通过光电发射器和接收器以及外围转换电路的作用送给DSP通过数学运算得到电机的转速。
图1-5.1 电机测速模型
光电对管产生的脉冲在经过施密特触发器SN74LS14后送入LF2407的捕获单元,捕获单元可以记录在某个时间段内捕获到的脉冲数,从而计算出电机的转速。具体的接口电路如图1-5.2所示。
图1-5.2 速度检测电路
需要注意的是,光电对管出来的信号一般为+5V的方波信号,为此需要经过一个电平转换芯片SN74LVC245隔离才能与LF2407的CAP电路进行相连。电路如图1-5.3所示。
图1-5.4 电平转换电路
主电路
键盘电路
2.1.6 控制电路
直流电动机转速n的表达式为:
(3-1)
公式(3-1)中,U为电枢端电压;I为电枢电流;R为电枢电路总电阻;Φ中为每极磁通量;K为电动机结构参数。
所以直流电动机的转速控制方法可分为两类:对励磁磁通进行控制的励磁控制法和对电枢电压进行控制的电枢控制法。其中励磁控制法在低速时受磁极饱和的限制,在高速时受换向火花和换向器结构强度的限制,并且励磁线圈电感较大,动态响应较差,所以这种控制方法用得很少。现在,大多数应用场合都使用电枢控制法。绝大多数直流电机采用开关驱动方式。开关驱动方式是使半导体功率器件工作在开关状态,通过脉宽调制PWM来控制电动机电枢电压,实现调速[2]。
PWM调速控制原理图和电压波形
图3-2是利用开关管对直流电动机进行PWM调速控制的原理图和输入输出电压波形。图中,当开关管MOSFET的栅极输入高电平时,开关管导通,直流电动机电枢绕组两端有电压。t1秒后,栅极输入变为低电平,开关管截止,电动机电枢两端电压为0。t2秒后,栅极输入重新变为高电平,开关管的动作重复前面的过程。这样,对应着输入的电平高低,直流电动机电枢绕组两端的电压波形如图中所示。电动机的电枢绕组两端的电压平均值为:
(3-2)
公式(3-2)中为占空比,=。占空比表示了在一个周期T里,开关管导通的时间与周期的比值。如,一个PWM的频率是1000Hz,那么它的时钟周期就是1ms,就是1000us,如果高电平出现的时间是200us,那么低电平的时间肯定是800us,那么占空比就是200:1000,也就是说PWM的占空比就是1:5。占空比的变化范围为0l。由此式可知,当电源电压不变的情况下,电枢的端电压的平均值取决于占空比的大小,改变值就可以改变端电压的平均值,从而达到调速的目的,这就是PWM调速原理。
2.1.7 保护电路
为了实时地监控下位机的工作状态,本设计还建立了上位机与下位机通信的电路模块[1]。利用TMS320LF2407的串行通信接口与RS-232串行口进行DSP与PC机之间的异步通信。上位机PC都带有RS-232接口,所以可以利用上位机(PC)的串行口与下位机(DSP)进行通信,进行上位机与下位机之间的数据交换,有效的实现监控。由于上位机的RS-232C电平与下位机的TTL电平不一致,本设计中利用电平转换芯片MAX232进行串行通信,另外,由于本设计中的TMS320LF2407属于低功耗芯片,它采用+3.3V供电。所以在MAX232与TMS320LF2407之间也需进行电平转换。接口电路如下图所示。
通信单元接口电路
2.1.8 显示电路
1602的V0口外接一个10K的电位器,用以调节液晶显示器的对比度,接正电源时对比度最弱,接地电源时对比度最高;RS为寄存器选择,高电平1时选择数据寄存器、低电平0时选择指令寄存器,与芯片的IOPA3口连接;R/W为读写信号线,高电平进行读操作,低电平进行写操作,与芯片的IOPA4口连接;E为使能端,下降沿使能,和芯片的IOPA5口连接。数据端和LF2407的IOPC口连接。具体电路连接如图3-9所示。
液晶显示接口电路
主程序主要完成系统和各子程序的初始化,并启动系统定时器,进入循环体,并定时进行按键中断扫描和调用显示子程序[16]。主程序流程图如图所示。
主程序流程图
三、总结
3.1 实习心得
通过为期一周的实习,使自己对DSP与CCS及有了更加深入的理解。 一周的时间转眼之间就已经流逝而去,在这一周的DSP实习中,遇到了很多问题,也从中学习到了很多东西。之前上课的时候,总是对一些东西理解不是很深刻。通过实习,自己亲自动手做了硬件,编写了程序,知道了一些上课时没弄明白的原理,再次验证了工科离不开实践。在下载程序的时候,我的开发板有时候程序就下不进去,时刻很久都不行,最后老师让我用重启软件进行下载。
此次实习,老师安排了很多的小实验,让我们循序渐进,不至于太陌生,老师能安排我们做这个,真的很感激。虽然本次课程设计是要求自己独立完成,但是,彼此还是脱离不了集体的力量,遇到问题和同学互相讨论交流,也在老师的帮助下完美的完成。再这次的 DSP 实训里老师对我们要求了很多,比如在写程序中要求我们把图看清楚理清思路,最好把顺序指令先写出来再作图等等一些要求跟技巧。而 DSP 控制系统的可能影响到企业的安全生产与经济运行。因此在使用 DSP 时必须综合考虑各方面的因素,来保证DSP控制系统正常工作,保证工业设备安全高效运行。
最后,真心感谢老师一周内的耐心教导与指点,让我们学到知识的同时,也了解了 DSP 更多的知识,我想,之后我一定会继续好好学 DSP 的。
四:参考文献
《TMS320F281XDSP原理及应用技术程》 韩丰田 编 清华大学业社
《基于DSP的直流电机数字调速系统设计》曹太强等编 电力电子技术