步进电机驱动正转反转

  • 格式:doc
  • 大小:56.00 KB
  • 文档页数:12

/* 文件名:main.c* 功能:LED显示控制。

* 通过GPIO控制步进电机* 说明:将跳线JP14和JP19全部短接。

****************************************************************************/#include "config.h"#define MOTOA 1<<10 // P0.10#define MOTOB 1<<11 // P0.11#define MOTOC 1<<12 // P0.12#define MOTOD 1<<13 // P0.13#define key1 1<<16 // A-B-C-D#define key2 1<<17 // AB-BC-CD-DA-AB#define key3 1<<18 // A-AB-B-BC-C-CD-D-DA-A#define key4 1<<19 //反转#define key5 1<<20 //停止#define KEYCON 0x001f0000 // LED控制字#define MOTOCON 0x00003c00 // MOTO控制字#define GPIOSET(PIN) IO0SET = PIN // 方便修改置位端口#define GPIOCLR(PIN) IO0CLR = PIN // 方便修改清位端口#define RS 1<<9 //P0.9#define SID 1<<6 //P0.6#define E 1<<4 //P0.4#define PSB 1<<2 //P0.2并行或串行,选择低电平串行模式#define RST 1<<25 //P1.25,复位脚unsigned char IC_DAT1[64]="电机运行方式组成: A-B-C-D 单四拍步距角 1.8 ";unsigned char IC_DAT2[64]="电机运行方式组成: AB-BC-CD-DA 双四拍步距角0.9 ";unsigned char IC_DAT3[64]="电机运行方式组为A-AB-B-BC-C-CD-D 单双八拍步距角0.45 ";unsigned char IC_DAT4[64]=" 电机反转";unsigned char IC_DAT5[64]=" 电机停止";unsigned char IC_DAT6[64]=" 自动化0901班张凯龙衡海龙步进电机细分控制卢祖起郭亚楠";void TransferCom(unsigned char data0);void TransferData(unsigned char data1);void delay(unsigned int m);void delay_10ms(uint32 n);void lcd_mesg(unsigned char *adder1);void DelayNS(uint32 dly);void MOTO_Mode1(uint8 i); // A-B-C-Dvoid MOTO_Mode10(uint8 i);void MOTO_Mode2(uint8 i); // AB-BC-CD-DA-ABvoid MOTO_Mode20(uint8 i);void MOTO_Mode3(uint8 i); // A-AB-B-BC-C-CD-D-DA-Avoid MOTO_Mode30(uint8 i);/***************************************************************************** 名称:main()* 功能:根据表DISP_TAB来控制LED显示。

