欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索

如何測量72MHz以下的外部信號,STC32的144MHz的高速PWM

查看數: 2823 | 評論數: 5 | 收藏 0
關燈 | 提示:支持鍵盤翻頁<-左 右->
    組圖打開中,請稍候......
發布時間: 2023-3-15 14:33

正文摘要:

如何測量72MHz以下的外部信號,STC32的144MHz的高速PWM STC32G12K128-35MHz-LQFP64/48/32,TSSOP20 STC32G8K64-42MHz-LQFP48/32 STC8H1K08T-33I-TSSOP20/QFN20 的高速 144MHz ~ 196MHz 的PWM, 可以捕獲外部脈 ...

回復

ID:78835 發表于 2024-2-6 16:48
可以做到100K的PWM輸出,并且有10bit的分辨率,也就是有1024份的占空比調節嗎?
ID:458247 發表于 2024-2-6 13:04
lmn2005 發表于 2024-2-6 08:48
我也覺得無法捕捉高達72MHz的脈沖信號,理論上可以,但實際上的IO口面對這么高的頻率,應付不了。

144MHz怎么讀72MHz的信號。。mcu采樣一次都要好幾個時鐘了,而且mcu內部adc好像不支持144MHz吧
ID:71233 發表于 2024-2-6 08:48
weijoyer 發表于 2023-3-21 18:35
144M的速度不足以捕獲72M的波形吧

