STC單片�是以51�(nèi)核為主的系列單片�,STC單片機是宏晶生產(chǎn)的單時鐘/機器周期的單片機,是高�、低功�、超強抗干擾的新一�8051單片�,指令代碼完全兼容傳�(tǒng)8051,但速度�8�12�,內(nèi)部集成MAX810專用�(fù)位電��4�PWM 8路高�10位A、D�(zhuǎn)�,針�電機控制,強干擾場合�
●高速:1 個時�/ 機器周期,增強型8051 �(nèi)�,速度比普�8051 �8�12 �
●寬電壓�5.5�3.8V�2.4�3.8V(STC12LE5410AD 系列�
●低功耗設(shè)計:空閑模式,掉電模式(可由外部中斷喚醒�
●工作頻率:0�35MHz,相�(dāng)于普�8051�0�420MHz
--- 實際可到48MHz,相�(dāng)�8051� 0�576MHz
●時鐘:外部晶體或內(nèi)部RC 振蕩器可�,在ISP 下載編程用戶程序時設(shè)�
� 12K/10K/8K/6K/4K/2K 字節(jié)片內(nèi)Flash 程序存儲�,擦寫次�(shù)10 萬次以上
� 512 字節(jié)片內(nèi)RAM �(shù)�(jù)存儲�
●芯片內(nèi)EEPROM 功能
� ISP / IAP,在系統(tǒng)可編�/ 在應(yīng)用可編程,無需編程�/ 仿真�
� 10 位ADC�8 通道,STC12C2052AD 系列�8 位ADC�4 路PWM 還可�(dāng)4 路D/A 使用
� 4 通道捕獲/ 比較單元(PWM/PCA/CCU),STC12C2052AD 系列�2 通道
--- 也可用來再實�(xiàn)4 個定時器�4 個外部中斷(支持上升�/ 下降沿中斷)
� 2 個硬�16 位定時器,兼容普�8051 的定時器�4 路PCA 還可再實�(xiàn)4 個定時器
●硬件看門狗(WDT�
●高速SPI 通信端口
●全雙工異步串行�(UART),兼容普�8051 的串�
●先進的指令集結(jié)�(gòu),兼容普�8051指令�
4 �8 �8 位通用工作寄存器(�32 個通用寄存器)
有硬件乘�/ 除法指令
●通用I/O 口(27/23/15 個),復(fù)位后為: �(zhǔn)雙向�/ 弱上拉(普�8051 傳統(tǒng)I/O 口)
可設(shè)置成四種模式:準(zhǔn)雙向�/ 弱上拉,推挽/ 強上�,僅為輸�/ 高阻,開漏每個I/O 口驅(qū)動能力均可達�20mA,但整個芯片不得超�55mA
1 、I / O 口經(jīng)過特殊處� 2 、輕松過2KV/4KV 快速脈沖干�(EFT 測試� 3 、寬電壓� 不怕電源抖� 4 、寬溫度范圍, - 4 0 ℃~8 5 � 5 、高抗靜電(E S D 保護� 6 、單片機�(nèi)部的時鐘電路�(jīng)過特殊處� 7 、單片機�(nèi)部的電源供電系統(tǒng)�(jīng)過特殊處� 8 、單片機�(nèi)部的看門狗電路經(jīng)過特殊處� 9 、單片機�(nèi)部的�(fù)位電路經(jīng)過特殊處�
STC單片機具有在�(yīng)用編�,調(diào)試起來比較方�;帶�10位AD;內(nèi)部eeprom;可�1T/機器周期下工�,速度是傳�(tǒng)51單片機的12�;下面是我寫的AD和EEPROM的驅(qū)動C代碼�
/*----------------------------------------------------------------
*File Name: stc_AD.c -
*Description: A/D �(zhuǎn)換程�
*Project: -
*MCU type: STC12C5410AD -
-
*Company: WY -
*Compiler: KEIL C51 -
*DESINER: 郭準(zhǔn) 06.2.7 -
-----------------------------------------------------------------------*/
#include <global.h> //定義� 系統(tǒng)頭文件和全局變量
/*A/D SFR*/
sfr ADC_LOW2 = 0xBE;
sfr ADC_CONTR = 0xC5;
sfr ADC_DATA = 0xC6;
sfr CLK_DIV = 0xC7; ////////
//定義變量
uchar code display_AD_channel_ID[2] = {0x00,0x01};
uchar data AD_channel_result[2][5]; //各通道A/D�(zhuǎn)換結(jié)�。前是通道�;后是轉(zhuǎn)換的�
//定義引用外部
extern void Delay(uint number);//晶振=11059200,機器周期=1.085069444us,"�"的機器周�=1
extern void send_char_com(uchar ch);
extern void send_string_com(uchar *str,uchar strlen);
void Ad_Change(uchar channel);
//------------------------------------------------------
//功能:A/D�(zhuǎn)�
//入口:channel = 通道� .0�0通道�1�1通道。������
//出口:AD_channel_1_result: 10位的�(shù)�(jù)�16進制�
//�(shè)計:郭準(zhǔn),偉�(yè)�2006/2/7
//------------------------------------------------------
void Ad_Change(uchar channel)
{
uint AD_Result_Temp = 0 ;
//---------------------將P1.0--P1.1�(shè)置成適合AD�(zhuǎn)換的模式
/// P1 = 0xff; //將P1口置�,為A/D�(zhuǎn)換作�(zhǔn)�
ADC_CONTR = ADC_CONTR|0x80; //1000,0000打開A/D�(zhuǎn)換電�
P1M0 = 0x03; //0000�0011用于A/D�(zhuǎn)換的P1.x�,先�(shè)為開�
P1M1 = 0x03; //0000�0011P1.0--P1.1先設(shè)為開漏。斷開內(nèi)部上拉電�
Delay(20); //20
ADC_CONTR = ADC_CONTR&0xE0; //1110,0000 清ADC_FLAG,ADC_START位和�3�
ADC_CONTR = ADC_CONTR|(display_AD_channel_ID[channel]&0x07); //�(shè)置當(dāng)前通道�
Delay(1); //延時使輸入電壓達到穩(wěn)�
ADC_DATA = 0; //清A/D�(zhuǎn)換結(jié)果寄存器
ADC_LOW2 = 0;
ADC_CONTR = ADC_CONTR|0x08; //0000�1000ADCS � 1,啟動轉(zhuǎn)�
do { ; }
while((ADC_CONTR & 0x10)==0); //0001,0000等待A/D�(zhuǎn)換結(jié)�
ADC_CONTR = ADC_CONTR&0xE7; //1110,0111清ADC_FLAG�,停止A/D�(zhuǎn)�
AD_Result_Temp = ((AD_Result_Temp|ADC_DATA)<<2)|(ADC_LOW2&0x03);
//保存返回AD�(zhuǎn)換的 �(jié)�
//----------------------------�(zhuǎn)換成可由串口顯示的字�
AD_channel_result[channel][0] = AD_Result_Temp/1000+0x30;
AD_channel_result[channel][1] = (AD_Result_Temp%1000)/100+0x30;
AD_channel_result[channel][2] = (AD_Result_Temp%100)/10+0x30;
AD_channel_result[channel][3] = AD_Result_Temp%10+0x30;
//------------------------串口�(jiān)�
// send_char_com(ADC_DATA); //////�(fā)送轉(zhuǎn)� � 到的 值,這里只是 �8�,值的�(zhuǎn)換需要考慮
// send_char_com(ADC_LOW2); //////�(fā)送轉(zhuǎn)� � 到的 �,這里只是 �2�,值的�(zhuǎn)換需要考慮
send_string_com(AD_channel_result[channel],4);
Delay(1); //
}
/*----------------------------------------------------------------
*File Name: STC_EEPROM.c -
*Description: IAP/ISP 功能 -
*Project: -
*MCU type: STC12C5410AD -
-
*Company: WY -
*Compiler: KEIL C51 -
*DESINER: 郭準(zhǔn) 06.2.7 -
-----------------------------------------------------------------------*/
#include <global.h> //定義� 系統(tǒng)頭文件和全局變量
/*IAP有關(guān)功能寄存�*/
sfr ISP_DATA = 0xE2;
sfr ISP_ADDRH = 0xE3;
sfr ISP_ADDRL = 0xE4;
sfr ISP_CMD = 0xE5;
sfr ISP_TRIG = 0xE6;
sfr ISP_CONTR = 0xE7;
//----------------------------定義常量
#define ENABLE_ISP 0x82 //<20MHz
//#define ENABLE_ISP 0x83 //<12MHz
#define DEBUG_DATA 0x5A
//----------------------------flash 存儲的起始地址
#define DATA_FLASH_START_ADDRESS 0x2800 //stc12c2052ad ////////////???????????
uchar tx_buf[3] = {0,0,0};
extern void Delay(uint number);//晶振=11059200,機器周期=1.085069444us,"�"的機器周�=1
extern void send_char_com(uchar ch);
extern void send_string_com(uchar *str,uchar strlen);
uchar Byte_Read(uint address);
void Sector_Erase(uint address);
void Byte_Program(uint address,uchar ch);
/*
void Eeprom_Start(void)
{
P1 = 0xf0; //開始工作
Delay(2); //22us..�13us
// SP = 0xE0; //堆棧指針指向0E0H單元
}
*/
//------------------------------------------------------
//功能:讀一字節(jié);�(diào)用前需打開IAP功能
//入口:uint address=頁地址0�512,為了提高處理速度,用0~256的范�
//出口�
//�(shè)計:郭準(zhǔn),偉�(yè)�2006/2/7
//------------------------------------------------------
uchar Byte_Read(uint address)
{
uchar data ch;
ISP_CONTR = ENABLE_ISP; //打開IAP功能,設(shè)置Flash操作等待時間
ISP_CMD = 0x01; //選擇讀AP模式
//--------------------------
address = DATA_FLASH_START_ADDRESS+address;
ISP_ADDRH = (uchar)(address>>8); //填頁地址
ISP_ADDRL = (uchar)(address); //填頁地址
EA = 0;
ISP_TRIG = 0x46; //出發(fā)ISP處理�
ISP_TRIG = 0xB9;
nop();
ch = ISP_DATA; //保存�(shù)�(jù)
EA = 1;
//------------------------在處理器完成之前,CUP將暫�
//------------------------�(guān)閉IAP功能,清與ISP有關(guān)的特殊功能寄存器
ISP_CONTR = 0;
ISP_CMD = 0;
ISP_TRIG = 0;
// send_char_com(ch + 0x30);
return ch;
}
//------------------------------------------------------
//功能:擦除扇區(qū)
//入口:uint address=頁地址0�512,為了提高處理速度,用0~256的范�
//出口�
//�(shè)計:郭準(zhǔn),偉�(yè)�2006/2/7
//------------------------------------------------------
void Sector_Erase(uint address)
{
ISP_CONTR = ENABLE_ISP; //打開IAP功能,設(shè)置Flash操作等待時間
ISP_CMD = 0x03; //選擇頁擦除模�
//--------------------------
address = DATA_FLASH_START_ADDRESS+address;
ISP_ADDRH = (uchar)(address>>8); //填頁地址
ISP_ADDRL = (uchar)(address); //填頁地址
EA = 0;
ISP_TRIG = 0x46; //出發(fā)ISP處理�
ISP_TRIG = 0xB9;
nop();
EA = 1;
//------------------------�(guān)閉IAP功能,清與ISP有關(guān)的特殊功能寄存器
ISP_CONTR = 0;
ISP_CMD = 0;
ISP_TRIG = 0;
}
//------------------------------------------------------
//功能:字節(jié)編程,寫
//入口:uint address=頁地址0�512,為了提高處理速度�
// �0~256的范�;uchar ch=要寫的數(shù)�(jù)
//出口�
//�(shè)計:郭準(zhǔn),偉�(yè)�2006/2/7
//------------------------------------------------------
void Byte_Program(uint address,uchar ch)
{
// Sector_Erase(address);
ISP_CONTR = ENABLE_ISP; //打開IAP功能,設(shè)置Flash操作等待時間
ISP_CMD = 0x02; //選擇字節(jié)編程模式
//--------------------------
address = DATA_FLASH_START_ADDRESS+address;
ISP_ADDRH = (uchar)(address>>8); //填頁地址
ISP_ADDRL = (uchar)(address); //填頁地址
ISP_DATA = ch;
EA = 0;
ISP_TRIG = 0x46; //出發(fā)ISP處理�
ISP_TRIG = 0xB9;
nop();
EA = 1;
//------------------------�(guān)閉IAP功能,清與ISP有關(guān)的特殊功能寄存器
ISP_CONTR = 0;
ISP_CMD = 0;
ISP_TRIG = 0;
}
//------------------------------------------------------
//功能:字節(jié)編程,寫字符�
//入口:uint address=頁地址0�512,為了提高處理速度�
// �0~256的范�;uchar ch=要寫的數(shù)�(jù)
// len=字符串的長度
//出口�
//�(shè)計:郭準(zhǔn),偉�(yè)�2006/2/7
//------------------------------------------------------
void Morebyte_Program(uint address,uchar *ch,uchar len)
{
uchar k = 0;
Sector_Erase(address);
do
{
Byte_Program(address,*(ch + k));
address++;
k++;
}
while(k < len);
}
//------------------------------------------------------
//功能:讀多字節(jié);�(diào)用前需打開IAP功能
//入口:uint address=頁地址0�512,為了提高處理速度,用0~256的范�
//出口�
//�(shè)計:郭準(zhǔn),偉�(yè)�2006/2/7
//------------------------------------------------------
void Moreyte_Read(uint address)
{
uchar k = 0;
do
{
tx_buf[k] = Byte_Read(address);
address++;
k++;
}
while(k < 3);
}
步進電機是工業(yè)控制中應(yīng)用十分廣泛的一種電動機,它能將�(shù)字信號直接轉(zhuǎn)換成角位移或線位�,驅(qū)動速度和指令脈沖能�(yán)格同步,具有較高的定位精�,控制系�(tǒng)成本低廉,在�(jīng)濟型�(shù)控機床等�(lǐng)域應(yīng)用廣�。這里針對電磁干擾較強以及要求低成本應(yīng)用的場合,采用超強抗干擾、小巧低功耗的工業(yè)級STC12C系列單片�,充分利用單片機�(nèi)部的硬件資源,設(shè)計實用的步進電機控制和�(qū)動系�(tǒng)�
1 控制系統(tǒng)總體方案�(shè)�
系統(tǒng)功能原理示意圖如�1所示�
在該系統(tǒng)中由單片機直接輸出電機的各相控制脈沖序列,光耦進行必要的光電隔離,采用分立元件�(gòu)成功率.MOSFET管驅(qū)動電�,帶動電機轉(zhuǎn)�。鍵盤接口與 LED顯示功能由具有SPI串行接口功能的ZLG7289實現(xiàn)。既可使用按鍵輸入的方式精確�(shè)置電機的工作方式與轉(zhuǎn)�,也可以通過�(diào)速旋鈕實�(xiàn)電機�(zhuǎn)速的連續(xù)�(diào)節(jié),還能通過上位機實�(xiàn)對電機工作方式的�(diào)整與控制�
2 硬件電路�(shè)�
2�1 控制電路�(shè)�
控制芯片采用STC12C4052AD,它�1個時鐘/機器周期的單片機,速度比普通的8051單片機快8�12�,有20個引腳且為小巧封�。該單片機具有超強抗干擾,抗靜電的特�,能輕松通過4 kV快速脈沖干擾,其功耗超�,正常工作模式下的典型功耗為2�7�7 mA。芯片自帶硬件看門�,具有高速SPI通信端口�8通道8位A/D�(zhuǎn)換,2路PWM輸出�4 KB容量的FLASH存儲��256 B容量的SRAM�4個定時器�1個全雙工串行通信�。由于單片機�(nèi)部的資源豐富,性價比高,能夠滿足該�(shè)計的要求,而且減少了硬件電路的�(shè)�,提高了工作效率。單片機的外部引腳定義,及其在該�(shè)計中的資源分布如�2所��
P1�4(ADC4)口外�4�7 kΩ的可�(diào)電位器,利用單片機內(nèi)部的模/�(shù)�(zhuǎn)換功能轉(zhuǎn)換成�(shù)字量,進而控制輸出脈沖頻�,完成步進電機速度的“連續(xù)”調(diào)節(jié)。過流檢測的�(jié)果直接引入到外部中斷0,實�(xiàn)對電流的快速控��
2�2 �(qū)動電路設(shè)�
功率MOSFET管的部分�(qū)動電路如�3所�。該電路的設(shè)計可改進功率MOSFET管的快速開通時間,提高了驅(qū)動電流的前后沿陡�,能夠改善高頻響�(yīng)。功率MOSFET管柵源間的阻抗很�,工作于開關(guān)狀�(tài)下漏源間電壓的突變會通過極間電容耦合到柵�,產(chǎn)生相�(dāng)幅度的VGS脈沖電壓。正方向的VGS脈沖電壓可能會導(dǎo)致器件的誤導(dǎo)通。為�,需要適�(dāng)降低柵極�(qū)動電路的阻抗,在柵源之間并接阻尼電阻或接一個穩(wěn)壓值小�20 V,而又接近20 V的齊納二極管,以防止柵源開路工作�
為了抑制功率管內(nèi)的快恢復(fù),二極管出現(xiàn)反向恢復(fù)效應(yīng),在電路中接�4只快恢復(fù)二極管。其�,反并聯(lián)快恢�(fù)二極管的作用是為電機相繞組提供續(xù)流通路,其�2 只是為了使功率MOSFET管內(nèi)部的快恢�(fù)二極管不流過反向電流,以保證功率MOSFET管在動態(tài)工作時能起到正常的開�(guān)的作用�
2�3 顯示與按鍵處理電�
在單片機�(yīng)用系�(tǒng)�,典型的鍵盤顯示接口電路由基于并行擴展技�(shù)�8155�8279�(gòu)成控制電�?,F(xiàn)代單片機�(yīng)用系�(tǒng)廣泛采用串行擴展技�(shù)。相對于并行方式,串行擴展接線靈活,占用單片機資源少�
ZLG7289A是具有SPI串行接口功能的可同時�(qū)�8位數(shù)碼管�64只獨立LED的智能顯示驅(qū)動芯�,單片即可完成顯示、鍵盤接口的全部功能。采用串行方式與微處理器通信,數(shù)�(jù)從DIO引腳送入芯片,并由CLK端同�。當(dāng)選信號變?yōu)榈碗娖胶?,DIO引腳上的�(shù)�(jù)在CLK引腳的上升沿被寫� ZLG7289A的緩沖寄存器。圖4是ZLG7289的典型應(yīng)�。ZLG7289A連接共陰式數(shù)碼管,應(yīng)用中不需要的�(shù)碼管與鍵盤可以不連接,省去數(shù)碼管�?qū)�?shù)碼管�(shè)置消隱屬�,這均不會影響鍵盤的使用。整個電路無需添加鎖存器和�(qū)動器,耗電�,軟件設(shè)計中無需編寫顯示譯碼程序,省去了靜態(tài)顯示擴展芯片,大大節(jié)省了CPU的時�。該電路�(shè)計中僅采�4×4鍵盤�4位數(shù)碼管,已完全滿足�(shè)計需��
3 軟件�(shè)�
軟件部分采用模塊化結(jié)�(gòu)�(shè)計。對步進電機轉(zhuǎn)速的控制是通過定時器工作在中斷方式實現(xiàn)�。定時器定時中斷�(chǎn)生周期性脈沖序�,不是采用軟件延時的方式,這樣不占用CPU的時�。CPU在非中斷時間�(nèi)可以處理其他事件,只有在中斷�(fā)生時才驅(qū)動步進電機轉(zhuǎn)動一�。根�(jù)步進電機勵磁狀�(tài)�(zhuǎn)�,采用查表法求出所需的輸出狀�(tài),并以二進制碼的形式依次存入單片機內(nèi)部的存儲器中;然后按照正向或反向順序依次取出地址的狀�(tài)字,送給STC12C4052AD,輸出各勵磁狀�(tài),從而實�(xiàn)�(huán)形分配器的功��
程序總體框架包括:主程序、過流檢測中斷服�(wù)子程序、定時器中斷服務(wù)子程�、以及其他子程序(包括正轉(zhuǎn)、反�(zhuǎn)子程�、鍵盤顯示控制子程序、A/D�(zhuǎn)換子程序�),由于篇幅限�,在此不一一敘述�
4 系統(tǒng)測試
該系�(tǒng)采用超強抗干�,小巧低功耗的工業(yè)級STC12C4052AD單片機為控制核心,工作可靠性高,抗于擾能力強。系�(tǒng)測試在專門的檢測實驗室�(nèi)進行。利用群脈沖�(fā)生器(EFT-4001)、周波電壓跌落發(fā)生器(VDG-1105)、靜電放電發(fā)生器(ESD-20)以及雷擊浪涌�(fā)生器(SG-5006) 等專用儀器對系統(tǒng)的電壓變化抗擾度、快速瞬變脈沖群抗擾�、抗靜電和雷擊浪涌等參數(shù)進行檢測。經(jīng)過實�,系�(tǒng)功能正常,所有參�(shù)均已達標(biāo)�
5 �(jié) �
電子技�(shù)�(fā)展日新月�,新型單片機層出不窮。在電機控制系統(tǒng)開發(fā)過程�,如果恰�(dāng)選取單片機以及各電路模塊的型號,能夠簡化�(shè)計過�,起到事半功倍的效果。該系統(tǒng)采用STC12C4052AD單片�,其工作方式、轉(zhuǎn)動速率及轉(zhuǎn)矩數(shù)可以通過鍵盤輸入,也可通過普通旋鈕或上位機調(diào)節(jié)。鍵盤顯示模塊采� ZLG7289實現(xiàn)。本系統(tǒng)具有通用性,適當(dāng)改變輸出口各位控制端,便可控制不同相�(shù)的步進電機�
維庫電子�,電子知識,一查百��
已收錄詞�170104