这是自己用4988步进电机驱动芯片做的,4988芯片一般用在3D打印机上,具有体积小等优点。下面有我的测试程序,希望可以给需要的人提供参考。
单片机源程序如下:
- /***************************************************************
- * 实 验 名 :步进电机实验
- * 实验说明 :电机启动、停止、正转、反转
- * 实验平台 :51单片机开发板
- * 连接方式 :pulse接P10 DIR接P11 KYE1接P20 KYE2接P21 KYE3接P22 KYE4接P23 ENABLE接P12 MS1-3接P13-P14
- * 注 意 :本例程使用了中断定时器,中断介绍会在下一实验中说明
- ****************************************************************************/
- #include <reg52.h>
- #include <intrins.h>
- #define FOSC 11059200L //晶振设置,默认使用11.0592M Hz
- //#define FOSC 12000000L //晶振设置,使用12M Hz
- //#define FOSC 24000000L //晶振设置,使用24M Hz
- #define TIME_MS 1 //设定定时时间 ms ,在11.0592M晶振下,不易超过60ms
- //IO接口定义
- sbit pulse = P1^0;//脉冲信号
- sbit Dir = P1^1; //正反转
- sbit EN = P1^2;
- sbit MS1 = P1^3;
- sbit MS2 = P1^4;
- sbit MS3 = P1^5;
- sbit KEY1 = P2^0; //启动
- sbit KEY2 = P2^1; //停止
- sbit KEY3 = P2^2; //正转
- sbit KEY4 = P2^3; //反转
- //全局变量定义
- unsigned char count=0;
- /*******************************************************************************
- * 函 数 名 :Delayms
- * 函数功能 :实现 ms级的延时
- * 输 入 :ms
- * 输 出 :无
- *******************************************************************************/
- void Delayms(unsigned int ms)
- {
- unsigned int i,j;
- for(i=0;i<ms;i++)
- #if FOSC == 11059200L
- for(j=0;j<114;j++);
- #elif FOSC == 12000000L
- for(j=0;j<123;j++);
- #elif FOSC == 24000000L
- for(j=0;j<249;j++);
- #else
- for(j=0;j<114;j++);
- #endif
- }
- /*******************************************************************************
- * 函 数 名 :Timer0Init
- * 函数功能 :定时器0初始化
- * 输 入 :无
- * 输 出 :无
- *******************************************************************************/
- void Timer0Init()
- {
- TMOD=0x01; //设置定时器0工作方式为1
- TH0=(65536-FOSC/12/1000*TIME_MS)/256;
- TL0=(65536-FOSC/12/1000*TIME_MS)%256;
- ET0=1; //开启定时器0中断
- // TR0=1; //开启定时器
- EA=1; //打开总中断
- }
- /*******************************************************************************
- * 函 数 名 :main
- * 函数功能 :主函数
- * 输 入 :无
- * 输 出 :无
- *******************************************************************************/
- void main()
- {
- Timer0Init();
- EN=0;
- MS1=0;
- MS2=0;
- MS3=0;
- while(1)
- {
- if(KEY1==0) //判断是否按下键盘
- {
- Delayms(10); //延时,软件去干扰
- if(KEY1==0) //确认按键按下
- {
- TR0=1;
- }
- while(KEY1==0);//按键锁定,每按一次count只加1.
- }
- if(KEY2==0) //判断是否按下键盘
- {
- Delayms(10); //延时,软件去干扰
- if(KEY2==0) //确认按键按下
- {
- TR0=0;
- }
- while(KEY2==0);//按键锁定,每按一次count只加1.
- }
-
- if(KEY3==0) //判断是否按下键盘
- {
- Delayms(10); //延时,软件去干扰
- if(KEY3==0) //确认按键按下
- {
- Dir=0;
- }
- while(KEY3==0);//按键锁定,每按一次count只加1.
- }
-
- if(KEY4==0) //判断是否按下键盘
- {
- Delayms(10); //延时,软件去干扰
- if(KEY4==0) //确认按键按下
- {
- Dir=1;
- }
- while(KEY4==0);//按键锁定,每按一次count只加1.
- }
-
-
- }
- }
- /*******************************************************************************
- ……………………
- …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码
所有资料51hei提供下载:
A4988步进电机实验.rar
(23.64 KB, 下载次数: 811)
|