单片机51—步进电机的设计
禁止作为商用,仅供学习交流。
0.本文主要内容
本文主要介绍了为实现步进电机的控制,先在电脑编写程序,仿真成功后,在进行实物的制作,最终独立自主的完成51单片机的编程,硬件电路的设计,画原理图,画PCB板,购买电子元器件,PCB板的焊接和检测,实物的展示等工作。 个人的观点,这个设计的现实意义不大,因为步进电机真正特点是利用脉冲信号去控制步进电机转动的角度。主要用于房间空调器分体系列室内机导风板、暖风器导风板、移动空调、壁炉更洁宝和各种智能气阀(燃气热水器、燃气灶等)。转动的速度很慢不占优势。(为什么我做了呢?因为这是一个课程设计。哈哈)
1.主要功能
本设计可采用STC89C51/52、AT89S51/52或AT89C51/52单片机作为主控制器; (1)按键功能: ? 按键1:正转 ? 按键2:反转 ? 按键3:速度加 ? 按键4:速度减 ? 按键5:暂停/开始 (2)LED使用:五个红色LED,一个为电源指示,四个指示电机的转速。
2.Proteus软件仿真
(1)硬件电路 四位数码管为共阴极的。 4相5线步进电机28YBJ-48 28BYJ48不熟悉,你可以不用管,你只要知道对它输送一定的脉冲波形他就可以转动就行了。 uchar code turn[ ]={0x02,0x06,0x04,0x0c,0x80,0x09,0x01,0x03};//正转脉冲顺序 uchar code durn[ ]={0x03,0x01,0x09,0x80,0x0c,0x04,0x06,0x02};//反转脉冲顺序 仿真文件在文末连接 (2)软件程序
#include "reg51.h"
#define uchar unsigned char
#define uint unsigned int
#define out P2
uchar code turn[ ]={0x02,0x06,0x04,0x0c,0x80,0x09,0x01,0x03};
uchar code durn[ ]={0x03,0x01,0x09,0x80,0x0c,0x04,0x06,0x02};
uchar code smgduan[17]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};
uchar i;
uint dang=0;
uint fang;
uint ci=0;
uint dan;
uint fan;
uchar gao;
uchar di;
sbit P34=P3^4;
sbit P35=P3^5;
sbit P36=P3^6;
sbit P37=P3^7;
void delayms(uint j)
{
uchar a;
for(;j>0;j--)
{
a=250;
while(--a);
a=249;
while(--a);
}
}
void xuan( )
{
P1=0Xff;
if(P1!=0xff)
{
delayms(100);
if(P1!=0xff)
{
switch(~P1)
{
case(0x01):if(i<8) {i++;} else{i=0;} out=turn[i];fang=1;delayms(50);break;
case(0x02):if(i<8) {i++;} else{i=0;} out=durn[i];fang=0;delayms(50);break;
case(0x04):dang++;break;
case(0x08):dang--;if(dang>15){dang=0;};break;
}
}
}
}
void DigDisplay()
{
uint j;
for(j=0;j<4;j++)
{
switch(j)
{
case(0):P34=0;P0=~smgduan[fang];break;
case(1):P35=0;P0=0x40;break;
case(2):P36=0;P0=~smgduan[dang/10%10];break;
case(3):P37=0;P0=~smgduan[dang%10];break;
}
delayms(1);
P0=0x00;
P3=0xff;
}
}
void dang_wei()
{
switch(dang)
{
case(0):ET1=0;break;
case(1):ET1=1;gao=0x88,di=0x00;break;
case(2):ET1=1;gao=0x90,di=0x00;break;
case(3):ET1=1;gao=0x98,di=0x00;break;
case(4):ET1=1;gao=0xa0,di=0x00;break;
case(5):ET1=1;gao=0xa8,di=0x00;break;
case(6):ET1=1;gao=0xb0,di=0x00;break;
case(7):ET1=1;gao=0xb8,di=0x00;break;
case(8):ET1=1;gao=0xc0,di=0x00;break;
case(9):ET1=1;gao=0xc8,di=0x00;break;
case(10):ET1=1;gao=0xd0,di=0x00;break;
case(11):ET1=1;gao=0xd8,di=0x00;break;
case(12):ET1=1;gao=0xe0,di=0x00;break;
case(13):ET1=1;gao=0xe8,di=0x00;break;
case(14):ET1=1;gao=0xf0,di=0x00;break;
case(15):ET1=1;gao=0xf8,di=0x00;break;
case(16):ET1=1;gao=0xfa,di=0x00;break;
}
}
void main (void)
{
EA=1;
EX0=1;
IT0=1;
TMOD=0x10;
TR1=1;
TH1=0xfc;
TL1=0x00;
while(1)
{
xuan( );
if(dang<=0)
{
dang=0;
}
if(dang>16)
{
dang=16;
}
dang_wei();
DigDisplay();
}
}
void int0() interrupt 0 using 1
{
EX0=0;
if(ci==0)
{
dan=dang;
fan=fang;
dang=0;
ci++;
}
else
{
dang=dan;
fang=fan;
ci=0;
}
EX0=1;
}
void time1(void) interrupt 3 using 0
{
TH1=gao;
TL1=di;
if(fang==1)
{
out=turn[i];
}
else
{
out=durn[i];
}
i++;
if(i>8)
{i=0;}
}
这里的编程并不是很巧妙,而是采用列举法,出现一个挡位值,列举对应情况的条件,16个挡位,对应16种情况,这样真的很笨,是可以改进的。 软件仿真成功后,接下来做实物。 我用的画PCB软件是Altium Designer Summer 09。
3.原理图
原理图上每个元器件都需要有封装,所谓的封装,简约版本就是显示元器件在PCB板引脚属性(引脚的个数,引脚的大小,是贴片安装还是直插安装等)和元器件的大小范围,这个可以自己画。 豪华板就是3D封装,会显示元器件的3D模型。需要注意PCB板制作出来是否能用,关键看引脚属性,并不是看3D封装是否好看。 原理图放在在文末连接。
4.PCB板的制作
(1)初级版本 (2)升级版本 升级版本PCB板上注释了电阻的阻值,发光二级管和极性电容的正负极,上拉电阻的VCC注释需要注意,按照PCB板的注释即可。51单片机引脚可以独立驱动数码管,上拉电阻可以不要,但是还要重新改变原理图,PCB重新布线。我时间有限就没有改,也能用。 对于学生来说淘宝上PCB打板费用还是比较贵的。下面是几个免费pcb制作网站。给初学者带来一定的支持。 捷多邦 每天有一次免费制版的机会,需要在固定时间去领。 捷配 注册后每月有两个免费卷,连续三个月未下实付订单的账号,将取消免费打样券领取资质。只能白嫖6次。 嘉立创 需要在电脑下载app,注册后注册后每月有两个免费机会,无需领卷。 以上免费的条件:单层/两层板必须是10cm*10cm以内的。都是包邮的不要钱的。 注意焊接完成后,不要立即接上电源,而是要看PCB板焊接时是否短路。用万用表中欧姆表(兆欧表)测升级版本PCB板中P4(排针)0V–5V之间的阻值,如果显示为0欧姆,恭喜您,您焊废了,连上电源就短路了。(我就焊坏了一个,当然并不是焊错了,而是电阻阻值选的不合适)。如果显示为多少多少兆欧姆,你就可以安心接上电源了。
5.元器件购买清单
我的原件封装有的是自己画的,并不规范,生成的BOM表不可用,所以要自己一个一个去通过元器件的封装尺寸去淘宝购买元器件。我的消息比较闭塞,如果有什么好的办法,可以告诉我,谢谢。注意一定要注意规格!!!,市场上一个原件有不同的规格(形状尺寸不同,极性不同,封装不同),这里的元器件都是直插式的,因为条件有限。。。
6.实物展示
(1)四次制作的PCB板 (2)焊接成品 (3)运行演示
再一次强调,焊接的时候一定按照PCB板的注释焊接,一定要细心。 这是一个压缩包文件,里面含有许多东西,有图有真相,嘻嘻。
文件包
|