中文名 | 步進(jìn)電機(jī)的M16驅(qū)動(dòng) | 驅(qū)動(dòng)芯片 | ULN2803 |
---|---|---|---|
作 者 | 銅河 | 版 本 | V1.0 |
此程序可驅(qū)動(dòng)五引線步進(jìn)電機(jī),通過(guò)按鍵可控制步進(jìn)電機(jī)的轉(zhuǎn)速、方向、三種驅(qū)動(dòng)方式,三種驅(qū)動(dòng)方式分別為:?jiǎn)嗡呐尿?qū)動(dòng)、雙四拍驅(qū)動(dòng)、單雙八拍驅(qū)動(dòng),其中以單雙八拍驅(qū)動(dòng)轉(zhuǎn)速最慢。具體聯(lián)接方式在程序中有說(shuō)明。
/************************************
* 步進(jìn)電機(jī)的M16驅(qū)動(dòng)程序 *
* 功 能:用M16驅(qū)動(dòng)步進(jìn)電機(jī) *
* 實(shí)現(xiàn)三種驅(qū)動(dòng)方式 *
* 單四拍驅(qū)動(dòng)、雙四拍驅(qū)動(dòng) *
* 單雙八拍驅(qū)動(dòng) *
* 聯(lián)接方式:PC0-3分別通過(guò)2803接A-D *
* 步進(jìn)電機(jī)公共端接 5V電源 *
* 建立日期:2008年04月05日 *
* 修改日期:2008年04月06日 *
* 主控芯片:M16 *
* 時(shí)鐘頻率:外部晶體 7.3728MHZ *
* 編 譯 器:ICCAVR 6.31A *
************************************/
#include
#include
#include "delay.h"
#define RD_KEY() ((~(PINC|0x0F))>>4)//四按鍵接于PC4-PC7
unsigned char i=0; //轉(zhuǎn)動(dòng)計(jì)數(shù)
unsigned char m=1; //驅(qū)動(dòng)方式參數(shù)
unsigned char n=0; //轉(zhuǎn)動(dòng)方向參數(shù)
unsigned int zhuansu=61500; //轉(zhuǎn)速數(shù)據(jù)
/****************************
* 端口配置函數(shù) *
****************************/
void port_init(void)
{
PORTA = 0x40;
DDRA = 0x40;
PORTB = 0x00;
DDRB = 0x00;
PORTC = 0xF0;
DDRC = 0x0F;
PORTD = 0x00;
DDRD = 0x00;
}
/****************************
* 正轉(zhuǎn)操作函數(shù) *
* 入 口:a 三種工作方式 *
****************************/
void bj_fs(unsigned char a)
{
switch(a)
{
case 1: //單四拍方式驅(qū)動(dòng)
PORTC |= 1<
if(i>=4)i=0;
break;
case 2: //雙四拍方式驅(qū)動(dòng)
if(i!=4) //AB、BC、CD、DA驅(qū)動(dòng)
PORTC |= (1<
PORTC |= (1<<(i-1))|1;
i ;
if(i>=5)i=1;
break;
case 3: //單雙八拍方式驅(qū)動(dòng)
if(i%2) //A、AB、B、BC、C、CD、D、DA驅(qū)動(dòng)
{
if(i!=7)
PORTC |= (1<<(i/2))|(1<<(i/2 1));
else
PORTC |= (1<<(i/2))|1;
}
else
{
PORTC |= 1<<(i/2);
}
i ;
if(i>=8)i=0;
break;
default:break;
}
}
/****************************
* 反轉(zhuǎn)操作函數(shù) *
* 入 口:a 三種工作方式 *
****************************/
void bj_fsf(unsigned char a)
{
switch(a)
{
case 1: //單四拍方式驅(qū)動(dòng)
PORTC |= 1<<(3-i); //D、C、B、A驅(qū)動(dòng)
i ;
if(i>=4)i=0;
break;
case 2: //雙四拍方式驅(qū)動(dòng)
if(i!=4) //AD、CD、BC、AB驅(qū)動(dòng)
PORTC |= (1<<(3-i))|(1<<(4-i));
else
PORTC |= (1<<(i-1))|1;
i ;
if(i>=5)i=1;
break;
case 3: //單雙八拍方式驅(qū)動(dòng)
if(i%2) //DA、D、CD、C、BC、B、AB、A驅(qū)動(dòng)
{
PORTC |= 1<<(3-i/2);
}
else
{
if(i)
PORTC |= (1<<(3-i/2))|(1<<(4-i/2));
else
PORTC |= (1<<(3-i/2))|1;
}
i ;
if(i>=8)i=0;
break;
case 4:
default:break;
}
}
/****************************
* 定時(shí)器1配置函數(shù) *
* 工作模式:普通模式 *
* 工作方式:溢出中斷 *
* 預(yù) 分 頻:64 *
* 時(shí)鐘頻率:外部7.3728MHZ *
****************************/
void timer1_init(void)
{
TCCR1B = 0x00;
TCNT1H = zhuansu>>8;
TCNT1L = zhuansu&0xFF;
TCCR1A = 0x00;
TCCR1B = 0x02;
}
/****************************
* 定時(shí)器1中斷函數(shù) *
****************************/
#pragma interrupt_handler timer1_ovf_isr:9
void timer1_ovf_isr(void)
{
TCNT1H = zhuansu>>8;
TCNT1L = zhuansu&0xFF;
PORTC &= 0xF0;
if(n)
bj_fsf(m); //反轉(zhuǎn)
else
bj_fs(m); //正轉(zhuǎn)
}
/****************************
* 器件初始化函數(shù) *
****************************/
void init_devices(void)
{
CLI();
port_init();
timer1_init();
MCUCR = 0x00;
GICR = 0x00;
TIMSK = 0x04;
SEI();
}
/****************************
* 主函數(shù) *
****************************/
void main(void)
{
unsigned char key,key1;
init_devices();
while(1)
{
key=RD_KEY(); //按鍵掃描
if(key)
{
delay_ms(20);
key1=RD_KEY();
if(key==key1)
{
switch(key) //按鍵有效,相應(yīng)處理
{
case 0x01: //S1鍵處理:轉(zhuǎn)速增加
zhuansu = 100;
if(zhuansu>62000)zhuansu=62000;
break;
case 0x02: //S2鍵處理:轉(zhuǎn)速降低
zhuansu -= 100;
if(zhuansu<5000)zhuansu=5000;
break;
case 0x04: //S3鍵處理:轉(zhuǎn)換驅(qū)動(dòng)方式
m ;
if(m>=4)m=1;
break;
case 0x08: //S4鍵處理:正反轉(zhuǎn)控制
if(n)
n=0;
else
n=1;
break;
default:break;
}
}
while(key) //等待按鍵釋放
{
delay_ms(10);
key=RD_KEY();
}
}
}
}
完整的工程項(xiàng)目文件如下,此工程已通過(guò)驗(yàn)證。2100433B
步進(jìn)電機(jī)驅(qū)動(dòng)器的組成結(jié)構(gòu)
步進(jìn)電機(jī)驅(qū)動(dòng)器主要結(jié)構(gòu)主要有以下部分 根據(jù)輸入信號(hào)的要求產(chǎn)生電機(jī)在不同狀態(tài)下的開(kāi)關(guān)波形信號(hào)處理對(duì)環(huán)行分配器產(chǎn)生的開(kāi)關(guān)信號(hào)波形進(jìn)行PWM調(diào)制以及對(duì)相關(guān)的波形進(jìn)行濾波整形處理3:推動(dòng)級(jí):對(duì)開(kāi)關(guān)信號(hào)的電壓,...
格式:pdf
大?。?span id="ui46qyc" class="single-tag-height">39KB
頁(yè)數(shù): 7頁(yè)
評(píng)分: 4.3
/*---------------------------------------------------------------------------------------------------- 名稱: 步進(jìn)電機(jī)四相八拍驅(qū)動(dòng)程序 文件名: steper.c 作者: eastboy E-mail: eastboy_007@163.com 日期: 2008年 7 月 16 日 版本: 1.0 申明: 按鍵部分程序參考了 raosibin的 4×4按鍵狀態(tài)機(jī)思想程序 說(shuō)明: 1.可通過(guò)按鍵選擇正轉(zhuǎn)或反轉(zhuǎn),碰到限位開(kāi)關(guān)后自動(dòng)微調(diào)上一次微調(diào)值后停止; 2.可通過(guò)按鍵微調(diào),即低速轉(zhuǎn)動(dòng),以便精確調(diào)整位置; 3.仿真時(shí)通過(guò)兩個(gè)按鈕模擬前后限位開(kāi)關(guān),以模擬實(shí)際生活當(dāng)中步進(jìn)電機(jī)帶軸運(yùn)動(dòng)時(shí)部 件的前后電限位, 程序并可自動(dòng)記住以前后限位開(kāi)關(guān)為基點(diǎn)的微調(diào)步數(shù); 4.本程序只是通過(guò)了軟件功能仿真
格式:pdf
大?。?span id="0okgkuu" class="single-tag-height">39KB
頁(yè)數(shù): 3頁(yè)
評(píng)分: 4.6
三相步進(jìn)電機(jī)驅(qū)動(dòng) 三相步進(jìn)電機(jī)的三相六拍工作方式,正轉(zhuǎn)的繞組通電順序: A、AB、B、BC、C、CA、A,反轉(zhuǎn)的通電順序: A、AC、C、CB、B、BA、B、A。 由于步進(jìn)電機(jī)轉(zhuǎn)子有一定的慣性以及所帶負(fù)載的慣性,故步進(jìn)電機(jī)的工作過(guò) 程中不能及時(shí)的啟動(dòng)和停止,在啟動(dòng)時(shí)應(yīng)慢慢的加速到預(yù)定速度,在停止前應(yīng) 逐漸減速到停止,否則,將產(chǎn)生失步現(xiàn)象。 步進(jìn)電機(jī)的控制問(wèn)題可總結(jié)為兩點(diǎn): 1、產(chǎn)生工作方式需要的時(shí)序脈沖; 2、控制步進(jìn)電機(jī)的速度,使它始終遵循加速、勻速、減速的規(guī)律工作。 系統(tǒng): 接口: 程序: #includeio8515v.h #includemacros.h const char zhzhuan[7]={0x06,0x04,0x05,0x01,0x03,0x02,0x00}; const char fanzhuan[7]={0x06,0x02,0x03,0x01,0x05,0x0
為了對(duì)步進(jìn)電機(jī)的相電流進(jìn)行控制,從而達(dá)到細(xì)分步進(jìn)電機(jī)步距角的目的,人們?cè)O(shè)計(jì)了很多種步進(jìn)電機(jī)的細(xì)分驅(qū)動(dòng)電路。最初,對(duì)電機(jī)相電流的控制是由硬件來(lái)實(shí)現(xiàn)的,每一相繞組的相電流用n個(gè)晶體管構(gòu)成n個(gè)并聯(lián)回路來(lái)控制,靠晶體管導(dǎo)通數(shù)的組合來(lái)控制相電流。這種細(xì)分驅(qū)動(dòng)電路線路復(fù)雜,體積大,成本高,而且電路一旦制造出來(lái)就難以改變其細(xì)分?jǐn)?shù),缺乏柔性,因此在的實(shí)際應(yīng)用中已很少采用這種方法。
隨著微型計(jì)算機(jī)的發(fā)展,特別是單片計(jì)算機(jī)的出現(xiàn),為步進(jìn)電機(jī)的細(xì)分驅(qū)動(dòng)帶來(lái)了便利。步進(jìn)電機(jī)細(xì)分驅(qū)動(dòng)電路大多數(shù)都采用單片微機(jī)控制,它們的構(gòu)成框圖如圖2所示。單片機(jī)根據(jù)要求的步距角計(jì)算出各項(xiàng)繞組中通過(guò)的電流值,并輸出到數(shù)模轉(zhuǎn)換器(D/A)中,由D/A把數(shù)字量轉(zhuǎn)換為相應(yīng)的模擬電壓,經(jīng)過(guò)環(huán)形分配器加到各相的功放電路上,控制功放電路給各相繞組通以相應(yīng)的電流,來(lái)實(shí)現(xiàn)步進(jìn)電機(jī)的細(xì)分。
單片機(jī)控制的步進(jìn)電機(jī)細(xì)分驅(qū)動(dòng)電路根據(jù)末級(jí)功放管的工作狀態(tài)可分為放大型和開(kāi)關(guān)型兩種。放大型步進(jìn)電機(jī)細(xì)分驅(qū)動(dòng)電路中末級(jí)功放管的輸出電流直接受單片機(jī)輸出的控制電壓控制,電路較簡(jiǎn)單,電流的控制精度也較高,但是由于末級(jí)功放管工作在放大狀態(tài),使功放管上的功耗較大,發(fā)熱嚴(yán)重,容易引起晶體管的溫漂,影響驅(qū)動(dòng)電路的性能。甚至還可能由于晶體管的熱擊穿,使電路不能正常工作。因此該驅(qū)動(dòng)電路一般應(yīng)用于驅(qū)動(dòng)電流較小、控制精度較高、散熱情況較好的場(chǎng)合。
開(kāi)關(guān)型步進(jìn)電機(jī)細(xì)分驅(qū)動(dòng)電路中的末級(jí)功放管工作在開(kāi)關(guān)狀態(tài),從而使得晶體管上的功耗大大降低,克服了放大型細(xì)分電路中晶體管發(fā)熱嚴(yán)重的問(wèn)題。但電路較復(fù)雜,輸出的電流有一定的波紋。因此該驅(qū)動(dòng)電路一般用于輸出力矩較大的步進(jìn)電機(jī)的驅(qū)動(dòng)。隨著大輸出力矩步進(jìn)電機(jī)的發(fā)展,開(kāi)關(guān)型細(xì)分驅(qū)動(dòng)電路近年來(lái)得到長(zhǎng)足的發(fā)展。
最常用的開(kāi)關(guān)型步進(jìn)電機(jī)細(xì)分驅(qū)動(dòng)電路有斬波式和脈寬調(diào)制(PWM)式兩種。斬波式細(xì)分驅(qū)動(dòng)電路的基本工作原理是對(duì)電機(jī)繞組中的電流進(jìn)行檢測(cè),和D/A輸出的控制電壓進(jìn)行比較,若檢測(cè)出的電流值大于控制電壓,電路將使功放管截止,反之,使功放管導(dǎo)通。這樣,D/A輸出不同的控制電壓,繞組中將流過(guò)不同的電流值。脈寬調(diào)制式細(xì)分驅(qū)動(dòng)電路是把D/A輸出的控制電壓加在脈寬調(diào)制電路的輸入端,脈寬調(diào)制電路將輸入的控制電壓轉(zhuǎn)換成相應(yīng)脈沖寬度的矩形波,通過(guò)對(duì)功放管通斷時(shí)間的控制,改變輸出到電機(jī)繞組上的平均電流。由于電機(jī)繞組是一個(gè)感性負(fù)載,對(duì)電流有一定的濾波作用,而且脈寬調(diào)制電路的調(diào)制頻率較高,一般大于20 kHz,因此,雖然是斷續(xù)通電,但電機(jī)繞組中的電流還是較平穩(wěn)的。和斬波式細(xì)分驅(qū)動(dòng)電路相比,脈寬調(diào)制式細(xì)分驅(qū)動(dòng)電路的控制精度高、工作頻率穩(wěn)定,但線路較復(fù)雜。因此,脈寬調(diào)制式細(xì)分驅(qū)動(dòng)電路多用于綜合驅(qū)動(dòng)性能要求較高的場(chǎng)合。脈寬調(diào)制式細(xì)分驅(qū)動(dòng)電路的關(guān)鍵是脈寬調(diào)制,它的作用是將給定的電壓信號(hào)調(diào)制成具有相應(yīng)脈沖寬度的矩形波。2100433B
步進(jìn)電機(jī)的驅(qū)動(dòng)是靠給步進(jìn)電機(jī)的各相勵(lì)磁繞組輪流通以電流,實(shí)現(xiàn)步進(jìn)電機(jī)內(nèi)部磁場(chǎng)合成方向的變化來(lái)使步進(jìn)電機(jī)轉(zhuǎn)動(dòng)的。圖1是三相反應(yīng)式步進(jìn)電機(jī)的磁場(chǎng)矢量圖。圖1的矢量T-A,T-B,T-C為步進(jìn)電機(jī)A,B,C三相勵(lì)磁繞組分別通電時(shí)產(chǎn)生的磁場(chǎng)矢量,T-AB,T-BC,T-CA為步進(jìn)電機(jī)中AB,BC,CA兩相同時(shí)通電產(chǎn)生的合成磁場(chǎng)矢量。從圖1a中可以看出,當(dāng)給步進(jìn)電機(jī)的A,B,C三相輪流通電時(shí),步進(jìn)電機(jī)的內(nèi)部磁場(chǎng)從T-A變化到T-B再變化到T-C,即磁場(chǎng)產(chǎn)生了旋轉(zhuǎn)。一般情況下,當(dāng)步進(jìn)電機(jī)的內(nèi)部磁場(chǎng)變化一周(360°角)時(shí),電機(jī)的轉(zhuǎn)子轉(zhuǎn)過(guò)一個(gè)齒距,因此,步進(jìn)電機(jī)的步距角θB可表示為: θB=θM/Nr
式中,Nr為步進(jìn)電機(jī)的轉(zhuǎn)子齒數(shù);θM為步進(jìn)電機(jī)運(yùn)行時(shí)兩相鄰穩(wěn)定磁場(chǎng)之間的夾角。
一般小法蘭尺寸的步進(jìn)電機(jī)因?yàn)榇蟛糠烛?qū)動(dòng)電壓都是DC24V,稍高一點(diǎn)的驅(qū)動(dòng)電壓偶爾也會(huì)使用DC36V或者DC48V,所以驅(qū)動(dòng)器的選型相對(duì)比較簡(jiǎn)單,主要是驅(qū)動(dòng)器電壓,電流和細(xì)分?jǐn)?shù)是不是匹配,另外就是選擇什么品牌什么檔次的驅(qū)動(dòng)器,也有一些帶自發(fā)脈沖或者帶失步報(bào)警功能,帶總線控制功能等,但總體來(lái)說(shuō)對(duì)于通常情況下的驅(qū)動(dòng)器的選擇會(huì)比較簡(jiǎn)單,驅(qū)動(dòng)器也很通用。但86步進(jìn)電機(jī)選擇會(huì)考慮更多一些的因素,深圳步進(jìn)電機(jī)驅(qū)動(dòng)器廠家專家“斯凱得”機(jī)電小編推薦按照以下方式考慮86步進(jìn)驅(qū)動(dòng)器的選型流程:
1.根據(jù)86步進(jìn)電機(jī)的工作轉(zhuǎn)速和力矩選合適的步進(jìn)電機(jī)型號(hào)和驅(qū)動(dòng)電壓
對(duì)于86步進(jìn)電機(jī)這種機(jī)身比較大的步進(jìn)電機(jī),驅(qū)動(dòng)電壓對(duì)于高速的力矩的影響很大,一般最低都要考慮用DC48V驅(qū)動(dòng)。例如,SKD機(jī)身長(zhǎng)132的86步進(jìn)電機(jī)SST86D5605在DC24V驅(qū)動(dòng)下在150rpm轉(zhuǎn)速下工作力矩不到2.5NM,力矩還不如68機(jī)身長(zhǎng)的86電機(jī),而在300rpm轉(zhuǎn)速情況下的工作力矩應(yīng)該還不如一些57步進(jìn)電機(jī)的力矩,而同樣是SST86D5605電機(jī),在AC70V電壓驅(qū)動(dòng)1500rpm轉(zhuǎn)速下力矩可以達(dá)到3NM以上,在AC220V驅(qū)動(dòng)電壓下扭矩達(dá)到6NM。除了力矩之外,要考慮電機(jī)發(fā)熱的情況,電機(jī)本身發(fā)熱不影響電機(jī)的安全使用,主要看對(duì)于周圍物件的影響。在低速,空載,放在絕緣物上這種比較差的散熱條件下,SKD86步進(jìn)電機(jī)在AC70V驅(qū)動(dòng)電壓下表面溫度51°左右,在AC220V驅(qū)動(dòng)電壓下表面溫度75°左右,如果電機(jī)周圍沒(méi)有對(duì)于溫度很敏感的人或者物品,電機(jī)都完全沒(méi)有問(wèn)題。
2.根據(jù)驅(qū)動(dòng)電壓來(lái)配驅(qū)動(dòng)器及其他配套產(chǎn)品
如果確定驅(qū)動(dòng)電壓DC48V可以了,那么選DC48V直流電源,另外電源功率留30%以上余量就可以了,驅(qū)動(dòng)器就選能夠耐壓DC48V以上,電流能夠滿足步進(jìn)電機(jī)要求的就可以了,可以選直流驅(qū)動(dòng)器,也可以選交直流通用的驅(qū)動(dòng)器。更高驅(qū)動(dòng)電壓的驅(qū)動(dòng)器推薦選交流驅(qū)動(dòng)器。AC70V驅(qū)動(dòng)電壓需要配一個(gè)交流變壓器,AC220V驅(qū)動(dòng)器可以直接接市電,省事,高速力矩也好,但成本會(huì)貴一些,另外,推薦選用“斯凱得”機(jī)電的信號(hào)和強(qiáng)弱電完全隔離的驅(qū)動(dòng)器,這樣即使電網(wǎng)電壓波動(dòng)比較大,也不會(huì)燒驅(qū)動(dòng)器。