<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > 單片機驅(qū)動CPLD的PWM正弦信號發(fā)生器設(shè)計

          單片機驅(qū)動CPLD的PWM正弦信號發(fā)生器設(shè)計

          作者: 時間:2013-02-06 來源:網(wǎng)絡(luò) 收藏

          MCU 演示程序:

            #include reg51.h>

            #include absacc.h>

            #define XBYTE[0xffe8]

            unsigned char code sine_dot[32]={49,59,68,77,84,90,95,98,99,98,95,90,84,77,68,59,49,40,30,22,14,8,4,1,0,1,4,8,14,22,30,40};// 正弦表

            void main()

            {

            unsigned char i=0;

            while(1) {

             = sine_dot[i];

            i=(i++)0x1f;

            }// 如果要嚴格控制S 的周期,這里的while 循環(huán)請用定時器來驅(qū)動

            }

            四、三路精確相位差

            對CPLD 改進設(shè)計,很容易實現(xiàn)多路PWM 輸出。

            例如設(shè)計具有精確相位差的三相正弦信號,CPLD 電路VerilogHDL 程序如下:

            module Mini51b_PWM(P0,ALE,P27,WR,PWM);

            input [7:0]P0;

            input ALE,P27,WR;

            output [2:0]PWM;

            wire [3:0]addr;

            reg [7:0]daPWMc;

            reg [7:0]daPWMs0,daPWMs1,daPWMs2;

            reg [2:0]PWM;

            wire clk,nclk,a,b,c,d;

            assign addr= (ALE)?P0[3:0]:addr; // 低八位地址鎖存

            always @(negedge WR)

            begin

            case({P27,addr})

            5'H10: daPWMs0 = P0;// 寫帶地址的寄存器

            5'H11: daPWMs1 = P0;// 寫帶地址的寄存器

            5'H12: daPWMs2 = P0;// 寫帶地址的寄存器

            default:

            begin

            daPWMs0 = daPWMs0;

            daPWMs1 = daPWMs1;

            daPWMs2 = daPWMs2;

            end

            endcase

            end

            always @(posedge clk) begin

            daPWMc = daPWMc+1; //PWM 調(diào)整精度1%

            if(daPWMs0 daPWMc) PWM[0] = 0;//PWM 發(fā)生器

            else PWM[0] = 1;

            if(daPWMs1 daPWMc) PWM[1] = 0;//PWM 發(fā)生器

            else PWM[1] = 1;

            if(daPWMs2 daPWMc) PWM[2] = 0;//PWM 發(fā)生器

            else PWM[2] = 1;

            end

            assign nclk=!clk;

            LCELL A0(。in(nclk), .out(a));

            LCELL A1(。in(a), .out(b));

            LCELL A2(。in(b), .out(c));

            LCELL A3(。in(c), .out(d));

            LCELL A4(。in(d), .out(clk));//PWM 時鐘來自CPLD 內(nèi)部

            LCELL 延遲電路振蕩器

            endmodule

            與之對應(yīng)的MCU 演示程序:

            #include reg51.h>

            #include absacc.h>

            #define PWM0 XBYTE[0xfff0]

            #define PWM1 XBYTE[0xfff1]

            #define PWM2 XBYTE[0xfff2]

            unsigned char code sine_dot[36]= //8 階,36 點正弦表

            {

            0x80,0x96,0xab,0xbf,0xd2,0xe2,0xee,0xf8,0xfe,0xff,0xfe,0xf8,

            0xee,0xe2,0xd2,0xc0,0xab,0x96,0x80,0x69,0x54,0x40,0x2

            d,0x1e,

            0x11,0x07,0x01,0x00,0x01,0x07,0x10,0x1d,0x2d,0x3f,0x53,

            0x69

            };

            void main()

            {

            unsigned char a,b,c;

            a=0;

            while(1) {

            a %= 36;// 對36 取余數(shù)及0~35

            b=(a+12)%36;// 較a 路滯后120 度相位

            c=(a+24)%36;// 較a 路滯后240 度相位

            PWM0 = sine_dot[a];

            PWM1 = sine_dot[b];

            PWM2 = sine_dot[c];

            a++;

            }

            }

            實際得到的三相正弦信號示波器截圖效果如圖7所示,只是雙蹤示波器同時只能看兩路信號。

          單片機驅(qū)動CPLD的PWM正弦信號發(fā)生器設(shè)計

          圖7 具有精確相位差的三相正弦信號示波器截圖

            五、結(jié)束語

            今后,MCU+CPLD 結(jié)構(gòu)將是很多電子系統(tǒng)設(shè)計的一種基本架構(gòu),MCU 可以用程序?qū)崿F(xiàn)復(fù)雜智能的控制與檢測,CPLD 又可以實現(xiàn)靈活多變的外圍擴展電路設(shè)計,尤其是可以用硬件實現(xiàn)特殊的MCU 無法實現(xiàn)的功能,彌補MCU 響應(yīng)速度慢影響實時性問題,兩者互補,完全實現(xiàn)硬件軟設(shè)計,使得同一硬件平臺能夠通過軟件實現(xiàn)更多的功能。

          pwm相關(guān)文章:pwm原理


          負離子發(fā)生器相關(guān)文章:負離子發(fā)生器原理
          分頻器相關(guān)文章:分頻器原理
          塵埃粒子計數(shù)器相關(guān)文章:塵埃粒子計數(shù)器原理
          脈寬調(diào)制相關(guān)文章:脈寬調(diào)制原理
          離子色譜儀相關(guān)文章:離子色譜儀原理

          上一頁 1 2 3 4 下一頁

          評論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();