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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

請教:如何寫PWM信號

  [復制鏈接]
跳轉到指定樓層
樓主
ID:423989 發表于 2018-11-10 12:09 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
請教:如何利用51C語言寫PWM信號,P3.5一個腳位輸出,100-300KHZ,要求從200KHZ減到100KHZ,
減到100KHZ又自動增加到200KHZ,另外同時又從200KHZ增到300KHZ,增到300KHZ又自動減加到200KHZ;
就是200KHZ做中點,同時增,同時減,不斷循環。
謝謝!
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:94031 發表于 2018-11-10 15:41 | 只看該作者
51單片機定時器是無法產生200KHZ頻率PWM信號的,200hz還差不多。
回復

使用道具 舉報

板凳
ID:123289 發表于 2018-11-10 16:34 | 只看該作者
讀透單片機關于PWM的部分和定時器部分,而后就會寫。不是C的問題,是你對上述部分不理解。
回復

使用道具 舉報

地板
ID:424187 發表于 2018-11-10 17:49 | 只看該作者
用增強型的單片機專用的pwm控制器可以做到 比如stc15系列,而且實現起來很簡單
回復

使用道具 舉報

5#
ID:164602 發表于 2018-11-10 18:48 | 只看該作者
以STC89C52單片機為例:12M晶振,那么,12分頻后,主頻為1000KHz。
要產生200KHz,好像也可以。但這時,PWM的周期只有5us,特殊一點的一條指令可能都不止運行這個時間,所以,很難啊。除非只產生PWM,不做其它的,那就沒什么意義了。
當然,用高級一點的51單片機,如STC12、STC15這種不分頻的1T單片機,就一定可以了。
回復

使用道具 舉報

6#
ID:424213 發表于 2018-11-10 19:03 | 只看該作者
#在這里快速回復#1單片機定時器是無法產生200KHZ頻率PWM信號的,200hz還差不多
回復

使用道具 舉報

7#
ID:423989 發表于 2018-11-12 07:34 | 只看該作者
HC6800-ES-V2.0 發表于 2018-11-10 18:48
以STC89C52單片機為例:12M晶振,那么,12分頻后,主頻為1000KHz。
要產生200KHz,好像也可以。但這時,PW ...

原來的芯片是STC15F101W的,就是一個頻率輸出,其他不做,能提供C語言代碼嗎?謝謝!
回復

使用道具 舉報

