步进电机驱动正转反转.docx
- 文档编号:29894808
- 上传时间:2023-08-03
- 格式:DOCX
- 页数:19
- 大小:16.93KB
步进电机驱动正转反转.docx
《步进电机驱动正转反转.docx》由会员分享,可在线阅读,更多相关《步进电机驱动正转反转.docx(19页珍藏版)》请在冰豆网上搜索。
步进电机驱动正转反转
/*文件名:
main.c
*功能:
LED显示控制。
*通过GPIO控制步进电机
*说明:
将跳线JP14和JP19全部短接。
****************************************************************************/
#include"config.h"
#defineMOTOA1<<10//P0.10
#defineMOTOB1<<11//P0.11
#defineMOTOC1<<12//P0.12
#defineMOTOD1<<13//P0.13
#definekey11<<16//A-B-C-D
#definekey21<<17//AB-BC-CD-DA-AB
#definekey31<<18//A-AB-B-BC-C-CD-D-DA-A
#definekey41<<19//反转
#definekey51<<20//停止
#defineKEYCON0x001f0000//LED控制字
#defineMOTOCON0x00003c00//MOTO控制字
#defineGPIOSET(PIN)IO0SET=PIN//便修改置位端口
#defineGPIOCLR(PIN)IO0CLR=PIN//便修改清位端口
#defineRS1<<9//P0.9
#defineSID1<<6//P0.6
#defineE1<<4//P0.4
#definePSB1<<2//P0.2并行或串行,选择低电平串行模式
#defineRST1<<25//P1.25,复位脚
unsignedcharIC_DAT1[64]="电机运行式组成:
A-B-C-D单四拍步距角1.8";
unsignedcharIC_DAT2[64]="电机运行式组成:
AB-BC-CD-DA双四拍步距角0.9";
unsignedcharIC_DAT3[64]="电机运行式组为A-AB-B-BC-C-CD-D单双八拍步距角0.45";
unsignedcharIC_DAT4[64]="电机反转";
unsignedcharIC_DAT5[64]="电机停止";
unsignedcharIC_DAT6[64]="自动化0901班凯龙衡海龙步进电机细分控制卢祖起郭亚楠";
voidTransferCom(unsignedchardata0);
voidTransferData(unsignedchardata1);
voiddelay(unsignedintm);
voiddelay_10ms(uint32n);
voidlcd_mesg(unsignedchar*adder1);
voidDelayNS(uint32dly);
voidMOTO_Mode1(uint8i);//A-B-C-D
voidMOTO_Mode10(uint8i);
voidMOTO_Mode2(uint8i);//AB-BC-CD-DA-AB
voidMOTO_Mode20(uint8i);
voidMOTO_Mode3(uint8i);//A-AB-B-BC-C-CD-D-DA-A
voidMOTO_Mode30(uint8i);
/****************************************************************************
*名称:
main()
*功能:
根据表DISP_TAB来控制LED显示。
****************************************************************************/
intmain(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&key5)!
=0)
{
lcd_mesg(IC_DAT6);//显示界面
}
while
(1)
{
if((IO0PIN&key1)==0)
MOTO_Mode1(15);
if((IO0PIN&key4)==0)
MOTO_Mode10(20);
//A-B-C-D
if((IO0PIN&key2)==0)
MOTO_Mode2(15);
if((IO0PIN&key4)==0)
MOTO_Mode20(20);
//AB-BC-CD-DA-AB
if((IO0PIN&key3)==0)
MOTO_Mode3(8);
if((IO0PIN&key4)==0)
MOTO_Mode30(10);//A-AB-B-BC-C-CD-D-DA-A
if((IO0PIN&key5)==0)//停止
{
initinal();
lcd_mesg(IC_DAT5);
IO0CLR=MOTOCON;
};
}
return(0);
}
/****************************************************************************
*名称:
DelayNS()
*功能:
长软件延时
*入口参数:
dly延时参数,值越大,延时越久
*出口参数:
无
****************************************************************************/
voidDelayNS(uint32dly)
{uint32i;
for(;dly>0;dly--)
{
for(i=0;i<5000;i++);
}
}
/****************************************************************************
*名称:
MOTO_Mode1()
*功能:
单四拍程序
*入口参数:
uint8i延时参数,值越大,延时越久
*出口参数:
无
****************************************************************************/
voidMOTO_Mode1(uint8i)//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);
}
}
voidMOTO_Mode10(uint8i)//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()
*功能:
双四拍程序
*入口参数:
uint8i延时参数,值越大,延时越久
*出口参数:
无
****************************************************************************/
voidMOTO_Mode2(uint8i)//AB-BC-CD-DA-AB
{
initinal();
while((IO0PIN&key1)&&(IO0PIN&key3)&&(IO0PIN&key4)&&(IO0PIN&key5)!
=0)
{
lcd_mesg(IC_DAT2);//显示汉字界面2
GPIOSET(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);
}
}
voidMOTO_Mode20(uint8i)//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()
*功能:
单双八拍程序
*入口参数:
uint8i延时参数,值越大,延时越久
*出口参数:
无
****************************************************************************/
voidMOTO_Mode3(uint8i)//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);
}
}
voidMOTO_Mode30(uint8i)//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()
*功能:
延时程序
**************************************************************/
voiddelay(unsignedintm)
{
unsignedinti,j;
for(i=0;i for(j=0;j<50;j++); } /************************************************************* *名称: delay_10ms() *功能: 延时程序 **************************************************************/ voiddelay_10ms(uint32n) { uint32i,j; for(i=0;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设置。 RE=0.G=0,图片显示关 delay(100); TransferCom(0x0C);//D=1,显示开 delay(100); TransferCom(0x01);//清屏 delay_10ms (1); TransferCom(0x06);//模式设置,光标从右向左加1位移动 delay(100); } /**************************************************************** *名称: lcd_mesg() *功能: 在LCD12864上显示汉字 *****************************************************************/ voidlcd_mesg(unsignedchar*adder1) { unsignedchari; TransferCom(0x80); delay(100); for(i=0;i<32;i++) { TransferData(*adder1); adder1++; } TransferCom(0x90); delay(100); for(i=16;i<64;i++) { TransferData(*adder1); adder1++; } } /****************************************************************** *名称: SeddByte() *功能: 发送1字节数据 *******************************************************************/ voidSendByte(unsignedcharDbyte) { unsignedchari; for(i=0;i<8;i++) { IO0CLR=E; if((Dbyte&0x80)==0x80) IO0SET=SID; else IO0CLR=SID; Dbyte=Dbyte<<1;//左移一位 IO0SET=E; IO0CLR=E; } } /*************************************************************** *名称: TransferCom() *功能: 向LCD12864发送命令 ****************************************************************/ voidTransferCom(unsignedchardata0) { IO0SET=RS; SendByte(0xf8);//11111,RW(0),RS (1),0 SendByte(0xf0&data0);//高4位 SendByte(0xf0&data0<<4);//低4位 IO0CLR=RS; } /************************************************************* *名称: TransferData() *功能: 向LCD12864发送数据 **************************************************************/ voidTransferData(unsignedchardata1) { IO0SET=RS; SendByte(0xfa);//11111,RW(0),RS (1),0 SendByte(0xf0&data1);//高4位 SendByte(0xf0&data1<<4);//低4位 IO0CLR=RS; } /*************************************************************************************** *名称: LCD12864_init() *功能: LCD12864端口初始化函数 *****************************************************************************************/ LCD12864_init(void) { IO0DIR|=(E|SID|RS);//设置为输出 IO0CLR=(E|SID|RS); IO1DIR|=RST; IO1CLR=RST;//复位
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 步进 电机 驱动 反转