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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3744|回復: 2
收起左側(cè)

問大神:STC8A8K64S4A12芯片怎么單獨使用里面PWM部分產(chǎn)生正弦波信號

[復制鏈接]
ID:597961 發(fā)表于 2019-8-9 13:52 | 顯示全部樓層 |閱讀模式
同標題
回復

使用道具 舉報

ID:155507 發(fā)表于 2019-8-12 14:23 | 顯示全部樓層
一個SPWM帶有死區(qū)的程序 用STC8A8K64S4A12單片機編寫的SPWM


  1. //一個SPWM帶有死區(qū)的程序 用STC8A8K64S4A12單片機編寫的SPWM
  2. //介紹了一種高性能微機控制的單相 SPWM 變頻調(diào)速系統(tǒng)
  3. // SPWM信號經(jīng)低通濾波后可變換為正弦波,窄帶范圍內(nèi)的方波經(jīng)低通濾波后可變換為相應(yīng)頻率的正弦波
  4. //程序能用,如果不是你想要的頻率,那就 自己改一下數(shù)據(jù) 記得同時要替換數(shù)組里面的值

  5. #define         MAIN_Fosc                24000000L        //定義主時鐘

  6. #include        "STC8.H"
  7. unsigned int code T_SinTable[]={
  8. 1220, 1256, 1292, 1328, 1364, 1400, 1435, 1471, 1506, 1541,
  9. 1575, 1610, 1643, 1677, 1710, 1742, 1774, 1805, 1836, 1866,
  10. 1896, 1925, 1953, 1981, 2007, 2033, 2058, 2083, 2106, 2129,
  11. 2150, 2171, 2191, 2210, 2228, 2245, 2261, 2275, 2289, 2302,
  12. 2314, 2324, 2334, 2342, 2350, 2356, 2361, 2365, 2368, 2369,
  13. 2370, 2369, 2368, 2365, 2361, 2356, 2350, 2342, 2334, 2324,
  14. 2314, 2302, 2289, 2275, 2261, 2245, 2228, 2210, 2191, 2171,
  15. 2150, 2129, 2106, 2083, 2058, 2033, 2007, 1981, 1953, 1925,
  16. 1896, 1866, 1836, 1805, 1774, 1742, 1710, 1677, 1643, 1610,
  17. 1575, 1541, 1506, 1471, 1435, 1400, 1364, 1328, 1292, 1256,
  18. 1220, 1184, 1148, 1112, 1076, 1040, 1005, 969, 934, 899,
  19. 865, 830, 797, 763, 730, 698, 666, 635, 604, 574,
  20. 544, 515, 487, 459, 433, 407, 382, 357, 334, 311,
  21. 290, 269, 249, 230, 212, 195, 179, 165, 151, 138,
  22. 126, 116, 106, 98, 90, 84, 79, 75, 72, 71,
  23. 70, 71, 72, 75, 79, 84, 90, 98, 106, 116,
  24. 126, 138, 151, 165, 179, 195, 212, 230, 249, 269,
  25. 290, 311, 334, 357, 382, 407, 433, 459, 487, 515,
  26. 544, 574, 604, 635, 666, 698, 730, 763, 797, 830,
  27. 865, 899, 934, 969, 1005, 1040, 1076, 1112, 1148, 1184,

  28. };

  29. #define        PwmClk_1T        0
  30. #define        PwmClk_2T        1
  31. #define        PwmClk_3T        2
  32. #define        PwmClk_4T        3
  33. #define        PwmClk_5T        4
  34. #define        PwmClk_6T        5
  35. #define        PwmClk_7T        6
  36. #define        PwmClk_8T        7
  37. #define        PwmClk_9T        8
  38. #define        PwmClk_10T        9
  39. #define        PwmClk_11T        10
  40. #define        PwmClk_12T        11
  41. #define        PwmClk_13T        12
  42. #define        PwmClk_14T        13
  43. #define        PwmClk_15T        14
  44. #define        PwmClk_16T        15
  45. #define        PwmClk_T2        16

  46. #define        EAXSFR()                P_SW2 |=  0x80        /* MOVX A,@DPTR/MOVX @DPTR,A指令的操作對象為擴展SFR(XSFR) */
  47. #define        EAXRAM()                P_SW2 &= ~0x80        /* MOVX A,@DPTR/MOVX @DPTR,A指令的操作對象為擴展RAM(XRAM) */
  48. #define        PWM_Enable()        PWMCR |=  0x80        /* 使能PWM波形發(fā)生器,PWM計數(shù)器開始計數(shù) */
  49. #define        PWM_Disable()        PWMCR &= ~0x80        /* 關(guān)閉PWM波形發(fā)生器 */
  50. #define P2n_standard(bitn)                        P2M1 &= ~(bitn),        P2M0 &= ~(bitn)
  51. #define P2n_push_pull(bitn)                        P2M1 &= ~(bitn),        P2M0 |=  (bitn)
  52. #define P2n_pure_input(bitn)                P2M1 |=  (bitn),        P2M0 &= ~(bitn)
  53. #define P2n_open_drain(bitn)                P2M1 |=  (bitn),        P2M0 |=  (bitn)
  54. #define                PWM_VECTOR                22

  55. #define                PWM_DeadZone        12        /* 死區(qū)時鐘數(shù), 6 ~ 24之間  */
  56. typedef unsigned char         u8;
  57. typedef unsigned int          u16;
  58. typedef unsigned long         u32;

  59. sbit OE245 =P4^1;
  60. sbit LED_OUT =P3^3;
  61. #define Port P1                         //設(shè)置CPU和模塊的通訊接口

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

  63. void delay(unsigned long d)
  64. {
  65.   while(d--);
  66. }

  67. //========================================================================
  68. // 函數(shù): void        PWM_config(void)
  69. // 描述: PWM配置函數(shù)。
  70. // 參數(shù): none.
  71. // 返回: none.
  72. // 版本: VER1.0
  73. // 日期:
  74. // 備注:
  75. //========================================================================
  76. void        PWM_config(void)
  77. {

  78.   EAXSFR();                        // 訪問XFR

  79.   PWM3T1 = 65; // 第一個翻轉(zhuǎn)計數(shù)

  80.   PWM3T2=1220;         // 第二個翻轉(zhuǎn)計數(shù)
  81.   PWM3CR =0;         // PWM3輸出選擇P2.3, 無中斷
  82.   PWM3CR  |=  0x80;        // 相應(yīng)PWM通道的端口為PWM輸出口,受PWM波形發(fā)生器控制 ENC30
  83.   PWM3CR &= ~0x40;        // 設(shè)置PWM輸出端口的初始電平為0 C3INI

  84.   P23 = 0;
  85.   P2n_push_pull(1<<3);        //IO初始化, 上電時為高阻

  86.   PWM4T1= 65-PWM_DeadZone;                        // 第一個翻轉(zhuǎn)計數(shù)低字節(jié)
  87.        
  88.   PWM4T2 = (1220+PWM_DeadZone); // 第二個翻轉(zhuǎn)計數(shù)高字節(jié)
  89.        
  90.   PWM4CR = 0;        // PWM4輸出選擇P2.2, 無中斷
  91.   PWM4CR  |=  0x80;        // 相應(yīng)PWM通道的端口為PWM輸出口,受PWM波形發(fā)生器控制 ENC40
  92.   //        PWMCFG &= ~0x04;        // 設(shè)置PWM輸出端口的初始電平為0  C4INI
  93.   PWM4CR |=  0x40;        // 設(shè)置PWM輸出端口的初始電平為1
  94.   P24 = 1;
  95.   P2n_push_pull(1<<4);        //IO初始化, 上電時為高阻

  96.   PWMC = 2400;        // PWM計數(shù)器的高字節(jié)

  97.   PWMCKS = PwmClk_1T;        // 時鐘源: PwmClk_1T,PwmClk_2T, ... PwmClk_16T, PwmClk_Timer2

  98.   EAXRAM();                        // 恢復訪問XRAM
  99.   
  100.   PWMCR |= ENPWM;                // 使能PWM波形發(fā)生器,PWM計數(shù)器開始計數(shù)
  101.   //        PWMCR &= ~ECBI;                // 禁止PWM計數(shù)器歸零中斷
  102.   PWMCR |=  ECBI;                // 允許PWM計數(shù)器歸零中斷

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


  105. /**********************************************/
  106. void main(void)
  107. {
  108.   unsigned char i;
  109.   OE245 =0;
  110.   LED_OUT =1;
  111.   PWM_config();        //初始化PWM

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

  113.   while (1)
  114.   {
  115.     for(i=1;i!=0;i<<=1)  // 0000 0000
  116.     {
  117.       Port =~i; //0111 1111
  118.       delay(200000);
  119.     }
  120.   }
  121. }


  122. /********************* PWM中斷函數(shù)************************/

  123. void PWM_int (void) interrupt PWM_VECTOR
  124. {
  125.   u16        j;
  126.   u8        SW2_tmp;

  127.   if(PWMCFG & CBIF)        //PWM計數(shù)器歸零中斷標志 PWMCFG
  128.   {
  129.     PWMCFG &= ~CBIF;        //清除中斷標志

  130.     SW2_tmp = P_SW2;        //保存SW2設(shè)置
  131.     EAXSFR();                //訪問XFR

  132.     j = T_SinTable[PWM_Index];

  133.     PWM3T2H = (u8)(j >> 8);        //第二個翻轉(zhuǎn)計數(shù)高字節(jié)

  134.     PWM3T2L  = (u8)j;                        //第二個翻轉(zhuǎn)計數(shù)低字節(jié)

  135.     j += PWM_DeadZone;                //死區(qū)
  136.     // 指向PWM4

  137.     PWM4T2H = (u8)(j >> 8);        //第二個翻轉(zhuǎn)計數(shù)高字節(jié)
  138.    
  139.     PWM4T2L = (u8)j;                        //第二個翻轉(zhuǎn)計數(shù)低字節(jié)
  140.     P_SW2 = SW2_tmp;        //恢復SW2設(shè)置

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

  142.   }

  143. }

復制代碼


單片機SPWM波 產(chǎn)生正弦波的源程序及工具
http://www.zg4o1577.cn/bbs/dpj-55510-1.html


回復

使用道具 舉報

ID:388197 發(fā)表于 2019-8-12 22:50 | 顯示全部樓層
如果要求不高,用50%占空比輸出方波,經(jīng)過一個截止頻率等于方波頻率的4階以上低通濾波器,出來的基本就是個正弦波了.

回復

使用道具 舉報

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

本版積分規(guī)則

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

Powered by 單片機教程網(wǎng)

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 91麻豆精品国产91久久久久久 | 精品蜜桃一区二区三区 | 国产激情视频在线观看 | 亚洲一区二区三区视频 | 中文二区 | 国产欧美一区二区三区国产幕精品 | av网址在线播放 | 成年人在线观看 | 国产在线观看一区 | 亚洲国产精品一区二区三区 | 国产精品不卡视频 | 亚洲视频免费观看 | 亚洲精品视频一区 | 少妇特黄a一区二区三区88av | 麻豆久久久久久久久久 | 欧美一级黄色免费看 | 日韩av在线播 | 国产乱码高清区二区三区在线 | 9191在线观看 | 国产在线高清 | www.天天操| 国产一区二区精品在线观看 | 欧美一a| 国产精品日产欧美久久久久 | 色嗨嗨| 久久久久久久91 | 精品久久久久久久人人人人传媒 | 在线观看亚洲精品视频 | 日韩在线一区二区三区 | 亚洲欧美中文日韩在线v日本 | 国产精品久久av | 亚洲欧洲日韩精品 中文字幕 | 欧美日韩中文字幕在线 | 性做久久久久久免费观看欧美 | 色综合天天天天做夜夜夜夜做 | 中文成人在线 | 亚洲品质自拍视频 | 国产二区三区 | 国产精品美女久久久av超清 | 日韩中文不卡 | 日韩一区二区三区在线观看 |