版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、第7章 基于Simulink模塊的dsPIC單片機(jī)開發(fā)前面幾章講述了模型代碼加手工代碼的方式,開發(fā)單片機(jī)的新技術(shù),不過這種方法也存在重復(fù)編寫器件配置代碼的問題。為了加快項(xiàng)目的開發(fā)速度和避免不必要的重復(fù)勞動,Microchip公司針對dsPIC30和dsPIC33 DSC等器件,提供了一套接口兼容的配置和運(yùn)行時外設(shè)模塊集MATLAB Plug-in blockset。它可以使MATLAB/SIMULINK/Stateflow與MATLAB Plug-in blockset/MPLAB IDE無縫連接,利用Real-time Workshop Embedded Coder代碼生成工具,自動生成應(yīng)用
2、的實(shí)時嵌入式C代碼??蓸O大的提高工作效率和降低開發(fā)成本,同時也可降低了運(yùn)用dsPIC3x DSC器件開發(fā)工程師的門檻。下面對MATLAB Plug-in blockset作一簡單介紹:模塊集的主要特性: = 1 * GB3 模塊適用于dsPIC3x系列的所有外設(shè) = 2 * GB3 可通過“cCall”模塊方便地集成經(jīng)過驗(yàn)證C代碼 = 3 * GB3 從MATLAB環(huán)境中構(gòu)建環(huán)境配置版本2.0的新增功能: = 1 * GB3 支持dsPIC30F系列器件 = 2 * GB3 電機(jī)控制算法庫 = 3 * GB3 缺陷修正和改進(jìn) = 4 * GB3 演示版免費(fèi)評估版 = 5 * GB3 與MPLA
3、B的MATLAB插件更好地集成在一起 = 6 * GB3 與從R2007a到R2009b的所有MATLAB版本兼容,不過也支持R2010a、R2010b版(作者安裝的版本是R2010b)。模塊適用于dsPIC3x系列的所有外設(shè)本章的主要內(nèi)容:MPLAB開發(fā)工具簡介dsPIC外圍驅(qū)動模塊介紹及應(yīng)用無對應(yīng)驅(qū)動模塊時的應(yīng)用7.1 MPLAB嵌入式開發(fā)環(huán)境及工具M(jìn)PLAB IDE是microchip公司開發(fā)的基于Windows 操作系統(tǒng)的集成開發(fā)環(huán)境,適用于PICmicro MCU 系列和dsPIC數(shù)字信號控制器的開發(fā)。同時,MPLAB IDE還將其他microchip工具集和第三方軟件集成到一個圖形
4、用戶界面之中。其主要功能有:使用內(nèi)置的編輯器創(chuàng)建和編輯源代碼。匯編、編譯和鏈接源代碼。通過使用內(nèi)置的軟件模擬器觀察程序流程,或者使用在線仿真器或在線調(diào)試器以實(shí)時方式觀察程序流程來調(diào)試可執(zhí)行邏輯。用軟件模擬器或仿真器進(jìn)行時序測量。查看Watch 窗口中的變量。MATLAB/Simulink device blocksets向Simulink模型庫中添加了dsPIC模塊。這些模塊既可以單獨(dú)使用,也能和Simulink模塊混合建模,并通過Real-time Workshop Embedded Coder自動生成嵌入式實(shí)時C代碼,再經(jīng)MPLAB IDE實(shí)現(xiàn)嵌入式應(yīng)用的基于模型設(shè)計的開發(fā)。MPLAB C
5、30 Compiler是針對16位dsPIC芯片dsPIC30 和 dsPIC33設(shè)計的高度優(yōu)化的編譯器,通過MPLAB C30 Compiler或其他第三方編譯器可以用C語言實(shí)現(xiàn)dsPIC開發(fā)。7.1.1 軟件的下載和安裝用戶在瀏覽器地址欄中輸入網(wǎng)址: HYPERLINK /stellent/idcplg?IdcService=SS_GET_PAGE&nodeId=1406&dDocName=en019469&part=SW007002 /stellent/idcplg?IdcService=SS_GET_PAGE&nodeId=1406&dDocName=en019469&part=SW0
6、07002,打開MPLAB下載網(wǎng)頁。如圖7.1.1所示:圖7.1.1 MPLAB下載網(wǎng)頁在網(wǎng)頁下方點(diǎn)擊鏈接 HYPERLINK /downloads/en/DeviceDoc/MPLAB_IDE_v8_56.zip t _top MPLAB IDE v8.56 Full Release Zipped Installation和 HYPERLINK /stellent/idcplg?IdcService=SS_GET_PAGE&nodeId=1406&dDocName=en538347 t _top MATLAB Device Blocks for dsPIC DSCs即可下載MPLAB IDE
7、 和MATLAB/Simulinkdevice blocksets。用戶如果使用過MPLAB的較早版本,或?qū)8.53版本安裝在非默認(rèn)路徑下,請首先將其卸載,不然在后續(xù)使用過程中,系統(tǒng)有可能無法定位到需要的文件。單擊windows開始菜單,選擇控制面板卸載程序,在列表中選中MPLAB Tools V8.53,單擊卸載,將其完全移除。如圖7.1.2所示:圖7.1.2 卸載早期版本的MPLAB1 安裝MPLAB IDE打開MPLAB IDE安程序,按照安裝向?qū)У奶崾具M(jìn)行安裝,在Setup Type對話框中盡量選擇Complete,如圖7.1.3 所示。圖7.1.3 MPLAB安裝界面如果選擇了Cu
8、stom,則在Select Features對話框中應(yīng)選中MPLAB IDE Tools的MATLAB選項(xiàng),以便能夠使用MATLAB Plug-in,如圖7.1.4所示。圖7.1.4 MPLAB安裝界面在Choose Destination Location對話框中選用默認(rèn)路徑,不要做任何修改。其他對話框不用做修改,點(diǎn)擊“下一步”即可,如圖7.1.5所示。圖7.1.5 MPLAB安裝界面2 安裝C30 Compiler打開C30 Compiler安裝程序,按照安裝向?qū)У奶崾具M(jìn)行安裝,在Setup Type對話框中選擇Complete,如圖7.1.6所示。圖7.1.6 C30編譯器安裝界面在Ch
9、oose Destination Location對話框中選用默認(rèn)路徑,不要做任何修改,如圖7,1,7所示。圖7.1.7 C30編譯器安裝界面下面安裝程序會詢問是否同意修改環(huán)境變量和注冊表以便MPLAB IDE能夠識別到C30 Compiler,點(diǎn)擊“是”,允許其修改。其他對話框不用做修改,點(diǎn)擊“下一步”即可,如圖7.1.8,7.1.9所示。圖7.1.8 C30編譯器安裝界面圖7.1.9 C30編譯器安裝界面3 安裝MATLAB-Blocksets此處下載的MATLAB Blockset是V2.10版,如果讀者機(jī)器中安裝了其他版本的MATLAB Blockset,有可能和V2.10版間會產(chǎn)生一
10、些沖突,這里僅就V2.10版的MATLAB Blockset進(jìn)行討論。 打開MATLAB Blocksets安程序,按照安裝向?qū)У奶崾具M(jìn)行安裝,在Choose Destination Location對話框中選用默認(rèn)路徑,不要做任何修改。如圖7.1.10所示:圖7.1.10 MATLAB-Blocksets安裝界面由于這是較早期的MATLAB Blocksets,其支持的最高版本MATLAB是R2009b,但對R2010b版也仍然兼容,此處選擇R2009b。其他對話框不用做修改,點(diǎn)擊“下一步”即可。如圖7.1.11所示:圖7.1.11 MATLAB-Blocksets安裝界面安裝完MATLAB
11、 Blockset后,dsPIC模塊并沒有立即添加到Simulink模塊庫當(dāng)中,用戶還需要在MATLAB環(huán)境中進(jìn)行添加。打開MATLAB,并將當(dāng)前目錄(current folder)設(shè)置為Microchip root:MPLAB IDEToolsMATLABdsPIC_Matlab,在當(dāng)前目錄下的文件列表中可以發(fā)現(xiàn)一個Install_dsPIC_Matlab.p文件。如圖7.1.12所示:圖7.1.12定位到安裝目錄在左側(cè)的文件列表中右鍵單擊該文件并在彈出菜單中選擇“Run”,如圖7.1.13所示。圖7.1.13運(yùn)行Install_dsPIC_Matlab.p文件命令行中會出現(xiàn)如下信息: IN
12、STALLING Target for Microchip(TM) dsPIC 2.10 Target for Microchip(TM) dsPIC 2.10 is Installed and ready to use.這時再打開Simulink模塊庫瀏覽器,就可以看到安裝的模塊了。如圖7.1.14所示:圖7.1.14 dsPIC模塊庫7.1.2 利用MPLAB及Proteus進(jìn)行虛擬硬件調(diào)試MPLAB IDE集成了大量的調(diào)試工具,既包括MPLAB ICD等仿真器,也能使用Proteus軟件進(jìn)行虛擬硬件調(diào)試。打開MPLAB IDE,選擇菜單欄的DebuggerSelect ToolProte
13、us VSM即可在MPLAB IDE中打開Proteus界面。如圖7.1.15,7.1.16所示:圖7.1.15 選擇Proteus VSM調(diào)試工具圖7.1.16 調(diào)試界面1 繪制原理圖作者目前使用的Proteus7.7版本,僅支持dsPIC33系列中的一部分芯片,不過Labcenter公司即將推出的Proteus8.0版本將會支持更多dsPIC33芯片,開拓虛擬硬件測試范圍。本例利用dsPIC33FJ12GP201芯片搭建一個能夠點(diǎn)亮發(fā)光二極管的最簡系統(tǒng),演示如何在MPLAB IDE中使用Proteus VSM進(jìn)行虛擬硬件調(diào)試。參考第5.1節(jié)的內(nèi)容,不難搭建出如圖7.1.17所示的原理圖。圖
14、中僅包含驅(qū)動電路工作所必須的電源,晶振和復(fù)位電路。圖7.1.17 Proteus原理圖Proteus中,該元件封裝將13,17,18管腳隱藏了,因此未顯示出VDD,VSS。雙擊dsPIC33FJ12GP201芯片,打開其屬性對話框。如圖7.1.18所示:圖7.1.18 芯片屬性設(shè)置頁面點(diǎn)擊對話框右側(cè)的Hidden Pins即可查看隱藏管腳的連接情況。由下圖可知,隱藏管腳已經(jīng)與VDD,VSS相連。如圖7.1.19所示:圖7.1.19 隱藏管腳頁面2 建立MPLAB工程打開MPLAB IDE,選擇菜單欄上的ProjectProject Wizard,在彈出的工程向?qū)崾鞠?,可以快速新建一個MPLA
15、B工程。如圖7.1.20所示:圖7.1.20 選擇工程向?qū)г诠こ滔驅(qū)У腟tep one對話框中指定芯片dsPIC33FJ12GP201,如圖7.1.21所示。圖7.1.21 指定芯片在工程向?qū)У腟tep two對話框中,在Active Toolsuit下拉菜單中選擇之前安裝過的MPLAB C30 Toolsuit。然后需要在Location中為Toolsuit的每一個組件指定路徑,不然MPLAB IDE無法定位到這些組件。如圖7.1.22所示:圖7.1.22 選擇工具在工程向?qū)У腟tep Three對話框中,確定工程的名稱和保存路徑,如圖7.1.23所示。圖7.1.23 確定名稱及路徑在工程向
16、導(dǎo)的Step Three對話框中,可以直接將已存在的文件添加到工程中,如果沒有需要添加的文件,直接點(diǎn)擊下一步即可。如圖7.1.24所示:圖7.1.24 向工程添加文件工程建立后會同時生成工作空間,保存到同一目錄下即可,如圖7.1.25所示。圖7.1.25 保存工作空間編寫閃爍燈程序。點(diǎn)擊工具欄按鈕,在編輯窗口中編寫如下程序:#include#define uint unsigned intvoid delay(uint a) /延時程序Uintx,y;for(x=a;x0;x-)for(y=100;y0;y-);void main()TRISBbits.TRISB0=0; /設(shè)置RB0口為輸出
17、while(1)PORTBbits.RB0=1; /點(diǎn)亮LEDdelay(1000);PORTBbits.RB0=0; /熄滅LEDdelay(1000);點(diǎn)擊工具欄按鈕保存文件為.c格式。在彈出對話框中勾選Add File To Project并保存,直接將文件添加到工程的Source File中,然后向Header File目錄中添加芯片頭文件p33FJ12GP201.h。如圖7.1.26所示:圖7.1.26 MPLAB工程為了提高dsPIC芯片的靈活性和可靠性,Microchip公司為其設(shè)計了一些特殊功能,如看門狗、代碼保護(hù)、JTAG邊界掃描接口、在線串行編程和在線仿真。為了控制芯片和使
18、用這些特殊功能,需要用戶對其配置位進(jìn)行適當(dāng)調(diào)整。在菜單欄中選擇ConfigureConfiguration Bits,打開配置位對話框,如圖7.1.27所示。圖7.1.27 配置位在配置位對話框中取消Configuration Bits set in code復(fù)選框,然后用戶就可以在此處修改配置位了。如果用戶對配置位比較熟悉,則應(yīng)選中Configuration Bits set in code,并直接在代碼中使用_Config()進(jìn)行修改。本例并未使用到芯片的特殊功能,使用默認(rèn)設(shè)置即可。關(guān)于配置位的介紹可參考芯片的數(shù)據(jù)手冊。如圖7.1.28所示:圖7.1.28 配置位設(shè)置頁面點(diǎn)擊工具欄按鈕編譯
19、程序,輸出如下信息,如圖7.1.29所示:圖7.1.29 編譯MPLAB工程3 調(diào)試選擇MPLAB IDE菜單欄的DebuggerSelect ToolProteus VSM,在MPLAB IDE中打開Proteus界面。在Proteus界面中點(diǎn)擊按鈕打開之前繪制的原理圖。如圖7.1.30所示:圖7.1.30 使用Proteus VSM調(diào)試工具點(diǎn)擊工具欄右側(cè)的按鈕,或選擇菜單欄的DebuggerStart Simulation開始仿真。這時調(diào)試工具欄處于激活狀態(tài)。點(diǎn)擊按鈕,進(jìn)入全速運(yùn)行狀態(tài),可以看到二極管不停的閃爍。如圖7.1.31所示:圖7.1.31 LED燈閃爍除此之外,MPLAB還提供了
20、其他觀察芯片內(nèi)部數(shù)據(jù)變化的工具,例如在菜單中選擇viewSpecial Function Registers,可以實(shí)時觀察芯片的特殊功能寄存器的值,發(fā)生變化的寄存器以紅色標(biāo)出,如圖7.1.32所示。圖7.1.32 特殊功能寄存器若選中viewDisassenbly Listing,可以看到程序的反匯編指令,并以箭頭標(biāo)注下一步執(zhí)行指令的位置,如圖7.1.33所示。圖7.1.33 反匯編指令列表7.1.3 dsPIC外圍驅(qū)動模塊簡介MATLAB/Simulink device blocksets與dsPIC芯片的外圍驅(qū)動模塊一一對應(yīng),用戶可以通過這些模塊創(chuàng)建模型,直接由概念生成可執(zhí)行的代碼。Emb
21、edded Target for the Microchip dsPIC DSC集成了MATLAB/Simulink和MPLAB IDE工具,通過RTW生成的C代碼與MPLAB IDE達(dá)到Simulink模型的基于C的嵌入式實(shí)時實(shí)現(xiàn)。模塊簡介ADC Config模數(shù)轉(zhuǎn)換配置模塊。該模塊可設(shè)置模擬量的輸入端口,輸出數(shù)字量的格式,轉(zhuǎn)換結(jié)果寄存器,AD控制寄存器等,驅(qū)動芯片的AD設(shè)備正常工作。Write Port Output寫入輸出端口模塊。該模塊可指定將數(shù)據(jù)寫入到哪一個端口,即能按位指定,也能按字節(jié)指定端口。dsPIC33FXX MaindsPIC33FXX芯片配置模塊。每個基于dsPIC芯片的
22、模型都需要使用該模塊。它和芯片的配置位相對應(yīng),例如設(shè)置晶振,計時器等。Port Config端口配置模塊。該模塊指定端口的輸入輸出狀態(tài),技能按位指定,也能按字節(jié)指定。在MATLAB/Simulink device blocksets的安裝目錄下有更加詳細(xì)的幫助文件。如果用戶安裝MPLAB IDE和MATLAB/Simulink device blocksets時選擇了默認(rèn)目錄,則可在C:Program FilesMicrochipMPLAB IDEToolsMATLABdsPIC_Matlabdochelp目錄下找到每一個模塊的html格式的幫助文件例如打開文件dsPIC ADC Read.h
23、tml,則出現(xiàn)如圖7.1.34所示的幫助信息。圖7.1.34 ADC Read模塊幫助信息7.2 dsPIC外圍驅(qū)動模塊應(yīng)用7.2.1 數(shù)模轉(zhuǎn)換實(shí)驗(yàn)ADCREAD模型實(shí)現(xiàn)了控制dsPIC33FJ12GP202的片內(nèi)ADC,將模擬電壓輸入轉(zhuǎn)換為數(shù)字量輸出的功能。本模型用到了dsPIC Configuration模塊庫中的dsPIC33fXX Main、ADC Config和Port Config;dsPIC Run Time Library模塊庫中的ADC Read和Write Port Output模塊。建立如圖7.2.1所示的模型,并將其命名為adc.mdl。圖7.2.1 ADC模型1 模塊
24、設(shè)置雙擊ADC Read模塊,打開設(shè)置頁面。選擇片內(nèi)1號ADC,由buffer0讀出數(shù)據(jù),輸出數(shù)據(jù)類型為uint16,如圖7.2.2所示。圖7.2.2 ADC Read模塊設(shè)置雙擊Write Output Port模塊,打開設(shè)置頁面。選擇B端口,并具體指定輸出到B端口的015號管腳。如圖7.2.3所示:圖7.2.3 Write Output Port模塊設(shè)置dsPIC33fXX Main、ADC Config和Port Config模塊用于設(shè)置芯片的配置位和特殊功能寄存器,以確定芯片的工作方式。如果用戶對dsPIC芯片比較熟悉,設(shè)置這些模塊并不困難。dsPIC33FXX Main模塊對應(yīng)于芯片
25、的配置位,雙擊打開其設(shè)置頁面。在Oscillator Configuration子頁面,選擇芯片型號為dsPIC33FJ12GP202,計時器選擇Timer1。振蕩器選擇快速RC振蕩器(Fast RC oscillator)。由于未選用主振蕩器,其模式設(shè)置為禁用(Primary Disabled)??撮T狗和代碼保護(hù)功能本例并未用到,因此Watchdog Configuration和Code Protect Configuration子頁面采用默認(rèn)設(shè)置即可(默認(rèn)為disable狀態(tài)),如圖7.2.4所示。圖7.2.4 dsPIC33FXX Main模塊設(shè)置ADC Config對應(yīng)于芯片的ADxC
26、ONx控制寄存器,雙擊打開其設(shè)置頁面。在ADC選擇中選用1號ADC;數(shù)據(jù)輸出格式為整數(shù)右對齊(Integer(Dout=0000 dddd dddd dddd));采樣時鐘源選擇內(nèi)部時鐘源,時鐘源結(jié)束采樣后自動啟動轉(zhuǎn)換(Internal counter ends sampling and starts convertion(auto-convert));由于選用單通道采樣,因此同步采樣選擇位無效;使能ADC采樣自動啟動(ADC Sample Auto-Start);轉(zhuǎn)換的參考電壓分別設(shè)為VDD和VSS(ADREF+=Avdd;ADREF-=Avss);轉(zhuǎn)換模式選擇10位AD(10-bit 4-
27、channel ADC operation);將AN1設(shè)置為模擬輸入通道,并啟用輸入掃描(Scan Input Selections for CH0+ during Sample A bit),如圖7.2.5所示。圖7.2.5 ADC Config模塊設(shè)置在通道選擇中選擇轉(zhuǎn)換CH0通道(Converts CH0);在交替輸入選擇中選擇只作為采樣A的輸入(use channel input for Sample A);將AN1設(shè)為通道CH0采樣A的同向輸入(AN1);由于未選擇CH1、CH2、CH3及采樣B,其他三項(xiàng)同向輸入設(shè)置位無效;每完成一次采樣-轉(zhuǎn)換就產(chǎn)生一次中斷,讀出轉(zhuǎn)換結(jié)果(SMPI設(shè)
28、為1),如圖7.2.6所示。圖7.2.6 ADC Config模塊設(shè)置在ADC轉(zhuǎn)換時鐘源中選擇系統(tǒng)時鐘(Clock derived from system clock);自動采樣時間設(shè)置為12個AD周期(12Tad),其實(shí)只要保證其不小于AD所需的最短時間要求即可;芯片數(shù)據(jù)手冊中介紹,完成一次10位AD轉(zhuǎn)換需要12個AD周期,因此AD轉(zhuǎn)換時間設(shè)置為12個AD周期;使能中斷后,會在稍后的生成代碼中出現(xiàn)一個中斷服務(wù)程序框架,用戶可以手動添加所需代碼,本例中不需要使用,如圖7.2.7所示. 圖7.2.7 ADC Config模塊設(shè)置Port Config模塊對應(yīng)于特殊功能位TRISx,雙擊打開其設(shè)置
29、頁面。選擇端口B,并將其015管腳設(shè)置為輸出狀態(tài)。如圖7.2.8所示:圖7.2.8 Port Config模塊設(shè)置2 模型參數(shù)設(shè)置在模型窗口的菜單欄選擇SimulationConfiguration Parameters,設(shè)置模型參數(shù)。在Solver頁面,設(shè)置仿真截止時間為“inf”,設(shè)置求解器為定步長離散求解器,步長可根據(jù)需要另行指定,或使用auto。如圖7.2.9所示:圖7.2.9 設(shè)置仿真時間,求解器在Hardware Implimentation頁面,設(shè)置器件類型為dsPIC,如圖7.2.10所示。圖7.2.10 指定芯片Real-Time Workshop頁面,設(shè)置TLC文件為dsP
30、IC_stf.tlc,如圖7.2.11所示。圖7.2.11 設(shè)置tlcReport頁面,勾選所有選項(xiàng),便于后期檢查及跟蹤,如圖7.2.12所示。圖7.2.12 報告頁面設(shè)置3 自動生成代碼完成這一系列的設(shè)置,按下模型工具欄的按鈕,即生成代碼,報告如圖7.2.13。圖7.2.13 代碼生成報告代碼位于MATLAB當(dāng)前目錄下的adc_dspic_ertsrc文件夾,并且已經(jīng)自動產(chǎn)生了可執(zhí)行的.hex、.cof文件,如圖7.2.14所示:圖7.2.14 自動生成hex和cof文件4 虛擬硬件測試在Proteus中建立測試原理圖,選用dsPIC33FJ12GP202芯片,其外圍電路與第7.1.2節(jié)中介
31、紹的dsPIC33FJ12GP201基本相同,只是將晶振頻率設(shè)置為8MHz。在AN1端口連接了一個電位器,可以調(diào)整輸入模擬電壓的大小。在RB0RB9連接了發(fā)光二極管,用來顯示AD轉(zhuǎn)換結(jié)果,如圖7.2.15。圖7.2.15 Proteus原理圖雙擊芯片,打開設(shè)置頁面,在Program File中指定生成的adc.hex或adc.cof文件,如圖7.2.16所示。圖7.2.16 加載可執(zhí)行文件運(yùn)行測試原理圖。當(dāng)調(diào)整電位器時,AN1端模擬電壓發(fā)生變化,右側(cè)的發(fā)光二極管也隨之亮滅變化。實(shí)驗(yàn)結(jié)果顯示由模型自動生成的代碼完全實(shí)現(xiàn)了模型所表達(dá)的功能,如圖7.2.17所示。容易看出,在Microchip公司提
32、供的Blocksets幫助下,配合dsPIC_stf.tlc,用戶完全可以使用由模型自動生成的代碼實(shí)現(xiàn)嵌入式系統(tǒng)的開發(fā),而不需要添加一行手寫代碼,這將極大的提高開基于dsPIC芯片的嵌入式系統(tǒng)發(fā)效率。圖7.2.17 仿真結(jié)果更進(jìn)一步看,10位ADC輸出的轉(zhuǎn)換數(shù)據(jù)其實(shí)就是01023間某個值的二進(jìn)制表示,這10位由0,1組成的二進(jìn)制編碼輸出到B端口便表現(xiàn)為二極管的亮滅。為了更直觀的顯示測試結(jié)果,下面將采用數(shù)碼管來顯示轉(zhuǎn)換結(jié)果。相應(yīng)的,代碼和測試原理圖需要一定修改。參考第7.1.2節(jié)內(nèi)容在MPLAB中建立工程,將生成的代碼添加到工程中,如圖7.2.18所示。圖7.2.18 MPLAB工程由于數(shù)碼管并
33、不能直接將這些二進(jìn)制編碼轉(zhuǎn)換為對應(yīng)的十進(jìn)制數(shù)字顯示出來,因此還需要一段數(shù)碼管顯示程序來完成這項(xiàng)功能。打開adc.c文件,做如下修改:#include adc.h#include adc_private.h/* Real-time model */RT_MODEL_adcadc_M_;RT_MODEL_adc *adc_M = &adc_M_;const uint16_T table=0 x00FC,0 x0060,0 x00DA,0 x00F2,0 x0066, /數(shù)碼管可識別的09編碼0 x00B6,0 x00BE,0 x00E0,0 x00FE,0 x00F6;void delay() /
34、延時函數(shù)uint16_T i;for(i=2000;i0;i-);void disp(uint16_T a,uint16_T b,uint16_T c,uint16_T d) /顯示函數(shù)LATB=0 x7000|tablea;/數(shù)碼管顯示千位數(shù)字delay();LATB=0 xB000|tableb;/數(shù)碼管顯示千位數(shù)字delay();LATB=0 xD000|tablec;/數(shù)碼管顯示千位數(shù)字delay();LATB=0 xE000|tabled;/數(shù)碼管顯示千位數(shù)字delay();/* Model step function */void adc_step(void) /* local b
35、lock i/o variables */ uint16_T rtb_ADCRead,a,b,c,d; /聲明中間變量 /* S-Function (dsPIC_ADCread_sfun): /ADC Read */rtb_ADCRead = ReadADC1(uint8_T)0); /Read ADC Buffera=rtb_ADCRead/1000; /計算轉(zhuǎn)換結(jié)果的千位數(shù)值b=rtb_ADCRead%1000/100; /計算轉(zhuǎn)換結(jié)果的百位數(shù)值c=rtb_ADCRead%100/10; /計算轉(zhuǎn)換結(jié)果的十位數(shù)值d=rtb_ADCRead%10; /計算轉(zhuǎn)換結(jié)果的個位數(shù)值 /* S-Fun
36、ction (dsPIC_portWrite_sfun): /Write Port Output */disp(a,b,c,d); /調(diào)用顯示函數(shù)保存文件后重新編譯,生成.hex文件。之后打開測試原理圖,添加4位共陰極數(shù)碼管,并將二極管刪去,如圖7.2.19所示。圖7.2.19 Proteus原理圖通過第5.1.2節(jié)介紹的連線標(biāo)簽將數(shù)碼管的段選端口與RB70連接,分別標(biāo)注為a,b,f,g,dp。位選端口與RB1512連接,分別標(biāo)注為1,2,3,4。打開在MPLAB中建立的工程,選擇MPLAB IDE菜單欄的DebuggerSelect ToolProteus VSM,打開修改過的原理圖。按下開
37、始調(diào)試,點(diǎn)擊按鈕進(jìn)入全速運(yùn)行狀態(tài)后,數(shù)碼管上顯示了模數(shù)轉(zhuǎn)換的十進(jìn)制結(jié)果,如圖7.2.20所示。其表示的實(shí)際模擬電壓量為Vref*788/1024,如果讀者對用二進(jìn)制數(shù)顯示的電壓觀看不習(xí)慣,自己可以進(jìn)一步用Vref*788/1024公式把它變成易于觀察的用十進(jìn)制顯示的電壓值。圖7.2.20 仿真結(jié)果7.2.2 閃爍燈1閃爍燈驅(qū)動模型本例選用的處理芯片dsPIC33FJ12GP202,支持16位的數(shù)據(jù)類型,可直接定義y的數(shù)據(jù)類型為unit16,如圖7.2.21所示。圖7.2.21閃爍燈驅(qū)動模型數(shù)據(jù)類型建立如圖7.2.22所示閃爍燈驅(qū)動模型,8個狀態(tài)的y值對應(yīng)的二進(jìn)制數(shù)如表7.2.1所示,將輸出y與
38、一組LED燈相連,即可實(shí)現(xiàn)LED燈按y值順序點(diǎn)亮。表7.2.1 二進(jìn)制十進(jìn)制對照327691000,0000,0000,0001163860100,0000,0000,001081960010,0000,0000,010041040001,0000,0000,100020640000,1000,0001,000010560000,0100,0010,00005760000,0010,0100,00003840000,0001,1000,0000圖7.2.22 閃爍燈驅(qū)動模型2閃爍燈功能驗(yàn)證模型完成閃爍燈驅(qū)動模型之后,在Simulink模塊庫中找到如圖7.2.23,7.2.24所示各模塊,并按圖
39、7.2.25連接。圖7.2.23 Circle Meter模塊圖7.2.24 數(shù)據(jù)類型轉(zhuǎn)換模塊圖7.2.25 功能驗(yàn)證模型選擇模型主窗口的菜單項(xiàng)SimulationConfiguration Parameters,打開模型參數(shù)對話框,在Solver面板,設(shè)置求解器為定步長離散求解器,步長為0.01,如圖7.2.26所示。圖7.2.26 求解器設(shè)置設(shè)置Circle Meter模塊LED燈數(shù)量為16,輸入數(shù)據(jù)模式為1-Bitwise,如圖7.2.27。圖7.2.27 Circle Meter模塊設(shè)置完成以上設(shè)置后執(zhí)行仿真,即得到設(shè)計所需的亮燈圖樣,如圖7.2.28、圖7.2.29所示。圖7.2.2
40、8 功能仿真結(jié)果圖7.2.29功能仿真結(jié)果3 軟件在環(huán)測試軟件在環(huán)測試(SIL)是在主機(jī)上對仿真中生成的函數(shù)或手寫代碼進(jìn)行非實(shí)時性聯(lián)合仿真評估,當(dāng)軟件組件包含需要在目標(biāo)平臺上執(zhí)行的生成代碼和手寫代碼的組合時,應(yīng)該考慮進(jìn)行軟件在環(huán)測試,完成對模型生成代碼的早期驗(yàn)證。軟件在環(huán)測試不需要硬件,只是對算法代碼進(jìn)行測試,具體做法是對要進(jìn)行測試的子系統(tǒng)編譯可生成SIL模塊,比較原模塊與SIL模塊的輸出,以此確認(rèn)算法的正確性。 數(shù)據(jù)類型轉(zhuǎn)換在模塊庫SimulinkPorts & Subsystems中找到模塊,替換上述圖7.2.25中的Circle Meter模塊,并將模型另存。 按下模型窗口的按鈕,打開模
41、型瀏覽器,閃爍燈驅(qū)動模型里變量的數(shù)據(jù)類型已設(shè)置為uint16,Simulink模型中的Out模塊的數(shù)據(jù)類型可設(shè)為自動繼承,也可強(qiáng)制設(shè)置為uint16如圖7.2.30所示。圖7.2.30 修改端口數(shù)據(jù)類型修改后的模型如圖7.2.31。圖7.2.31 代碼生成模型 模型參數(shù)設(shè)置打開模型參數(shù)對話框,在Real-Time Workshop頁面設(shè)置TLC文件為ert.tlc,如圖7.2.32。圖7.2.32 設(shè)置tlcReal-Time WorkshopInterface頁面,取消不必要的選項(xiàng),如圖7.2.33。圖7.2.33 Interface頁面設(shè)置Real-Time WorkshopReport頁
42、面,勾選所有選項(xiàng),便于后期檢查及跟蹤,如圖7.2.34。圖7.2.34 報告頁面設(shè)置 生成SIL模塊在Real-Time WorkshopSIL and PIL Verification頁面的Create block項(xiàng),選中SIL,如圖7.2.35。圖7.2.35 SIL設(shè)置之后按下模型工具欄的按鈕,得到代碼生成報告,如圖7.2.36所示與SIL模塊如圖7.2.37所示。圖7.2.36 代碼生成報告圖7.2.37 SIL模塊按圖7.2.25,以SIL模塊替換原有的閃爍燈驅(qū)動模型,重建驗(yàn)證模型,該模型的運(yùn)行結(jié)果與功能驗(yàn)證模型是一致的,說明自動生成的代碼能實(shí)現(xiàn)驅(qū)動模型的功能。如圖7.2.38所示:
43、圖7.2.38 軟件測試結(jié)果4 代碼生成模型及設(shè)置在Simulink Target for Microchip dsPIC子模塊庫找到以下模塊,如圖7.2.397.2。42所示,并按圖7.2.43連接。圖7.2.39 Write Port Out put模塊圖7.2.40 Config模塊圖7.2.41 Port Config模塊圖7.2.42 dsPIC33fxx Main模塊圖7.2.43 閃爍燈模型 雙擊dsPIC33fxx Main模塊,選擇振蕩源為Low power RC oscillator,F(xiàn)cy顯示默認(rèn)值16384,如圖7.2.44所示。圖7.2.44 dsPIC33fxx M
44、ain模塊設(shè)置 雙擊Write Port Output模塊,選擇輸出口為B,不勾選Write to selected Pin/s,如圖7.2.45所示。圖7.2.45 Write Port Output模塊設(shè)置 雙擊Port Config模塊,選擇端口B的方向?yàn)镺utput,不勾選Configure selected Pin/s,如圖7.2.46所示。圖7.2.46 Port Config模塊設(shè)置 雙擊Config模塊,系統(tǒng)自動設(shè)置tlc文件為dsPIC_stf.tlc,并在模型參數(shù)對話框中添加一個dsPIC Options頁面。在生成代碼前,用戶應(yīng)事先檢查該頁面所有條目對應(yīng)的文件是否存在,如
45、圖7.2.47。圖7.2.47 Config模塊設(shè)置 在Hardware Implementation頁面,選擇硬件設(shè)備為Microchip公司的dsPIC,如圖7.2.48所示。圖7.2.48 選擇芯片 將Real-Time WorkshopSIL and PIL Verification頁面的Create block項(xiàng),恢復(fù)成none,如圖7.2.49所示。圖7.2.49 SIL/PIL設(shè)置 按下模型工具欄的按鈕,生成代碼,報告如圖7.2.50所示。圖7.2.50 代碼生成報告5 虛擬硬件測試不同于第5章,dsPIC的自動代碼生成過程并不打開IDE編譯環(huán)境,而是直接生成hex文件,生成的源
46、代碼保存在模型當(dāng)前目錄的modelname_dspic_ert子目錄下。當(dāng)MATLAB命令行顯示大致如圖7.2.51所示時,即生成了modelname.hex與modelname.cof文件。圖7.2.51編譯信息搭建proteus模型,加載生成的hex文件,按下仿真按鈕,得到與功能驗(yàn)證模型一致的亮燈圖樣,如圖7.2.52、圖7.2.53所示。圖7.2.52 仿真結(jié)果圖7.2.53 仿真結(jié)果用戶也可以用邏輯分析儀替換LED燈,如圖7.2.54所示,詳細(xì)分析亮燈的時序,如圖7.2.55所示。圖7.2.54 邏輯分析儀替換LED燈圖7.2.55 邏輯分析儀波形7.2.3 調(diào)用現(xiàn)有C函數(shù)1 創(chuàng)建功能
47、驗(yàn)證模型在Simulink模塊庫中找到圖7.2.56,7.2.57所示模塊,并按圖7.2.58連接,建立一個簡單的加法模型,對于實(shí)際應(yīng)用,加法模塊可以替換成各種具體的算法。圖7.2.56 sum模塊圖7.2.55 generic numeric led模塊圖7.2.58 功能驗(yàn)證模型1位十進(jìn)制整數(shù)加法的和最多為2位十進(jìn)制整數(shù),因此設(shè)置數(shù)碼管的顯示位數(shù)為2位整數(shù)、0位小數(shù),圖7.2.59所示。圖7.2.59 generic numeric led設(shè)置選擇模型主窗口的菜單項(xiàng)SimulationConfiguration Parameters,打開模型參數(shù)對話框,在Solver面板,設(shè)置求解器為定步
48、長離散求解器,步長為0.01,如圖7.2.60所示。圖7.2.60 求解器設(shè)置仿真結(jié)果如圖7.2.61、圖7.2.62所示。圖7.2.61 功能仿真結(jié)果圖7.2.62功能仿真結(jié)果2 軟件在環(huán)測試 數(shù)據(jù)類型轉(zhuǎn)換在模塊庫SimulinkPorts & Subsystems中找到輸入模塊與輸出模塊,替換上述圖7.2.58中的常數(shù)與LED模塊,并將模型另存。按下模型窗口的按鈕,打開模型瀏覽器,將功能驗(yàn)證模型中的In模塊的數(shù)據(jù)類型設(shè)置為uint16,加法模塊的數(shù)據(jù)類型設(shè)置為uint16,Out模塊的數(shù)據(jù)類型可設(shè)為自動繼承,也可強(qiáng)制設(shè)置為uint16。如圖7.2.63所示:圖7.2.63 修改模型端口數(shù)據(jù)
49、類型修改后的模型如圖7.2.64所示:圖7.2.64 代碼生成模型 模型參數(shù)設(shè)置打開模型參數(shù)對話框,在Real-Time Workshop頁面設(shè)置TLC文件為ert.tlc,如圖7.2.65所示。圖7.2.64 tlc設(shè)置Real-Time WorkshopInterface頁面,取消不必要的選項(xiàng),如圖7.2.65所示。圖7.2.65 Interface頁面設(shè)置Real-Time WorkshopReport頁面,勾選所有選項(xiàng),便于后期檢查及跟蹤,如圖7.2.66所示。圖7.2.66 報告頁面設(shè)置 生成SIL模塊在Real-Time WorkshopSIL and PIL Verificati
50、on頁面的Create block項(xiàng),選中SIL,如圖7.2.67所示。圖7.2.67 SIL設(shè)置之后按下模型工具欄的按鈕,得到代碼生成報告,如圖7.2.68所示與SIL模塊,如圖7.2.69所示。圖7.2.68 代碼生成報告圖7.2.69 SIL模塊按圖7.2.70、圖7.2.71,以SIL模塊替換原有的Product模塊,重建驗(yàn)證模型,并在各端口間加入必要的數(shù)據(jù)類型轉(zhuǎn)換模塊。SIL測試的結(jié)果,如圖7.2.70、圖7.2.71所示結(jié)果與圖7.2.61、7.2.62所示的結(jié)果是一致的。說明自動生成的代碼可以實(shí)現(xiàn)模型的功能。圖7.2.70 軟件在環(huán)測試結(jié)果圖7.2.71軟件在環(huán)測試結(jié)果3 代碼生
51、成模型及設(shè)置在Simulink Target for Microchip dsPIC子模塊庫找到以下模塊,如圖7.2.72,7.2.73,7.2.74,7.2.75,7.2.76,7.2.77所示,并按圖7.2.78連接。圖7.2.72 Read Port Input模塊圖7.2.73 Write Port Output模塊圖7.2.74 cCall模塊圖7.2.75 Config模塊圖7.2.76 Port Config模塊圖7.2.77 dsPIC33fxx Main模塊圖7.2.78 Simulink功能驗(yàn)證模型單片機(jī)的輸出端口通常是不能直接顯示兩位以上十進(jìn)制數(shù)的,為此需要將十進(jìn)制數(shù)的每
52、一位分離出來,單獨(dú)送數(shù)碼管顯示。以下c代碼實(shí)現(xiàn)了兩位十進(jìn)制數(shù)的分離,以函數(shù)名作為文件名保存,供cCall模塊調(diào)用。int dec(unsigned int x) unsigned int sum; unsigned int a1,a2; a1=x%10; /計算個位 a2=x/10; /計算十位 sum = a24|a1; return sum;模塊與模型參數(shù)設(shè)置與7.3.1節(jié)無太大差異,這里僅作簡單羅列。 dsPIC33fxx Main模塊,選擇處理器芯片為33FJ16GP304,振蕩源為Low power RC oscillator,F(xiàn)cy顯示默認(rèn)值16384,如圖7.2.79所示。圖7.
53、2.79 dsPIC33fxx Main模塊設(shè)置 雙擊cCall模塊,指定需要調(diào)用的c函數(shù),函數(shù)名應(yīng)使用半角單引號包圍,如圖7.2.80所示。 圖7.2.80 cCall模塊設(shè)置 Read Port Input2個Read Port Input模塊的輸入引腳分別為端口C、端口A,不應(yīng)勾選Read from selected Pin/s,如圖7.2.81所示。圖7.2.81 Read Port Input模塊設(shè)置 Read Port Config選擇端口C的方向?yàn)檩斎耄催xConfigure selected Pin/s,引腳定義為0:3,如圖7.2.82所示。圖7.2.82 Read Port
54、 Config模塊設(shè)置選擇端口A的方向?yàn)檩斎耄催xConfigure selected Pin/s,引腳定義為7:10,如圖7.2.83所示。圖7.2.83 Read Port Input模塊設(shè)置 Write Port Output選擇輸出引腳為端口B,不需勾選Write to selected Pin/s,如圖7.2.84所示。圖7.2.84 Write Port Output模塊設(shè)置 Write Port Config選擇端口B的方向?yàn)檩敵觯恍韫催xConfigure selected Pin/s,如圖7.2.85所示。圖7.2.85 Write Port Config模塊設(shè)置 雙擊Con
55、fig模塊,系統(tǒng)自動設(shè)置tlc文件為dsPIC_stf.tlc,并在模型參數(shù)對話框中添加一個dsPIC Options頁面。在生成代碼前,用戶應(yīng)事先檢查該頁面所有條目對應(yīng)的文件是否存在,如圖7.2.86所示。圖7.2.86 dsPIC Options頁面設(shè)置 在Hardware Implementation頁面,選擇硬件設(shè)備為Microchip公司的dsPIC,如圖7.2.87所示。圖7.2.87 選擇芯片 將Real-Time WorkshopSIL and PIL Verification頁面的Create block項(xiàng),恢復(fù)成none,如圖7.2.88所示。圖7.2.88 Interfa
56、ce頁面設(shè)置4 MPLAB環(huán)境下的代碼生成及修改這時用戶可以按下模型工具欄的按鈕生成代碼,不過本節(jié)使用另一種方法實(shí)現(xiàn)這一過程。用戶若完全安裝了MPLAB IDE v8.56,軟件菜單項(xiàng)Tools下應(yīng)有Matlab/Simulink選項(xiàng),如圖7.2.89所示。圖7.2.89 Matlab/Simulink插件單擊之后,菜單欄增加了Matlab/Simulink這一項(xiàng)目,選擇菜單項(xiàng)Matlab/SimulinkSpecify Simulink Model Name,如圖7.2.90所示,指定需要生成代碼的模型。圖7.2.90 指定Simulink模型指定模型并單擊確定,如圖7.2.91所示,系統(tǒng)會
57、自動打開MATLAB主窗口與模型窗口(為避免過多占用系統(tǒng)內(nèi)存,用戶應(yīng)在使用該方法前,關(guān)閉所有MATLAB窗口),MPLAB IDE的Output窗口顯示模型打開成功,如圖7.2.92所示。圖7.2.91 選擇模型圖7.2.92 Output窗口顯示模型打開成功繼續(xù)選擇MPLAB IDE的菜單項(xiàng)Matlab/SimulinkGenerate Code,如圖7.2.93所示。圖7.2.93 選擇Generate Code命令一番等待后,系統(tǒng)自動打開MATLAB的代碼生成報告,如圖7.2.94所示。圖7.2.94 代碼生成報告之后MPLAB IDE的Output窗口顯示以下信息,如圖7.2.95所示
58、,說明代碼編譯成功,但該代碼不能直接使用,還需要必要的修改。圖7.2.95 Output窗口信息在MPLAB IDE環(huán)境下,新建基于dsPIC33FJ16GP304的工程,并加入先前生成的各代碼文件以及調(diào)用的C代碼dec.c,如圖7.2.96所示。圖7.2.96 建立MPLAB工程打開main.c,找到以下代碼并按注釋說明修改:#include ccall.h#include ccall_private.h/#include /刪除該行打開ccall.c,找到以下代碼并按注釋說明修改:#include ccall.h#include ccall_private.hextern int dec(
59、);/增加該行,用于外部函數(shù)聲明/* S-Function (dsPIC_portRead_sfun): /Read Port Input A */rtb_cCall= PORTA;/刪除該行rtb_cCall= PORTA;/修改為rtb_cCall= PORTA7;保存所有修改,再次編譯工程,Output窗口得到以下信息,說明編譯成功(圖7.2.97)。圖7.2.97 編譯信息5 虛擬硬件測試搭建proteus模型,加載生成的hex文件。執(zhí)行仿真后,即得到與功能驗(yàn)證模型一致的結(jié)果,如圖7.2.98所示。圖7.2.98 仿真結(jié)果圖7.2.99仿真結(jié)果7.3 無對應(yīng)模塊時的應(yīng)用Microchi
60、p公司提供的dsPICBlocksets囊括了dsPIC芯片的所有外設(shè),用戶可以方便的利用這些模塊進(jìn)行開發(fā)工作,摒棄舊的開發(fā)方法。但是考慮到Blocksets并非免費(fèi),會有部分用戶不能使用這款軟件,也無法使用dsPIC_stf.tlc模板,這是否意味著就不能用基于模型的方法進(jìn)行開發(fā)呢?其實(shí)不必?fù)?dān)心,用戶還可以使用RTW提供的ert.tlc模板。這樣,開發(fā)工作中只是外圍設(shè)備的驅(qū)動程序需要用戶手工編寫,而最重要的核心算法仍然可以用基于模型的方法完成,但代價是代碼的效率會有所降低。7.3.1 創(chuàng)建功能驗(yàn)證模型圖7.3.1所示的乘法模型完成了簡單的兩數(shù)相乘,并將其百,十,個位分別顯示的功能,根據(jù)第2章
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024特崗教師聘用及教師團(tuán)隊(duì)協(xié)作能力提升服務(wù)合同3篇
- 2025年度新能源車輛采購及維護(hù)服務(wù)合同范本2篇
- 2025年度智能家居系統(tǒng)代理商合作協(xié)議4篇
- 2025年度新能源汽車研發(fā)出資人合作協(xié)議4篇
- 2025年度旅游景區(qū)特色商品檔口租賃經(jīng)營合同3篇
- 2025年度水電工程安全監(jiān)測系統(tǒng)安裝與維護(hù)服務(wù)合同3篇
- 2024版食堂承包合同協(xié)議范文
- 2025年度特殊崗位人員辭退及安置協(xié)議范本4篇
- 2025年度智能機(jī)器人研發(fā)股權(quán)合作協(xié)議4篇
- 2025年度文化產(chǎn)業(yè)園區(qū)運(yùn)營管理合同3篇
- 小學(xué)數(shù)學(xué)六年級解方程練習(xí)300題及答案
- 電抗器噪聲控制與減振技術(shù)
- 中醫(yī)健康宣教手冊
- 2024年江蘇揚(yáng)州市高郵市國有企業(yè)招聘筆試參考題庫附帶答案詳解
- 消費(fèi)醫(yī)療行業(yè)報告
- 品學(xué)課堂新范式
- GB/T 1196-2023重熔用鋁錠
- 運(yùn)輸行業(yè)員工崗前安全培訓(xùn)
- 公路工程安全風(fēng)險辨識與防控手冊
- 幼兒園教師培訓(xùn):計數(shù)(數(shù)數(shù))的核心經(jīng)驗(yàn)
- 如何撰寫和發(fā)表高水平的科研論文-good ppt
評論
0/150
提交評論