本文主要介绍了为实现步进电机的控制,先在电脑编写程序,仿真成功后,在进行实物的制作,最终独立自主的完成51单片机的编程,硬件电路的设计,画原理图,画PCB板,购买电子元器件,PCB板的焊接和检测,实物的展示等工作。
个人的观点,这个设计的现实意义不大,因为步进电机真正特点是利用脉冲信号去控制步进电机转动的角度。主要用于房间空调器分体系列室内机导风板、暖风器导风板、移动空调、壁炉更洁宝和各种智能气阀(燃气热水器、燃气灶等)。转动的速度很慢不占优势。(为什么我做了呢?因为这是一个课程设计。哈哈)
本设计可采用STC89C51/52、AT89S51/52或AT89C51/52单片机作为主控制器;
(1)按键功能:
• 按键1:正转
• 按键2:反转
• 按键3:速度加
• 按键4:速度减
• 按键5:暂停/开始
(2)LED使用:五个红色LED,一个为电源指示,四个指示电机的转速。
(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)软件程序
/* Main.c file generated by New Project wizard
*
* Created: 周日 9月 19 2021
* Processor: AT89C51
* Compiler: Keil for 8051
*/
#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};//显示0~F的值
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--)//0.5ms
{
a=250;
while(--a);
a=249;
while(--a);
}
}
void xuan( )
{
P1=0Xff;
if(P1!=0xff)//读取按键是否按下
{
delayms(100);//延时10ms进行消抖
if(P1!=0xff)//再次检测键盘是否按下
{
switch(~P1)
{
//case(0x00):fang=1;break;
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。
原理图上每个元器件都需要有封装,所谓的封装,简约版本就是显示元器件在PCB板引脚属性(引脚的个数,引脚的大小,是贴片安装还是直插安装等)和元器件的大小范围,这个可以自己画。
豪华板就是3D封装,会显示元器件的3D模型。需要注意PCB板制作出来是否能用,关键看引脚属性,并不是看3D封装是否好看。
原理图放在在文末连接。
(1)初级版本
(2)升级版本
升级版本PCB板上注释了电阻的阻值,发光二级管和极性电容的正负极,上拉电阻的VCC注释需要注意,按照PCB板的注释即可。51单片机引脚可以独立驱动数码管,上拉电阻可以不要,但是还要重新改变原理图,PCB重新布线。我时间有限就没有改,也能用。
对于学生来说淘宝上PCB打板费用还是比较贵的。下面是几个免费pcb制作网站。给初学者带来一定的支持。
捷多邦 每天有一次免费制版的机会,需要在固定时间去领。
捷配 注册后每月有两个免费卷,连续三个月未下实付订单的账号,将取消免费打样券领取资质。只能白嫖6次。
嘉立创 需要在电脑下载app,注册后注册后每月有两个免费机会,无需领卷。
以上免费的条件:单层/两层板必须是10cm*10cm以内的。都是包邮的不要钱的。
注意焊接完成后,不要立即接上电源,而是要看PCB板焊接时是否短路。用万用表中欧姆表(兆欧表)测升级版本PCB板中P4(排针)0V–5V之间的阻值,如果显示为0欧姆,恭喜您,您焊废了,连上电源就短路了。(我就焊坏了一个,当然并不是焊错了,而是电阻阻值选的不合适)。如果显示为多少多少兆欧姆,你就可以安心接上电源了。
我的原件封装有的是自己画的,并不规范,生成的BOM表不可用,所以要自己一个一个去通过元器件的封装尺寸去淘宝购买元器件。我的消息比较闭塞,如果有什么好的办法,可以告诉我,谢谢。注意一定要注意规格!!!,市场上一个原件有不同的规格(形状尺寸不同,极性不同,封装不同),这里的元器件都是直插式的,因为条件有限。。。
再一次强调,焊接的时候一定按照PCB板的注释焊接,一定要细心。
这是一个压缩包文件,里面含有许多东西,有图有真相,嘻嘻。
文件包