新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 單片機驅動CPLD的PWM正弦信號發生器設計

        單片機驅動CPLD的PWM正弦信號發生器設計

        作者: 時間:2013-02-06 來源:網絡 收藏

        下面用硬件描述語言來設計CPLD 的內部電路,這里給出VerilogHDL 版本的參考代碼。

          module Mini51b_(P0,ALE,P27,WR,);// 模塊電路命名和端口說明。

          input [7:0]P0;// 數據輸入接MCU 數據P0 口

          input ALE,P27,WR;// 幾個MCU 讀寫控制引腳

          output ;//PWM 信號輸出

          wire [7:0]addr;// 內部地址線

          reg [7:0]daPWMc,daPWMs;// 定義計數器和占空比設定寄存器

          reg [3:0]divPWM,divPWMc;// 分頻控制變量

          reg PWM;// 輸出鎖存器

          assign addr = ALE?P0 : addr; // 低八位地址鎖存

          always @(negedge WR)// 在MCU 寫信號有效時執行寄存器設定

          begin

          case({P27,addr[4:0]}) // 根據地址選擇寄存器

          6'b10_1000: daPWMs = P0;// 寫帶地址的寄存器

          6'b10_1001: divPWM = P0[3:0];// 寫帶地址的寄存器

          default:begin// 其它地址則讓寄存器保持不變

          daPWMs = daPWMs;

          divPWM = divPWM;

          end

          endcase

          end

          always @(posedge ALE) begin// 這里利用MCU 的ALE 做時鐘信號

          if(divPWMc == divPWM) begin // 與分頻系數比較

          divPWMc=0;

          if(daPWMc100) daPWMc = daPWMc+1; //PWM 調整精度1%

          else daPWMc = 0;

          if(daPWMs daPWMc) PWM = 0;//PWM 發生器

          else PWM = 1;

          end

          else divPWMc = divPWMc+1;// 時鐘分頻

          end

          endmodule

          關于單片機與CPLD 之間的接口請讀者參考本刊前幾期筆者撰寫的文章。

          與之對應的MCU 測試程序為:

          #include reg51.h>

          #include absacc.h>

          #define PWM XBYTE[0xffe8]

          #define DIV XBYTE[0xffe9]

          void main()

          {

          DIV = 15; //PWM 信號頻率計算晶振22.1184M/6/100/

          (DIV+1)=2.30K(實測2.281K)

          PWM=50; // 設定占空比50%,前面計數器范圍為0~99

          while(1) ;

          }

        pwm相關文章:pwm原理


        負離子發生器相關文章:負離子發生器原理
        分頻器相關文章:分頻器原理
        塵埃粒子計數器相關文章:塵埃粒子計數器原理
        脈寬調制相關文章:脈寬調制原理
        離子色譜儀相關文章:離子色譜儀原理


        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 合川市| 泰和县| 龙井市| 晴隆县| 德安县| 高清| 林口县| 渝中区| 聂荣县| 绥中县| 金山区| 辰溪县| 徐闻县| 广安市| 云浮市| 岳阳市| 蕲春县| 德化县| 大安市| 息烽县| 丽水市| 忻州市| 甘肃省| 连江县| 南宫市| 沐川县| 长岭县| 城步| 株洲县| 香港 | 保定市| 文成县| 论坛| 青田县| 丰顺县| 开原市| 合肥市| 郑州市| 镇雄县| 辽阳市| 长治市|