最近好長(zhǎng)一段時(shí)間沒(méi)有來(lái)51hei單片機(jī)網(wǎng)了,接近考試的日子越來(lái)越近,開(kāi)始把時(shí)間轉(zhuǎn)到考試的準(zhǔn)備上了,這兩天回過(guò)頭來(lái)想想,應(yīng)該有快半個(gè)月對(duì)單片機(jī)的學(xué)習(xí)沒(méi)有什么進(jìn)展了,不過(guò)我一直堅(jiān)信,單片機(jī)學(xué)習(xí)的路上,只要你肯堅(jiān)持,只要你肯吃苦、肯付出,再難的關(guān)也不是問(wèn)題,當(dāng)然,最近也深深地體會(huì)到,學(xué)習(xí)單片機(jī)如果有一個(gè)好的老師作為指導(dǎo),那學(xué)起來(lái)就不用那么費(fèi)勁了,不過(guò)也沒(méi)有關(guān)系,很多東西,條件不好的時(shí)候,就需要自己去改變,去想想其它的法子。
這兩天開(kāi)始研究單片機(jī)與步進(jìn)電機(jī)的控制問(wèn)題,感覺(jué)真的很好玩,步進(jìn)電機(jī)在工業(yè)的很多地方都有很大的應(yīng)用,比如流水線的運(yùn)轉(zhuǎn),智能小車,系統(tǒng)定位都有很大的用處。也是一個(gè)核心的技術(shù)。步進(jìn)電機(jī)的控制主要是由單片機(jī)IO口高低電平的控制以及輸出脈沖來(lái)控制其轉(zhuǎn)速,達(dá)到了一種數(shù)模轉(zhuǎn)換的效果。讓單片機(jī)以并行二進(jìn)制數(shù)轉(zhuǎn)換成并行脈沖序列,并實(shí)現(xiàn)方向控制。只要是脈沖在步進(jìn)電機(jī)允許的范圍之內(nèi),每個(gè)脈沖將使步進(jìn)電機(jī)轉(zhuǎn)動(dòng)一個(gè)固定的步距角度,根據(jù)步距角的大小及實(shí)際走的步數(shù),只要知道初始位置,便可以根據(jù)計(jì)算知道其最終位置了。
步進(jìn)電機(jī)轉(zhuǎn)動(dòng)時(shí)的驅(qū)動(dòng)的電流比較大,所以在使用單片機(jī)控制的時(shí)候,要在中間加一個(gè)放大電路,或者加上一些常用的放大電流的芯片,比如人們很經(jīng)常用的一個(gè)芯片ULM2003.只有這樣才能夠使步進(jìn)電機(jī)轉(zhuǎn)動(dòng),不然會(huì)因?yàn)殡娏魈《鴮?shí)現(xiàn)不了效果。
下面把實(shí)際效果拿出來(lái)分享下:
程序如下:
#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
uchar num[]={0x01,0x02,0x04,0x08};
void delay(uint z)
{
uint a;
for(a=0;a<z;a++)
;
}
void main()
{
uchar i;
uint j;
for(j=0;j<2045;j++)
{
{ P1=num[i];
delay(1200);
i++;
if(i==4)
i=0; }
}
while(1);
}
其中,z控制轉(zhuǎn)速,j控制轉(zhuǎn)的圈數(shù),由計(jì)算和調(diào)試得出當(dāng)j=2045時(shí),步進(jìn)電機(jī)走的圈數(shù)為1圈,這樣,我們要步進(jìn)電機(jī)走多少圈時(shí),可以在里面嵌套一個(gè)程序,達(dá)到我們要電機(jī)轉(zhuǎn)多少圈的目的。關(guān)于電機(jī)的參數(shù)打開(kāi)http://www.torrancerestoration.com/mcu/73.html 這個(gè)鏈接來(lái)查看.里面寫(xiě)得非常詳細(xì).