历史上的今天
今天是:2025年01月03日(星期五)
2020年01月03日 | A4988步进电机单片机驱动程序
2020-01-03 来源:51hei
这是自己用4988步进电机驱动芯片做的,4988芯片一般用在3D打印机上,具有体积小等优点。下面有我的测试程序,希望可以给需要的人提供参考。
单片机源程序如下:
/***************************************************************
* 实 验 名 :步进电机实验
* 实验说明 :电机启动、停止、正转、反转
* 实验平台 :51单片机开发板
* 连接方式 :pulse接P10 DIR接P11 KYE1接P20 KYE2接P21 KYE3接P22 KYE4接P23 ENABLE接P12 MS1-3接P13-P14
* 注 意 :本例程使用了中断定时器,中断介绍会在下一实验中说明
****************************************************************************/
#include #include #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 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. } } } /******************************************************************************* ……………………
史海拾趣
|
快要毕业了,发现毕业设计完全搞不懂(感觉更像物理专业的人做的-_-|:( )。网上又找不到资料,老师又没什么帮助,我现在着急的很。希望这方面的达人给我些帮助,或者有这方面的资料的给我发一下。非常感谢 题目:CRT彩显高压产生原理及应用--对设 ...… 查看全部问答> |
|
通过这几天的摸索,我终于成功写出一个读取GPS信息的串口程序! 它基于windowsMobile5.0 ppc 程序 在多普达p800中测试通过。 在这里共享给大家! 如果大家有新的思路和方法,咱们也可以一起讨论和研究! 我的妹儿yunfeng83@163. ...… 查看全部问答> |
|
大家好: 最近公司做个项目,需要其它公司提供手持终端,但就选择什么系统的手持终端机产生了疑惑。有的公司用的是linux系统的,有的是windowsCE。当然,设计人员各执己见了,说不同的系统有各自的弊端和优点。 所以 ...… 查看全部问答> |
|
关于SSDT HOOK后通过事件通知应用程序问题 HOOK SSDT应该没有问题通过DbgPrint在自己的函数中显示被HOOK的信息一切正常但是通过事件通知应用程序时却有时候会蓝屏 驱动: 在列程序IRP_MJ_WRITE中 通过 RtlCopyMemory(&hEventApp,Irp->Associa ...… 查看全部问答> |
|
针对Altera Stratix IV EP4SGX360 和 EP4SGX530 器件的电源参考设计 Altera® Stratix™ IV FPGA EP4SGX360及EP4SGX530参考设计展示了TI配电系统插入式电源模块… 查看全部问答> |
|
杭州奇比电子产品有限公司诚聘以下岗位:岗位名称:LED产品销售 区域经理(急)岗位职责:1、负责LED灯具和显示屏产品销售;2、制定区域市场营销计划并完成指标;3、收集和分析市场信息,进行客户分析、发展、建立良好的客户关系和客户档案;4、建 ...… 查看全部问答> |
|
我们从德仪e2e博客http://e2e.ti.com/blogs_/default.aspx的多核产品园地博客中发现了很多关于多核应用的好文章,我们翻译、分享一些给大家。 本文重点通过支持多核协会 MCAPI 的可扩展编程模型优化多核 DSP 平台的性能与可移植性。 欲知更多多 ...… 查看全部问答> |




