久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 6502|回復: 5
打印 上一主題 下一主題
收起左側

H橋逆變,帶死區的SPWM單片機程序

  [復制鏈接]
跳轉到指定樓層
樓主



單片機源程序如下:
  1. #define         MAIN_Fosc                24000000L        //定義主時鐘

  2. #include        "STC15Fxxxx.H"

  3. #include        "T_SineTable.h"

  4. #define                PWM_DeadZone        12        /* 死區時鐘數, 6 ~ 24之間  */


  5. /*************        功能說明        **************

  6. 演示使用2路PWM產生互補或同相的SPWM.

  7. 主時鐘選擇24MHZ, PWM時鐘選擇1T, PWM周期2400, 死區12個時鐘(0.5us).正弦波表用200點.

  8. 輸出正弦波頻率 = 24000000 / 2400 / 200 = 50 HZ.

  9. 本程序僅僅是一個SPWM的演示程序, 用戶可以通過上面的計算方法修改PWM周期和正弦波的點數和幅度.

  10. 本程序輸出頻率固定, 如果需要變頻, 請用戶自己設計變頻方案.

  11. 本程序從P2.1(PWM3)輸出正相脈沖, 從P2.2(PWM4)輸出反相脈沖(互補).

  12. 如果需要P2.2輸出同相的, 請在初始化配置中"PWMCFG"項選擇設置1(設置PWM輸出端口的初始電平, 0或1).


  13. ******************************************/

  14. u8        PWM_Index;        //SPWM查表索引


  15. //========================================================================
  16. // 函數: void        PWM_config(void)
  17. // 描述: PWM配置函數。
  18. // 參數: none.
  19. // 返回: none.
  20. // 版本: VER1.0
  21. // 日期: 2014-8-15
  22. // 備注:
  23. //========================================================================
  24. void        PWM_config(void)
  25. {
  26.         u8        xdata        *px;

  27.         EAXSFR();                        // 訪問XFR

  28.         px = PWM3T1H;                // 指針指向PWM3
  29.         *px = 0;                        // 第一個翻轉計數高字節
  30.         px++;
  31.         *px = 65;                        // 第一個翻轉計數低字節
  32.         px++;
  33.         *px = 1220 / 256;        // 第二個翻轉計數高字節
  34.         px++;
  35.         *px = 1220 % 256;        // 第二個翻轉計數低字節
  36.         px++;
  37.         *px = 0;                                // PWM3輸出選擇P2.1, 無中斷
  38.         PWMCR  |=  0x02;        // 相應PWM通道的端口為PWM輸出口,受PWM波形發生器控制
  39.         PWMCFG &= ~0x02;        // 設置PWM輸出端口的初始電平為0
  40. //        PWMCFG |=  0x02;        // 設置PWM輸出端口的初始電平為1
  41.         P21 = 0;
  42.         P2n_push_pull(1<<1);        //IO初始化, 上電時為高阻

  43.         px = PWM4T1H;                // 指針指向PWM4
  44.         *px = 0;                        // 第一個翻轉計數高字節
  45.         px++;
  46.         *px = 65-PWM_DeadZone;                        // 第一個翻轉計數低字節
  47.         px++;
  48.         *px = (1220+PWM_DeadZone) / 256;        // 第二個翻轉計數高字節//頻率
  49.         px++;
  50.         *px = (1220+PWM_DeadZone) % 256;        // 第二個翻轉計數低字節//頻率
  51.         px++;
  52.         *px = 0;                        // PWM4輸出選擇P2.2, 無中斷
  53.         PWMCR  |=  0x04;        // 相應PWM通道的端口為PWM輸出口,受PWM波形發生器控制
  54. //        PWMCFG &= ~0x04;        // 設置PWM輸出端口的初始電平為0
  55.         PWMCFG |=  0x04;        // 設置PWM輸出端口的初始電平為1
  56.         P22 = 1;
  57.         P2n_push_pull(1<<2);        //IO初始化, 上電時為高阻

  58.         px  = PWMCH;                // PWM計數器的高字節
  59.         *px = 2400 / 256;                        //頻率
  60.         px++;
  61.         *px = 2400 % 256;        // PWM計數器的低字節//頻率
  62.         px++;                                // PWMCKS, PWM時鐘選擇
  63.         *px = PwmClk_1T;        // 時鐘源: PwmClk_1T,PwmClk_2T, ... PwmClk_16T, PwmClk_Timer2

  64.         EAXRAM();                        // 恢復訪問XRAM
  65.        
  66.         PWMCR |= ENPWM;                // 使能PWM波形發生器,PWM計數器開始計數
  67. //        PWMCR &= ~ECBI;                // 禁止PWM計數器歸零中斷
  68.         PWMCR |=  ECBI;                // 允許PWM計數器歸零中斷

  69. //        PWMFDCR = ENFD | FLTFLIO | FDIO;        //PWM失效中斷控制,  ENFD | FLTFLIO | EFDI | FDCMP | FDIO
  70. }


  71. /**********************************************/
  72. void main(void)
  73. {

  74.         PWM_config();        //初始化PWM

  75.         EA = 1;                        //允許全局中斷

  76.         while (1)
  77.         {

  78.         }
  79. }


  80. /********************* PWM中斷函數************************/

  81. void PWM_int (void) interrupt PWM_VECTOR
  82. {
  83.         u8        xdata        *px;
  84.         u16        j;
  85.         u8        SW2_tmp;

  86.         if(PWMIF & CBIF)        //PWM計數器歸零中斷標志
  87.         {
  88.                 PWMIF &= ~CBIF;        //清除中斷標志

  89.                 SW2_tmp = P_SW2;        //保存SW2設置
  90.                 EAXSFR();                //訪問XFR
  91.                 px = PWM3T2H;        // 指向PWM3
  92.                 j = T_SinTable[PWM_Index]*10/10;//電壓
  93.                 *px = (u8)(j >> 8);        //第二個翻轉計數高字節
  94.                 px++;
  95.                 *px = (u8)j;                        //第二個翻轉計數低字節

  96.                 j += PWM_DeadZone;                //死區
  97.                 px = PWM4T2H;                        // 指向PWM4
  98.                 *px = (u8)(j >> 8);        //第二個翻轉計數高字節
  99.                 px++;
  100.                 *px = (u8)j;                        //第二個翻轉計數低字節
  101.                 P_SW2 = SW2_tmp;        //恢復SW2設置

  102.                 if(++PWM_Index >= 200)        PWM_Index = 0;

  103.         }
  104. /*
  105.         if(PWMIF & C2IF)        //PWM2中斷標志
  106.         {
  107.                 PWMIF &= ~C2IF;        //清除中斷標志
  108.         }

  109.         if(PWMIF & C3IF)        //PWM3中斷標志
  110.         {
  111.                 PWMIF &= ~C3IF;        //清除中斷標志
  112.         }

  113.         if(PWMIF & C4IF)        //PWM4中斷標志
  114.         {
  115.                 PWMIF &= ~C4IF;        //清除中斷標志
  116.         }

  117.         if(PWMIF & C5IF)        //PWM5中斷標志
  118.         {
  119.                 PWMIF &= ~C5IF;        //清除中斷標志
  120.         }

  121.         if(PWMIF & C6IF)        //PWM6中斷標志
  122.         {
  123.                 PWMIF &= ~C6IF;        //清除中斷標志
  124.         }

  125.         if(PWMIF & C7IF)        //PWM7中斷標志
  126.         {
  127.                 PWMIF &= ~C7IF;        //清除中斷標志
  128.         }
  129. */
  130. }
