实验三步进电机实验文档格式.docx
- 文档编号:19342186
- 上传时间:2023-01-05
- 格式:DOCX
- 页数:26
- 大小:134.50KB
实验三步进电机实验文档格式.docx
《实验三步进电机实验文档格式.docx》由会员分享,可在线阅读,更多相关《实验三步进电机实验文档格式.docx(26页珍藏版)》请在冰豆网上搜索。
图1是该四相反应式步进电机工作原理示意图。
图1四相步进电机步进示意图
开始时,开关SB接通电源,SA、SC、SD断开,B相磁极和转子0、3号齿对齐,同时,转子的1、4号齿就和C、D相绕组磁极产生错齿,2、5号齿就和D、A相绕组磁极产生错齿。
当开关SC接通电源,SB、SA、SD断开时,由于C相绕组的磁力线和1、4号齿之间磁力线的作用,使转子转动,1、4号齿和C相绕组的磁极对齐。
而0、3号齿和A、B相绕组产生错齿,2、5号齿就和A、D相绕组磁极产生错齿。
依次类推,A、B、C、D四相绕组轮流供电,则转子会沿着A、B、C、D方向转动。
四相步进电机按照通电顺序的不同,可分为单四拍、双四拍、八拍三种工作方式。
单四拍与双四拍的步距角相等,但单四拍的转动力矩小。
八拍工作方式的步距角是单四拍与双四拍的一半,因此,八拍工作方式既可以保持较高的转动力矩又可以提高控制精度。
单四拍、双四拍与八拍工作方式的电源通电时序与波形分别如图2.a、b、c所示:
a.单四拍
b.双四拍
c八拍
图2.步进电机工作时序波形图
2、MAX7219驱动芯片
MAX9219典型的应用电路:
MAX7219的时序逻辑:
MAX7219的数据格式:
MAX7219可以显示的数字及字母:
【实验步骤】
1、硬件接线
●SPI_LED显示部分的接线说明:
实验模块(NLED)控制模块(ADSPSECTION)
DSPDIN(J17)SPISIMOA(J34)
DSP/CS(J17)SPITEA(J34)
DSPCLK(J17)SPICLKA(J34)
此外还需要NLED模块的J52对应管脚短接;
NLED模块的J18的VCC和DIS_VCC端接;
NLED模块供电J61(ADSPSECTION)的GND短接。
●步进电机部分的接线说明:
实验模块(IStepMotor)控制模块(ADSPSECTION)
PA(J22)PWM1(J36)
PB(J22)PWM3(J36)
PC(J22)PWM2(J36)
PD(J22)PWM4(J36)
按键模块(KKEYBOARD)控制模块(ADSPSECTION)说明
K1(J21)PWM7(J35)启动
K2(J21)PWM8(J35)停止
K3(J21)PWM9(J35)正转
K4(J21)PWM10(J35)反转
K5(J21)PWM11(J35)加速
K6(J21)PWM12(J35)减速
2、开启设备
①打开计算机电源,打开实验箱电源开关。
②如使用USB型仿真器用附带的USB电缆连接计算机和仿真器相应接口。
③设置CodeComposerStudio为Emulator方式。
④启动CodeComposerStudio。
3、打开工程并浏览程序。
4、编译并下载程序
5、运行程序,观察结果
①键K1控制电机启动;
②键K2控制电机停止;
③键K3控制电机正转;
④键K4控制电机反转;
⑤键K5控制电机加速;
⑥键K6控制电机减速;
同时在进行上述按键操作中,相应的LED端会有显示。
【试验程序】
.实验主程序;
#include"
DSP28_Device.h"
DSP28_Globalprototypes.h"
#definePhase_AGpioDataRegs.GPADAT.bit.GPIOA0//接PWM1,步进电机A相
#definePhase_CGpioDataRegs.GPADAT.bit.GPIOA1//接PWM2,步进电机B相
#definePhase_BGpioDataRegs.GPADAT.bit.GPIOA2//接PWM3,步进电机C相
#definePhase_DGpioDataRegs.GPADAT.bit.GPIOA3//接PWM4,步进电机D相
#defineStartGpioDataRegs.GPBDAT.bit.GPIOB0//接PWM7,启动
#defineStopGpioDataRegs.GPBDAT.bit.GPIOB1//接PWM8,停止
#definePosGpioDataRegs.GPBDAT.bit.GPIOB2//接PWM9,正转
#defineNegGpioDataRegs.GPBDAT.bit.GPIOB3//接PWM10,反转
#defineSpeedUpGpioDataRegs.GPBDAT.bit.GPIOB4//接PWM11,加速
#defineSpeedDownGpioDataRegs.GPBDAT.bit.GPIOB5//接PWM12,减速
#defineON1
#defineOFF0
#defineA1
#defineC2
#defineB3
#defineD4
#defineSTT0x01
#defineSTP0x02
#defineP0x03
#defineN0x04
#defineSUp0x05
#defineSDn0x06
unsignedintflag;
unsignedintssflag;
inttimer;
unsignedintkeytmp;
unsignedintKeyData;
unsignedintStartOrNot=0;
unsignedintNegOrPos=1;
unsignedintshownum;
inttimer1;
//MAX7219的相关变量
unsignedintSpi_VarRx[100];
unsignedinti,j;
externunsignedintInt_Flag;
unsignedintMF11;
unsignedintMF22;
unsignedintMF33;
voidGpio_select(void);
//GPIO设置
voidDelay_SM(unsignedintt);
//延时
voidStepMotor(intphase,intstatus);
//步进电机控制函数
voidstop(void);
//停止函数
unsignedcharScanKey(void);
//扫描按键值
voidMoDe1(unsignedintMF1,unsignedintt);
//步进电机工作模式1函数
voidMoDe2(unsignedintMF2,unsignedintt);
//步进电机工作模式2函数
voidMoDe3(unsignedintMF3,unsignedintt);
//步进电机工作模式3函数
//MAX7219函数
voidIntensity(intbrightness);
voidScanLimit(intdigits);
voidDisplayTest(void);
voidShutDown(intctrl);
voidDecodeMode(unsignedintw);
unsignedintBIN2BCD(unsignedintbin);
voidShowBCD(unsignedintbcd);
//主函数
voidmain(void)
{
unsignedintkb=0;
InitSysCtrl();
//禁止、清除所有CPU中断
DINT;
IER=0x0000;
IFR=0x0000;
//初始化PIE向量表
InitPieCtrl();
InitPieVectTable();
//MAX7219初始化
InitPeripherals();
Gpio_select();
#ifSpi_Int
EALLOW;
PieVectTable.SPITXINTA=&
SPITXINTA_ISR;
PieVectTable.SPIRXINTA=&
SPIRXINTA_ISR;
EDIS;
IER|=M_INT6;
#endif
/*开中断*/
EINT;
ERTM;
Intensity(11);
ScanLimit(7);
DisplayTest();
ShutDown(NO);
DecodeMode(0x0ff);
timer=2000;
StartOrNot=0;
NegOrPos=1;
stop();
while
(1)
{
//模式判断
if(MF11==1)
W2MAX7219(0x0701);
if(MF22==1)
W2MAX7219(0x0702);
if(MF33==1)
W2MAX7219(0x0703);
//分隔横线
W2MAX7219(0x050A);
if(StartOrNot==1&
&
NegOrPos==1)
MoDe2(1,timer);
if((Spi_TxReady()==1))
timer1=1000000/timer;
shownum=BIN2BCD(timer1);
ShowBCD(shownum);
W2MAX7219(0x060C);
}
elseif(StartOrNot==1&
NegOrPos==0)
MoDe2(0,timer);
if((Spi_TxReady()==1))
W2MAX7219(0x060D);
elsestop();
kb=ScanKey();
switch(kb)
caseSTT:
StartOrNot=1;
break;
caseSTP:
StepMotor(A,OFF);
StepMotor(C,OFF);
StepMotor(B,OFF);
StepMotor(D,OFF);
caseP:
NegOrPos=1;
caseN:
NegOrPos=0;
caseSUp:
if(SpeedUp==0)
timer=timer-10;
if(timer<
100)timer=101;
caseSDn:
if(SpeedDown==0)
timer=timer+10;
if(timer>
10000)timer=9999;
default:
}
voidGpio_select(void)
GpioMuxRegs.GPAMUX.all=0x0000;
GpioMuxRegs.GPADIR.all=0x000F;
GpioMuxRegs.GPAQUAL.all=0x0000;
;
GpioMuxRegs.GPBMUX.all=0x0000;
GpioMuxRegs.GPBDIR.all=0x0000;
GpioMuxRegs.GPBQUAL.all=0x0000;
}
voidDelay_SM(unsignedintt)
inti,j;
for(i=0;
i<
t;
i++)
{for(j=0;
j<
200;
j++);
//单拍方式
voidMoDe1(unsignedintMF1,unsignedintt)
if(MF1==1)
StepMotor(A,ON);
Delay_SM(t);
StepMotor(C,ON);
StepMotor(B,ON);
StepMotor(B,OFF);
StepMotor(D,ON);
}else
MF11=MF1;
//双拍方式
voidMoDe2(unsignedintMF2,unsignedintt)
if(MF2==1)
}
MF22=MF2;
//单双拍结合
voidMoDe3(unsignedintMF3,unsignedintt)
if(MF3==1)
MF33=MF3;
voidStepMotor(intphase,intstatus)
switch(phase)
caseA:
if(status==ON)
Phase_A=ON;
}else
Phase_A=OFF;
caseB:
Phase_B=ON;
Phase_B=OFF;
caseC:
Phase_C=ON;
Phase_C=OFF;
caseD:
Phase_D=ON;
Phase_D=OFF;
voidstop(void)
unsignedcharScanKey(void)
{
GpioMuxRegs.GPBDIR.all=0x0FFFF;
GpioDataRegs.GPBSET.all=0x003F;
GpioDataRegs.GPBCLEAR.all=0x0FFC0;
Delay_SM(1000);
keytmp=GpioDataRegs.GPBDAT.all;
/*if(keytmp==0x003F)
flag=0;
while(flag==0)
keytmp=GpioDataRegs.GPBDAT.all&
0x003F;
flag=1;
}*/
switch(keytmp&
0x003F)
case0x003E:
KeyData=STT;
case0x003D:
KeyData=STP;
case0x003B:
KeyData=P;
case0x0037:
KeyData=N;
case0x002F:
//while(SpeedUp==0);
KeyData=SUp;
case0x001F:
KeyData=SDn;
return(KeyData);
2.MAX7219相关函数程序。
unsignedintInt_Flag;
interruptvoidISRTimer2(void)
Int_Flag=1;
/**********************************
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 实验 步进 电机