直流电机脉冲调试控制
专 业: 测控技术与仪器 班 级: 学生姓名: 学 号: 指导教师:
电气工程学院
DSP课程设计
目录
第一章 绪论 ..................................................................................................................................... 1
1.1系统背景 ............................................................................................................................. 1
1.1.1DSP技术的特点以及在电子技术中的应用 ....................................................... 1
第二章 系统电路 ............................................................................................................................. 3
2.1直流电机 ............................................................................................................................. 3 第三章 系统软件设计 ................................................................................................................... 5
3.1系统程序设计 ..................................................................................................................... 5 第四章 CAN总线通信程序 ........................................................................................................... 8 第五章 结束语 ............................................................................................................................... 14
DSP课程设计
第一章 绪论
1.1系统背景
1.1.1DSP技术的特点以及在电子技术中的应用
DSP一方面是Digital Signal Processing的缩写,意思是数字信号处理,就是指数字信号理论研究。DSP另一方面是Digital Signal Processor,意思是数字信号处理器,就是用来完成数字信号处理的器件。
最初的DSP器件只是被设计成用以完成复杂数字信号处理的算法。DSP器件紧随着数字信号理论的发展而不断发展。在20世纪60年代,数字信号处理技术才刚刚起步。60年代中期以后,快速傅里叶算法的出现及大规模集成电路的发展大大促进了DSP技术与器件的飞速发展。
(一)DSP器件的特点 1.高速、高精度运算能力
(1)硬件乘法累加操作,在一个指令周期内可完成一次乘法和一次加法。
(2)哈弗结构和流水线结构。哈佛结构的主要特点是将程序和数据存储在不同的存储空间中,即程序存储器和数据存储器是两个相互独立的存储器,每个存储器独立编址,独立访问。与两个存储器相对应的是系统中设置了程序总线和数据总线,从而使数据的吞吐率提高了一倍。由于程序和存储器在两个分开的空间中,因此取指和执行能完全重叠。流水线与哈佛结构相关,DSP芯片广泛采用流水线以减少指令执行的时间,从而增强了处理器的处理能力。使取指、译码和执行等操作可以重叠执行,处理器可以并行处理二到四条指令,每条指令处于流水线的不同阶段。
(3)硬件循环控制。大多数的DSP都有专门的硬件,用于零开销循环。所谓零开销循环是指处理器在执行循环时,不用花时间去检查循环计数器的值、条件转移到循环的顶部、将循环计数器减1。
(4)特殊的寻址模式。DSP处理器往往都支持专门的寻址模式,它们对通常的信号处理操作和算法是很有用的。例如,模块(循环)寻址(对实现数字滤波器延时线很有用)、位倒序寻址(对FFT很有用)。
(5)具有丰富的外设。DSP具有DMA(有一组或多组独立的DMA总线,与CPU的程序、数据总线并行工作,在不影响CPU工作的条件下,DMA速度已达800Mbyte/s以上)、串口、定时器等外设。
2.强大的数据通信能力。
3.灵活的可编程性。DSP骗内设置RAM和ROM,可以方便地拓展程序、数据及I/O空间,同时允许ROM和RAM直接数据传送。可编程DSP芯片可使设计人员在开发过程中灵活方便地对软件进行修改和升级
4.低功耗设计。DSP可以工作在省电状态,节省了能源。 (二)DSP器件的应用
自从DSP芯片诞生以来,DSP芯片得到了飞速的发展。DSP芯片高速发展,一方面得益于集成电路的发展,另一方面也得益于巨大的市场。在短短的十多年时间,DSP芯片已经在信号处理、通信、雷达等许多领域得到广泛的应用。目前,DSP芯片的价格也越来越
1
DSP课程设计
低,性能价格比日益提高,具有巨大的应用潜力。DSP芯片的应用主要有:
(1) 信号处理--如,数字滤波、自适应滤波、快速傅里叶变换、相关运算、频谱分析、卷积等。
(2) 通信--如,调制解调器、自适应均衡、数据加密、数据压缩、回坡抵消、多路复用、传真、扩频通信、纠错编码、波形产生等。
(3) 语音--如语音编码、语音合成、语音识别、语音增强、说话人辨认、说话人确认、语音邮件、语音储存等。
(4) 图像/图形--如二维和三维图形处理、图像压缩与传输、图像增强、动画、机器人视觉等。
(5) 军事--如保密通信、雷达处理、声纳处理、导航等。
(6) 仪器仪表--如频谱分析、函数发生、锁相环、地震处理等。
(7) 自动控制--如引擎控制、深空、自动驾驶、机器人控制、磁盘控制。 (8) 医疗--如助听、超声设备、诊断工具、病人监护等。
(9) 家用电器--如高保真音响、音乐合成、音调控制、玩具与游戏、数字电话/电视等
2
DSP课程设计
第二章 系统电路
2.1直流电机
2.1.1直流电机与DSP的接线用到了16位的地址线(0b007)和16位的数据线,通过向该地址写数据来控制直流电机,如图2.1.1
图2.1.1 DSP控制直流电机的接线图
2.1.2直流电机是通过送PWM脉冲来调速的,如图2.1.2所示PWM脉冲的周期
不变,高电平的时间长则直流电机加速,低电平的时间长则直流电机减速(动摩擦力)。
图2.1.2直流电机的调速原理
2.1.3直流电机的正反转控制是通过如下电路实现的:其中T1,T3三极管由B控
制,T2,T4三极管由A控制。
3
DSP课程设计
控制方式如下:
控制原理如下:
图2.1.3直流电机正反转控制原理
4
DSP课程设计
第三章 系统软件设计
3.1系统程序设计
(1)程序软件流程图:
初始化PWM输出初始化设置输出方波占空比设置定时器3启动定时器3示波器上观察波形结束
5
DSP课程设计
(2)程序代码(加注释):
#include \"f2407_c.h\" // 屏蔽中断程序 void inline disable() {
asm(\" setc INTM\");
} // 系统初始化子程序 int initial() {
asm(\" setc SXM\"); // 符号位扩展有效 asm(\" clrc OVM\"); // 累加器中结果正常溢出 asm(\" clrc CNF\"); // B0被配置为数据存储空间 SCSR1=0x81FE; // CLKIN=6M,CLKOUT=4CLKIN=24M WDCR=0x0E8; // 不使能看门狗,因为SCSR2中的WDOVERRIDE // 即WD复位后的缺省值为1,故可以用软件禁止看门狗 IMR=0x0000; // 禁止所有中断 IFR=0x0FFFF; // 清除全部中断标志,\"写1清0\" WSGR=0x00; // 禁止所有的等待状态 }
// EVB模块的PWM初始化程序 int pwminitial() {
MCRC=MCRC|0x007E; // IOPE1-6被配置为基本功能方式,PWM7-12 ACTRB=0x0666; // PWM12,10,8低有效,PWM11,9,7高有效 DBTCONB=0x00; // 不使能死区控制 CMPR4=0x1000; CMPR5=0x3000; CMPR6=0x5000;
T3PR=0x6000; // 设置定时器3的周期寄存器,并设置CMPR4-6,
//以确定不同的输出占空比
COMCONB=0x8200; // 使能比较操作 T3CON=0x1000; // 定时器3为连续增计数模式 }
// 该中断服务程序主要是为了防止干扰,不做任何其它操作 void interrupt nothing() {
return; // 中断直接返回 }
// 主程序 main( ) {
disable(); // 总中断禁止 initial(); // 系统初始化 pwminitial(); // PWM输出初始化 T3CON=T3CON|0x9040; // 启动定时器3
6
DSP课程设计
while(1) { ; } }
(3)调试方法、过程及结果:
将示波器的红色表笔分别与DSP的J8-1、J8-3、J8-5相连,观察示波器上的输出波形,然后改变方波的占空比,看示波器上输出方波是否改变。
上述的程序运行的结果可以从示波器上看出来,当红色表笔与J8-1相连时,示波器上的显示图形为:
T1T2T3
T3=T1+T2,T2=5T1,由此可见,该方波的占空比为1:5。
当红色表笔与J8-3相连时,示波器上的显示图形为:
T1T2T3
T3=T1+T2,T2=T1,由此可见,该方波的占空比为1:1。
当红色表笔与J8-5相连时,示波器上的显示图形为:
T1T2T3
T3=T1+T2,5T2=T1,由此可见,该方波的占空比为5:1。
结果分析:
由CMPR4=0x1000;CMPR5=0x3000;CMPR6=0x5000;T3PR=0x6000; 四条语句可以看出DSP上J8-1、J8-3、J8-5输出的方波占空比理论值应该分别为1:5、1:1、5:1,与真实输出一致,说明输出方波的占空比与CMPR4、CMPR5、CMPR6、T3PR的赋值有关,改变这些值,就可以改变输出方波的占空比。
7
DSP课程设计
第四章 CAN总线通信程序
(1)程序软件流程图:
初始化CAN初始化子程序邮箱3请求发送等待发送应答接收数据邮箱2中的数据赋给邮箱3设置为正常工作模式发送流程图 (2)程序代码(加注释):
发送程序代码(加注释):
#include \"f2407_c.h\" //int CAN_FLAG; //void system_init(); //void CANMBX_ISR(); void CAN_INIT();
void inline disable() {
asm(\" setc INTM\"); } void inline enable() {
asm(\" clrc INTM\");
} // //(1)主程序 main() {
初始化CAN初始化子程序等待接收数据清接收到标志PWM输出初始化设置为正常工作模式
接收流程图
引用头部文件 定义标志寄存器
声明在程序中需要用到是函数 系统初始化子程序 8
DSP课程设计
system_init(); //系统初始化子程序
CAN_FLAG=0x00; //清CAN用户标志,CAN_FLAG=0表示收到数据 CAN_INIT(); //CAN初始化子程序 enable(); for(;;) {
TCR=0x20; //MBX3请求发送 while(TCR&0x2000==0) //等待发送应答 continue;
TCR=0x2000; //清TA3和MIF3标志位 CAN_FLAG=0x0000; //清接收到标志 MDER=0x0000; //邮箱不使能
MCR=0x0140; //CDR=1,数据改变请求
MBX3A=MBX2A; //用邮箱2中数据更新3中的数据 MBX3B=MBX2B; MBX3C=MBX2C; MBX3D=MBX2D;
MCR=0x0480; //DB0=1,AB0=1,STM=0设置为正常工作模式 MDER=0x04C; } }
//(2) 系统初始化子程序 void system_init() {
asm(\" setc SXM\"); // 抑制符号位扩展
asm(\" clrc OVM\"); // 累加器中结果正常溢出 asm(\" clrc CNF\"); // B0被配置为数据存储空间 asm(\" setc INTM\"); // 禁止所有中断
SCSR1=0x81FE; // CLKIN=6M,CLKOUT=4CLKIN=24M WDCR=0x0E8; // 不使能看门狗,因为SCSR2中的WDOVERRIDE // 即WD复位后的缺省值,故可以用软件禁止看门狗 IMR=0x0010; // 开中断优先级5
IFR=0x0FFFF; // 清除全部中断标志,\"写1清0\" }
//(3)CAN初始化子程序 void CAN_INIT() {
MCRB=MCRB|0x0C0; //设置IOPC6、IOPC7为CANRX,CANTX CAN_IFR=0x0FFFF; //清所有中断标志
LAM1_H=0x7FFF; //设置邮箱3、2的屏蔽ID寄存器 LAM1_L=0x0FFFF; //0则ID必须匹配 MCR=0x1000; //CCR=1改变配置请求
while(GSR&0x0010==0) continue; //CCE=1时即可配置BCR2、BCR1寄存器 BCR2=0x01; //波特率预分频寄存器
9
DSP课程设计
BCR1=0x033; //波特率设置为500Kbps MCR=MCR&0x0EFFF; //CCR=0改变配置请求 while(GSR&0x0010!=0)
continue; //只有当CCE=0时,配置BCR2、BCR1寄存器成功
MDER=0x040; //不使能邮箱2,邮箱2改为接收方式 MCR=0x0103; //CDR=1,数据区改变请求
MSGID2H=0x2447; //设置邮箱2的控制字及ID ,IDE=0,AME=0,AAM=0 //标准方式为MSGID2H[12~2] MSGID2L=0x0FFFF;
MSGCTRL2=0x08; //设置控制,数据长度DCL=8,RTR=0数据帧 MBX2A=0x1000; //邮箱2信息初始化 MBX2B=0x3000; MBX2C=0x0000; MBX2D=0x0000;
MSGID3H=0x2447; /设置邮箱3的标识符 MSGID3L=0x0FFFF;
MSGCTRL3=0x08; //RTR=0,DCL=8
MBX3A=0x1500; //邮箱3信息初始化 MBX3B=0x2000; MBX3C=0x5500; MBX3D=0x6000; CAN_IMR=0x0F7FF; CAN_IFR=0x0FFFF;
MCR=0x0480; //DB0=1,AB0=1,STM=1设置为自测试模式 MDER=0x04C; //使能邮箱2和3,邮箱2为接收方式 //Counter=0; } //(4)中断程序
void interrupt GRIS5() {
switch(PIVR) {
case 64:CANMBX_ISR(); break; }
enable(); return; }
void CANMBX_ISR() {
RCR=0x040; //复位RMP2和MIF2 CAN_FLAG=1; //置用户接收标志 }
// 直接返回中断服务程序
10
DSP课程设计
void interrupt nothing( ) {
return; }
接收程序代码(加注释):
#include \"f2407_c.h\" //引用头部文件 int CAN_FLAG; //定义标志寄存器
void system_init(); //声明在程序中需要用到是函数 void CANMBX_ISR(); void CAN_INIT();
void inline disable() {
asm(\" setc INTM\"); }
void inline enable() {
asm(\" clrc INTM\"); }
// EVB模块的PWM初始化程序 int pwminitial() {
MCRC=MCRC|0x007E; // IOPE1-6被配置为基本功能方式,PWM7-12 ACTRB=0x0666; // PWM12,10,8 低有效,PWM11,9,7 高有效 DBTCONB=0x00; // 不使能死区控制 CMPR4=MBX2A; CMPR6=MBX2B;
T3PR=0x6000;// 设置定时器3的周期寄存器,并设置CMPR4-6,以确定不同的输出占空比 COMCONB=0x8200; // 使能比较操作
T3CON=0x1000; // 定时器3为连续增计数模式 }
//(1)主程序 main() {
disable(); // 总中断禁止
system_init(); //系统初始化子程序
CAN_FLAG=0x00; //清CAN用户标志,CAN_FLAG=0表示收到数据 CAN_INIT(); //CAN初始化子程序 enable(); for(;;) {
while(CAN_FLAG==0)continue; //等待接收数据 CAN_FLAG=0x0000; //清接收到标志 MDER=0x0000; //邮箱不使能
MCR=0x0140; //CDR=1,数据改变请求
11
DSP课程设计
pwminitial(); // PWM输出初始化 T3CON=T3CON|0x9040; // 启动定时器3
MCR=0x0480; //DB0=1,AB0=1,STM=0设置为正常工作模式 MDER=0x044; } }
//(2) 系统初始化子程序 void system_init() {
asm(\" setc SXM\"); // 抑制符号位扩展
asm(\" clrc OVM\"); // 累加器中结果正常溢出 asm(\" clrc CNF\"); // B0被配置为数据存储空间 asm(\" setc INTM\"); // 禁止所有中断
SCSR1=0x81FE; // CLKIN=6M,CLKOUT=4CLKIN=24M WDCR=0x0E8; // 不使能看门狗,因为SCSR2中的WDOVERRIDE // 即WD复位后的缺省值,故可以用软件禁止看门狗 IMR=0x0010; // 开中断优先级5 IFR=0x0FFFF; // 清除全部中断标志,\"写1清0\" WSGR=0x00; // 禁止所有的等待状态 }
//(3)CAN初始化子程序 void CAN_INIT() {
MCRB=MCRB|0x0C0; //设置IOPC6、IOPC7为CANRX,CANTX CAN_IFR=0x0FFFF; //清所有中断标志
LAM1_H=0x7FFF; //设置邮箱3、2的屏蔽ID寄存器 LAM1_L=0x0FFFF; //0则ID必须匹配 MCR=0x1000; //CCR=1改变配置请求
while(GSR&0x0010==0) continue; //CCE=1时即可配置BCR2、BCR1寄存器 BCR2=0x01; //波特率预分频寄存器 BCR1=0x033; //波特率设置为500Kbps MCR=MCR&0x0EFFF; //CCR=0改变配置请求 while(GSR&0x0010!=0) continue; //只有当CCE=0时,配置BCR2、BCR1寄存器成功 MDER=0x040; //不使能邮箱2,邮箱2改为接收方式 MCR=0x0103; //CDR=1,数据区改变请求 MSGID2H=0x2447; //设置邮箱2的控制字及ID //IDE=0,AME=0,AAM=0,标准方式为MSGID2H[12~2] MSGID2L=0x0FFFF;
MSGCTRL2=0x08; //设置控制,数据长度DCL=8,RTR=0数据帧 MBX2A=0x3000; //邮箱2信息初始化 MBX2B=0x3000; MBX2C=0x0000; MBX2D=0x0000;
MSGID3H=0x2447; //设置邮箱3的标识符
12
DSP课程设计
MSGID3L=0x0FFFF;
MSGCTRL3=0x08; //RTR=0,DCL=8
MBX3A=0x1234; //邮箱3信息初始化 MBX3B=0x5678; MBX3C=0x9abc; MBX3D=0x1111; CAN_IMR=0x0F7FF; CAN_IFR=0x0FFFF;
MCR=0x0480; //DB0=1,AB0=1,STM=1设置为自测试模式 MDER=0x04C; //使能邮箱2和3,邮箱2为接收方式 } //(4)中断程序
void interrupt GRIS5() {
switch(PIVR) {
case 64:CANMBX_ISR(); break; }
enable(); return; }
void CANMBX_ISR() {
RCR=0x040; //复位RMP2和MIF2 CAN_FLAG=1; //置用户接收标志 CMPR4=MBX2B; }
// 直接返回中断服务程序 void interrupt nothing( ) {
return; }
(3)调试方法、过程及结果:
将两台DSP试验箱用两根导线连接起来,一台电脑作为发送端,运行发送程序,一
台电脑作为接收端,运行接收程序,通过改变发送程序中MBX2A、MBX2B的赋值,间接改变CMPR4、CMPR6的值,因此,输出的方波的占空比改变了,从而影响了电机的转速和旋转的方向,即实现了通过改变发送信息,控制电机的转速和正反旋转。
13
DSP课程设计
第五章 结束语
本次课程设计基本上实现了所要求的目标,达到了预期效果。通过本课程设计,查阅了很多参考资料,了解了DSP的编程控制方法。期间和同学进行了热烈的探讨学到了不少新的控制方法和思路,对DSP的编程方法有了新的了解。老师也给予了很多无私的帮助和指导,对我们提出了很多改进的意见,在这里一并表示感谢。
通过本次课程设计,我对DSP这门课程有了更进一步的认识,由原来的半知半解,到现在的初步掌握,对于本次课程设计的收获分一下几点: (1) 熟悉掌握了L298N这块芯片的引脚及其功能; (2) 认识并且理解了DSP控制直流电机的原理; (3) 掌握了直流电机PWM调速的原理;
(4) 对于改变方波的占空比,进而控制电机的转速和旋转方向有了深刻的认识,可以熟
练的控制电机的转速,并且实现正传和反转;
(5) 更好的认识了CAN控制器对于信号的发送和接收操作。
14
因篇幅问题不能全部显示,请点此查看更多更全内容