復制代碼

全部資料51hei下載地址:
SPWM15單片機程序.zip (61.28 KB, 下載次數: 111)

評分

參與人數 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏5 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:1002044 發表于 2022-2-4 15:55 | 只看該作者
學習學習學習學習學習學習學習學習學習學習學習學習學習學習學習學習學習學習學習
回復

使用道具 舉報

板凳
ID:1002044 發表于 2022-2-4 15:56 | 只看該作者
學習學習學習學習學習v學習學習學習學習學習學習學習學習學習學習學習學習學習學習學習學習學習
回復

使用道具 舉報

地板
ID:849826 發表于 2022-2-5 16:26 來自手機 | 只看該作者
頻率有多少高,能不能做電磁加熱主控芯片
回復

使用道具 舉報

5#
ID:166475 發表于 2022-2-10 16:35 來自手機 | 只看該作者
6313 發表于 2022-2-5 16:26
頻率有多少高,能不能做電磁加熱主控芯片

完全可以,還不用正弦函數表
回復

使用道具 舉報

6#
ID:981034 發表于 2022-2-11 08:11 | 只看該作者
頻率有點低
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产精品中文字幕在线 | 婷婷成人在线 | 成人精品在线视频 | 东方伊人免费在线观看 | 成人毛片一区二区三区 | 亚洲福利在线观看 | 一区二区在线观看免费视频 | 国产精品国产精品国产专区不卡 | 一级片免费视频 | 天堂免费 | 成人免费视频网址 | 91看国产 | 免费的日批视频 | 亚洲一区二区免费视频 | 91久久久久久久 | 精品二区 | 999久久 | 欧美 日韩 亚洲91麻豆精品 | 欧美综合在线视频 | 日日操日日干 | 91精品麻豆日日躁夜夜躁 | 一级黄在线观看 | 综合久久综合久久 | 欧美人妖网站 | 日日夜夜天天综合 | 精品美女在线观看视频在线观看 | 人人九九精 | 91视频大全 | 伊人久久精品一区二区三区 | aaa天堂 | 涩涩视频大全 | 黄色一级毛片 | 精品不卡 | 亚洲国产一区二区视频 | 国产成人小视频 | 欧美日韩国产综合在线 | 日韩精品在线视频 | 国产精品久久久亚洲 | 成人在线视频免费观看 | 国产免费又黄又爽又刺激蜜月al | 欧美久久久久久 |