
4.2 高速單脈沖控制
采用高速單脈沖控制方式時(shí),可使關(guān)斷角保持不變,從而使開(kāi)通角在較寬的范圍內(nèi)進(jìn)行調(diào)節(jié),最終實(shí)現(xiàn)高速高速。由于AVR系列單片機(jī)具有輸入捕捉功能,因此可將 PIA或PIB信號(hào)送給ICP腳,然后讓ICP1寄存器首先捕捉脈沖上升沿發(fā)生的時(shí)間,接著再捕捉下一次上升沿發(fā)生的時(shí)間,然后用這段時(shí)間除以相間隔的角度15°就可得到標(biāo)準(zhǔn)單脈沖數(shù)。當(dāng)然,由于中斷處理需要一定的時(shí)間,所以要通過(guò)軟件修正。這樣就可以高精度控制高速運(yùn)轉(zhuǎn)時(shí)的開(kāi)通角和關(guān)斷角,從而實(shí)現(xiàn)高速單脈沖的軟件控制。<!--StartFragment -->
5 軟件示例
5.1 相輸出子程序示例
;正轉(zhuǎn)相輸出
.def xiin=r16 ;相輸入信號(hào)寄存器
;====================
xinoutz:in xiin,pind ;將相輸入信號(hào)送給寄存器
andi xiin,$03 ;相與只剩下相信號(hào)
cpi xiin,$01 ;是否da輸出
brbc 1,daout ;相等,da輸出
cpi xiin,$03 ;是否ab輸出
brbc 1,about ;相等,ab輸出
cpi xiin,$02 ;是否bc輸出
brbc 1,bcout ;相等,bc輸出
cpi xiin,$00 ;是否cd輸出
brbc 1,cdout ;相等,cd輸出
;====================
;反轉(zhuǎn)相輸出
;====================
xinoutf:in xiin,pind ;將相輸入信號(hào)送給寄存器
andi xiin,$00 ;相與只剩下相信號(hào)
cpi xiin,$01 ;是否da輸出
brbc 1,daout ;相等,da輸出
cpi xiin,$02 ;是否ab輸出
brbc 1,about ;相等,ab輸出
cpi xiin,$03 ;是否bc輸出
brbc 1,bcout ;相等,bc輸出
cpi xiin,$01 ;是否cd輸出
brbc 1,cdout ;相等,cd輸出
;====================
daout:sbic pinb,4 ;開(kāi)通a相低電平有效
sbic pinb,7 ;開(kāi)通d相?
sbis pinb,5
sbis pinb,6
ret
about:sbic pinb,4 ;開(kāi)通a相
sbic pinb,6 ;開(kāi)通b相
<!--StartFragment -->
sbis pinb,5
sbis pinb,7
ret
bcout:sbic pinb,5 ;開(kāi)通c相
sbic pinb,6 ;開(kāi)通b相?
sbis pinb,7
sbis pinb,4
ret
cdout:sbic pinb,5 ;開(kāi)通c相
sbis pinb,7 ;開(kāi)通d相?
sbis pinb,4
sbis pinb,6
ret
5.2 速度采集顯示子程序示例
.include "m16def.inc"
.org $001c
rjmp adcint
.def channel=r29 ;模擬通道號(hào)
.def lresult=r2 ;轉(zhuǎn)換低字節(jié)
.def hresult=r3 ;轉(zhuǎn)換高字節(jié)
.def temp=r16
.equ sample=$0060 ;采樣數(shù)據(jù)1緩沖區(qū)首地址
.equ sample2=$0063 ;采樣數(shù)據(jù)2緩沖區(qū)首地址
.def round=r17 ;顯示回合計(jì)數(shù)器
.def outer=r19 ;存放外環(huán)計(jì)數(shù)器
.def inner=r18 ;存放內(nèi)環(huán)計(jì)數(shù)器
.equ slabel=$0400 ;字符碼首地址
.def hxian=r2 ;存放預(yù)顯示高字節(jié)
.def lxian=r1 ;存放預(yù)顯示低字節(jié)
;采集顯示速度占用系統(tǒng)資源r1r2s3r4r16,$60~$69
adcin:ldi channel,$04 ;從4通道開(kāi)始
out admux,channel
ldi r16,$ee ;自由運(yùn)行方式
out adcsr,r16 ;啟動(dòng)轉(zhuǎn)換
clr xh ;建立sram指針
ldi x1,$60
inc channel ;通道號(hào)增1
out admux,channel ;選通道4
sbi adcsr,3 ;開(kāi)啟ad中斷
ldi r28,$03 ;轉(zhuǎn)換次數(shù)
adhere:rjmp adhere ;等待中斷
adcint:in lresult,adcl ;讀轉(zhuǎn)換結(jié)果
in hresult,adch
st x+,lresult
dec r28
brne adnextc
<!--StartFragment -->
rjmp adret
adnextc:ldi r28,$03 ;轉(zhuǎn)換次數(shù)
inc channel ;通道號(hào)加1
out admux,channel ;選下一個(gè)通道
cpi x1,$70 ;轉(zhuǎn)換的是通道7嗎
brme adret ;否,返回
cbi ADCSR,7 ;是,停止轉(zhuǎn)換
adret:reti
6 結(jié)束語(yǔ)
實(shí)際使用證明:Atmel公司出品的Atmega16系列單片機(jī)具有處理速度快,內(nèi)部外設(shè)功能模塊豐富等優(yōu)點(diǎn),是一種性價(jià)比較高的單片機(jī),特別適用于電池供電、便攜式以及電機(jī)驅(qū)動(dòng)等系統(tǒng)。本文的開(kāi)關(guān)磁阻電機(jī)充分利用了該單片機(jī)豐富的內(nèi)部外設(shè)模塊,因而簡(jiǎn)化了外圍電路,大大提高了性價(jià)比。





