- 產(chǎn)品功能要求介紹
- 方案確定和芯片選型
- 硬件設計
- 軟件規劃及編寫(xiě)
- 采用單片機進(jìn)行設計
微波爐控制器的工作環(huán)境相對比較惡劣。首先是爐腔溫度比較高,控制器附近溫度也會(huì )比較高,達到60℃~70℃;另一方面,微波輻射對單片機抗干擾的要求也很高,在做多次快速開(kāi)關(guān)門(mén)試驗中,當少量微波泄露時(shí),對控制器有一定的輻射,以及反復開(kāi)通和關(guān)斷大功率負載會(huì )產(chǎn)生較強的干擾。所以選擇合適的單片機十分重要,在多年的家電產(chǎn)品設計中,經(jīng)常用盛群半導體(Holtek)的48系列及46系列8bit單片機設計微波爐控制器,無(wú)論在適應工作環(huán)境還是抗干擾等方面都完全滿(mǎn)足要求,在成本及供貨等方面比國外芯片也有更明顯的優(yōu)勢。
本文通過(guò)實(shí)際產(chǎn)品為例,以產(chǎn)品功能要求、方案確定和芯片選型、硬件設計、軟件規劃及編寫(xiě)等幾部分介紹如何用單片機設計微波爐控制器。
功能要求
設計產(chǎn)品首先了解產(chǎn)品的要求,了解越詳細設計反復修改就越少,特別是關(guān)于影響芯片選型及輸出控制等跟硬件直接相關(guān)的部分。本文介紹的微波爐控制器的主要功能如下:
- 燒烤加熱,功率有2檔
- 微波加熱,功率有10檔
- 熱風(fēng)烘烤加熱,溫度多檔
- 混合加熱,有三種組合模式:燒烤加微波、烘烤加微波、烘烤加燒烤
- 自動(dòng)解凍,重量選擇有20檔
- 自動(dòng)菜單,6大類(lèi),各類(lèi)分別有重量選擇
- 顯示:88:88數碼管,四周帶14個(gè)圖標
- 按鍵:有功能選擇鍵、啟動(dòng)鍵、取消鍵、熱風(fēng)烘烤鍵,時(shí)鐘及定時(shí)鍵,自動(dòng)菜單各功能鍵,總共11個(gè)
- 編碼開(kāi)關(guān):調節加熱時(shí)間
- 另有蜂鳴器、門(mén)檢測和門(mén)燈控制
方案確定和芯片選型
了解產(chǎn)品的詳細要求后,需要確定具體的實(shí)現方案,首先是選擇合適的單片機。選擇合適的型號主要要看兩個(gè)方面:硬件資源和軟件資源。要選擇合理的單片機首先必須了解單片機的各系列及各款的資源,再了解需要什么樣的資源,下面分別從硬件和軟件來(lái)說(shuō)明怎樣根據要求選擇單片機。在選擇單片機時(shí),整個(gè)產(chǎn)品的方案也基本確定。
硬件相關(guān)資源
硬件相關(guān)的資源是指外圍硬件相關(guān)的如I/O數量、特殊驅動(dòng)、工作電壓等。
首先,選擇合適的單片機系列??垂╇婋妷杭肮ぷ鳒囟瓤垢蓴_能力等是否滿(mǎn)足要求。盛群的MCU在系統振蕩頻率小于4MHz時(shí)供電電壓供電范圍為2.2V~5.5V,當8MHz時(shí)則為3.3V~5.5V,要提高系統的抗干擾能力,最好用5V電壓供電,當供電電壓較高時(shí),MCU內部所有邏輯電平幅值較高,容差電壓大,干擾更強才能改變其邏輯狀態(tài)。工作溫度,選擇Holtek的48和46系列工業(yè)級單片機,工作溫度范圍為-40℃~85℃,完全能滿(mǎn)足微波爐控制器工作溫度的要求。在選擇合適的系列時(shí),還要看特殊資源的要求,如中斷口、PWM、蜂鳴器驅動(dòng)、A/D轉換等;在此產(chǎn)品的具體要求中,需要檢測爐腔的溫度以及在產(chǎn)品中需要對交流風(fēng)扇調速,溫度檢測需要A/D轉換,交流風(fēng)扇調速控制需要有過(guò)零中斷,所以,在這個(gè)產(chǎn)品中選擇了46系列單片機。但此產(chǎn)品不需要LCD驅動(dòng)、高精度A/D轉換及比較器等資源,則不選擇HT46R6X、HT46R5X、HT46R1X等系列,而選擇HT46R2X系列。
再就是選擇的具體I/O要求和什么樣封裝的單片機,在Holtek單片機中同型號的單片機有多種封裝,如HT46R23有DIP28或SOP28封裝,也有DIP24或SOP24封裝,其I/O分別為23個(gè)和19個(gè)。
根據前面提到的功能要求,其I/O的需求列舉如下:
- 繼電器驅動(dòng):微波、燒烤、熱風(fēng)烘烤、門(mén)燈/轉盤(pán)、散熱風(fēng)扇共5個(gè)輸出ports
- 蜂鳴器驅動(dòng):1個(gè)輸出ports
- 按鍵有11個(gè):11個(gè)輸入port
- 門(mén)狀態(tài)檢測:1個(gè)輸入port
- 編碼開(kāi)關(guān)檢測:2個(gè)輸入port
- 顯示數碼管:5個(gè)COM,9個(gè)段,需14輸出port
- 過(guò)零中斷檢測:1個(gè)中斷輸入port
- 溫度檢測:1個(gè)A/D輸入port
簡(jiǎn)單加起來(lái)總共需要20個(gè)輸出port,16個(gè)輸入port??紤]復用I/O,將9個(gè)數碼驅動(dòng)段和5個(gè)公共端同時(shí)做輸入檢測;溫度檢測只能用A/D口PB.0,過(guò)零檢測只能用單獨的中斷PA.5來(lái)檢測,所以總共需要22個(gè)I/O,所以選擇28PIN的HT46R2x可以滿(mǎn)足要求。
軟件相關(guān)資源
軟件相關(guān)的資源主要包括程序空間即ROM的大小和數據空間RAM的多少,當功能較多且復雜時(shí)需要更多的ROM和RAM;當然還有定時(shí)器、中斷、以及其它某些特殊的資源;前面已經(jīng)選擇了28PIN封裝的46R2X系列單片機,此產(chǎn)品功能相對比較豐富,程序空間要求比較多,選擇4K的ROM和192byteRAM的HT46R23應該能夠滿(mǎn)足要求,同樣封裝可以選擇28PIN的HT46R24,它有8K ROM和384byteRAM,可以做后備選擇,這樣不必擔心資源不夠時(shí)換IC,反復修改硬件就很麻煩。
總之,在選擇資源時(shí),要軟硬兼顧,如果程序簡(jiǎn)單,硬件資源要求高,則可以選擇封裝小、I/O少的單片機,另外增加擴展IC來(lái)擴展I/O;當程序復雜,硬件資源要求少時(shí),則選擇較小封裝、軟件資源多的單片機。[page]
硬件電路設計
在選擇主芯片時(shí),已經(jīng)在考慮部分電路設計了,顯示、按鍵檢測、輸出驅動(dòng)等都考慮好了,由于篇幅有限,只簡(jiǎn)單介紹幾個(gè)關(guān)鍵問(wèn)題:
門(mén)檢測電路:給單片機檢測的門(mén)開(kāi)關(guān)信號的同時(shí),還要控制微波、燒烤、熱風(fēng)烘烤繼電器的電源。
供電部分:考慮數碼管顯示內容較多,驅動(dòng)電流大,變壓器盡量選擇繼電器和單片機獨立供電,一方面降低變壓器功率,同時(shí)可以讓單片機的電源不受繼電器的工作狀態(tài)影響。
過(guò)零檢測和觸發(fā):選擇合適的光耦和可控硅驅動(dòng)電路,實(shí)現過(guò)零驅動(dòng),過(guò)零檢測電路注意適當的濾波和隔離,減少通過(guò)電源耦合的干擾。
另外,PCB設計時(shí)注意強弱電分開(kāi),注意電源與地的分布,注意生產(chǎn)的工藝性問(wèn)題等??傊?,合理的硬件設計和PCB布板對保證產(chǎn)品功能和性能十分重要。
軟件規劃及編寫(xiě)
芯片配置選項設定
根據硬件電路,將按鍵、編碼開(kāi)關(guān)及門(mén)檢測部分的內部設置上拉電阻;盛群?jiǎn)纹瑱C的LVD功能很可靠,所以復位電路直接接到VCC,那么在設置配置選項時(shí)一定要開(kāi)啟低電壓復位功能,不開(kāi)啟容易上電復位不良。下面將主要選項設定列舉如下:
PA3/PFD: Enable PFD
Pull-High PB: Enable
Pull-High PC: Disable
Pull-High PD: Enable
OSC: CRYSTAL
WDT clock source: WDTOSC
WDT: Enable
LVR: Enable
LVR voltage: 3.2V
CLRWDT: Two Instructions.
軟件整體規劃及模塊化分解
將復雜的功能分解,通過(guò)變量傳遞各模塊之間的關(guān)聯(lián)內容,模塊內部則盡量獨立完成,這樣讓程序的可移植性提高,調試更快。把復雜的問(wèn)題簡(jiǎn)單化是程序編寫(xiě)的重要原則。
1)主程序
通過(guò)調用各子程序,整合各模塊的功能。數碼管掃描顯示對時(shí)間要求比較高,而且各個(gè)公共端要平均分配時(shí)間,所以主程序執行周期選擇固定周期。另外編碼開(kāi)關(guān)也是掃描檢測方式,當編碼開(kāi)關(guān)旋轉很快時(shí),脈沖頻率較高,掃描周期也不能太長(cháng),綜合整體,主程序選擇4ms為執行周期,但顯示和按鍵及編碼開(kāi)關(guān)則執行2次,相當于2ms的掃描周期。
如果用4MHz的晶振,4ms時(shí)間可以執行4000條指令,程序設計合理情況下完全可以運行完各子程序,不擔心出現當處理事件多時(shí)顯示閃爍等問(wèn)題。
2)編碼開(kāi)關(guān)、按鍵及門(mén)狀態(tài)檢測
因編碼開(kāi)關(guān)、按鍵及門(mén)狀態(tài)檢測I/O都同顯示驅動(dòng)I/O復用,所以需統一處理。
先關(guān)閉顯示COM,檢測SEG上的狀態(tài),再關(guān)閉SEG,再檢測COM上的狀態(tài)。
此部分程序還要完成按鍵檢測及消抖動(dòng)處理、編碼開(kāi)關(guān)的檢測、門(mén)狀態(tài)去抖動(dòng)檢測,以有效按鍵變量、編碼開(kāi)關(guān)左右旋轉標志、門(mén)狀態(tài)等為輸出。其它子程序根據按鍵、編碼開(kāi)關(guān)操作和門(mén)狀態(tài)執行對應的操作和功能。
3)過(guò)零檢測及過(guò)零觸發(fā)
過(guò)零檢測在外部中斷程序中完成,中斷后根據當前運行狀態(tài)設置散熱風(fēng)扇半功率、全功率和關(guān)三種狀態(tài)。開(kāi)和關(guān)狀態(tài)直接設置控制光耦狀態(tài),當需要半功率時(shí),需要記錄中斷次數,調整導通和關(guān)閉周期,這里沒(méi)有用調整可控硅導通移相的方法調功,可減少電磁輻射。
4)按鍵設置
按鍵操作設置程序的輸入條件為有效的按鍵和編碼開(kāi)關(guān)左右旋轉標志,再細分每個(gè)按鍵分別處理,在什么條件下設置對應的工作時(shí)間、輸出模式、顯示模式、蜂鳴器鳴叫等。
5)顯示狀態(tài)設置
設置4字節保存顯示數字部分內容,另2字節保存四周圖標變量,由于四周的圖標有閃爍和不閃爍狀態(tài),另2字節設置圖標的閃爍狀態(tài)。
6)顯示輸出掃描
根據顯示狀態(tài)變量的8字節變量?jì)热?,設置數碼管對應COM和SEG,掃描顯示輸出。
7)加熱輸出及功率控制設置
加熱和功率控制程序通過(guò)統一的變量輸入,設置當前的微波、燒烤、熱風(fēng)還是幾種混合加熱,以及設置內燈及散熱風(fēng)扇輸出等。
8)溫度檢測及計算
設置A/D轉換,檢測熱敏電阻的值,并濾波處理,以及開(kāi)路短路保護檢測。其輸出為故障狀態(tài)標志和當前爐腔溫度。在熱風(fēng)烘烤輸出程序中根據溫度設置對應的加熱狀態(tài)。
9)時(shí)鐘、定時(shí)及運行時(shí)間計算及對應輸出模式切換
程序中關(guān)于時(shí)間的設置很多,大多都在這個(gè)子程序中完成,如時(shí)鐘計算、預約比較、倒計時(shí)、自動(dòng)功能的多段加熱模式切換等。
10)蜂鳴器設置
兩個(gè)變量buz_n,buz_long來(lái)設置蜂鳴器鳴叫次數和單聲?shū)Q叫長(cháng)度??蓡为氃O置buz_long值為單聲的鳴叫,在上電和按鍵操作時(shí)設置單聲?shū)Q叫。當定時(shí)結束或定時(shí)啟動(dòng)或故障提示等情況時(shí),需要設置鳴叫多時(shí),設置buz_n值就可以了。[page]
11)定時(shí)中斷子程序
定時(shí)中斷子程序相對很簡(jiǎn)單,只設置中斷次數記錄就可以了。由于蜂鳴器鳴叫頻率為2KHz,所以定時(shí)中斷時(shí)間為250us。
其中內容比較多的部分是:按鍵操作、顯示狀態(tài)設置、時(shí)鐘、定時(shí)及運行時(shí)間計算及對應輸出模式切換、加熱輸出及功率設置等部分。
在軟件的編寫(xiě)中,變量規劃很重要,下面還列出了幾個(gè)典型的變量規劃:
整個(gè)產(chǎn)品的主要工作模式用run_state來(lái)記錄:
run_state equ [40h]
s_hotfan equ run_state.0 ;熱風(fēng)烘烤
s_micro equ run_state.1 ;微波
s_grill equ run_state.2 ;燒烤
s_mix equ run_state 3 ;混合模式
s_auto equ run_state.4 ;自動(dòng)解凍
s_mu equ run_state.5 ;自動(dòng)菜單工作模式
s_fast equ run_state.6 ;快速啟動(dòng)模式
顯示模式用dsp_state來(lái)記錄:
dsp_state equ [41h]
s_time equ dsp_state.0 ;顯示時(shí)鐘狀態(tài)
s_timer equ dsp_state.1 ;顯示定時(shí)時(shí)間狀態(tài)
s_off_t equ dsp_state.2 ;顯示倒計時(shí)狀態(tài)
s_code equ dsp_state.3 ;顯示菜單或工作模式狀態(tài)
加熱模式heat_mode變量來(lái)控制當前的輸出,其具體數據說(shuō)明如下:
- 0則關(guān)閉所有輸出。
- bit0_bit3(10_1)保存微波100% /90% /80% /70% /60% /50% /40% /30% /20% /10% /10檔,即最后4bit來(lái)記錄微波輸出功率,在自動(dòng)解凍、自動(dòng)菜單、混合等非簡(jiǎn)單微波模式時(shí),加熱功率輸出時(shí)只需要判斷此變量,就直接設置微波輸出。
- bit4_bit5保存燒烤功率100%和50%。
- bit7保存熱風(fēng)烘烤輸出。
當有混合狀態(tài)時(shí),則同時(shí)設置對應的位就可以了。
合理設計變量對整個(gè)程序的編寫(xiě)很有用,同時(shí)也是對產(chǎn)品功能的規劃和理解的具體化,找出主要的和關(guān)鍵的控制關(guān)系,設計合適的、適當通用的算法。而且對于經(jīng)常編寫(xiě)同類(lèi)產(chǎn)品時(shí),移植程序變得很簡(jiǎn)單;比如將此產(chǎn)品數碼管換為L(cháng)CD顯示時(shí),基本上只需要將顯示輸出部分修改為驅動(dòng)顯示IC或顯示RAM就可以了,其顯示得內容還是顯示時(shí)間、定時(shí)、倒計時(shí)時(shí)間、菜單或模式,只需要修改對應得顯示表就可以了。
程序編寫(xiě)和程序調試
軟件簡(jiǎn)單規劃后,就需要具體的編寫(xiě),將任務(wù)分解后,每部分已經(jīng)比較簡(jiǎn)單了,調試時(shí)可以考慮各子程序單獨調試,人為模擬輸入各種情況下的數據及狀態(tài),檢查輸出是否正確。再將相關(guān)聯(lián)的一起調試。除非很有把握,不要將程序全編寫(xiě)完了再調試,那樣就不知道到底哪里有問(wèn)題。
程序簡(jiǎn)單題綱如下:
定義常量,某些固定的值,多次用到或經(jīng)常修改的常量,單獨定義后調用。
buz_l0 equ 50d;50*4=200ms設置所有默認蜂鳴器鳴叫聲音長(cháng)度。
sw_t0 equ 70d;有效按鍵響應時(shí)間,按鍵去抖動(dòng)時(shí)間
。。。。。。
定義I/O,將各輸入/輸出單獨按功能或原理圖網(wǎng)絡(luò )標號定義,當原理圖修改時(shí)方便軟件修改
buz_p equ pa.3
grill_p equ pc.0
micro_p equ pc.1
......
定義變量,
run_state equ [40h];或則用自動(dòng)變量定義
......
程序開(kāi)始
org 0h
jmp start_l
org 04H ;外部中斷向量
jmp int_set ;跳轉過(guò)零中斷處理程序
org 08H ;定時(shí)中斷向量,中斷周期為250us
mov temp_a,a ;保存
mov a,status
mov temp_s,a
inc t_int0;每次中斷0.25us
mov a,temp_s
mov status,a
mov a,temp_a
reti
中斷處理程序,注意先保存用到的ACC和標志寄存器status,返回前恢復
int_set:
......;中斷處理程序,設置風(fēng)扇輸出
reti[page]
主程序開(kāi)始
start_l:
初始化RAM、I/O、timer、中斷等,一般先將通用RAM全清零
注意繼電器等關(guān)鍵變量的初始化,否則上電時(shí)繼電器可能會(huì )跳一下。
初始化某些特殊變量
主循環(huán)程序部分
main:
call sw_in_set ;注意按鍵設置會(huì )將顯示關(guān)閉,則顯示輸出程序在后
call dsp_out_set ;顯示掃描程序
call sw_out_set ;按鍵功能及狀態(tài)設置
call ad_tem_set ;A/D轉換及溫度計算
call dsp_state_set ;顯示狀態(tài)計算
main_delay_2ms:
mov a,t_int0 ;0.25*8=2 等待2ms時(shí)間到
sub a,8
snz c
jmp main_delay_2ms
call sw_in_set ;注意按鍵設置會(huì )將顯示關(guān)閉,則顯示輸出程序在后
call dsp_out_set ;調用顯示掃描程序
call heat_out _set ;調用加熱狀態(tài)及功率設置
call buz_set ;調用蜂鳴器設置子程序
call time_set
main_delay_4ms:
mov a,t_int0 ;0.25ms*16=4ms 等待4ms時(shí)間到
sub a,16
snz c
jmp main_delay_2ms
clr t_int0
jmp main
各子程序分列后面
sw_in_set: ;按鍵檢測、編碼開(kāi)關(guān)檢測、門(mén)狀態(tài)檢測
......
ret
dsp_out_set: ;顯示掃描程序
......
ret
sw_out_set: ;按鍵功能及狀態(tài)設置
......
ret
ad_tem_set: ;A/D轉換及溫度計算
......
ret
dsp_state_set: ;顯示狀態(tài)計算
......
ret
heat_out _set: ;調用加熱狀態(tài)及功率設置
......
ret
buz_set: ;蜂鳴器設置子程序
......
ret
time_set: ;時(shí)間及定時(shí)處理程序
......
ret
程序中會(huì )用到很多表,為調用方便,則將其放到最后頁(yè)面
org 0f00h
dsp_code_l0:
dc 10011111b;0
......
end ;程序結束