欢迎大家来到IT世界,在知识的湖畔探索吧!
单片机控制步进电机程序(含电路原理图和程序)
1、设计电路:
主要元件:与门AND_5(5路),ULN2003A(放大电压用来驱动电机),AT89C52,步进电机MOTOR-STEPPER
步进电机连接电路图
欢迎大家来到IT世界,在知识的湖畔探索吧!
2、编写程序:
#include #define uint unsigned int #define uchar unsigned #include #define uint unsigned int #define uchar unsigned char int state = 0; char int state = 0; //定义电机的状态 state = 1 正转 state = -1电机反转 state = 0 电机停止 uint time = 50; //定义延时时间 int step[8]={0x01,0x03,0x02,0x06,0x04,0x0c,0x08,0x09};//每一步的通电顺序 //几个控制开关量 sbit drive = P3^5; sbit stop = P3^6; sbit re_drive = P3^7; sbit add = P3^1; sbit reduce = P3^0; //延时程序 x*10ms void Delay_xms(uint x) { uint i,j; for(i=0;i<x;i++) for(j=0;j<112;j++);//10ms } //反转 void Move_reverse(uint time) { uint i; for(i= 0;i < 8;i++) { P2 = step[i]; Delay_xms(time); } } //正转 void Move(uint time) { int i; for(i= 7;i >= 0;i--) { P2 = step[i]; Delay_xms(time); } } //定义外部中断INT0的中断函数 开关量变化时做出反应 void ChangeState() interrupt 0 { if(!drive) { state = 1; drive = 1; } if(!stop) { state = 0; stop = 1; } if(!re_drive) { state = -1; re_drive = 1; } if(!add) { time -= 10; add = 1; if(time <= 10) time = 10; } if(!reduce) { time += 10; reduce = 1; if(time >= 100) time = 100; } } void main() { EA = 1; //EA (IE.7), CPU中断允许(总允许)位。 EX0 = 1; //EX0(IE.0),外部中断0允许位 IE0(TCON.1),外部中断0中断请求标志位。 IT0 = 1; //定义下降沿触发 while(1) { switch(state) { case 1: Move(time); break; case 0: Delay_xms(10); break; case -1: Move_reverse(time); break; } } } // 由于编辑器排版问题,没办法做到代码对齐
欢迎大家来到IT世界,在知识的湖畔探索吧!
3、运行结果:
运行结果
来自:https://zhuanlan.zhihu.com/p/
觉得文章不错,收藏的同时,麻烦点个赞~~~~~
关注微信公众号『混说Linux』
你也可以继续阅读 点击 以下文章,下面是我推荐给大家的几篇文章:
1.《竟然把通信协议讲的如此通俗?》
2.《Linux为什么使用内核模块?》
3.《Linux为什么区分内核空间和用户空间?》
4.《常见硬件通信(SPI、I2C、CAN、USB、UART)协议介绍》
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://itzsg.com/94634.html