8#
ID:155507 發表于 2018-11-12 14:17 | 只看該作者
我給你來個試試

  1. /*---------------------------------------------------------------------*/
  2. /* --- STC MCU Limited ------------------------------------------------*/
  3. /* --- STC 1T Series MCU Demo Programme -------------------------------*/
  4. /* 如果要在程序中使用此代碼,請在程序中注明使用了STC的資料及程序        */
  5. /*---------------------------------------------------------------------*/


  6. /*************  功能說明    **************

  7. 使用Timer0模擬6通道PWM驅動程序。

  8. 輸出為 P3.0 ~ P3.5, 對應 PWM0 ~ PWM5.

  9. 定時器中斷頻率一般不要超過100KHZ, 留足夠的時間給別的程序運行.

  10. 本例子使用11.0592MHZ時鐘, 25K的中斷頻率, 250級PWM, 周期為10ms.

  11. 中斷里處理的時間不超過6us, 占CPU時間大約為15%.

  12. ******************************************/
  13. //芯片是STC15F101W的
  14. #include    <reg52.h>

  15. #define MAIN_Fosc       11059200UL  //定義主時鐘
  16. #define Timer0_Rate     25000       //中斷頻率


  17. typedef     unsigned char   u8;
  18. typedef     unsigned int    u16;
  19. typedef     unsigned long   u32;

  20. sfr AUXR = 0x8E;

  21. sfr P3M1 = 0xB1;    //PxM1.n,PxM0.n     =00--->Standard,    01--->push-pull
  22. sfr P3M0 = 0xB2;    //                  =10--->pure input,  11--->open drain


  23. #define Timer0_Reload   (65536UL -(MAIN_Fosc / Timer0_Rate))        //Timer 0 重裝值

  24. //************** PWM8 變量和常量以及IO口定義 ***************
  25. //********************  8通道8 bit 軟PWM    ********************

  26. #define     PWM_DUTY_MAX    250 // 0~255    PWM周期, 最大255
  27. #define     PWM_ON          1   // 定義占空比的電平, 1 或 0

  28. #define     PWM_OFF         (!PWM_ON)
  29. #define     PWM_ALL_ON      (0xff * PWM_ON)

  30. u8 bdata PWM_temp1;                 //影射一個RAM,可位尋址,輸出時同步刷新
  31. sbit    P_PWM0  =   PWM_temp1^0;    //  定義影射RAM每位對應的IO
  32. sbit    P_PWM1  =   PWM_temp1^1;
  33. sbit    P_PWM2  =   PWM_temp1^2;
  34. sbit    P_PWM3  =   PWM_temp1^3;
  35. sbit    P_PWM4  =   PWM_temp1^4;
  36. sbit    P_PWM5  =   PWM_temp1^5;


  37. u8  pwm_duty;       //周期計數值
  38. u8  pwm[6];        //pwm0~pwm5 為0至5路PWM的寬度值

  39. bit     B_1ms;
  40. u8      cnt_1ms;
  41. u8      cnt_20ms;

  42. /**********************************************/
  43. void main(void)
  44. {
  45.     u8  i;
  46.    
  47.     P3M0 = 0x00;
  48.     P3M1 = 0x00;

  49.     AUXR |=  (1<<7);    // Timer0 set as 1T mode
  50.     TMOD &= ~(1<<2);    // Timer0 set as Timer
  51.     TMOD &= ~0x03;      // Timer0 set as 16 bits Auto Reload
  52.     TH0 = Timer0_Reload / 256;  //Timer0 Load
  53.     TL0 = Timer0_Reload % 256;
  54.     ET0 = 1;        //Timer0 Interrupt Enable
  55.     PT0 = 1;        //高優先級
  56.     TR0 = 1;        //Timer0 Run
  57.     EA = 1;         //打開總中斷

  58.     cnt_1ms = Timer0_Rate / 1000;   //1ms計數
  59.     cnt_20ms = 20;
  60.    
  61.     for(i=0; i<6; i++)     pwm[i] = i * 5 + 5;   //給PWM一個初值
  62.    
  63.     while(1)
  64.     {
  65.         if(B_1ms)   //1ms到
  66.         {
  67.             B_1ms = 0;
  68.             if(--cnt_20ms == 0) //PWM 20ms改變一階
  69.             {
  70.                 cnt_20ms = 20;
  71.                 for(i=0; i<6; i++) pwm[i]++;
  72.             }
  73.         }
  74.     }
  75. }


  76. /********************** Timer0 1ms中斷函數 ************************/
  77. void timer0 (void) interrupt 1
  78. {
  79.     P3 = PWM_temp1;         //影射RAM輸出到實際的PWM端口
  80.         
  81.     if(++pwm_duty == PWM_DUTY_MAX)      //PWM周期結束,重新開始新的周期
  82.     {
  83.         pwm_duty = 0;
  84.         PWM_temp1 = PWM_ALL_ON;
  85.     }
  86.     ACC = pwm_duty;
  87.     if(ACC == pwm[0])       P_PWM0  = PWM_OFF;  //判斷PWM占空比是否結束
  88.     if(ACC == pwm[1])       P_PWM1  = PWM_OFF;
  89.     if(ACC == pwm[2])       P_PWM2  = PWM_OFF;
  90.     if(ACC == pwm[3])       P_PWM3  = PWM_OFF;
  91.     if(ACC == pwm[4])       P_PWM4  = PWM_OFF;
  92.     if(ACC == pwm[5])       P_PWM5  = PWM_OFF;

  93.     if(--cnt_1ms == 0)
  94.     {
  95.         cnt_1ms = Timer0_Rate / 1000;
  96.         B_1ms = 1;      // 1ms標志
  97.     }
  98. }



復制代碼
回復

使用道具 舉報

9#
ID:423989 發表于 2018-11-13 09:27 | 只看該作者

不對,不同時增和減
回復

使用道具 舉報

10#
ID:423989 發表于 2018-11-13 09:33 | 只看該作者
示波器測的波形


pwm.rar

6.3 MB, 下載次數: 10

示波器測的波形

回復

使用道具 舉報

11#
ID:425084 發表于 2018-11-13 16:55 | 只看該作者
int8u beep1pwm=0;
void beeppwm(int8u ss)
{
beep1pwm=ss;
}

void timer0() interrupt 1
{               
        TH0=(65536-15)/256;                       
        TL0=(65536-15)%256;
        tt++;

        if(tt==ALL)
                {
                        if(beep1pwm !=0)
                                pwm=1;
                        tt=0;
                }       
        if(tt==beep1pwm)
                pwm=0;               
}

beeppwm(1);          這是一個控制PWM的程序,不知道對你有幫助沒
回復

使用道具 舉報

12#
ID:425905 發表于 2018-11-13 19:17 | 只看該作者
用定時器
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 日韩成人免费 | 久久久免费少妇高潮毛片 | 7777在线视频免费播放 | 亚洲精品中文字幕在线观看 | 中文字幕一区二区三区四区五区 | 操操日 | 久久精品免费观看 | japanhd成人| 一级黄色片一级黄色片 | 欧美日韩成人一区二区 | h视频网站在线观看 | 久久久国产精品 | 奇米影视77 | 一区视频 | 久久99精品久久久 | av夜夜操 | 日本免费一区二区三区四区 | 国产精品久久久久影院色老大 | 视频二区| 中文字幕精品一区 | 成年人网站国产 | 69热视频在线观看 | 欧美一级一区 | 日本淫视频 | 久久91av| 91视频在线看| 国产成在线观看免费视频 | 久久一 | 91看片在线 | 亚洲成人精品在线 | 黄色精品| 国产精品视频久久久 | 国产精品96久久久久久 | 久久久人成影片一区二区三区 | 蜜桃在线视频 | 国产精品成人一区二区 | 亚洲成人a v | 艹逼网| 欧美大片一区 | 国产一区二区免费 | 在线观看黄免费 |