ImageVerifierCode 换一换
格式:DOCX , 页数:26 ,大小:134.50KB ,
资源ID:6332706      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/6332706.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(实验三步进电机实验.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

实验三步进电机实验.docx

1、实验三步进电机实验步进电机控制及LED显示【实验目的】1了解四相步进电机的工作原理; 2. 熟练使用SPI接口,并通过SPI接口控制LED显示;3学习使用TMS320C28XDSP的通用I/O端口控制外围设备信息的方法,掌握使用TMS320C28XDSP通用计时器的控制原理及中断服务程序的编程方法。学会利用DSP的通用I/O口进行步进电机的控制; 【实验要求】编程要求:编写C语言程序,学会步进电机的工作原理和控制方法。实现功能:DSP控制步进电机的启动,停止,正反转和速度控制。并通过LED显示步进电机的转速、正传(H表示)、反转(L表示)、工作方式(1表示单拍方式;2表示双拍方式;3表示单双拍

2、结合方式)。 【实验设备】装有Windows系统和CCS 2.3 (C2000)集成开发环境的PC机一台、TMS320C28X系列DSP实验箱一个、SEED-XDSusb2.0仿真器一个。本实验用到的实验箱硬件模块为:TMS320C28X DSP核心、四相步进电机模块以及LED显示模块。 【实验原理】TMS320C28X系列DSP实验箱是一个以TMS320C28XDSP为核心的DSP扩展评估板,它通过扩展接口与实验箱的显示/控制模块连接,可以控制其各种外围设备。步进电机驱动原理是通过对它每相线圈中的电流顺序切换来使电机做步进式旋转。本实验中的步进电机是由DSP通用I/O管脚输出直接控制,由UL

3、N2003A驱动。DSP2812的通用I/O口PWM7控制电机启动,PWM8控制电机停止,PWM9控制电机正转,PWM10控制电机反转,PWM11控制电机加速,PWM12控制电机减速。驱动电路由脉冲信号来控制,所以调节定时器脉冲信号的频率可以改变步进电机的加速/减速。步进电机的工作模式是在主函数中修改,同时在LED显示其工作模式。主程序流程图:【实验相关知识】1、步进电机工作原理该步进电机为一四相步进电机,采用单极性直流电源供电。只要对步进电机的各相绕组按合适的时序通电,就能使步进电机步进转动。图1是该四相反应式步进电机工作原理示意图。图1 四相步进电机步进示意图开始时,开关SB接通电源,SA

4、、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方向转动。四相步进电机按照通电顺序的不同,可分为单四拍、双四拍、八拍三种工作方式。单四拍与双四拍的步距角相等,但单四拍的转动力矩小。八拍工作方式的步距角是单四拍与双四拍的一半,

5、因此,八拍工作方式既可以保持较高的转动力矩又可以提高控制精度。单四拍、双四拍与八拍工作方式的电源通电时序与波形分别如图2.a、b、c所示: a. 单四拍b. 双四拍 c八拍图2.步进电机工作时序波形图2、MAX7219驱动芯片MAX9219典型的应用电路:MAX7219的时序逻辑:MAX7219的数据格式:MAX7219可以显示的数字及字母:【实验步骤】1、硬件接线 SPI_LED显示部分的接线说明:实验模块(N LED) 控制模块(A DSP SECTION)DSPDIN(J17) SPISIMOA(J34)DSP/CS(J17) SPITEA(J34)DSPCLK(J17) SPICLKA

6、(J34)此外还需要N LED模块的J52对应管脚短接;N LED模块的J18的VCC和DIS_VCC端接;N LED模块供电J61(A DSP SECTION)的GND短接。 步进电机部分的接线说明:实验模块(I Step Motor) 控制模块(A DSP SECTION) PA(J22) PWM1(J36) PB(J22) PWM3(J36) PC(J22) PWM2(J36) PD(J22) PWM4(J36) 按键模块(K KEY BOARD) 控制模块(A DSP SECTION) 说明K1(J21) PWM7(J35) 启动K2(J21) PWM8(J35) 停止K3(J21)

7、PWM9(J35) 正转K4(J21) PWM10(J35) 反转K5(J21) PWM11(J35) 加速K6(J21) PWM12(J35) 减速2、 开启设备 打开计算机电源,打开实验箱电源开关。 如使用USB型仿真器用附带的USB电缆连接计算机和仿真器相应接口。 设置Code Composer Studio为Emulator方式 。启动Code Composer Studio 。3、打开工程并浏览程序。4、编译并下载程序 5、运行程序,观察结果 键K1控制电机启动;键K2控制电机停止;键K3控制电机正转;键K4控制电机反转;键K5控制电机加速;键K6控制电机减速;同时在进行上述按键操作

8、中,相应的LED端会有显示。【试验程序】实验主程序;#include DSP28_Device.h#include DSP28_Globalprototypes.h#define Phase_A GpioDataRegs.GPADAT.bit.GPIOA0 /接PWM1,步进电机A相#define Phase_C GpioDataRegs.GPADAT.bit.GPIOA1 /接PWM2,步进电机B相#define Phase_B GpioDataRegs.GPADAT.bit.GPIOA2 /接PWM3,步进电机C相#define Phase_D GpioDataRegs.GPADAT.bi

9、t.GPIOA3 /接PWM4,步进电机D相#define Start GpioDataRegs.GPBDAT.bit.GPIOB0 /接PWM7,启动#define Stop GpioDataRegs.GPBDAT.bit.GPIOB1 /接PWM8,停止#define Pos GpioDataRegs.GPBDAT.bit.GPIOB2 /接PWM9,正转#define Neg GpioDataRegs.GPBDAT.bit.GPIOB3 /接PWM10,反转#define SpeedUp GpioDataRegs.GPBDAT.bit.GPIOB4 /接PWM11,加速#define S

10、peedDown GpioDataRegs.GPBDAT.bit.GPIOB5 /接PWM12,减速#define ON 1#define OFF 0#define A 1#define C 2#define B 3#define D 4#define STT 0x01#define STP 0x02#define P 0x03#define N 0x04#define SUp 0x05#define SDn 0x06unsigned int flag;unsigned int ssflag;int timer;unsigned int keytmp;unsigned int KeyData;

11、unsigned int StartOrNot = 0;unsigned int NegOrPos = 1;unsigned int shownum;int timer1;/MAX7219的相关变量unsigned int Spi_VarRx100;unsigned int i,j;extern unsigned int Int_Flag;unsigned int MF11;unsigned int MF22;unsigned int MF33;void Gpio_select(void); /GPIO设置void Delay_SM(unsigned int t); /延时void StepM

12、otor(int phase,int status); /步进电机控制函数void stop(void); /停止函数unsigned char ScanKey(void); /扫描按键值void MoDe1(unsigned int MF1,unsigned int t); /步进电机工作模式1函数void MoDe2(unsigned int MF2,unsigned int t); /步进电机工作模式2函数void MoDe3(unsigned int MF3,unsigned int t); /步进电机工作模式3函数/MAX7219函数void Intensity(int bright

13、ness);void ScanLimit(int digits);void DisplayTest(void);void ShutDown(int ctrl);void DecodeMode(unsigned int w);unsigned int BIN2BCD(unsigned int bin);void ShowBCD(unsigned int bcd);/主函数void main(void) unsigned int kb = 0; InitSysCtrl(); / 禁止、清除所有CPU中断 DINT; IER = 0x0000; IFR = 0x0000; / 初始化PIE向量表 I

14、nitPieCtrl(); InitPieVectTable(); /MAX7219初始化 InitPeripherals(); Gpio_select(); #if Spi_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

15、(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 = BIN

16、2BCD(timer1); ShowBCD(shownum); W2MAX7219(0x060C); else if(StartOrNot=1 & NegOrPos=0) MoDe2(0,timer); if(Spi_TxReady() = 1) timer1=1000000/timer; shownum = BIN2BCD(timer1); ShowBCD(shownum); W2MAX7219(0x060D); else stop(); kb = ScanKey(); switch(kb) case STT: StartOrNot = 1; break; case STP: StepMot

17、or(A,OFF); StepMotor(C,OFF); StepMotor(B,OFF); StepMotor(D,OFF); StartOrNot = 0; break; case P: if(StartOrNot=1 & NegOrPos=0) NegOrPos=1; break; case N: if(StartOrNot=1 & NegOrPos=1) NegOrPos=0; break; case SUp: if(SpeedUp = 0) timer = timer-10; if(timer 10000) timer = 9999; break; default: break; v

18、oid Gpio_select(void) EALLOW; GpioMuxRegs.GPAMUX.all=0x0000; GpioMuxRegs.GPADIR.all=0x000F; GpioMuxRegs.GPAQUAL.all=0x0000; GpioMuxRegs.GPBMUX.all=0x0000; GpioMuxRegs.GPBDIR.all=0x0000; GpioMuxRegs.GPBQUAL.all=0x0000; EDIS; void Delay_SM(unsigned int t) int i,j; for(i=0;it;i+) for(j=0;j200;j+); /单拍方

19、式void MoDe1(unsigned int MF1,unsigned int t) if(MF1 = 1) StepMotor(D,OFF); StepMotor(A,ON); Delay_SM(t); StepMotor(A,OFF); StepMotor(C,ON); Delay_SM(t); StepMotor(C,OFF); StepMotor(B,ON); Delay_SM(t); StepMotor(B,OFF); StepMotor(D,ON); Delay_SM(t); else StepMotor(C,OFF); StepMotor(A,ON); Delay_SM(t)

20、; StepMotor(A,OFF); StepMotor(D,ON); Delay_SM(t); StepMotor(D,OFF); StepMotor(B,ON); Delay_SM(t); StepMotor(B,OFF); StepMotor(C,ON); Delay_SM(t); MF11 = MF1; /双拍方式void MoDe2(unsigned int MF2,unsigned int t)if(MF2 = 1) StepMotor(D,OFF); StepMotor(A,ON); StepMotor(C,ON); Delay_SM(t); StepMotor(A,OFF);

21、 StepMotor(C,ON); StepMotor(B,ON); Delay_SM(t); StepMotor(C,OFF); StepMotor(B,ON); StepMotor(D,ON); Delay_SM(t); StepMotor(B,OFF); StepMotor(D,ON); StepMotor(A,ON); Delay_SM(t); else StepMotor(B,OFF); StepMotor(A,ON); StepMotor(C,ON); Delay_SM(t); StepMotor(C,OFF); StepMotor(D,ON); StepMotor(A,ON);

22、Delay_SM(t); StepMotor(A,OFF); StepMotor(B,ON); StepMotor(D,ON); Delay_SM(t); StepMotor(D,OFF); StepMotor(C,ON); StepMotor(B,ON); Delay_SM(t); MF22 = MF2;/单双拍结合void MoDe3(unsigned int MF3,unsigned int t) if(MF3 = 1) StepMotor(D,OFF); StepMotor(A,ON); Delay_SM(t); StepMotor(A,ON); StepMotor(C,ON); De

23、lay_SM(t); StepMotor(A,OFF); StepMotor(C,ON); Delay_SM(t); StepMotor(C,ON); StepMotor(B,ON); Delay_SM(t); StepMotor(C,OFF); StepMotor(B,ON); Delay_SM(t); StepMotor(B,ON); StepMotor(D,ON); Delay_SM(t); StepMotor(B,OFF); StepMotor(D,ON); Delay_SM(t); StepMotor(D,ON); StepMotor(A,ON); Delay_SM(t); else

24、 StepMotor(C,OFF); StepMotor(A,ON); Delay_SM(t); StepMotor(D,ON); StepMotor(A,ON); Delay_SM(t); StepMotor(A,OFF); StepMotor(D,ON); Delay_SM(t); StepMotor(B,ON); StepMotor(D,ON); Delay_SM(t); StepMotor(D,OFF); StepMotor(B,ON); Delay_SM(t); StepMotor(C,ON); StepMotor(B,ON); Delay_SM(t); StepMotor(B,OF

25、F); StepMotor(C,ON); Delay_SM(t); StepMotor(A,ON); StepMotor(C,ON); Delay_SM(t); MF33 = MF3; void StepMotor(int phase,int status) switch(phase) case A: if(status=ON) Phase_A = ON; else Phase_A = OFF; break; case B: if(status=ON) Phase_B = ON; else Phase_B = OFF; break; case C: if(status=ON) Phase_C

26、= ON; else Phase_C = OFF; break; case D: if(status=ON) Phase_D = ON; else Phase_D = OFF; break; default: break; void stop(void) StepMotor(A,OFF); StepMotor(C,OFF); StepMotor(B,OFF); StepMotor(D,OFF);unsigned char ScanKey(void) EALLOW; GpioMuxRegs.GPBDIR.all=0x0FFFF; EDIS; GpioDataRegs.GPBSET.all = 0

27、x003F; GpioDataRegs.GPBCLEAR.all = 0x0FFC0; Delay_SM(1000); EALLOW; GpioMuxRegs.GPBDIR.all=0x0000; EDIS; 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) case 0x003E: KeyD

28、ata = STT; break; case 0x003D: KeyData = STP; break; case 0x003B: KeyData = P; break; case 0x0037: KeyData = N; break; case 0x002F: if(SpeedUp = 0) /while(SpeedUp = 0); KeyData = SUp; break; case 0x001F: KeyData = SDn; break; default: break; return(KeyData); 2MAX7219相关函数程序。#include DSP28_Device.hunsigned int Int_Flag;interrupt void ISRTimer2(void) Int_Flag = 1; /*

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1