亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        常用電子測(cè)速法在某數(shù)字信號(hào)處理器中的應(yīng)用*

        2019-08-12 07:27:16吳俊馮國勝王點(diǎn)點(diǎn)
        汽車工程師 2019年7期
        關(guān)鍵詞:計(jì)數(shù)器寄存器中斷

        吳俊 馮國勝 王點(diǎn)點(diǎn)

        (石家莊鐵道大學(xué))

        傳統(tǒng)電子測(cè)速法的M法和T 法在實(shí)際應(yīng)用當(dāng)中,測(cè)量范圍、精度有限[1],這往往是由于DSP 計(jì)數(shù)器溢出[2]和DSP 執(zhí)行程序需要一定的時(shí)間所導(dǎo)致的,其中T 法在測(cè)量低頻脈沖、M法在測(cè)量高頻脈沖時(shí),測(cè)量結(jié)果不準(zhǔn)確的情況更加頻繁。目前傳統(tǒng)的改善方法是通過復(fù)雜的軟硬件配置來實(shí)現(xiàn)準(zhǔn)確測(cè)速。文章主要使用CodeWarrior 下更加高效的PE 編程工具,采用新的編程方法將 M 法和 T 法應(yīng)用到數(shù)字信號(hào)處理器MC56F8346 的測(cè)速中,提高了傳統(tǒng)T 法、M法的測(cè)量范圍和精度。

        1 MC56F8346硬件介紹

        1.1 定時(shí)/計(jì)數(shù)器結(jié)構(gòu)及工作模式

        MC56F8346 是一款數(shù)字信號(hào)處理器,它的結(jié)構(gòu)中包含數(shù)個(gè)定時(shí)模塊,每個(gè)定時(shí)模塊由4 組相同的16 位定時(shí)/計(jì)數(shù)器組成,其單個(gè)定時(shí)/計(jì)數(shù)器結(jié)構(gòu),如圖1所示。定時(shí)/計(jì)數(shù)器有2 種基本的工作模式:1)記錄內(nèi)部和外部事件數(shù),該模式應(yīng)用在M法上;2)記錄每個(gè)外部事件之間所經(jīng)歷的內(nèi)部時(shí)鐘周期數(shù),也就是得到外部事件的時(shí)間間隔,該模式應(yīng)用在T 法上[3]。文章中,使用信號(hào)發(fā)生器產(chǎn)生一定頻率的方波信號(hào)來模擬編碼器產(chǎn)生的轉(zhuǎn)速信號(hào),將此信號(hào)輸入至MC56F8346 引腳處,分別使用count(計(jì)數(shù))模塊和capture(捕獲)模塊對(duì)方波信號(hào)計(jì)數(shù)。最終通過計(jì)算求得輸入信號(hào)的周期和頻率。使用M 法時(shí),要先配置count 模塊,在計(jì)數(shù)過程中,當(dāng)輸入高頻方波信號(hào)時(shí),計(jì)數(shù)器會(huì)多次溢出;文章引入變量over(變量名),計(jì)數(shù)器每溢出1 次,變量就會(huì)加1。使用T 法時(shí),要先配置capture 模塊,當(dāng)輸入低頻方波信號(hào)時(shí),計(jì)數(shù)器可能會(huì)多次溢出;同樣引入變量over,記錄溢出次數(shù)。

        圖1 定時(shí)/計(jì)數(shù)器結(jié)構(gòu)框圖

        1.2 定時(shí)/計(jì)數(shù)器寄存器主要功能介紹

        定時(shí)/計(jì)數(shù)寄存器(TMRCNTR)是16 位寄存器。其中,計(jì)數(shù)捕獲寄存器(TMRCAP)是16 位寄存器,該寄存器存儲(chǔ)從計(jì)數(shù)器捕獲的值;定時(shí)重裝載寄存器(TMRLOAD)是16 位寄存器,用來裝載計(jì)數(shù)器的值;定時(shí)控制寄存器(TMRCTRL)是16 位寄存器,其中的位15~13是計(jì)數(shù)模式控制位(CM);計(jì)數(shù)狀態(tài)/控制寄存器(TMRSCR)是16 位寄存器,位13 是計(jì)數(shù)器溢出標(biāo)志位(TOF),位12 是計(jì)數(shù)器溢出中斷使能位(TOFIE),位11是輸入邊沿標(biāo)志位(IEF),位10 是輸入邊沿中斷使能位 (IEFIE),位 7,6 是輸入捕獲模式位(CAPTURE MODE);定時(shí)比較寄存器 1(TMRCMP1)是 16 位寄存器,該寄存器存儲(chǔ)的數(shù)值與計(jì)數(shù)器數(shù)值進(jìn)行比較;定時(shí)重裝載寄存器1(TMRCMPLD1)是16 位寄存器,該寄存器存放定時(shí)比較寄存器中的比較值;計(jì)數(shù)比較狀態(tài)/控制寄存器(TMRCOMSCR)是16 位寄存器,位6 是計(jì)數(shù)比較寄存器1 中斷使能位(TCF1EN),當(dāng)TCF1EN 與TCF1 同時(shí)置1 時(shí),產(chǎn)生計(jì)數(shù)比較中斷,位4 是計(jì)數(shù)比較寄存器1 標(biāo)志位(TCF1),當(dāng)比較寄存器比較成功后,TCF1 置 1。

        2 使用PE工具設(shè)計(jì)程序

        CodeWarrior 下的PE 編程工具是某公司開發(fā)的一款快速初始化工具,可以更加簡(jiǎn)單、高效地完成項(xiàng)目任務(wù)。PE 支持該公司幾乎所有的嵌入式芯片,該工具會(huì)直接生成函數(shù)框架,編程人員在其中寫代碼即可,為編程人員提供了高效的工作環(huán)境。使用PE 編程流程,如圖2所示。

        圖2 使用PE 編程流程圖

        2.1 T法測(cè)周期

        T法測(cè)周期,即通過記錄輸入脈沖信號(hào)2 個(gè)連續(xù)上升沿之間所經(jīng)歷的內(nèi)部時(shí)鐘周期數(shù),經(jīng)計(jì)算就會(huì)得到輸入脈沖信號(hào)周期。使用PE 工具編程時(shí)首先選擇Capture Components(捕獲元件),并對(duì)其進(jìn)行設(shè)置[4]。之后,PE 生成相對(duì)應(yīng)的Cap1_Init(void)初始化程序,初始化程序主要完成的工作有:

        1)設(shè)置定時(shí)控制寄存器(TMRCTRL)。這里將位8,7(副計(jì)數(shù)脈沖源控制位)置為01,確定外部脈沖信號(hào)的輸入引腳為1。

        2)設(shè)置計(jì)數(shù)狀態(tài)/控制寄存器(TMRSCR)。這里將位 12(TOFIE)、位 10(IEFIE)置 1,這樣就會(huì)使能計(jì)數(shù)器溢出中斷、輸入邊沿中斷。

        3)清空定時(shí)/計(jì)數(shù)寄存器(TMRCNTR)、計(jì)數(shù)捕獲寄存器(TMRCAP)、定時(shí)重裝載寄存器(TMRLOAD)。

        4)設(shè)置前分頻。這里將PCS 位設(shè)置為1 100,即IP總線時(shí)鐘為16 分頻。

        5)設(shè)置定時(shí)控制寄存器(TMRCTRL)CM 位,選擇計(jì)數(shù)器的控制模式。這里設(shè)置為001,即在主計(jì)數(shù)脈沖上升沿計(jì)數(shù)。

        6)設(shè)置計(jì)數(shù)狀態(tài)/控制寄存器(TMRSCR)Capture-Mode 位。這里設(shè)置為01,選擇上升沿裝載。

        當(dāng)?shù)讓映绦虺跏蓟螅?6 位定時(shí)/計(jì)數(shù)寄存器(TMRCNTR)就開始對(duì)系統(tǒng)時(shí)鐘循環(huán)計(jì)數(shù)。當(dāng)定時(shí)/計(jì)數(shù)器達(dá)到滿值65 535(216-1)時(shí),計(jì)數(shù)狀態(tài)/控制寄存器(TMRSCR)的位13 計(jì)數(shù)器溢出標(biāo)志位(TOF)就會(huì)置1。由于將計(jì)數(shù)狀態(tài)/控制寄存器(TMRSCR)位 12(TOFIE)置為1,所以當(dāng)TOF 為1 時(shí),就會(huì)產(chǎn)生1 個(gè)計(jì)數(shù)器溢出中斷。在該中斷中編寫一個(gè)變量over,使其累加;那么每次計(jì)數(shù)器達(dá)到滿值時(shí),就會(huì)進(jìn)入中斷中,變量over 就會(huì)加1。

        輸入的脈沖信號(hào)每當(dāng)出現(xiàn)一個(gè)上升沿或下降沿時(shí),就會(huì)置位 IEF。同時(shí)由于計(jì)數(shù)狀態(tài)/控制寄存器(TMRSCR)的位 10(IEFIE)置 1,就會(huì)產(chǎn)生輸入邊沿中斷。設(shè)置計(jì)數(shù)狀態(tài)/控制寄存器(TMRSCR)Capture Mode位為01,當(dāng)置位IEF 時(shí),設(shè)置為上升沿裝載。因此遇到上升沿時(shí),計(jì)數(shù)器中的數(shù)據(jù)就存儲(chǔ)在捕獲寄存器中。

        2 個(gè)相鄰上升沿發(fā)生時(shí),可能的情況可以分為2 種:1)第1 個(gè)上升沿發(fā)生后,第2 個(gè)上升沿發(fā)生前,定時(shí)/計(jì)數(shù)寄存器沒有發(fā)生溢出;2)第1 個(gè)上升沿發(fā)生過后,在第2 個(gè)上升沿到來之前,定時(shí)/計(jì)數(shù)寄存器發(fā)生了溢出且可能不止1 次溢出,對(duì)應(yīng)over 會(huì)遞增。在2 個(gè)相鄰的上升沿產(chǎn)生的邊沿中斷中,分別將2 次捕獲寄存器中的值賦給變量count1 和count2,同時(shí)記錄此時(shí)的溢出次數(shù)over1 和over2。中斷子程序流程圖,如圖3所示。

        圖3 T 法中斷子程序流程圖

        編寫程序如下:

        #pragma interrupt called

        void Cap1_OnCapture(void)

        {

        /*Write your code here...*/

        index++;

        if(index==1)

        {

        over1=over;

        Cap1_GetCaptureValue( & count[index]);

        }

        if(index==2)

        {

        over2=over;

        Cap1_GetCaptureValue( & count[index]);

        ……

        index=0;

        over=0;

        }

        }

        2.2 M法測(cè)頻率

        這種方法主要是通過測(cè)量一段時(shí)間內(nèi)的脈沖個(gè)數(shù)來獲得轉(zhuǎn)速,也可以稱為測(cè)頻法。同樣,使用PE 編程時(shí)首先選擇EventCntr16,TimerInt Components,并對(duì)其進(jìn)行設(shè)置。設(shè)置后,PE 底層生成的主要初始化程序包括TI1_Init(void),EC16_Init(void)。TI1_Init(void)主要完成的工作有:

        1)設(shè)置控制寄存器(TMRA2_CTRL)。這里將位5(LENGTH)置1,這樣計(jì)數(shù)器到達(dá)預(yù)設(shè)值后重新初始化。

        2)設(shè)置控制寄存器(TMRA3_CTRL)。這里將CM位置為0111,這樣就采用級(jí)聯(lián)計(jì)數(shù)模式,擴(kuò)大了定時(shí)中斷的時(shí)間(Component 中設(shè)置為1 000 ms)。

        3)設(shè)置計(jì)數(shù)狀態(tài)/控制寄存器(TMRA2_SCR,TMRA3_SCR)。

        4)清空定時(shí)/計(jì)數(shù)寄存器(TMRA2_CNTR,TMRA3_CNTR)、定時(shí)重裝載寄存器(TMRA2_LOAD,TMRA3_LOAD)。

        5)設(shè)置定時(shí)比較寄存器(TMRCMP1)。文中定時(shí)時(shí)間設(shè)置為1 s。因?yàn)椴扇〖?jí)聯(lián)計(jì)數(shù)模式,即TMRA2 的輸出作為TMRA3 的輸入。這里將TMRA3_CMP1 設(shè)置為1 279,TMRA2_CMP1 設(shè)置為 46 874。每當(dāng) TMRA2 的計(jì)數(shù)器數(shù)值達(dá)到TMRA2_CMP1 所設(shè)置值(46 874)時(shí),TMRA3 的計(jì)數(shù)器就會(huì)加1,直到達(dá)到TMRA3_CMP1 所設(shè)置值(1 279)時(shí),產(chǎn)生比較成功中斷程序,這樣共計(jì)數(shù)46 874×1 279=59 951 846 次。

        6)設(shè)置計(jì)數(shù)比較狀態(tài)/控制寄存器(TMRCOMSCR)。文章中采用級(jí)聯(lián)計(jì)數(shù)模式,這里將TMRA3_COMSCR 的TCF1EN 位置1,當(dāng)與3 通道定時(shí)比較寄存器 1(TMRCMP1)完成比較時(shí)(TCF1 位置 1),計(jì)數(shù)比較寄存器就會(huì)發(fā)生中斷;CL1 位置1,即在與3 通道 TMRCMP1 比較成功后重裝初值。 將 TMRA2_COMSCR 的 CL1 位置 1,即在與 2 通道 TMRCMP1 比較成功后重裝初值。

        7)1 279,46 874 分別寫入 TMRA3_CMPLD1,TMRA2_CMPLD1。

        8)設(shè)置定時(shí)控制寄存器TMRA2_CTRL。這里設(shè)置PCS 位為1 000,即設(shè)置IP 總線時(shí)鐘為1 分頻。

        9)清空定時(shí)/計(jì)數(shù)寄存器TMR2_CNTR,TMR3_CNTR。

        10)設(shè)置定時(shí)控制寄存器TMRA2_CTRL。這里將CM位設(shè)為001,在主計(jì)數(shù)脈沖上升沿計(jì)數(shù)。

        完成上述工作后,定時(shí)器產(chǎn)生的中斷間隔時(shí)間的計(jì)算,如式(1)所示。

        其中60×106是CPU 源時(shí)鐘經(jīng)過分頻得到的系統(tǒng)時(shí)鐘;59 951 846 是設(shè)置得到的計(jì)數(shù)值。因此得到中斷的時(shí)間為0.999 2 s,接近于1 s。

        EC16_Init(void)主要完成的工作有:

        1)設(shè)置控制寄存器(TMRA0_CTRL)。首先停止計(jì)數(shù)器的所有功能。

        2)設(shè)置計(jì)數(shù)狀態(tài)/控制寄存器(TMRA0_SCR)。這里將TOFIE 位置1,當(dāng)計(jì)數(shù)器溢出標(biāo)志位(TOF)為1 時(shí),產(chǎn)生計(jì)數(shù)器溢出中斷。

        3)設(shè)置計(jì)數(shù)比較狀態(tài)/控制寄存器(TMRA0_COMSCR)。

        4)清空定時(shí)/計(jì)數(shù)寄存器(TMRA0_CNTR)。.

        5)設(shè)置控制寄存器(TMRA0_CTRL)。這里設(shè)置CM為001,即在主計(jì)數(shù)脈沖的上升沿計(jì)數(shù)。

        在Component 中設(shè)置完成后,每1 s 會(huì)產(chǎn)生1 個(gè)定時(shí)中斷;同時(shí)當(dāng)計(jì)數(shù)器A0 溢出后,就會(huì)進(jìn)入溢出中斷,使變量over 加1。

        圖4示出M法中斷子程序流程。

        圖4 M 法中斷子程序流程圖

        編寫程序如下:

        void TI1_OnInterrupt(void)

        {

        /*Write your code here...*/

        EC161_GetNumEvents( & count1);

        over1=over;

        ……

        }

        void EC161_Interrupt(void)

        {

        clrRegBit(TMRA0_SCR,TOF);

        ……

        over++;

        }

        同時(shí)要對(duì)底層程序進(jìn)行修改,清空計(jì)數(shù)器的同時(shí)也要清空變量over。

        byte EC161_Reset(void)

        {

        setReg(TMRA0_CNTR,0x00);

        over=0;

        ……

        }

        該程序中,輸出變量count 值就是測(cè)量脈沖的頻率。

        3 試驗(yàn)結(jié)果分析

        在實(shí)驗(yàn)室中搭建測(cè)速平臺(tái),通過信號(hào)發(fā)生器模擬轉(zhuǎn)速信號(hào),通過M法和T 法測(cè)得的結(jié)果,如表1所示。信號(hào)發(fā)生器輸出信號(hào)的頻率在1~100 000 范圍內(nèi),用M法和T 法得到的測(cè)量誤差中,最大為3.74%,最小為0。整體來講,采用新的方法得到的試驗(yàn)結(jié)果誤差范圍小、結(jié)果可靠。

        表1 使用PE 編程的T 法和M 法測(cè)量結(jié)果表

        4 結(jié)論

        T 法和M法在電子測(cè)速過程中所存在的計(jì)數(shù)器溢出情況往往被忽略,文章對(duì)這種情況進(jìn)行了處理,通過選用更加高效的PE 編程工具,采用新的軟件編程方法,對(duì)信號(hào)發(fā)生器輸出的模擬轉(zhuǎn)速信號(hào)進(jìn)行了測(cè)速試驗(yàn)。結(jié)果表明,該法比前人的軟件編程過程更高效、方便且整體代碼量小,當(dāng)輸入信號(hào)頻率在1~100 000 Hz范圍內(nèi)時(shí),得到的測(cè)量結(jié)果誤差范圍小、可靠性高。該方法是否可行,還需要在實(shí)際的行車過程進(jìn)行進(jìn)一步驗(yàn)證。

        猜你喜歡
        計(jì)數(shù)器寄存器中斷
        煤氣與熱力(2022年2期)2022-03-09 06:29:30
        Lite寄存器模型的設(shè)計(jì)與實(shí)現(xiàn)
        跟蹤導(dǎo)練(二)(5)
        千里移防,衛(wèi)勤保障不中斷
        解放軍健康(2017年5期)2017-08-01 06:27:44
        分簇結(jié)構(gòu)向量寄存器分配策略研究*
        計(jì)數(shù)器競(jìng)爭(zhēng)冒險(xiǎn)及其處理的仿真分析
        任意N進(jìn)制計(jì)數(shù)器的設(shè)計(jì)方法
        河南科技(2014年10期)2014-02-27 14:09:30
        基于單片機(jī)的仰臥起坐計(jì)數(shù)器
        AT89C51與中斷有關(guān)的寄存器功能表解
        FPGA內(nèi)嵌PowerPC的中斷響應(yīng)分析
        无码任你躁久久久久久久| 丰满人妻一区二区三区52| 日本一区二区三区视频免费在线 | 久久AⅤ无码精品色午麻豆| 美女视频黄a视频全免费网站色| 久久亚洲精品国产亚洲老地址| 一个人看的视频www免费| 欧美激情二区| 日本久久一区二区三区高清| 国产一区二区三区我不卡| 成 人 免费 在线电影| 久久香蕉免费国产天天看| 米奇亚洲国产精品思久久| 成人av综合资源在线| 久久天天躁狠狠躁夜夜avapp| 国产午夜激无码av毛片| 亚洲蜜芽在线精品一区| 在线日本国产成人免费精品| 欧美丰满熟妇bbb久久久| 76少妇精品导航| 亚洲红杏AV无码专区首页| 久久av粉嫩一区二区| 国产99在线 | 亚洲| 自拍欧美日韩| 国产白浆流出一区二区| 欧美疯狂性受xxxxx喷水| 国产婷婷一区二区三区| 国内精品91久久久久| 日本免费看片一区二区三区| 天堂а在线中文在线新版| 1000部精品久久久久久久久| 国产人禽杂交18禁网站| 一区二区久久精品66国产精品| 国产精品18久久久白浆| 亚洲国产成人片在线观看无码| 有码精品一二区在线| 青青草视频网站免费观看| 日韩在线精品视频免费| 国产成人无码专区| 欧美国产一区二区三区激情无套 | 国产精品亚洲A∨天堂不卡|