步进电机控制器的设计
本文檔作備份用。
摘 要: 設(shè)計(jì)了一種具有多模式的步進(jìn)電機(jī)控制裝置,本裝置基于STC的一款單片機(jī)STC89C52,軟件部分由C51編寫,包含啟停中斷程序、轉(zhuǎn)向中斷程序、步進(jìn)電機(jī)調(diào)速程序以及鍵盤信號(hào)檢測(cè)與顯示程序等設(shè)計(jì) ,硬件部分包含單片機(jī)最小系統(tǒng)電路、步進(jìn)電機(jī)及其驅(qū)動(dòng)電路、顯示與按鍵處理電路等設(shè)計(jì)。
關(guān)鍵詞: 多模式;步進(jìn)電機(jī);單片機(jī);顯示參數(shù)
1 設(shè)計(jì)任務(wù)與要求
(1)可控制步進(jìn)電機(jī)的啟動(dòng)與停止、正轉(zhuǎn)與反轉(zhuǎn)
(2)10 檔速度調(diào)節(jié)
(3)點(diǎn)動(dòng)控制
(4)可顯示電機(jī)運(yùn)行參數(shù)
2 設(shè)計(jì)方案
2.1總體設(shè)計(jì)思路
在該控制裝置中由單片機(jī)輸出電機(jī)的各相控制脈沖序列,由ULN2003D驅(qū)動(dòng)模塊帶動(dòng)步進(jìn)電機(jī)轉(zhuǎn)動(dòng),用按鍵輸入的方式控制電機(jī)的工作方式,同時(shí)數(shù)碼管會(huì)顯示電機(jī)運(yùn)行狀態(tài)。
2.2步進(jìn)電機(jī)的控制方式
采用延時(shí)方法進(jìn)行控制。
延時(shí)方法是在每次換向之后調(diào)用一個(gè)延時(shí)子程序,待延時(shí)結(jié)束后再次執(zhí)行換向,這樣周而復(fù)始就可發(fā)出一定頻率的CP脈沖或換向周期。延時(shí)子程序的延時(shí)時(shí)間與換向程序所用的時(shí)間和,就是CP脈沖的周期。
2.3 鍵盤的工作方式
矩形鍵盤編程工作在鍵盤掃描輸入方式,其原理為在某一時(shí)刻只讓一條列線處于低電平,其余列線均處于高電平,則當(dāng)這一列有鍵按下時(shí),該鍵所在的行電平將會(huì)由高電平變?yōu)榈碗娖?#xff0c;可判定該列相應(yīng)的行有鍵按下。讀入鍵盤時(shí)具有軟件延時(shí)去抖動(dòng)功能,避免誤觸發(fā)。
3 硬件設(shè)計(jì)
3.1 單片機(jī)最小系統(tǒng)電路的設(shè)計(jì)
控制芯片采用STC89C52,是STC公司生產(chǎn)的一種低功耗、高性能CMOS8位微控制器,具有8k字節(jié)Flash,512字節(jié)RAM, 32 位I/O 口線,看門狗定時(shí)器,內(nèi)置4KB EEPROM,MAX810復(fù)位電路,3個(gè)16 位定時(shí)器/計(jì)數(shù)器,4個(gè)外部中斷,一個(gè)7向量4級(jí)中斷結(jié)構(gòu)(兼容傳統(tǒng)51的5向量2級(jí)中斷結(jié)構(gòu)),全雙工串行口。由于單片機(jī)內(nèi)部的資源豐富,性價(jià)比高,能夠滿足該設(shè)計(jì)的要求,而且減少了硬件電路的設(shè)計(jì),提高了工作效率。單片機(jī)的外部引腳定義如圖所示:
復(fù)位電路采用手動(dòng)按鍵復(fù)位方式。當(dāng)接通電源的瞬間,RST端與VCC同電位,隨著電容上的電壓逐漸上升,RST端的電壓逐漸下降,于是在RST端便形成了一個(gè)正脈沖,只要該正脈沖的寬度持續(xù)兩個(gè)機(jī)器周期的高電平,就可實(shí)現(xiàn)系統(tǒng)自動(dòng)復(fù)位。
時(shí)鐘電路采用的是內(nèi)部時(shí)鐘方式。晶振電路是由兩個(gè)30PF的電容和一個(gè)12M的晶體振蕩器組成的,兩端分別跨接在單片機(jī)的XTAL1和XTAL2的兩個(gè)端口上。
3.2 顯示與按鍵處理電路的設(shè)計(jì)
為實(shí)現(xiàn)交互,該系統(tǒng)設(shè)計(jì)擴(kuò)展了獨(dú)立鍵盤、4x4按鈕矩陣鍵盤和8段LED數(shù)碼管,可手動(dòng)直接操作該控制裝置。
系統(tǒng)上電后,通過(guò)獨(dú)立鍵盤輸入步進(jìn)電機(jī)的啟停和轉(zhuǎn)向,矩陣鍵盤控制電機(jī)轉(zhuǎn)速,由LED管顯示步進(jìn)電機(jī)的轉(zhuǎn)速和轉(zhuǎn)向。鍵盤的輸入和LED管的輸出由8279進(jìn)行控制,減少單片機(jī)工作負(fù)擔(dān)。
數(shù)碼管采用74LS138進(jìn)行硬件譯碼,并進(jìn)行動(dòng)態(tài)顯示,其原理為所有LED的段選線共同連接在一起共用一個(gè) 8位I/O口,而每個(gè)LED的位選分別由一根相應(yīng)的I/O口線控制。因此必須采用動(dòng)態(tài)掃描顯示方式,每一個(gè)時(shí)刻只選通其中一個(gè)LED,同時(shí)在段選口送出該位LED的字型碼。
矩形鍵盤編程工作在鍵盤掃描輸入方式,其原理為在某一時(shí)刻只讓一條列線處于低電平,其余列線均處于高電平,則當(dāng)這一列有鍵按下時(shí),該鍵所在的行電平將會(huì)由高電平變?yōu)榈碗娖?#xff0c;可判定該列相應(yīng)的行有鍵按下。讀入鍵盤時(shí)具有軟件延時(shí)去抖動(dòng)功能,避免誤觸發(fā)。
3.3 步進(jìn)電機(jī)及其驅(qū)動(dòng)電路的設(shè)計(jì)
步進(jìn)電機(jī)采用28BYJ-48,該電機(jī)為四相五線制,是可將電脈沖轉(zhuǎn)化為角位移的執(zhí)行機(jī)構(gòu)。當(dāng)步進(jìn)驅(qū)動(dòng)模塊接收到一個(gè)脈沖信號(hào),它就驅(qū)動(dòng)步進(jìn)電機(jī)按設(shè)定的方向轉(zhuǎn)動(dòng)一個(gè)固定的步進(jìn)角。通過(guò)控制脈沖個(gè)數(shù)可以控制角位移量,從而達(dá)到準(zhǔn)確定位的目的;通過(guò)控制脈沖頻率可以控制電機(jī)轉(zhuǎn)動(dòng)的速度和加速度,從而達(dá)到調(diào)速的目的。
每一個(gè)脈沖信號(hào)對(duì)應(yīng)步進(jìn)電機(jī)的某一相或兩相繞組的通電狀態(tài)改變一次,四相步進(jìn)電機(jī)可以在不同的通電方式下運(yùn)行,常見的通電方式有四拍,雙四拍,八拍,本設(shè)計(jì)采用八拍。
步進(jìn)電機(jī)的驅(qū)動(dòng)模塊采用ULN2003D,是高耐壓、大電流復(fù)合晶體管陣列,由七個(gè)硅NPN 復(fù)合晶體管組成,每一對(duì)達(dá)林頓都串聯(lián)一個(gè)2.7K 的基極電阻,在5V 的工作電壓下它能與TTL 和CMOS 電路直接相連,可以直接處理原先需要標(biāo)準(zhǔn)邏輯緩沖器來(lái)處理的數(shù)據(jù)。
3.4電氣原理圖
4 軟件設(shè)計(jì)
本實(shí)驗(yàn)中設(shè)立電機(jī)啟停標(biāo)志位和轉(zhuǎn)向標(biāo)志位,采用兩個(gè)外部中斷來(lái)改變標(biāo)志位,主程序識(shí)別到不同的標(biāo)志位會(huì)改變電機(jī)的運(yùn)行模式,同時(shí)采用定時(shí)器中斷鍵盤掃描的方式讀取用戶輸入的速度值,并在數(shù)碼管中顯示。
4.1 流程圖
4.2 源程序
#include <reg52.h> typedef unsigned char uchar; uchar direction = 0; //0為正轉(zhuǎn),1為反轉(zhuǎn) uchar onoff = 0; //關(guān)為0,開為1 uchar index = 0; //通過(guò)index指示電機(jī)轉(zhuǎn)動(dòng),八拍 uchar tmp; uchar keyval; sbit P14=P1^4; sbit P15=P1^5; sbit P16=P1^6; sbit P17=P1^7; sbit P22=P2^2; sbit P23=P2^3; sbit P24=P2^4; uchar code table[ ]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; //數(shù)字0~9的段碼 unsigned char code beatCode[ ] = { 0x09,0x01,0x03,0x02,0x06,0x04,0x0c,0x08}; unsigned char code beatCode_r[ ] = { 0x08,0x0c,0x04,0x06,0x02,0x03,0x01,0x09};void delay(unsigned int i)//延時(shí) {while(--i); }void led_delay(void)//數(shù)碼管動(dòng)態(tài)掃描延時(shí) {uchar j; for(j=0;j<200;j++) ;}void display(uchar k)//按鍵值的數(shù)碼管顯示子程序 {P22=1; P23=1;P24=1; P0=table[k/10]; led_delay(); P22=0; P23=1;P24=1; P0=table[k%10]; led_delay(); }void delay20ms(void)//軟件延時(shí)子程序 {uchar i,j; for(i=0;i<100;i++) for(j=0;j<60;j++);}void main(){/* LED */P0 = 0xff;/* 初始化中斷 */EA = 1;EX0 = 1; //要用到的中斷是兩個(gè)外部中斷和定時(shí)器中斷0IT0 = 1;EX1 = 1;IT1 = 1;/* 定時(shí)器0 */ET0=1; TMOD=0x01; TH0=(65536-10000)/256; //65536-500TL0=(65536-10000)%256; TR0=1; keyval=0x00; while(1){display(keyval);if(onoff==1){if(direction==0){tmp = P1; //讀取端口值tmp = tmp & 0xF0; //高4位不變tmp = tmp | beatCode[index]; //低四位變?yōu)橄鄳?yīng)節(jié)拍(低四位與電機(jī)相連)P1 = tmp; //輸出時(shí)序index++; index= index & 0x07; //準(zhǔn)備輸出下一節(jié)拍delay(keyval*40); //max speed standard:150 延遲越小(脈沖間隔越小)速度越快}else if(direction==1){P2=0X00; //NEWtmp = P1;tmp = tmp & 0xF0;tmp = tmp | beatCode_r[index];P1 = tmp;index++;index= index & 0x07;delay(keyval*40); }} } } void Stop()interrupt 0 //k3 電機(jī)啟停 {onoff++;if (onoff > 1)onoff = 0; } void int1()interrupt 2 //k4 按一下控制電機(jī)反轉(zhuǎn),再按正轉(zhuǎn) {direction++;if (direction > 1)direction = 0; }void time1_interserve(void) interrupt 1 //鍵盤掃描中斷(定時(shí)器0) {TR0=0; P1=0xf0; if((P1&0xf0)!=0xf0) delay20ms(); if((P1&0xf0)!=0xf0) {P1=0xfe; if(P14==0) keyval=1; if(P15==0) keyval=2; if(P16==0) keyval=3; if(P17==0) keyval=4; P1=0xfd; if(P14==0) keyval=5; if(P15==0) keyval=6; if(P16==0) keyval=7; if(P17==0) keyval=8; P1=0xfb; if(P14==0) keyval=9; if(P15==0) keyval=10; if(P16==0) keyval=11; if(P17==0) keyval=12; P1=0xf7; if(P14==0) keyval=13; if(P15==0) keyval=14; if(P16==0) keyval=15; if(P17==0) keyval=16; }TR0=1; TH0=(65536-10000)/256; TL0=(65536-10000)%256; }5 調(diào)試中出現(xiàn)的問(wèn)題及解決的辦法
5.1 步進(jìn)電機(jī)抖動(dòng)但不旋轉(zhuǎn)
推測(cè)可能的原因:
1.兩個(gè)脈沖間隔太小導(dǎo)致力矩變小無(wú)法旋轉(zhuǎn):當(dāng)步進(jìn)電機(jī)轉(zhuǎn)動(dòng)時(shí),電機(jī)各相繞組的電感將形成一個(gè)反向電動(dòng)勢(shì);頻率越高,反向電動(dòng)勢(shì)越大。在它的作用下,電機(jī)隨頻率(或速度)的增大而相電流減小,從而導(dǎo)致力矩下降。
解決辦法:增加延時(shí)
2.電機(jī)的通電時(shí)序表有錯(cuò)誤:四相步進(jìn)電機(jī)驅(qū)動(dòng)方式有四拍,雙四拍,八拍,通電順序錯(cuò)誤會(huì)導(dǎo)致電機(jī)運(yùn)行異常
解決辦法:檢查時(shí)序表
3程序問(wèn)題
解決辦法:將單獨(dú)的控制電機(jī)轉(zhuǎn)動(dòng)的程序提取測(cè)試。若正常則擴(kuò)大程序提取范圍,若異常則進(jìn)行修改
4電機(jī)損壞
解決辦法:當(dāng)上述原因不成立時(shí),考慮更換電機(jī)
根據(jù)上述羅列順序進(jìn)行測(cè)試,發(fā)現(xiàn)為程序以及時(shí)序表問(wèn)題,查閱資料進(jìn)行表的修改,并重新編寫程序后進(jìn)行測(cè)試,電機(jī)運(yùn)轉(zhuǎn)正常。
5.2外部中斷無(wú)法控制啟停
推測(cè)可能的原因:
解決辦法:重新檢查是否正常初始化和開放中斷,外部中斷是否改變標(biāo)志,主程序是否正常識(shí)別標(biāo)志
按照上述羅列順序進(jìn)行測(cè)試,發(fā)現(xiàn)中斷運(yùn)行正常,則歸類為程序錯(cuò)誤,排查錯(cuò)誤時(shí)發(fā)現(xiàn)將語(yǔ)句onoff==1寫為onoff=1,導(dǎo)致程序不能正常運(yùn)行。
6 參考資料
[1]高玉芹.單片機(jī)原理與應(yīng)用及C51編程技術(shù)[M].北京:機(jī)械工業(yè)出版社,2017.
[2]張?jiān)?單片機(jī)開發(fā)技術(shù)實(shí)例[M].北京:機(jī)械工業(yè)出版社,2010.
總結(jié)
以上是生活随笔為你收集整理的步进电机控制器的设计的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Scons环境搭建和编译原理概述及嵌入式
- 下一篇: vad唤醒算法_唤醒算法经济后公司需要考