****************************************************************************/int main(void){/* PINSEL2使用启动代码的默认配置,切勿任意配置PINSEL2,否则总线会受到干扰*/PINSEL0=0x00000000;PINSEL1=0X00000000;PINSEL2&=~(0x00000006); //设置所有I/O口为普通GPIO 口IO0DIR =MOTOCON; // 配置LED控制I/O方向LCD12864_init();initinal(); //液晶端口初始化while((IO0PIN&key1)&&(IO0PIN&key2)&&(IO0PIN&key3)&&(IO0PIN&key4)&&(IO0PIN&key 5)!=0){lcd_mesg(IC_DAT6); //显示界面}while(1){if ((IO0PIN&key1)==0)MOTO_Mode1(15);if((IO0PIN&key4)==0)MOTO_Mode10(20);// A-B-C-Dif ((IO0PIN&key2)==0)MOTO_Mode2(15);if((IO0PIN&key4)==0)MOTO_Mode20(20);// AB-BC-CD-DA-ABif ((IO0PIN&key3)==0)MOTO_Mode3(8);if((IO0PIN&key4)==0)MOTO_Mode30(10); // A-AB-B-BC-C-CD-D-DA-Aif((IO0PIN&key5)==0) // 停止{initinal();lcd_mesg(IC_DAT5);IO0CLR=MOTOCON;};}return(0);}/***************************************************************************** 名称:DelayNS()* 功能:长软件延时* 入口参数:dly 延时参数,值越大,延时越久* 出口参数:无****************************************************************************/void DelayNS(uint32 dly){ uint32 i;for(; dly>0; dly--){for(i=0; i<5000; i++);}}/***************************************************************************** 名称:MOTO_Mode1()* 功能:单四拍程序* 入口参数:uint8 i 延时参数,值越大,延时越久* 出口参数:无****************************************************************************/void MOTO_Mode1(uint8 i) // A-B-C-D{initinal();while((IO0PIN&key2)&&(IO0PIN&key3)&&(IO0PIN&key4)&&(IO0PIN&key5)!=0){lcd_mesg(IC_DAT1); //显示汉字界面1/* A */GPIOSET(MOTOA);DelayNS(i);GPIOCLR(MOTOA);/* B */GPIOSET(MOTOB);DelayNS(i);GPIOCLR(MOTOB);/* C */GPIOSET(MOTOC);DelayNS(i);GPIOCLR(MOTOC);/* D */GPIOSET(MOTOD);DelayNS(i);GPIOCLR(MOTOD);}}void MOTO_Mode10(uint8 i) // A-B-C-D{initinal();while((IO0PIN&key1)&&(IO0PIN&key2)&&(IO0PIN&key3)&&(IO0PIN&key5)!=0) {lcd_mesg(IC_DAT4);/* D */GPIOSET(MOTOD);DelayNS(i);GPIOCLR(MOTOD);/* C */GPIOSET(MOTOC);DelayNS(i);GPIOCLR(MOTOC);/* B */GPIOSET(MOTOB);DelayNS(i);GPIOCLR(MOTOB);/* A */GPIOSET(MOTOA);DelayNS(i);GPIOCLR(MOTOA);}}/***************************************************************************** 名称:MOTO_Mode2()* 功能:双四拍程序* 入口参数:uint8 i 延时参数,值越大,延时越久* 出口参数:无****************************************************************************/void MOTO_Mode2(uint8 i) // AB-BC-CD-DA-AB{initinal();while((IO0PIN&key1)&&(IO0PIN&key3)&&(IO0PIN&key4)&&(IO0PIN&key5)!=0) {lcd_mesg(IC_DAT2); //显示汉字界面2GPIOSET(MOTOA);GPIOSET(MOTOB);DelayNS(i);GPIOCLR(MOTOA);GPIOCLR(MOTOB);/* BC */GPIOSET(MOTOB);GPIOSET(MOTOC);DelayNS(i);GPIOCLR(MOTOB);GPIOCLR(MOTOC);/* CD */GPIOSET(MOTOC);GPIOSET(MOTOD);DelayNS(i);GPIOCLR(MOTOC);GPIOCLR(MOTOD);/* DA */GPIOSET(MOTOD);GPIOSET(MOTOA);DelayNS(i);GPIOCLR(MOTOD);GPIOCLR(MOTOA);}}void MOTO_Mode20(uint8 i) // AB-BC-CD-DA-AB{initinal();while((IO0PIN&key1)&&(IO0PIN&key2)&&(IO0PIN&key3)&&(IO0PIN&key5)!=0) {lcd_mesg(IC_DAT4);GPIOSET(MOTOA);GPIOSET(MOTOD);DelayNS(i);GPIOCLR(MOTOA);GPIOCLR(MOTOD);/* DC */GPIOSET(MOTOD);GPIOSET(MOTOC);DelayNS(i);GPIOCLR(MOTOD);GPIOCLR(MOTOC);/* CB */GPIOSET(MOTOC);GPIOSET(MOTOB);DelayNS(i);GPIOCLR(MOTOC);GPIOCLR(MOTOB);/* BA */GPIOSET(MOTOB);GPIOSET(MOTOA);DelayNS(i);GPIOCLR(MOTOB);GPIOCLR(MOTOA);}}/***************************************************************************** 名称:MOTO_Mode3()* 功能:单双八拍程序* 入口参数:uint8 i 延时参数,值越大,延时越久* 出口参数:无****************************************************************************/void MOTO_Mode3(uint8 i) // A-AB-B-BC-C-CD-D-DA-A{initinal();while((IO0PIN&key1)&&(IO0PIN&key2)&&(IO0PIN&key4)&&(IO0PIN&key5)!=0) {lcd_mesg(IC_DAT3);/* A */GPIOSET(MOTOA);DelayNS(i);GPIOCLR(MOTOA);/* AB */GPIOSET(MOTOA);GPIOSET(MOTOB);DelayNS(i);GPIOCLR(MOTOA);GPIOCLR(MOTOB);/* B */GPIOSET(MOTOB);DelayNS(i);GPIOCLR(MOTOB);/* BC */GPIOSET(MOTOB);GPIOSET(MOTOC);DelayNS(i);GPIOCLR(MOTOB);GPIOCLR(MOTOC);/* C */GPIOSET(MOTOC);DelayNS(i);GPIOCLR(MOTOC);/* CD */GPIOSET(MOTOC);GPIOSET(MOTOD);DelayNS(i);GPIOCLR(MOTOC);GPIOCLR(MOTOD);/* D */GPIOSET(MOTOD);DelayNS(i);GPIOCLR(MOTOD);/* DA */GPIOSET(MOTOD);GPIOSET(MOTOA);DelayNS(i);GPIOCLR(MOTOD);GPIOCLR(MOTOA);}}void MOTO_Mode30(uint8 i) // A-AB-B-BC-C-CD-D-DA-A{initinal();while((IO0PIN&key1)&&(IO0PIN&key2)&&(IO0PIN&key3)&&(IO0PIN&key5)!=0) {lcd_mesg(IC_DAT4);/* D */GPIOSET(MOTOD);DelayNS(i);GPIOCLR(MOTOD);/* CD */GPIOSET(MOTOC);GPIOSET(MOTOD);DelayNS(i);GPIOCLR(MOTOC);GPIOCLR(MOTOD);/* C */GPIOSET(MOTOC);DelayNS(i);GPIOCLR(MOTOC);/* BC */GPIOSET(MOTOB);GPIOSET(MOTOC);DelayNS(i);GPIOCLR(MOTOB);GPIOCLR(MOTOC);/* B */GPIOSET(MOTOB);DelayNS(i);GPIOCLR(MOTOB);/* AB */GPIOSET(MOTOA);GPIOSET(MOTOB);DelayNS(i);GPIOCLR(MOTOA);GPIOCLR(MOTOB);/* A */GPIOSET(MOTOA);DelayNS(i);GPIOCLR(MOTOA);/* DA */GPIOSET(MOTOD);GPIOSET(MOTOA);DelayNS(i);GPIOCLR(MOTOD);GPIOCLR(MOTOA);}}/************************************************************** 名称:delay()* 功能:延时程序**************************************************************/void delay(unsigned int m){unsigned int i,j;for(i=0;i<m;i++)for(j=0;j<50;j++);}/************************************************************** 名称:delay_10ms()* 功能:延时程序**************************************************************/void delay_10ms(uint32 n){uint32 i,j;for(i=0;i<n;i++)for(j=0;j<2000;j++);}/************************************************************** 名称:initinal()* 功能:LCD12864字库初始化**************************************************************/initinal(void){delay_10ms(4); //大于40ms的延时程序IO0SET=PSB; //设置为串行工作方式delay(1);IO1CLR=RST; //复位delay(1);IO1SET=RST; //复位置高delay(10);TransferCom(0x30); //8bit设置。