找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索

兩路互補(bǔ)調(diào)光調(diào)色方案如何實(shí)現(xiàn),求大神指點(diǎn)

查看數(shù): 2821 | 評(píng)論數(shù): 17 | 收藏 2
關(guān)燈 | 提示:支持鍵盤翻頁<-左 右->
    組圖打開中,請(qǐng)稍候......
發(fā)布時(shí)間: 2022-1-17 16:54

正文摘要:

如圖是一張調(diào)光調(diào)色方案的 PWM波形圖,有大神知道程序如何實(shí)現(xiàn)嗎?求大神幫忙指點(diǎn)下 ,萬分感謝

回復(fù)

ID:25310 發(fā)表于 2022-8-11 10:17
為什么不用硬件PWM輸出? 兩個(gè)同周期的PWM。用互補(bǔ)方式輸出就OK了。
ID:161164 發(fā)表于 2022-8-10 17:12
cj2333 發(fā)表于 2022-8-10 14:50
大佬可以發(fā)一下你仿真的的代碼嗎

8樓有例程
ID:482083 發(fā)表于 2022-8-10 14:50
lkc8210 發(fā)表于 2022-1-21 00:17
簡單,用一個(gè)定器就可以了
以下是三種模式

大佬可以發(fā)一下你仿真的的代碼嗎
ID:609524 發(fā)表于 2022-8-9 17:42
雙色溫調(diào)光調(diào)色嗎
ID:320097 發(fā)表于 2022-8-8 15:29
你給信息好有限,很多都是靠猜
ID:140489 發(fā)表于 2022-8-8 15:24

仿真的那個(gè)代碼能發(fā)一下嗎?
ID:482083 發(fā)表于 2022-8-7 16:03
樓主有調(diào)好了嘛,小弟也碰到了這個(gè)問題,第一個(gè)圖能做到,第二個(gè)圖就不知道如何下手
ID:161164 發(fā)表于 2022-3-31 14:49
a2748446 發(fā)表于 2022-3-31 08:41
你這個(gè) 寫 沒有死區(qū)的 , 用硬件帶死區(qū)的PWM , 例如PWM0  PWM2N

你的圖也沒有顯示要死區(qū)啊~
你用硬件帶死區(qū)的PWM弄好了嗎?
ID:543220 發(fā)表于 2022-3-31 08:41

你這個(gè) 寫 沒有死區(qū)的 , 用硬件帶死區(qū)的PWM , 例如PWM0  PWM2N
ID:1003140 發(fā)表于 2022-1-22 22:26
軟件好做,硬件不好做
ID:161164 發(fā)表于 2022-1-21 13:47
lids 發(fā)表于 2022-1-21 09:15
能發(fā)下源碼嗎

