DSP实验指导.docx
- 文档编号:9798666
- 上传时间:2023-05-21
- 格式:DOCX
- 页数:17
- 大小:83.05KB
DSP实验指导.docx
《DSP实验指导.docx》由会员分享,可在线阅读,更多相关《DSP实验指导.docx(17页珍藏版)》请在冰点文库上搜索。
DSP实验指导
实验一“追灯”式电路控制实验
一.实验要求
1.设计并调试用于TMS320LF2407的“追灯”控制器,要求“灯”的花样和显示次数均由软件任意设定。
2.程序要求具有多种不同的灯亮花样,能实现发光二极管左移、右移即所谓“追灯”功能。
二.实验目的
1.了解TMS320LF2407ADSP的数字I/O控制模块的使用方法;
2.了解实验开发系统的基本I/O硬件电路的控制方法。
3.进一步熟悉设计并调试程序的基本方法。
三.实验设备
计算机,DSP开发板,仿真器
四.实验硬件电路
图3.1TMS320LF2407与0LED接口电路
五.实验步骤
1.实验准备:
程序所在目录:
ex3_LED
⑴连接设备:
连接开发板和仿真器,用附带的USB电缆连接计算机和仿真器相应接口
⑵开启设备:
①打开仿真器供电电源;
②打开CC2000,进行如下操作:
1.打开工程文件:
Project->Open,打开该目录中的工程文件。
2.编译工程:
Project->RebuildALL,编译链接,生成IOPin.out文件
3.下载程序:
File->LoadProgram。
将IOPin.out文件通过仿真器将其下载到2407ADSP上。
4.运行程序观察结果Debug->RUN(快捷键F5)
六.实验现象(按照你设定程序所显示的现象写)
可以看到的现象为:
核心板上的LED不断闪烁。
扩展板上的4个LED均处于熄灭状态。
现在将按键轻按一下,只有LED1闪烁;按第二下,只有LED2闪烁;按第三下,只有LED3闪烁;按第四下,只有LED4闪烁;按第五下,四个LED循环依次闪烁。
若再按键,则如此反复循环。
七.实验参考程序清单
C程序
I/O端口作为输出(追灯)
unsignedintnumled0=200,numkey=0,numled=0,numled_back=200;
unsignedintt0=0,t0_back=0,test;
unsignedintPB6_FLAG=0;
voidKeyLed()
{
if((numled!
=numled_back)&&((numled%200)==0))
{numled_back=numled;
if(numkey==1)
{PBDATDIR=PBDATDIR&0xFFC7;//将其他的led灭掉
if((PBDATDIR&0x0004)==0x0004)
PBDATDIR=PBDATDIR&0xFFFB;//IOPB2=0;LED1灭
else
PBDATDIR=PBDATDIR|0x0404;//IOPB2=1;LED1亮
}
if(numkey==2)
{PBDATDIR=PBDATDIR&0xFFCB;
if((PBDATDIR&0x0008)==0x0008)
PBDATDIR=PBDATDIR&0xFFF7;//IOPB3=0;LED2灭
else
PBDATDIR=PBDATDIR|0x0808;//IOPB3=1;LED2亮
}
if(numkey==3)
{PBDATDIR=PBDATDIR&0xFFD3;
if((PBDATDIR&0x0010)==0x0010)
PBDATDIR=PBDATDIR&0xFFEF;//IOPB4=0;LED3灭
else
PBDATDIR=PBDATDIR|0x1010;//IOPB4=1;LED3亮
}
if(numkey==4)
{PBDATDIR=PBDATDIR&0xFFE3;
if((PBDATDIR&0x0020)==0x0020)
PBDATDIR=PBDATDIR&0xFFDF;//IOPB5=0;LED4灭
else
PBDATDIR=PBDATDIR|0x2020;//IOPB5=1;LED4亮
}
if(numkey==5)
{
if(numled==400)//200ms
{
PBDATDIR=PBDATDIR&0xFFC3;//IOPB2,3,4,5=0;LED全灭
}
if(numled==600)//400ms
{
PBDATDIR=PBDATDIR&0xFFC3;//IOPB2,3,4,5=0;LED全灭
PBDATDIR=PBDATDIR|0x0404;//IOPB2=1;LED1亮}
if(numled==800)//600ms
{
PBDATDIR=PBDATDIR&0xFFC3;//IOPB2,3,4,5=0;LED全灭
PBDATDIR=PBDATDIR|0x0808;//IOPB3=1;LED2亮
}
if(numled==1000)//800ms
{
PBDATDIR=PBDATDIR&0xFFC3;//IOPB2,3,4,5=0;LED全灭
PBDATDIR=PBDATDIR|0x1010;//IOPB4=1;LED3亮
}
if(numled==1200)//1000ms
{
PBDATDIR=PBDATDIR&0xFFC3;//IOPB2,3,4,5=0;LED全灭
PBDATDIR=PBDATDIR|0x2020;//IOPB5=1;LED4亮
}
if(numled==1400)//1200ms
PBDATDIR=PBDATDIR|0x3c3c;//IOPB2,3,4,5=1;LED全亮
}
if(numled>=1400)numled=1;
}
}
实验二步进电机控制实验
一.实验目的
1、通过实验学习使用2407ADSP的扩展I/O端口控制外围设备信息的方法,掌握使用2407ADSP通用计时器的控制原理及中断服务程序的编程方法;
2、了解步进电机的控制方法。
二.实验设备
计算机,DSP开发板,仿真器
三.实验原理
步进电机是由DSP通用I/O管脚输出直接控制。
步进电机的起动频率大于500PPS(拍每秒),空载运行频率大于900PPS。
2407A的通用I/O口PWM11/IOPE5控制电机的转动频率,TDIRB/IOPF4控制转动方向。
控制的方法是使用DSP通用定时器设置PWM11/IOPE5以一定的频率改变高低状态,输出方波,设置TDIRB/IOPF4为高电平则顺时针转动,低电平为逆时针转动。
四.实验原理图
五.实验步骤
1.实验准备
1.实验准备:
⑴连接设备:
连接开发板和仿真器,用附带的USB电缆连接计算机和仿真器相应接口
⑵开启设备:
①打开仿真器供电电源;
②打开CC2000,进行如下操作:
1.打开工程文件:
Project->Open,打开该目录中的工程文件。
2.编译工程:
Project->RebuildALL,编译链接,生成IOPin.out文件
3.下载程序:
File->LoadProgram。
将IOPin.out文件通过仿真器将其下载到2407ADSP上。
4.运行程序观察结果Debug->RUN(快捷键F5)
5.停止程序运行并退出
六.实验结果
可以看到显示/控制模块上的电机指针在转动,通过修改程序可以调整步进电机转动方向。
七、参考程序
*Main.c*/
/*PWM步进电机控制程序,正反转,默认设置的工作频率1kHz*/
#include"global.c"
voidSystemInit();
voidDelay_Time();
voidKickDog();
unsignedinttag=0;
unsignedintt_step;
main()
{
SystemInit();//系统初始化
MCRA=MCRA&0xC0FF;//IOPB0-6设为IO口模式
PBDATDIR=0xFFC2;//所有LED=0
PBDATDIR=PBDATDIR|0x003D;//所有LED=1
t_step=650;/*t_step=650~1000转动*/
while
(1)
{
if(tag)
{
PEDATDIR=PEDATDIR&0xFFfb;
PEDATDIR=PEDATDIR|0x1E1a;
Delay_Time();
PEDATDIR=PEDATDIR&0xFFf9;
PEDATDIR=PEDATDIR|0x1E18;
Delay_Time();
PEDATDIR=PEDATDIR&0xFFfd;
PEDATDIR=PEDATDIR|0x1E1c;
Delay_Time();
PEDATDIR=PEDATDIR&0xFFf5;
PEDATDIR=PEDATDIR|0x1E14;
Delay_Time();
PEDATDIR=PEDATDIR&0xFFf7;
PEDATDIR=PEDATDIR|0x1E16;
Delay_Time();
PEDATDIR=PEDATDIR&0xFFe7;
PEDATDIR=PEDATDIR|0x1E06;
Delay_Time();
PEDATDIR=PEDATDIR&0xFFef;
PEDATDIR=PEDATDIR|0x1E0e;
Delay_Time();
PEDATDIR=PEDATDIR&0xFFeb;
PEDATDIR=PEDATDIR|0x1E0a;
Delay_Time();
}
else
{
PEDATDIR=PEDATDIR&0xFFeb;
PEDATDIR=PEDATDIR|0x1E0a;
Delay_Time();
PEDATDIR=PEDATDIR&0xFFef;
PEDATDIR=PEDATDIR|0x1E0e;
Delay_Time();
PEDATDIR=PEDATDIR&0xFFe7;
PEDATDIR=PEDATDIR|0x1E06;
Delay_Time();
PEDATDIR=PEDATDIR&0xFFf7;
PEDATDIR=PEDATDIR|0x1E16;
Delay_Time();
PEDATDIR=PEDATDIR&0xFFf5;
PEDATDIR=PEDATDIR|0x1E14;
Delay_Time();
PEDATDIR=PEDATDIR&0xFFfd;
PEDATDIR=PEDATDIR|0x1E1c;
Delay_Time();
PEDATDIR=PEDATDIR&0xFFf9;
PEDATDIR=PEDATDIR|0x1E18;
Delay_Time();
PEDATDIR=PEDATDIR&0xFFfb;
PEDATDIR=PEDATDIR|0x1E1a;
Delay_Time();
}
实验三直流电机控制实验
一.实验目的
1.学习用C语言编制中断程序,控制LF2407DSP的通用I/O管脚产生不同占空比的PWM信号。
2.学习LF2407DSP的通用I/O管脚的控制方法。
3.学习直流电机的控制原理和控制方法。
二.实验设备
计算机,DSP开发板,仿真器
三.实验原理
1.TMS320LF2407DSP的通用I/O引脚
TMS320LF2407DSP可以提供超过40个通用I/O引脚。
每个IO均有一组控制寄存器设置复用状态,这一组寄存器的访问是通过映射在DSP数据区的地址进行。
通过设置各管脚的工作方式和状态,可以实现将它们当成通用I/O引脚使用。
2.直流电机控制
PWM调压调速原理
直流电动机转速n的表达式为:
Φ−=KIRUn
其中,U为电枢端电压;I为电枢电流;R为电枢电路总电阻;Φ为每极磁通量;K为电动机结构参数。
所以直流电动机的转速控制方法可分为两类:
对励磁磁通进行控制的励磁控制法和对电枢电压进行控制的电枢控制法。
其中励磁控制法在低速时受磁极饱和的限制,在高速时受换向火花和换向器结构强度的限制,并且励磁线圈电感较大,动态响应较差,所以这种控制方法用得很少。
现在,大多数应用场合都使用电枢控制法。
绝大多数直流电机采用开关驱动方式。
开关驱动方式是使半导体功率器件工作在开关状态,通过脉宽调制PWM来控制电动机电枢电压,实现调速。
PWM调速方法
在PWM调速时,占空比α是一个重要参数。
以下3种方法都可以改变占空比的值:
(1)定宽调频法:
这种方法是保持t1不变,只改变t2,这样使周期T(或频率)也随之改变。
(2)调宽调频法:
这种方法是保持t2不变,只改变t1,这样使周期T(或频率)也随之改变。
(3)定频调宽法:
这种方法是使周期T(或频率)保持不变,而改变t1和t2。
前两种方法由于在调速时改变了控制脉冲的周期(或频率),当控制脉冲的频率与系统的固有频率接近时,将会引起震荡,因此这两种方法用得很少。
目前,在直流电动机的控制中,主要使用定频调宽法。
四.实验原理图
五.实验步骤
1.实验准备
1.实验准备:
⑴连接设备:
连接开发板和仿真器,用附带的USB电缆连接计算机和仿真器相应接口
⑵开启设备:
①打开仿真器供电电源;
②打开CC2000,进行如下操作:
1.打开工程文件:
Project->Open,打开该目录中的工程文件。
2.编译工程:
Project->RebuildALL,编译链接,生成IOPin.out文件
3.下载程序:
File->LoadProgram。
将IOPin.out文件通过仿真器将其下载到2407ADSP上。
4.运行程序观察结果Debug->RUN(快捷键F5)
5.停止程序运行并退出
六.实验程序
程序中采用定时器中断产生固定频率的PWM波,100次中断为一个周期,在每个中断中根据当前占空比判断应输出波形的高低电平。
主程序用轮询方式读入键盘输入,得到转速和方向控制命令。
在改变电机方向时为减少电压和电流的波动采用先减速再反转的控制顺序。
/*PWM电机控制程序,正反转,默认设置的工作频率1kHz*/
#include"global.c"
voidSystemInit();
voidPWM_Init();
voidKickDog();
intnumled0=200;
unsignedintt0=0;
unsignedintXPWM=0;
main()
{
SystemInit();//系统初始化
MCRA=MCRA&0xC0FF;//IOPB0-6设为IO口模式
PBDATDIR=0xFFC2;//所有LED=0
PBDATDIR=PBDATDIR|0x003D;//所有LED=1
XPWM=2400;//最大值2500
/*whenxpwm=0~900,逆时针方向旋转,值越小,转速越快
whenxpwm=1600~2500,顺时针方向旋转,值越大,转速越快
whenxpwm=900~1600,电机两端电压太低,基本上不足以起转*/
PWM_Init();//定时器初始化
asm("CLRCINTM");
while
(1);
}
voidSystemInit()
{
asm("SETCINTM");/*关闭总中断*/
asm("CLRCSXM");/*禁止符号位扩展*/
asm("CLRCCNF");/*B0块映射为on-chipDARAM*/
asm("CLRCOVM");/*累加器结果正常溢出*/
SCSR1=0x83FE;/*系统时钟CLKOUT=20*2=40M*/
/*打开ADC,EVA,EVB,CAN和SCI的时钟,系统时钟CLKOUT=40M*/
WDCR=0x006F;/*禁止看门狗,看门狗时钟64分频*/
KickDog();/*初始化看门狗*/
IFR=0xFFFF;/*清除中断标志*/
IMR=0x0002;/*打开中断2*/
}
voidPWM_Init()
{
MCRA=MCRA|0x00C0;//PA6-PA7为PWM口
EVAIFRA=0xFFFF;//清除中断标志
ACTRA=0x0006;//PWM1,2低有效
DBTCONA=0x0530;//使能死区定时器1,分频40M/16=2.5M,死区时间5*0.4us=2us
T1PR=2500;//定时器1周期值,定时0.4us*2500=1ms
CMPR1=XPWM;//比较值
COMCONA=0xA600;//比较控制寄存器
T1CNT=0;
EVAIMRA=0x0080;//定时器1周期中断使能
T1CON=0x144E;//增模式,TPS系数40M/16=2.5M,T1使能,
}
voidc_int2()/*定时器1中断服务程序*/
{
if(PIVR!
=0x27)
{asm("CLRCINTM");
return;
}
T1CNT=0;
t0++;
numled0--;
if(numled0==0)
{
numled0=2000;
if((PBDATDIR&0x0001)==0x0001)
PBDATDIR=PBDATDIR&0xFFFE;//IOPB0=0;LED灭
else
PBDATDIR=PBDATDIR|0x0101;//IOPB0=1;LED亮
}
EVAIFRA=0x80;
asm("CLRCINTM");
}
voidKickDog()/*踢除看门狗*/
{
WDKEY=0x5555;
WDKEY=0xAAAA;
}
六.实验结果
通过实验可以发现,直流电机可以程控的改变转速和方向。
七.问题与思考
电动机是一个电磁干扰源。
电动机的启停还会影响电网电压的波动,它周围的电器开关也会引发火花干扰。
因此,除了采用必要的隔离、屏蔽和电路板合理布线等措施外,看门狗的功能就会显得格外重要。
看门狗在工作时不断地监视程序运行的情况,一旦程序“跑飞”,会立刻使DSP复位。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- DSP 实验 指导
![提示](https://static.bingdoc.com/images/bang_tan.gif)