DSP实验报告最终版.docx
- 文档编号:2440468
- 上传时间:2023-05-03
- 格式:DOCX
- 页数:21
- 大小:38.11KB
DSP实验报告最终版.docx
《DSP实验报告最终版.docx》由会员分享,可在线阅读,更多相关《DSP实验报告最终版.docx(21页珍藏版)》请在冰点文库上搜索。
DSP实验报告最终版
DSP实验报告
小组成员
一、实验说明:
为了保证生产质量、生产效率和生产的安全性,在钢铁企业的定期常规设备检修必不可少,在设备检修的过程中,为了保证检修人员的人身安全和设备的安全,通常需设置检修报警提示,如:
检修警报、检修指示灯等。
本次实验设计钢铁企业的滚带传送装置的检修控制系统,需要检修时,首先停止传动皮带的工作,切换到检修警报,检修警报开始工作以保证检修人员和设备的安全。
当检修工作完成后,停止警报装置,返回传动电机的正常工作状态。
用实验箱上的小键盘来模拟控制台,当按1键时,直流电机(机器)正常运转,按2键进入检修模式,进入检修模式时LED灯闪烁,蜂鸣器鸣响,检修完毕后,按1键启动电机,进入正常生产工作状态。
按3至6键可调整电机转速。
本实验将若干个DSP独立的实验集成为DSP综合实验系统。
其内容主要包括:
实验一:
直流电机实验。
控制直流电机的工作状态,旋转方向以及工作速率。
实验二:
交通指示实验;使其循环闪烁,达到警示的目的。
实验三:
音频信号发生实验。
当按下2键,交通灯循环闪烁并且蜂鸣器响起。
如图1所示。
DSP综合实验
直流电机试验
交通灯实验
音频信号发生实验
图1DSP综合实验组成图
二、试验原理及步骤:
本试验用到的试验箱中设备有:
直流电机(DCMOTOR),键盘,蜂鸣器,矩阵led灯。
1、实验步骤
1)将试验箱硬件连线连接好,打开电源和计算机
2)设置CCS软件,点击debug—connect将试验箱和CCS软件连接。
3)右键单击project添加本实验程序,编译,将对应文件夹的*.out文件下载,点击debug-run运行程序。
·按键盘“1”键,进入直流电机程序,按键盘“3-6”键可以改变直流电机转速,按“7”或“8”键改变电机旋转方向。
·按键盘“2”键,交通灯闪烁,蜂鸣器响起,同时电机停止转动
·按键盘“9”键,退出程序。
2、实验原理
1.键盘扫描原理:
矩阵式键盘中,行、列线分别连接到按键开关的两端,行线通过上拉电阻接到电源上。
当无键按下时,行线处于高电平状态;当有键按下时,行、列线将导通,此时,行线电平将由与此行线相连的列线电平决定。
这一点是识别矩阵按键是否被按下的关键。
然而,矩阵键盘中的行线、列线和多个键相连,各按键按下与否均影响该键所在行线和列线的电平,各按键间将相互影响,因此,必须将行线、列线信号配合起来作适当处理,才能确定闭合键的位置。
键盘的扫描码由DSP得CTRKEY给出,当有键盘输入时,读此端口得到扫描码,当无键按下时,读此端口的结果为0。
CTRCLKEY。
读取的方法如下:
nScanCode=CTRKEY;nnn=CTRCLKEY;//nScanCode中为扫描码
对于高速运行的DSP,在两次读键盘之间可能需要增加延时语句。
键盘连接原理如下:
DATA[7:
0]
ADDRESS[15:
0]
/CS
/RD
UI
数据锁存
串行移位寄存器
地址译码
清除
电平转换
键盘
U2
U3
U4
CLK
DATA
图2键盘连接原理
键盘的扫描码由DSP得扩展地址0x602800给出,当有键盘输入时,读此端口得到扫描码,当无按键按下时读此端口的结果为0。
各按键的扫描码排列如下所示(scancode.h)。
#defineSCANCODE_00x70
#defineSCANCODE_10x69
#defineSCANCODE_20x72
#defineSCANCODE_30x7A
#defineSCANCODE_40x6B
#defineSCANCODE_50x73
#defineSCANCODE_60x74
#defineSCANCODE_70x6C
#defineSCANCODE_80x75
#defineSCANCODE_90x7D
#defineSCANCODE_Del0x49
#defineSCANCODE_Enter0x5A
#defineSCANCODE_Plus0x79
#defineSCANCODE_Minus0x7B
#defineSCANCODE_Mult0x7C
#defineSCANCODE_Divid0x4A
#defineSCANCODE_Num0x77
2.直流电机变速原理:
2.1TM320VC5509DSP的McBSP引脚
通过设置McBSP的工作方式和状态,可以实现将它们当成通用I/O引脚使用。
2.2直流电机控制
本试验采用直流电动机的脉宽调制(PWM)控制方式。
1)PWM调压调速原理
直流电机转速n的表达式为:
其中,U为电枢端电压;I为电枢电流;R为电枢电路总电阻;Φ为每极磁通量;K为电动机结构参数。
所以直流电机的转速控制方法可分为两类:
对励磁磁通进行控制的励磁控制法和对电枢电压进行控制的电枢控制法。
其中励磁控制法在低速时收磁极饱和的限制,在高速时受换向火花和换向器结构强度的限制,并且励磁线圈电感较大,动态响应较差,所以这种控制方法用得很少。
现在,大多数应用场合都使用电枢控制法。
绝大多数直流电机采用开关驱动方式。
开关驱动方式是使半导体功率器件工作在开关状态,通过脉宽调制PWM来控制电动机电枢电压,实现调速。
Vi
Ui
DI
Us
GND
Us
0
t
t
t
Ui
0
Uo
T
图3利用开关管对直流电动机进行PWM调速控制的原理图和输入输出电压波形上图是利用开关管对直流电动机进行PWM调速控制的原理图和输入输出电压波形。
图中,当开关管MOSFET的栅极输入高电平时,开关管导通,直流电动机电枢绕组两端有电压Us,t1秒后,栅极输入变为低电平,开关管截止,电动机电枢两端电压为0。
T2秒后,栅极输入重新变为高电平,开关管的动作重复前面的过程。
这样,对应着输入的高低电平,直流电动机电枢绕组两端的电压波形如图中所示。
电动机的电枢绕组两端的电压平均值Uo为:
式中,a为占空比,a=t1/T
占空比a表示了在一个周期T里,开关管导通的时间与周期的比值。
A的变化范围为0<=a<=1.由此式可知,当电源电压Us不变的情况下,电枢的端电压的平均值Uo取决于占空比a的大小,改变a值就可以改变端电压的平均值,从而达到调速的目的,这就是PWM调速原理。
2)PWM调速方法
在PWM调速时,占空比a是一个重要参数。
以下三种方法都可以改变占空比的值:
(1)定宽调频法:
这种方法是保持t1不变,只改变t2,这样使周期T(或频率)也随之改变。
(2)调宽调频法:
这种方法是保持t2不变,只改变t1,这样使周期T(或频率)也随之改变。
(3)定频调宽法:
这种方法是使周期T(或频率)保持不变。
而改变t1和变t2。
前两种方法由于在调速时改变了控制脉冲的周期(或频率),当控制脉冲的频率与系统的固有频率接近时,将会引起震荡,因此这两种方法用得很少。
目前,在直流电机的控制中,主要使用定频调宽法。
2.3ICETEK-CTR直流电机模块:
1)原理图
ICETEK-CTR即显示控制模块上直流电机部分的原理图见下图。
V3
PWM
DIR
V1
V2
Vi
V4
F1
Y1
Y2
图4ICETEK-CTR直流电机部分原理图
图中PWM输入对应ICETEK-CTR-A板上P4外扩插座第26引脚的S22信号,DSP将在此引脚上给出PWM信号开控制直流电机转速;图中的DIR输入引脚ICETEK-CTR-A板上P4外扩插座第29引脚的S14信号,DSP将在此引脚上给出高电平或低电平来控制直流电机的方向。
从DSP输出的PWM信号和转向信号先经过2个与门和1个非门再与各个开关管的栅极相连。
2)控制原理
当电动机要求正传时,S14给出高电平信号,该信号分为3路:
第1路与门Y1的输出由PWM决定,所以开关管V1栅极受PWM控制;第2路直接与开关管V4的栅极相连,是V4导通;第三路经非门F1连接到与门Y2的输入端,使与门Y2输出为0,这样是开关管V3截止;从非门F1输出的另一路与开关管V2的栅极相连,其低电平信号也是V2截止。
同样,当电动机要求反转使,S14给出低电平信号,经过2个与门和1个非门组成的逻辑电路后,使开关管V3受PWM信号控制,V2导通,V1、V4全部截止。
2.4程序编制
程序中采用定时器中断产生固定频率的PWM波,100次中断为一个周期,在每一个中断中根据当前占空比判断输出波形的高低电平。
主程序用轮询方式读入键盘输入,得到转速和方向控制命令。
在改变电机方向时为减少电压和电流的波动采用先减速再反转的控制顺序。
2.5电机转动试验流程图
初始化:
DSP时钟、EMIF
开始
初始化中断寄存器、定时器
初始化ICETEK-CTR,直流电机使能
初始化McDSP接口(S14,S22输出控制)
键盘检测
改变McDSP引脚S14状态
如输入1-5则根据输入调整占空比
键盘输入“9”?
键盘输入方向?
否
是
是
是
中断服务程序开始
计数器加1,从0-99
比较计数器与占空比的当前值S22引脚的状态
关闭ICETEK-CTR使用设备
退出
中断服务程序结束
图5电机转动试验流程图
3.EMIF接口:
TMS320C5509DSP的扩展存储器接口(EMIF)用来与大多数外围设备进行连接,典型应用如连接片外扩展存储器等。
这一接口提供地址连线、数据连线和一组控制线。
ICETEK-VC5509-A将这些扩展引线到了板上的扩展插座上供扩展使用。
4.蜂鸣器
蜂鸣器由DSP通用I/O管脚输出控制,可将此管脚上的频率输出转换成声音输出。
5509A的通用I/O口S13扩展蜂鸣器的输出频率。
控制的方法是使用DSP通用定时器设置S13以一定的频率改变高低状态,输出方波。
对于通用定时器周期寄存器的设置,计数值为所需计数值的二分之一。
蜂鸣器的连接;由于选用的蜂鸣器所需电流较小,所以采用将DSP通用I/O引脚直接驱动的方式。
5.交通灯实验
发光二极管是由连接在DSP扩展地址接口上的寄存器EWR和SNR控制的。
这两个寄存器均为6位寄存器,其位定义如下:
表1寄存器EWR
Bit5
Bit4
Bit3
Bit2
Bit1
Bit0
东-红
东-黄
东-绿
西-红
西-黄
西-绿
表2寄存器SNR
Bit5
Bit4
Bit3
Bit2
Bit1
Bit0
南-红
南-黄
南-绿
北-红
北-黄
北-绿
两个寄存器的地址均映射到2812DSP的扩展空间,CTRLR,DSP通过对该地址的写操作来修改二个寄存器各位的状态,当寄存器某位取‘1’时,相应提示灯被点亮,取‘0’则熄灭。
当写入CTRLR的数据(8位有效值)的高两位为‘00’时,数据的低6位将写入EWR寄存器;高两位为‘01’时,数据的低6位将写入SNR寄存器。
三、实验流程图:
1、整体构思流程图如图1:
图1主程序流程图
2、键盘扫描子程序流程图如图2:
图2键盘扫描子程序流程图
四、实验源程序:
#include"myapp.h"
#include"ICETEK-VC5509-EDU.h"
#include"scancode.h"
#defineTLIGHTWE0x0
#defineTLIGHTNS0x40
#defineTLIGHTSWGREEN0x01
#defineTLIGHTNEGREEN0x08
ioportunsignedint*tim0;
ioportunsignedint*prd0;
ioportunsignedint*tcr0;
ioportunsignedint*prsc0;
intnCursorCount;
voidInitInterrupt();
voidInitMcBSP();
inttKey,cKey,nKeyCode,nCount,nCount1,uN;
main()
{intj;
unsignedchardbScanCode,dbOld;
PLL_Init(20);
SDRAM_init();
InitCTR();
PLL_Init(20);
SDRAM_init();
InitCTR();
//直流电机
//unsignedchardbScanCode,dbOld;
//unsignedchardbOld;
dbScanCode=dbOld=0;
nCount=nCount1=0;
PLL_Init(20);
SDRAM_init();
InitCTR();
InitMcBSP();
CTRLR=0x0c1;
for(;;)
{
dbScanCode=GetKey();
dbScanCode&=0x0ff;
if(dbScanCode==SCANCODE_9)break;
switch(dbScanCode)
{
case1:
CTRLR=0x1;
CTRLR=0x40;
{
intnMusicCount;
intnWork;
intuN;
PLL_Init(20);
SDRAM_init();
InitCTR();
InitMcBSP();
CTRGR=8;//BUZZE=1打开蜂鸣器,见ICETEK-CTR的全局控制寄存器描述
//设置合适的音长和音高
for(nWork=0;nWork { music[nWork][0]*=10;//10 music[nWork][1]*=3;//3 music[nWork][1]/=12;//12 } //设置DX0管脚为通用输出管脚以驱动蜂鸣器 //SPCR0&=0x0fffeffff;///XRST=0 //PCR0|=0x2000;//RIOEN=1 InitInterrupt(); TIME_init(); nMusicCount=0; while(dbScanCode==1) { nMusicCount++; nMusicCount%=nMusicNumber; if(music[nMusicCount][0]==0) *tcr0&=0x0fffffcff;//静音 else { *prd0=music[nMusicCount][0];//切换音符 *tcr0=0xe0; } dbScanCode=GetKey(); //if(dbScanCode==SCANCODE_Enter)break; Delay(music[nMusicCount][1]); } //直流电机 uN=60; CTRGR=1;//直流电机使能,DCME=1 InitInterrupt(); TIME_init(); while(dbScanCode==1) { if(nCount1==0) { dbScanCode=GetKey(); if(dbScanCode! =dbOld) { dbOld=dbScanCode; if(dbScanCode==SCANCODE_9) break;//退出 elseif(dbScanCode==SCANCODE_7) PCR1|=2;//反转 elseif(dbScanCode==SCANCODE_8) PCR1&=0x0fffd;//反转 elseif(dbScanCode==SCANCODE_3) uN=80; elseif(dbScanCode==SCANCODE_4) uN=60; elseif(dbScanCode==SCANCODE_5) uN=40; elseif(dbScanCode==SCANCODE_6) uN=20; } } } } break; case2: CTRLR=0x2; CTRLR=0x40; for(;;) { intnMusicCount; intnWork; PLL_Init(20); SDRAM_init(); InitCTR(); InitMcBSP(); CTRGR=8;//BUZZE=1打开蜂鸣器,见ICETEK-CTR的全局控制寄存器描述 //设置合适的音长和音高 for(nWork=0;nWork { music[nWork][0]*=5;//10 music[nWork][1]*=3;//3 music[nWork][1]/=5;//12 } //设置DX0管脚为通用输出管脚以驱动蜂鸣器 //SPCR0&=0x0fffeffff;///XRST=0 //PCR0|=0x2000;//RIOEN=1 InitInterrupt(); TIME_init(); nMusicCount=0; while(dbScanCode==2) { nMusicCount++; nMusicCount%=nMusicNumber; if(music[nMusicCount][0]==0) *tcr0&=0x0fffffcff;//静音 else { *prd0=music[nMusicCount][0];//切换音符 *tcr0=0xe0; } dbScanCode=GetKey(); Delay(music[nMusicCount][1]); for(j=0;j<30;j++)//North { CTRLR=TLIGHTNS+(TLIGHTSWGREEN< Delay(38); CTRLR=TLIGHTNS; Delay(38); } for(j=0;j<30;j++)//West { CTRLR=TLIGHTWE+(TLIGHTSWGREEN< Delay(38); CTRLR=TLIGHTWE; Delay(38); } for(j=0;j<30;j++)//South { CTRLR=TLIGHTNS+(TLIGHTNEGREEN< Delay(38); CTRLR=TLIGHTNS; Delay(38); } for(j=0;j<30;j++)//East { CTRLR=TLIGHTWE+(TLIGHTNEGREEN< Delay(38); CTRLR=TLIGHTWE; Delay(38); } } } break; } Delay(16); } CloseCTR(); exit(0); } voidInitInterrupt(void) { //设置中断控制寄存器 IVPD=0x80; IVPH=0x80; IER0=0x10; DBIER0=0x10; IFR0=0xffff; asm("BCLRINTM"); } voidinterruptTimer()//中断响应函数 { PCR0^=0x20; nCount++;nCount%=100; if(nCount>uN)PCR2|=4; elsePCR2&=0x0fffb; nCount1++;nCount1%=5120; } voidInitMcBSP() { //IOPin: McBSP1.FSXS15 //SPCR2.XRST_=0,PCR.XIOEN=1,PCR.FSXM=1,PCR.FSXP=0/1 SPCR2_1&=0x0fffe; PCR1|=0x2800; } voidTIME_init(void) { tim0=(unsignedint*)0x1000; prd0=(unsignedint*)0x1001; tcr0=(unsignedint*)0x1002; prsc0=(unsignedint*)0x1003; *tcr0=0x04f0; *tim0=0; *prd0=0xffff; *prsc0=2; *tcr0=0x00e0; } 五、实验过程中遇到的困难及实验心得: 1.关键问题: 本次试验过程中,我们遇到了很多困难。 虽然,之前我们已经将各个实验功能都实现了,但是光是将这些实验加到一起,组成一个综合型的实验就要比我们想象中难得多,更不用说还要将这些实验加以改进、完善。 我们首先遇到的问题就是如何将各个实验整合到一起。 在多次失败的尝试后,我们终于找到了方法。 最大的问题就是由于自己的程序编写能力不足,不能够达到想要的效果。 例如,我们想将交通灯的实验和音频信号发生实验相结合,但是多次尝试都没能实现,明明在程序中没有错误,可是就是不发声。 其他主要遇到具体问题如下: 1)将各独立的程序作为子程序放在文件里带来的公共参数的定义冲突问题。 在刚开始实验的阶段,由于经验不足,在将独立的程序融入到主中时,在定义公共参数的时候,函数的重新定义以及参数的反复负值,导致程序不能正常的运行。 在综合程序的调试时,缺少某些函数和变量的定义。 2)直流电机不能正常运转,比如,运行程序时,电机无法正常运转. 3)交通灯只亮两圈。 2.解决方案: 1)在主程序之前统一定义公共变量和函数,避免在子程序中重复定义。 对于缺少的函数或变量,首先检查了是否在程序开始部分将需要的头文件全部include进来;其次,对于已经包含的头文件,对比原来独立程序的相同名称的头文件,检查是否没有将所有的变量定义复制过来。 2)向其他成功显示信息的组的成员求教,发现成功的情况是在电机实验的基础上对实验内容进行添加修改的。 也许是因为程序包含的文件中,有些许定义方面有差别,或者是实验硬件本身兼容性的问题,所以沿用了成功的组的经验,转而在步进电机的实验上进行添加修改,问题得以解决. 3)电机无法正常运转,我们经过多次试验,最后终于找到了原因,有的是因为DSP试验箱没有正常工作,我们又检查了程序,发现程序没问题,最后我们终于可使电机正转反转,并且可以调整电机速度。 4)交通灯只亮两圈,最后我们明白了需要加循环,这样才能
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- DSP 实验 报告 最终版