我也覺得無法捕捉高達72MHz的脈沖信號,理論上可以,但實際上的IO口面對這么高的頻率,應付不了。
ID:71233 發表于 2024-2-6 08:46
我用官方范例改的,怎么不行?請教一下



  1. //芯片用STC8H2K17U,外部晶振為24MHz

  2. sfr PLLCR = 0xdc;
  3. //測試工作頻率為24MHz
  4. #include "stc8h.h"
  5. #include "intrins.h"
  6. #define       FOSC                           24000000UL
  7. #define       HSCK_MCLK             0
  8. #define       HSCK_PLL                 1
  9. #define       HSCK_SEL                 HSCK_PLL
  10. #define       PLL_96M                     0
  11. #define       PLL_144M                  1
  12. #define       PLL_SEL                     PLL_96M
  13. #define       CKMS                          0x80
  14. #define       HSIOCK                      0x40
  15. #define       MCK2SEL_MSK        0x0c
  16. #define       MCK2SEL_SEL1        0x00
  17. #define       MCK2SEL_PLLD2     0x04
  18. #define       MCK2SEL_PLLD4     0x08
  19. #define       MCKSEL_MSK          0x03
  20. #define       MCKSEL_HIRC         0x00
  21. #define       MCKSEL_XOSC        0x01
  22. #define       MCKSEL_X32K          0x02
  23. #define       MCKSEL_IRC32K     0x03
  24. #define       ENCKM                      0x80
  25. #define       PCKI_MSK                 0x60
  26. #define       PCKI_D1                     0x00
  27. #define       PCKI_D2                     0x20
  28. #define       PCKI_D3                     0x40
  29. #define       PCKI_D4                     0x60

  30. void delay()
  31. {
  32.          int     i;
  33.          
  34.          for    (i=0; i<100; i++);
  35. }
  36. char ReadPWMA(char addr)
  37. {
  38.          char dat;
  39.          
  40.          while(HSPWMA_ADR & 0x80);                                                //等待前一個異步讀寫完成
  41.          HSPWMA_ADR= addr | 0x80;                                                   //設置間接訪問地址,只需要設置原XFR地址的低7位
  42.                                                                                                                 //HSPWMA_ADR寄存器的最高位寫1,表示讀數據
  43.          while(HSPWMA_ADR & 0x80);                                                //等待當前異步讀取完成
  44.          dat    = HSPWMA_DAT;                                                              //讀取異步數據
  45.          
  46.          return dat;
  47. }
  48. void WritePWMA(char addr, char dat)
  49. {
  50.          while(HSPWMA_ADR & 0x80);                                                //等待前一個異步讀寫完成
  51.          HSPWMA_DAT= dat;                                                                 //準備需要寫入的數據
  52.          HSPWMA_ADR= addr & 0x7f;                                                 //設置間接訪問地址,只需要設置原XFR地址的低7位
  53.                                                                                                                 //HSPWMA_ADR寄存器的最高位寫0,表示寫數據
  54. }
  55. void main()
  56. {
  57.          P_SW2|= 0x80;                                                                            //使能訪問XFR
  58.          XOSCCR = 0xc0; // 啟動外部晶振
  59.         while (!(XOSCCR & 1));                   // 等待時鐘穩定               
  60.         CLKDIV = 0x00; // 時鐘不分頻
  61.         CKSEL = 0x01;  // 選擇外部晶振
  62.         
  63.          //選擇PLL輸出時鐘
  64. #if     (PLL_SEL == PLL_96M)
  65.          CLKSEL&= ~CKMS;                                                                  //選擇PLL的96M作為PLL的輸出時鐘
  66. #elif (PLL_SEL == PLL_144M)
  67.          CLKSEL|= CKMS;                                                                      //選擇PLL的144M作為PLL的輸出時鐘
  68. #else
  69.          CLKSEL&= ~CKMS;                                                                  //默認選擇PLL的96M作為PLL的輸出時鐘
  70. #endif
  71.          
  72.          //選擇PLL輸入時鐘分頻,保證輸入時鐘為12M
  73.          PLLCR&= ~PCKI_MSK;
  74. #if     (FOSC == 12000000UL)
  75.          PLLCR|= PCKI_D1;                                                                   //PLL輸入時鐘1分頻
  76. #elif (FOSC == 24000000UL)
  77.          PLLCR|= PCKI_D2;                                                                   //PLL輸入時鐘2分頻
  78. #elif (FOSC == 36000000UL)
  79.          PLLCR|= PCKI_D3;                                                                   //PLL輸入時鐘3分頻
  80. #elif (FOSC == 48000000UL)
  81.          PLLCR|= PCKI_D4;                                                                   //PLL輸入時鐘4分頻
  82. #else
  83.          PLLCR|= PCKI_D1;                                                                   //默認PLL輸入時鐘1分頻
  84. #endif
  85.          //啟動PLL
  86.          PLLCR|= ENCKM;                                                                    //使能PLL倍頻
  87.          
  88.          delay();                                                                                          //等待PLL鎖頻
  89.          //選擇HSPWM/HSSPI時鐘
  90. #if     (HSCK_SEL == HSCK_MCLK)
  91.          CLKSEL&= ~HSIOCK;                                                             //HSPWM/HSSPI選擇主時鐘為時鐘源
  92. #elif (HSCK_SEL == HSCK_PLL)
  93.          CLKSEL|= HSIOCK;                                                                  //HSPWM/HSSPI選擇PLL輸出時鐘為時鐘源
  94. #else
  95.          CLKSEL&= ~HSIOCK;                                                             //默認HSPWM/HSSPI選擇主時鐘為時鐘源
  96. #endif
  97.          HSCLKDIV= 0;                                                                            //HSPWM/HSSPI時鐘源不分頻
  98.          
  99.          HSPWMA_CFG= 0x03;                                                             //使能PWMA相關寄存器異步訪問功能
  100.          
  101.          //通過異步方式設置PWMA的相關寄存器
  102.          WritePWMA((char)&PWMA_PSCR,48000 - 1);                  //分頻(注:自己加的)
  103.          WritePWMA((char)&PWMA_CCER1,0x00);
  104.          WritePWMA((char)&PWMA_CCMR1,0x00);                           //CC1為輸出模式
  105.          WritePWMA((char)&PWMA_CCMR1,0x60);                           //OC1REF輸出PWM1(CNT<CCR時輸出有效電平1)
  106.          WritePWMA((char)&PWMA_CCER1,0x05);                           //使能CC1/CC1N上的輸出功能
  107.          WritePWMA((char)&PWMA_ENO,0x03);                                //使能PWM信號輸出到端口
  108.          WritePWMA((char)&PWMA_BKR,0x80);                                //使能主輸出
  109.          WritePWMA((char)&PWMA_CCR1H,200 >> 8);                    //設置輸出PWM的占空比
  110.          WritePWMA((char)&PWMA_CCR1L,200);
  111.          WritePWMA((char)&PWMA_ARRH,2000 >> 8);                    //設置輸出PWM的周期(注:原來1000,現改為2000)
  112.          WritePWMA((char)&PWMA_ARRL,2000);
  113.          WritePWMA((char)&PWMA_DTR,10);                                    //設置互補對稱輸出PWM的死區
  114.          WritePWMA((char)&PWMA_CR1,0x01);                                 //開始PWM計數
  115.          WritePWMA((char)&PWMB_IER,0x01);             // 使能PWMB中斷
  116.                                  
  117.                                  
  118.          P2M0= 0;
  119.          P2M1= 0;
  120.          P3M0= 0;
  121.          P3M1= 0;
  122.          
  123. //         P2= ReadPWMA((char)&PWMA_ARRH);                               //異步方式讀取寄存器
  124. //         P3= ReadPWMA((char)&PWMA_ARRL);
  125.          
  126.          while(1);


  127. }

  128. void PWMA_Isr() interrupt 26 // PWMA中斷處理程序,1秒中斷(注:自己加的)
  129. {
  130.         
  131.     if (ReadPWMA(((char)&PWMA_SR1) & 0x01))  
  132.     {
  133.         WritePWMA((char)&PWMA_IER,0x00);         // 清除PWM中斷
  134.         P37=!P37;
  135.     }
  136. }
復制代碼



ID:339654 發表于 2023-3-21 18:35
144M的速度不足以捕獲72M的波形吧

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表