东南大学自动化学院
实 验 报 告
课程名称:
DSP 技术及课程设计
目录
一.实验目的 ...................................................................................................................................3
1.1 基本要求 ............................................................................................................................3
1.2 提高要求 ............................................................................................................................3
二.实验设备 ...................................................................................................................................3
三.实验原理 ...................................................................................................................................3
3.1 霍尔传感器........................................................................................................................3
3.2 直流无刷电动机 ................................................................................................................ 4
3.3 电机驱动与控制............................................................................................................... 4
3.4 基于 drvlib281x 库的 PWM 波形产生: ...........................................................................6
四.实验步骤与实验内容.............................................................................................................. 6
4.1 霍尔传感器的捕获与正反转数组的确定 ........................................................................ 6
4.2 电机转向的控制............................................................................................................... 7
4.3 电机转速的控制............................................................................................................... 9
4.4 键盘控制部分 ....................................................................................................................9
4.5 电位器控制部分............................................................................................................. 10
4.6 液晶屏显示部分............................................................................................................. 12
五. 实验总结 ...............................................................................................................................14
附录 实验代码 ...............................................................................................................................15
一.实验目的
综合实验目标是: 利用F28335核心板与ICETEK-MOTOR-E运动控制板,实现直流无刷电
机的驱动与转速控制,利用小键盘或电位器对直流无刷电机进行转速调节,并利用液晶屏显示
转速等状态信息。
1.1 基本要求
①掌握 F28335 核心板与 ICETEK-MOTOR-E 运动控制板的使用方法,接线正确,能捕获并
证实霍尔传感器状态变化规律(表 1);
②能正确总结出正/反转控制表(表 2),从而控制电机正转/反转;
③能通过修改占空比,用示波器观察 pwm 口输出波形的变化。
1.2 提高要求
①能通过阅读学习“ICETEK-Motor-E 使用说明书.pdf”,发现 ICETEK-MOTOR-E 运动控制
板中的电位器信号,编制程序从 DSP 相应的 ADC 输入端口采集该电位器信号,能用 CCS 图形
显示 AD 变换结果曲线;
②能编制程序,利用 AD 变换结果调节 PWM 占空比,从而对直流无刷电机进行调速;
③能设计基本的人机接口软件,即编制程序,利用小键盘进行正转、反转、停止功能选择,
利用液晶屏显示(示意)正转、反转、停止等状态信息,并可自行扩展其它辅助功能。
二.实验设备
计算机,ICETEK-F28335-A 实验箱(或ICETEK 仿真器+ICETEK–F28335-A 系统板+相
关连线及电源),ICETEK-Motor-E 电机。
三.实验原理
3.1 霍尔传感器
插好电机驱动板,连接好霍尔传感器接头,先不连接驱动电源和电机的abc三项电源,给dsp
试验板上电,则霍尔传感器即可工作。手动转动电机,电机不加电,观察正转和反转时指示灯
D4、D5、D6等的变化顺序。
D6
1
1
0
0
0
1
D6
1
1
0
0
0
1
D5
0
0
0
1
1
1
D5
0
1
1
1
0
0
D4 正转(俯视电机主轴,顺时针转动)
0
1
1
1
0
0
D4 反转(俯视电机主轴,逆时针转动)
0
0
0
1
1
1
3.2 直流无刷电动机
ICETEK-F2812-BCM实验箱采用的直流无刷电机是三相方波控制型直流无刷电机(BLDCM),如
果按照一定顺序给电机的各相通入方波即可使电机转动,转动的速度及力矩与通入电机定子绕
组的电压、电流成正比关系。
3.3 电机驱动与控制
通过ICETEK-F2812-BCM实验箱,ICETEK-F2812-A板与电机驱动板及直流无刷电机连接,通
过编程,TMS320F2812输出的控制信号能够控制电机转动。具体控制信号连接如下所示:
电机驱动模块的内部结构如下所示:
各PWM管脚按如下顺序完成信号的输出可使电机转动:
其中,PWM代表输出一定占空比的PWM波,0常关或强制低,1常开或强制高。PhaseA、
PhaseB和PhaseC的相应输出为:
3.4 基于 drvlib281x 库的 PWM 波形产生:
PWM1-6控制:如果要电机转动则连接电机的PhaseA、PhaseB和PhaseC的输出需要满足上
面图2-2给出的波形,每相电压在±24V之间变动并满足上述时序关系。而要实现这一输出,需
要在PWM1-6管脚上输出满足上面图描述的波形和时序关系。
转向控制原理:TMS320F281x DSP的寄存器ACTRA控制PWM1-6的输出模式,对应状态0-5
的取值分别为0x0CE、0x0C0E、0x0CE2、0x2EC、0x0E2C和0x0EC0。我们只需调用电机驱动
库drvlib281x中PWM波形发生模块,输入这六种状态,就可以将相应控制字送PWM的ACTRA
控制寄存器。换句话说,我们可以通过在程序中给PWM发生模块顺序输入状态0-5即可让电机
转动。如果反向顺序输入5-0则可使电机反向转动。
转速控制原理:如上所述,电机转动需要安装一定频率送状态0-5控制字,而送电机控制信
号的速度(频率)则在一定程度上决定了电机转速,0-5各状态切换得快,则电机可以快些运行。
但还有一个因素,即送电机输出的电流,送给电机定子的三相绕组的电流直接决定了电机转子
能产生多大的转矩。当控制状态由一种切换到下一种时,电流发生的力矩是否能让转子转动到
位,这决定了电机在下一个状态电流到来时是否能顺利转动下去。如果电流弱,不足以使转子
转动到位,电机将“失步”或根本无法转动;如果电流过大,在下一个状态到来前早就到位,电
机转子将在当前电流控制下在此位置“刹车”,如果在惯性的驱动下稍微转动过位时,就会反向
转回来,导致电机转子在运行时会产生不同程度的震动,甚至电机绕组发热。由此,我们需要
选择好电机状态切换的频率,也要控制好送电机驱动信号的电流大小,亦即控制好切换PWM控
制字的频率和控制PWM输出的占空比。
四.实验步骤与实验内容
4.1 霍尔传感器的捕获与正反转数组的确定
打 开 “ DSP_MotorEx\DSP2833x_examples\28335bcm3.1\build ” 下 的 工 程 文 件
“bldc3_1_281x_CCS3x.pjt”。
(1) 先进行霍尔传感器的状态读入测试,在工程管理器的include下面找到build.h文件,将编
译开关#define BUILDLEVEL LEVEL? 的设置设为LEVEL0,然后编译程序、运行程序测试。
注意在中断服务程序的LEVEL0处理分支下,使用变量nNowStatus给pwm指针赋值。程序生
成PWM的原理参见“准备实验2”:
pwm1.CmtnPointer = nNowStatus;//0-5
pwm1.DutyFunc = (int16)rmp2.Out;
pwm1.update(&pwm1);
在变量观察窗口中改变nNowStatus的值(0-5之间),在变量观察窗口里观察变量hallcap的
变化。观察指示灯的状态和hallcap的数值的变化对应关系,总结出指示灯和霍尔传感器读入的
状态的对应关系,然后总结出正转hallcap的变化顺序,和反转时的变化顺序。
(2) 总结对应关系填写下表, :俯视电机主轴,顺时针转动. (D6~D4灯亮为1,灭为0)
nNowStatus
表1 正转关系
Hallcap
对应捕获端口
数据
0
1
2
3
4
5
6
4
5
1
3
2
D6 D5 D4
1
1
1
0
0
0
1
0
0
0
1
1
0
0
1
1
1
0
由上面即可确定正转数组为:Uint16 zhengzhuan[6]={4,0,5,2,3,1};
fanzhuan[6]={2,4,3,0,1,5};
同理可得反转数组为:
Uint16
4.2 电机转向的控制
(1)目的:在程序中添加内容完成使电机正/反方向转动。
(2)分析:根据实验原理,我们只需要控制送给PWM波形发生模块pwm1的状态输入顺序即可改变
电机转动方向。
根据准备实验1中总结出的正反转顺序可知,如果当前电机锁定状态为5状态,欲正转,则
电机须锁定到1状态,所以pwm.Cmtnpointer赋值为2,若想反转,则电机须锁定到4状态,所以
pwm指针赋值为0。因此得出正反转数组下标(下标为当前霍尔传感器读入状态,数组值为向下
一状态转动pwm所赋数值),与pwm指针对应数组为:
转向 正
反
正
反
正
反
正
反
正
反
正
反
表2 正/反转控制表
霍尔
状态
Pwm
指针
1
2
3
4
5
6
4
2
0
4
5
3
2
0
3
1
1
5
(3)修改程序:
以上表为参考修改BLDCMControl.c程序中的相关变量定义:
Uint16
zhengzhuan[6]={ 4,0,5,2,3,1 };
Uint16
fanzhuan[6]= { 2,4,3,0,1,5
};
注意BLDCMControl.c中的代码,并尝试让电机正转。
nISRWork1=(int16)hall1.HallGpio;
bISRWork=( nISRWork1>0 && nISRWork1<7 )?(1):(0);
if ( bISRWork )
{
nNowStatus=zhengzhuan[nISRWork1-1];
}
(4) 最终实现代码
代码中设置了如下两个变量:
char direction;
char changeDirection; //转换标志 changeDirection =1,有转向;changeDirection = 0,无转向
//其中 direction=0 正转,direction=1 反转
当使用者通过键盘发出转向命令时,即可改变上述两个变量的值,实际代码如下:
nISRWork1=(int16)hall1.HallGpio;
bISRWork=( nISRWork1>0 && nISRWork1<7 )?(1):(0);
if ( bISRWork )
{
/***************************************************************************
TASK: 补充代码,以 nISRWork1 为索引,查找表 zhengzhuan 或 fanzhuan,并将值
赋给 nNowStatus
******************************************************************************
**/
if(changeDirection==1){
tts=DFuncDesired;
DFuncDesired=0;
rmp2.DesiredInput = (int32)DFuncDesired;
rmp2.calc(&rmp2);
changeDirection=0;
}
else{
}
if(direction==0){
}else{
}
nNowStatus=zhengzhuan[nISRWork1-1];
//0 对应正转,1 对应反转
nNowStatus=fanzhuan[nISRWork1-1];