張旺 王東 黃玲玲 沈霄
【摘 要】隨著我國(guó)工業(yè)化進(jìn)程和電子技術(shù)的快速發(fā)展,離心機(jī)的應(yīng)用越來(lái)越廣泛。與此同時(shí),企業(yè)對(duì)離心機(jī)各方面的性能有著越來(lái)越高的要求。本文詳細(xì)介紹了基于DSPIC30F3011單片機(jī)的驅(qū)動(dòng)系統(tǒng)的設(shè)計(jì)方案、轉(zhuǎn)速檢測(cè)和通信系統(tǒng)各個(gè)部分,并附上了部分軟件程序。
【關(guān)鍵詞】離心機(jī);軟件;PWM波形;測(cè)速系統(tǒng);通信系統(tǒng)
中圖分類(lèi)號(hào): TQ051 文獻(xiàn)標(biāo)識(shí)碼: A 文章編號(hào): 2095-2457(2018)19-0052-003
DOI:10.19694/j.cnki.issn2095-2457.2018.19.022
Software Design of Centrifugal Variable Frequency Drive System
ZHANG Wang WANG Dong HUANG Ling-ling SHEN Xiao
(Hunan Normal University, School of Engineering and Design, Changsha Hunan 410000, China)
【Abstract】With the rapid development of industrialization and electronic technology in China, the application of centrifuges is more and more extensive. At the same time, companies have increasingly higher requirements for all aspects of centrifuge performance. This paper introduces the design scheme, speed detection and communication system parts of the drive system based on DSPIC30F3011 microcontroller, and attaches some software programs.
【Key words】Centrifuge; Software; PWM waveform; Speed measurement system; Communication system
1 芯片簡(jiǎn)介
本系統(tǒng)選擇DSPIC30F3011作為主芯片,該芯片是microchip公司生產(chǎn)的高性能數(shù)字信號(hào)控制器,其包含5個(gè)16位定時(shí)器,4路輸入捕捉、4路輸出比較,6路PWM通道,9路10位的A/D轉(zhuǎn)換,2個(gè)異步收發(fā)器UART以及大內(nèi)存,完全滿(mǎn)足產(chǎn)生SPWM調(diào)速、建立用戶(hù)通信系統(tǒng)、測(cè)量轉(zhuǎn)速以及電機(jī)其他功能的需求。
2 PWM模塊
產(chǎn)生SPWM的方案:將PWM時(shí)基設(shè)置工作在連續(xù)向上/向下計(jì)數(shù)模式,產(chǎn)生一個(gè)對(duì)稱(chēng)三角波形,通過(guò)公式計(jì)算出PTPER的值,通過(guò)配置特殊事件觸發(fā)寄存器的值,得到一路中心對(duì)稱(chēng)的PWM波形,將PWM配對(duì)I/O引腳模式位設(shè)置為1,互補(bǔ)輸出模式,得到一組互補(bǔ)的輸出。由此得到三組PWM波。將SIN函數(shù)值放到各個(gè)占空比寄存器當(dāng)中,得到三組隨正弦規(guī)律變化的SPWM波形。
通過(guò)配置DSPICL30F3011芯片的PWM模塊的相關(guān)寄存器,實(shí)現(xiàn)一個(gè)基本的三組PWM波的輸出。在本設(shè)計(jì)中,采用的是一個(gè)頻率為6MHz的晶振,產(chǎn)生一個(gè)頻率為6.5KHz的PWM波,需要配置PTCON(PWM時(shí)基控制寄存器)、PTPER(PWM時(shí)基周期寄存器)、SEVTCMP(特殊事件比較寄存器)、PWMCON1(PWM控制寄存器1)、PWMCON2(PWM控制寄存器2)。
2.1 產(chǎn)生單通道PWM波形輸出
為了產(chǎn)生三角載波,需要將PWM模塊時(shí)基控制寄存器PTCON設(shè)置為0X8002(開(kāi)啟PWM時(shí)基,PWM時(shí)基輸出后預(yù)分頻比設(shè)為1:1,輸入時(shí)鐘預(yù)分頻比為1:1,工作在連續(xù)向上/向下計(jì)數(shù)模式),可以根據(jù)需要設(shè)計(jì)不同的分頻系數(shù),此值僅作參考。通過(guò)式(1)
PTPER=■-1式(1)
計(jì)算出PWM時(shí)基周期寄存器的值,并將十五位寄存器的值寫(xiě)入時(shí)基寄存器(PTMR),因?yàn)楣ぷ髟谶B續(xù)向上/向下計(jì)數(shù)模式,此值是三角載波的峰值,載波周期需乘以二,完成此步驟之后還需將相應(yīng)的中斷允許寄存器開(kāi)啟,并且根據(jù)需要設(shè)計(jì)相應(yīng)的中斷優(yōu)先級(jí),即可完成載波輸出。
假設(shè)采用6M晶振,輸出PWM波的頻率為6.5k,PWM時(shí)基工作在連續(xù)向上/向下計(jì)數(shù)模式,無(wú)分頻,則:
PTPER=■-1=460
部分初始化例程如下:
IFS2bits.PWMIF=0;清除PWM中斷標(biāo)志狀態(tài)位
IEC2bits.PWMIE=1;允許PWM中斷
IPC9=0X5000;將PWM中斷優(yōu)先級(jí)設(shè)為3
PTCON=0X8002;
PTMR=0X0000;清除計(jì)數(shù)寄存器值
PTPER=460;輸出頻率為6.5k的PWM波
2.2 產(chǎn)生三組PWM波形輸出
為了驅(qū)動(dòng)三相電動(dòng)機(jī),在硬件電路設(shè)計(jì)了三組逆變橋,每組逆變橋的兩個(gè)開(kāi)關(guān)管不能同時(shí)導(dǎo)通,并且三組的電壓相位相差120°,因此在軟件部分,控制開(kāi)關(guān)管的脈沖序列必須達(dá)到這兩個(gè)要求。DSPIC30F3011內(nèi)部的PWM控制寄存器可以控制PWM波的輸出模式,當(dāng)處于互補(bǔ)模式時(shí),就可以得到一組互補(bǔ)的序列(在編寫(xiě)程序時(shí),需要用到PWMCON1(PWM控制寄存器1)。考慮到開(kāi)關(guān)器件的開(kāi)關(guān)時(shí)間的存在,除此之外必須要設(shè)置序列間足夠長(zhǎng)的死區(qū)時(shí)間,保證同一逆變橋的兩個(gè)開(kāi)關(guān)管不會(huì)同時(shí)閉合。
假設(shè)采用6M晶振,死區(qū)時(shí)間由單元A提供,單元A的預(yù)分頻比為1:2,死區(qū)時(shí)間設(shè)為5us 則:
十六進(jìn)制時(shí)間值=3MHz×5μs=15=0X000F
部分程序如下:
DTCON1=0X000F;
DTCON2=0X0000;所有PWM信號(hào)的死區(qū)時(shí)間都由單元A提供
PWMCON1=0X0077;模塊為互補(bǔ)模式,允許PWMPIN引腳輸出
3 測(cè)速系統(tǒng)的軟件實(shí)現(xiàn)
本系統(tǒng)中采用霍爾元件測(cè)速法,將霍爾元件的輸入端安裝在電機(jī)底部的轉(zhuǎn)軸上,輸出端接CPU的CN端口,根據(jù)其測(cè)速原理,在程序設(shè)計(jì)部分,需要檢測(cè)其輸出端的電平變化,并且進(jìn)行計(jì)數(shù),可以用單片機(jī)DSPIC30F3011內(nèi)部的計(jì)數(shù)器和輸入捕捉中斷模塊來(lái)實(shí)現(xiàn)。
初始化程序如下:
void initial_CN(void)
{
CNPU1=0X00fe; //CN12345,6,7,上拉開(kāi)啟CN0不上拉,作AD口.
CNPU2=0X0006; //CN17.18上拉.
CNEN1=0X0000; //CN5,CN6,CN7電平變化中斷關(guān)閉。
CNEN2=0X0000; //不要CN中斷.
IPC3=0X0000;
IEC0bits.CNIE=0; //關(guān)閉電平變化中斷
}
void initial_icp7(void)
{
IC7CON=0X0002; //每個(gè)下降沿捕捉一次,每次一個(gè)中斷,捕捉TMR3的內(nèi)容。
IC7BUF=0;
}
計(jì)數(shù)器初始化程序如下
void initial_timer(void)
{ PR1=24000; // t1計(jì)數(shù)周期設(shè)為24000
TMR1=0;
TMR2=0;
TMR3=0;
T2CON=0X0008; //t2和T3形成32位定時(shí)器
PR2=0XFFFF;
PR3=0X06FF; //最大的周期設(shè)為19秒,如果19秒后沒(méi)有進(jìn)入CN中斷,報(bào)錯(cuò)。
}
輸入捕捉模塊中斷程序如下
void __attribute__((interrupt, no_auto_psv)) _IC7Interrupt(void)
{
hall_timer_low=TMR2;
hall_timer = TMR3HLD;
hall_timer <<= 16;
hall_timer += hall_timer_low;
TMR3HLD=0;
TMR2=0;
IFS1bits.IC7IF=0; //清除 輸入捕捉中斷.
if(hall_timer>30000)
{
count_speed = 720000000/hall_timer;
current_speed = count_speed;
}
if(syn_speed_set<(current_speed))
SpeedCheckCount++;
else
SpeedCheckCount=0;
}
4 通信系統(tǒng)的軟件實(shí)現(xiàn)
因?yàn)楫惒酱型ㄐ沤涌诰哂袀鬏斁€(xiàn)少、成本低、可靠性高、實(shí)現(xiàn)簡(jiǎn)單等優(yōu)點(diǎn),在本設(shè)計(jì)中,對(duì)傳輸距離沒(méi)有太高的要求,因此選擇RS-232端口進(jìn)行傳輸,而所選用的CPU內(nèi)部集成有UART(通用異步收發(fā)器),只要在程序部分進(jìn)行配置即可。
DSPIC30F3011芯片的UART是可以直接連接外設(shè)的串行I/O端口之一,在本設(shè)計(jì)中,利用這一端口實(shí)現(xiàn)軟件通信部分。在通信模塊有一個(gè)波特率發(fā)生器UXBRG,通過(guò)此寄存器,可設(shè)置波特率,計(jì)算方法如式(5-2a)、(5-2b):
波特率=■式(5-2 a)
UXBRG=■-1式(5-2 b)
例如:系統(tǒng)晶振頻率為6MHz,設(shè)置波特率為1200,求波特率發(fā)生器的值。
UXBRG=■-1■-1=311
將此值寫(xiě)入到波特率發(fā)生器,通信系統(tǒng)的波特率為1200
UART初始化程序如下:
void initial_uart(void)
{
U1BRG=311; //波特率是1200的值。
U1STA=0X0130; //使能地址檢測(cè)//接收到一個(gè)緩沖器滿(mǎn)時(shí),中斷標(biāo)志置位
U1MODE=0X0406; //一個(gè)停止位,9位數(shù)據(jù)無(wú)奇偶效驗(yàn),使用ALIO(輔助IO端口)
U1MODEbits.UARTEN=1; //啟用UART
U1STAbits.UTXEN=1; //啟用發(fā)送功能。
}
發(fā)送數(shù)據(jù)程序:
void send_uart_data(void)
{
if(U1STAbits.UTXBF==0)//發(fā)送緩沖器未滿(mǎn)
{
if(tx_count==0) //重新發(fā)送一個(gè)字?jǐn)?shù)據(jù)
U1TXREG=tx_data[tx_count];//發(fā)送緩沖器加載數(shù)據(jù)
else
U1TXREG=tx_data[tx_count]&0x00ff; //如果9位數(shù)據(jù)沒(méi)加載完,緩沖寄存器繼續(xù)加載 tx_count++;
if(tx_count>10)//加載完9位數(shù)據(jù),寫(xiě)入數(shù)據(jù)
{ tx_count=0;
write_send_data();
}
}
}
數(shù)據(jù)接收子程序如下:
//*****************VOID receive_data數(shù)據(jù)接收子程序**************************************
void receive_uart_data(void)
{
if(U1STAbits.OERR)
{
U1STAbits.OERR=0; //如果有數(shù)據(jù)溢出錯(cuò)誤,清除數(shù)據(jù)溢出錯(cuò)誤
IFS0bits.U1RXIF=0;//清除接收中斷標(biāo)志
if(sys_error==0) //無(wú)系統(tǒng)標(biāo)志錯(cuò)誤數(shù)據(jù)
sys_error=6; //串口通訊錯(cuò)誤置位。
}
else if(U1STAbits.FERR)//檢測(cè)到當(dāng)前字符的幀錯(cuò)誤
{
U1STAbits.FERR=0;//清除幀錯(cuò)誤標(biāo)志位
if(sys_error==0)
sys_error=7; //返回接收錯(cuò)誤信息
}
else if(rx_count==0)//接收寄存器中無(wú)數(shù)據(jù)
{
if(IFS0bits.U1RXIF)//UART1接收器中斷請(qǐng)求
{
IFS0bits.U1RXIF=0;//清除UART1接收器狀態(tài)標(biāo)志位
while(U1STAbits.URXDA)//接收緩沖器中有數(shù)據(jù)
rx_data[0]= U1RXREG;//接收數(shù)據(jù)
if(rx_data[0]==0x0169)
{ rx_count++;
U1STAbits.ADDEN=0;//地址檢測(cè)模式禁止(接收數(shù)據(jù)的第八位=1)
}
}
}
else
{
if(IFS0bits.U1RXIF) //如果接受中斷標(biāo)志位置位
{
IFS0bits.U1RXIF=0; //清除接收中斷標(biāo)志
while(U1STAbits.URXDA) //接收緩沖器中有數(shù)據(jù)
rx_data[rx_count]= U1RXREG;//接收數(shù)據(jù)
rx_count++;
if(rx_count>10) //接收到一個(gè)9位數(shù)據(jù)后
{
rx_count=0; //地址清零,等待接收下一個(gè)
rx_data[0]=0;
U1STAbits.ADDEN=1;//地址檢測(cè)模式使能
receive_data_check();//接收數(shù)據(jù)校驗(yàn)
read_rx_data();//讀數(shù)據(jù)
}
}
}
}
//********************void data check接收數(shù)據(jù)和效驗(yàn)*********************************************
void receive_data_check(void)
{
unsigned int rx_data_add;rx_data_add=rx_data[1]+rx_data[2]+rx_data[3]+rx_data[4]+rx_data[5]+rx_data[6]+rx_data[7]+rx_data[8]+rx_data[9];
rx_data_add&=0x00ff;
if(rx_data_add==rx_data[10])
rx_ERROR=0;
else
rx_ERROR=1;
}
5 結(jié)束語(yǔ)
在離心機(jī)系統(tǒng)中,軟件系統(tǒng)非常重要,軟件系統(tǒng)的優(yōu)劣直接決定了整個(gè)系統(tǒng)的安全性和可靠性。在本系統(tǒng)中設(shè)計(jì)了一個(gè)電機(jī)測(cè)速系統(tǒng),檢測(cè)當(dāng)前的轉(zhuǎn)速,對(duì)速度進(jìn)行實(shí)時(shí)監(jiān)控,讓操作員能夠清楚的知道當(dāng)前電機(jī)的轉(zhuǎn)速。為了增強(qiáng)系統(tǒng)的可操作性,還增加了微機(jī)間的通信系統(tǒng),讓操作員可以根據(jù)需要對(duì)離心機(jī)速度,時(shí)間進(jìn)行調(diào)節(jié)與設(shè)定。
【參考文獻(xiàn)】
[1]張燕賓.SPWM變頻調(diào)速應(yīng)用技術(shù)第3版[M].北京:機(jī)械工業(yè)出版社,2005:59-84.
[2]馬小亮.高性能變頻調(diào)速及其典型控制系統(tǒng)[M].北京:機(jī)械工業(yè)出版社,2010:44-47.
[3]石秋潔,張燕賓.變頻器應(yīng)用基礎(chǔ)[M].北京:機(jī)械工業(yè)出版社,2002.
[4]周志敏,周紀(jì)海,紀(jì)愛(ài)華.變頻調(diào)速系統(tǒng)設(shè)計(jì)與維護(hù)[M].北京:中國(guó)電力出版社,2007.