永磁式步进电机一般为两相,转矩和体积较小,步进角一般为7.5度或15度;
反应式步进电机一般为三相,可实现大转矩输出,步进角一般为1.5度,但噪声和振动都很大。
反应式步进电机的转子磁路由软磁材料制成,定子上有多相励磁绕组,利用磁导的变化产生转矩。
混合式步进电机是指混合了永磁式和反应式的优点。
它又分为两相和五相:
两相步进角一般为1.8度而五相步进角一般为0.72度。
这种步进电机的应用最为广泛,也是本次细分驱动方案所选用的步进电机。
我们的步进电机使用的驱动芯片是lm2003。
步进电机驱动芯片LM2003实物图
LM2003芯片原理图
步进电机实物图
LM2003
步进电机驱动相图
二相六线步进电机接线图
5、寻找光源。
当光敏二极管正对光源时,电阻变小,经过电压比较器向单片机输入信号。
6、电路板。
我们通过Proteldxp绘制电路图后,采用热转印方法制成PCB双面板。
主控电路AT89S52
输出锁存器74hc573,作为单片机分时存出的输出口。
主板稳压电路
1602lcd插口
主电路板实物图<正面)
主电路板实物图<反面)
主电路板pcb图
主电路板各部分原理图如下:
6智能小车程序框图。
7、智能小车源程序。
#include
unsignedintminute=0。
second=0,sum=0。
unsignedcharidataminute1=0,second1=0。
sum1=0。
unsignedcharidatarecordminute1=0,recordsecond1=0,recordsum1=0。
unsignedcharidatarecordminute2=0,recordsecond2=0,recordsum2=0。
unsignedcharbdatastatus=0。
unsignedcharbdatastatus1=0。
unsignedcharbdatastatus2=0。
unsignedcharbdataprpflagd。
unsignedcharbdataprpflage。
unsignedintidatatime0=0。
unsignedlongintidatatime2=0。
unsignedlongintidatatime2_1。
unsignedintidatatime2_2。
unsignedchardatamotor=0。
unsignedcharbdatad=0。
unsignedcharbdatae=0。
unsignedcharbdatad1=0。
unsignedcharbdatae1=0。
unsignedcharlightcount=0。
unsignedcharv0。
unsignedcharvb。
sbitprp5_0=d1^6。
sbitprp5_1=d1^7。
sbitprp1_0=d1^4。
sbitprp1_1=d1^5。
sbitprp6_0=d1^2。
sbitprp6_1=d1^3。
sbitprp2_0=d1^0。
sbitprp2_1=d1^1。
sbitprp7_0=e1^6。
sbitprp7_1=e1^7。
sbitprp3_0=e1^4。
sbitprp3_1=e1^5。
sbitprp8_0=e1^2。
sbitprp8_1=e1^3。
sbitprp4_0=e1^0。
sbitprp4_1=e1^1。
sbitprp5_000=prpflagd^6。
sbitprp5_001=prpflagd^7。
sbitprp1_000=prpflagd^4。
sbitprp1_001=prpflagd^5。
sbitprp6_000=prpflagd^2。
sbitprp6_001=prpflagd^3。
sbitprp2_000=prpflagd^0。
sbitprp2_001=prpflagd^1。
sbitprp7_000=prpflage^6。
sbitprp7_001=prpflage^7。
sbitprp3_000=prpflage^4。
sbitprp3_001=prpflage^5。
sbitprp8_000=prpflage^2。
sbitprp8_001=prpflage^3。
sbitprp4_000=prpflage^0。
sbitprp4_001=prpflage^1。
sbitprp5_00=d^6。
sbitprp5_01=d^7。
sbitprp1_00=d^4。
sbitprp1_01=d^5。
sbitprp6_00=d^2。
sbitprp6_01=d^3。
sbitprp2_00=d^0。
sbitprp2_01=d^1。
sbitprp7_00=e^6。
sbitprp7_01=e^7。
sbitprp3_00=e^4。
sbitprp3_01=e^5。
sbitprp8_00=e^2。
sbitprp8_01=e^3。
sbitprp4_00=e^0。
sbitprp4_01=e^1。
sbitforward=status^0。
sbitbackward=status^1。
sbitturnleft=status^3。
sbitturnright=status^2。
sbitrightforward=status^5。
sbitrightbackward=status^4。
sbitleftforward=status^6。
sbitleftbackward=status^7。
sbitflag=status1^5。
sbitwhiteiron=status1^6。
sbitblackiron=status2^0。
sbitsearchiron=status1^0。
sbitsearchrightlight=status1^1。
sbitseachleftlight=status1^2。
unsignedcharinterfere。
unsignedcharuninterfere。
sbitrightorleft=status1^4。
sbitunflag=status2^3。
sbitfoundblack=status2^4。
sbitfoundwhite=status2^5。
sbitfoundboundary=status2^6。
unsignedcharwhiteironcount=0。
unsignedcharblackironcount=0。
unsignedcharironcount=0。
voidtimer0initializtion(>。
voidtimer2initializtion(>。
voidturnright90degree(>。
voidturnleft90degree(>。
voidputdown(>。
voidgoforwardaccelerat(>。
voidgobackwardaccelerat(>。
voidputup(>。
voidfoundblackiron(>。
voidfoundwhiteiron(>。
voidturnright180degree(>。
voidbackwardalign(>。
voidforwardalign(>。
voidestimate(>。
voidboundaryturnright90degree(>。
voidboundaryturnright180degree(>。
voidboundaryturnleft180degree(>。
voidsearchlightblackiron(>。
voidoneturnleft80degree(>。
voidoneturnright80degree(>。
voidoneturnright180degree(>。
voidoneturnleft80degree(>。
voidsearchlightwhiteiron(>。
voidsearchlightwhiteiron(>。
voidscan(>。
voidmain(>
{
timer0initializtion(>。
timer2initializtion(>。
time2=0。
while(time2<=50>。
rightorleft=0。
status=0。
goforwardaccelerat(>。
flag=0。
while(flag==0>。
estimate(>。
if(foundboundary==1>
{
boundaryturnright90degree(>。
scan(>。
estimate(>。
if(foundwhite==1>
{
putdown(>。
searchlightwhiteiron(>。
}
else
{
putdown(>。
searchlightblackiron(>。
}
scan(>。
estimate(>。
if(foundwhite==1>
{
putdown(>。
searchlightwhiteiron(>。
}
else
{
putdown(>。
searchlightblackiron(>。
}
scan(>。
estimate(>。
if(foundwhite==1>
{
putdown(>。
searchlightwhiteiron(>。
}
else
{
putdown(>。
searchlightblackiron(>。
}
scan(>。
estimate(>。
if(foundwhite==1>
{
putdown(>。
searchlightwhiteiron(>。
}
else
{
putdown(>。
searchlightblackiron(>。
}
gotoend0200。
}
else
{
if(foundblack==1>
{
putdown(>。
searchlightblackiron(>。
scan(>。
estimate(>。
if(foundwhite==1>
{
putdown(>。
searchlightwhiteiron(>。
}
else
{
putdown(>。
searchlightblackiron(>。
}
scan(>。
estimate(>。
if(foundwhite==1>
{
putdown(>。
searchlightwhiteiron(>。
}
else
{
putdown(>。
searchlightblackiron(>。
}
scan(>。
estimate(>。
if(foundwhite==1>
{
putdown(>。
searchlightwhiteiron(>。
}
else
{
putdown(>。
searchlightblackiron(>。
}
gotoend0200。
}
else
{
if(foundwhite==1>
{
putdown(>。
searchlightwhiteiron(>。
scan(>。
estimate(>。
if(foundwhite==1>
{
putdown(>。
searchlightwhiteiron(>。
}
else
{
putdown(>。
searchlightblackiron(>。
}
scan(>。
estimate(>。
if(foundwhite==1>
{
putdown(>。
searchlightwhiteiron(>。
}
else
{
putdown(>。
searchlightblackiron(>。
}
scan(>。
estimate(>。
if(foundwhite==1>
{
putdown(>。
searchlightwhiteiron(>。
}
else
{
putdown(>。
searchlightblackiron(>。
}
}
}
}
end0200:
while(1>。
}
voidgoforwardaccelerat(>
{
status=0。
forward=1。
vb=5。
time2=0。
while(time2<=8>。
vb=4。
time2=0。
while(time2<=8>。
vb=3。
time2=0。
while(time2<=8>。
vb=2。
time2=0。
while(time2<=8>。
vb=1。
}
voidgobackwardaccelerat(>
{
status=0。
backward=1。
vb=5。
time2=0。
while(time2<=8>。
vb=4。
time2=0。
while(time2<=8>。
vb=3。
time2=0。
while(time2<=8>。
vb=2。
time2=0。
while(time2<=8>。
vb=1。
}
voidscan(>
{
status=0。
while((foundblack!
=1>&&(foundwhite!
=1>>
{
goforwardaccelerat(>。
flag=0。
while(flag==0>。
status=0。
estimate(>。
if(foundboundary==1>
{
foundboundary=0。
if(rightorleft==1>
{
rightorleft=0。
boundaryturnleft180degree(>。
time2=0。
while(time2<=8>。
status=0。
}
else
{
rightorleft=1。
boundaryturnright180degree(>。
time2=0。
while(time2<=8>。
status=0。
}
}
}
}
voidsearchlightblackiron(>
{
unsignedlongintlightdalign。
rightorleft=0。
vb=4。
turnright=1。
while(prp8_01==1>。
status=0。
time2=0。
while(time2<=20>。
turnright=1。
time2=0。
while(time2<=30>。
time2=0。
while(prp8_01==1>。
status=0。
if(time2<=180>
gotob0173。
status=0。
turnright=1。
time2=0。
while(time2<=20>。
while(prp8_01==1>。
time2=0。
while(time2<=10>。
status=0。
time2=0。
while(time2<=20>。
b0173:
time2_1=0。
goforwardaccelerat(>。
time2=0。
while(time2<=40>。
flag=0。
while(flag==0>。
time2=0。
while(time2<=40>。
status=0。
putup(>。
time2=0。
while(time2<=8>。
turnright180degree(>。
goforwardaccelerat(>。
time2=0。
while(time2<=90>。
b0294:
status=0。
forward=1。
flag=0。
while(flag==0>。
estimate(>。
if(foundboundary==0>
gotob0294。
status=0。
time2=0。
while(time2<=8>。
gobackwardaccelerat(>。
forwardalign(>。
status=0。