用例程改一下就行

  1. /*------------------------------------------------------------------*/
  2. /* --- STC MCU International Limited -------------------------------*/
  3. /* --- STC 1T Series MCU RC Demo -----------------------------------*/
  4. /* If you want to use the program or the program referenced in the  */
  5. /* article, please specify in which data and procedures from STC    */
  6. /*------------------------------------------------------------------*/

  7. #include    <reg52.h>


  8. /*************  功能說明    **************

  9. 本程序演示使用定時(shí)器做軟件PWM。

  10. 定時(shí)器0做16位自動(dòng)重裝,中斷,從T0CLKO高速輸出PWM。

  11. 本例程是使用STC15F/L系列MCU的定時(shí)器T0做模擬PWM的例程。

  12. PWM可以是任意的量程。但是由于軟件重裝需要一點(diǎn)時(shí)間,所以PWM占空比最小為32T/周期,最大為(周期-32T)/周期, T為時(shí)鐘周期。

  13. PWM頻率為周期的倒數(shù)。假如周期為6000, 使用24MHZ的主頻,則PWM頻率為4000HZ。

  14. ******************************************/

  15. #define     MAIN_Fosc       24000000UL      //定義主時(shí)鐘

  16. #define     PWM_DUTY        6000            //定義PWM的周期,數(shù)值為時(shí)鐘周期數(shù),假如使用24.576MHZ的主頻,則PWM頻率為6000HZ。

  17. #define     PWM_HIGH_MIN    32              //限制PWM輸出的最小占空比。用戶請(qǐng)勿修改。
  18. #define     PWM_HIGH_MAX    (PWM_DUTY-PWM_HIGH_MIN) //限制PWM輸出的最大占空比。用戶請(qǐng)勿修改。

  19. typedef     unsigned char   u8;
  20. typedef     unsigned int    u16;
  21. typedef     unsigned long   u32;

  22. sfr P3M1  = 0xB1;   //P3M1.n,P3M0.n     =00--->Standard,    01--->push-pull
  23. sfr P3M0  = 0xB2;   //                  =10--->pure input,  11--->open drain
  24. sfr AUXR  = 0x8E;
  25. sfr INT_CLKO = 0x8F;

  26. sbit    P_PWM = P3^5;       //定義PWM輸出引腳。
  27. //sbit  P_PWM = P1^4;       //定義PWM輸出引腳。STC15W204S

  28. u16     pwm;                //定義PWM輸出高電平的時(shí)間的變量。用戶操作PWM的變量。

  29. u16     PWM_high,PWM_low;   //中間變量,用戶請(qǐng)勿修改。

  30. void    delay_ms(unsigned char ms);
  31. void    LoadPWM(u16 i);


  32. /******************** 主函數(shù)**************************/
  33. void main(void)
  34. {
  35.     P_PWM = 0;
  36.     P3M1 &= ~(1 << 5);  //P3.5 設(shè)置為推挽輸出
  37.     P3M0 |=  (1 << 5);

  38. //  P1M1 &= ~(1 << 4);  //P1.4 設(shè)置為推挽輸出   STC15W204S
  39. //  P1M0 |=  (1 << 4);

  40.     TR0 = 0;        //停止計(jì)數(shù)
  41.     ET0 = 1;        //允許中斷
  42.     PT0 = 1;        //高優(yōu)先級(jí)中斷
  43.     TMOD &= ~0x03;  //工作模式,0: 16位自動(dòng)重裝
  44.     AUXR |=  0x80;  //1T
  45.     TMOD &= ~0x04;  //定時(shí)
  46.     INT_CLKO |=  0x01;  //輸出時(shí)鐘

  47.     TH0 = 0;
  48.     TL0 = 0;
  49.     TR0 = 1;    //開始運(yùn)行

  50.     EA = 1;

  51.     pwm = PWM_DUTY / 10;    //給PWM一個(gè)初值,這里為10%占空比
  52.     LoadPWM(pwm);           //計(jì)算PWM重裝值


  53.     while (1)
  54.     {
  55.         while(pwm < (PWM_HIGH_MAX-8))
  56.         {
  57.             pwm += 8;       //PWM逐漸加到最大
  58.             LoadPWM(pwm);
  59.             delay_ms(8);
  60.         }
  61.         while(pwm > (PWM_HIGH_MIN+8))
  62.         {
  63.             pwm -= 8;   //PWM逐漸減到最小
  64.             LoadPWM(pwm);
  65.             delay_ms(8);
  66.         }
  67.     }
  68. }


  69. //========================================================================
  70. // 函數(shù): void  delay_ms(unsigned char ms)
  71. // 描述: 延時(shí)函數(shù)。
  72. // 參數(shù): ms,要延時(shí)的ms數(shù), 這里只支持1~255ms. 自動(dòng)適應(yīng)主時(shí)鐘.
  73. // 返回: none.
  74. // 版本: VER1.0
  75. // 日期: 2013-4-1
  76. // 備注:
  77. //========================================================================
  78. void  delay_ms(unsigned char ms)
  79. {
  80.      unsigned int i;
  81.      do{
  82.           i = MAIN_Fosc / 13000;
  83.           while(--i)    ;
  84.      }while(--ms);
  85. }

  86. /**************** 計(jì)算PWM重裝值函數(shù) *******************/
  87. void    LoadPWM(u16 i)
  88. {
  89.     u16 j;

  90.     if(i > PWM_HIGH_MAX)        i = PWM_HIGH_MAX;   //如果寫入大于最大占空比數(shù)據(jù),則強(qiáng)制為最大占空比。
  91.     if(i < PWM_HIGH_MIN)        i = PWM_HIGH_MIN;   //如果寫入小于最小占空比數(shù)據(jù),則強(qiáng)制為最小占空比。
  92.     j = 65536UL - PWM_DUTY + i; //計(jì)算PWM低電平時(shí)間
  93.     i = 65536UL - i;            //計(jì)算PWM高電平時(shí)間
  94.     EA = 0;
  95.     PWM_high = i;   //裝載PWM高電平時(shí)間
  96.     PWM_low  = j;   //裝載PWM低電平時(shí)間
  97.     EA = 1;
  98. }

  99. /********************* Timer0中斷函數(shù)************************/
  100. void timer0_int (void) interrupt 1
  101. {
  102.     if(P_PWM)
  103.     {
  104.         TH0 = (u8)(PWM_low >> 8);   //如果是輸出高電平,則裝載低電平時(shí)間。
  105.         TL0 = (u8)PWM_low;
  106.     }
  107.     else
  108.     {
  109.         TH0 = (u8)(PWM_high >> 8);  //如果是輸出低電平,則裝載高電平時(shí)間。
  110.         TL0 = (u8)PWM_high;
  111.     }
  112. }

復(fù)制代碼
ID:140489 發(fā)表于 2022-1-21 09:15
lkc8210 發(fā)表于 2022-1-21 00:17
簡單,用一個(gè)定器就可以了
以下是三種模式

能發(fā)下源碼嗎
ID:161164 發(fā)表于 2022-1-21 00:17
簡單,用一個(gè)定器就可以了
以下是三種模式

自動(dòng)循環(huán)



手動(dòng)選擇雙色比例



手動(dòng)選擇輸出比例


ID:624769 發(fā)表于 2022-1-20 23:23
估計(jì)沒人能看明白的你的意思,
你發(fā)的圖只是說明了 PWMC+PWMW的占空比 與 亮度之間的關(guān)系。
跟“如何實(shí)現(xiàn)” 之間 沒有任何關(guān)聯(lián)。壓根不知道你所謂的“如何實(shí)現(xiàn)”到底指的什么。
ID:543220 發(fā)表于 2022-1-20 08:13
tatachaoren 發(fā)表于 2022-1-18 15:06
1、第一種方法:第一個(gè)圖用硬件PWM互補(bǔ)模式,死區(qū)調(diào)節(jié),第二個(gè)用不了硬件PWM。
2、第二種方法:干脆直接用 ...

算了你沒明白意思
ID:488334 發(fā)表于 2022-1-18 15:06
1、第一種方法:第一個(gè)圖用硬件PWM互補(bǔ)模式,死區(qū)調(diào)節(jié),第二個(gè)用不了硬件PWM。
2、第二種方法:干脆直接用IO模擬PWM。不過這樣的話頻率就無法調(diào)得很高。
ID:301191 發(fā)表于 2022-1-17 23:13
頂一下

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

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

快速回復(fù) 返回頂部 返回列表