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

標題: 使用單片機PWM調制呼吸燈的時候,低亮度時會發生抖動,怎么處理 [打印本頁]

作者: hzw854025403    時間: 2020-8-18 15:04
標題: 使用單片機PWM調制呼吸燈的時候,低亮度時會發生抖動,怎么處理
如題,請問一下各位大佬,在呼吸燈慢慢亮起來的時候,在低亮度區,會發生抖動,有沒有辦法不降低頻率且不增加硬件的情況下解決這個問題?

有人說可以提高PWM的精度,但是我看不懂,有沒有大佬能解答一下的?
或者說大佬們有更好的解決方法?

作者: hzw854025403    時間: 2020-8-18 15:15
  1. U16 PWMD;//PWM占空比
  2. U8   PWMD_H;//占空比整數
  3. U8   PWMD_L;//占空比余數
  4. U8   PWM_COUNT;//PWM脈沖數
  5. void isr(void) interrupt//PWM中斷
  6. {
  7. u8 i;
  8.     if(T8P1IF)
  9.     {
  10.         T8P1IF=0;
  11.         if(++PWM_COUNT>15)
  12.         {
  13.             PWM_COUNT=0;
  14.             PWMD_H= PWMD/16;//求PWM的整數
  15.             PWMD_L=PWMD%16;//求PWM的余數
  16.         }
  17.         i= PWMD_H;
  18.         if( PWMD_L>0)
  19.         {
  20.             i+=1;
  21.             PWMD_L-=1;
  22.         }     
  23.          T8P1RL=i;//每次更新占空比
  24.     }

  25. }[b][/b]
復制代碼

看不懂是什么意思,硬件是8位的,他擴展到12位,但是硬件沒有的分了,多出來的4位 硬件8位不支持,那他多出來的4位怎么會提高他的精度呢
作者: Roy-2010    時間: 2020-8-18 15:58
都是這樣子的。pwm波總會有抖動的。程序也不好解決。
作者: wulin    時間: 2020-8-18 16:51
hzw854025403 發表于 2020-8-18 15:15
看不懂是什么意思,硬件是8位的,他擴展到12位,但是硬件沒有的分了,多出來的4位 硬件8位不支持,那他多 ...

PWM周期大于20ms就會閃爍。
作者: hzw854025403    時間: 2020-8-18 18:48
wulin 發表于 2020-8-18 16:51
PWM周期大于20ms就會閃爍。

不是常亮的時候閃爍,是呼吸的時候會有一點抖動,從暗到亮的時候抖動,我現在的頻率是22K,1000的精度,如果是4千的精度就不會出現抖動,但是頻率就下降了。
作者: Y_G_G    時間: 2020-8-19 08:37
1KHZ以上的PWM頻率,LED燈就不會抖動了,不管是大功率的LED手電還是LED指示燈,都不會抖動,我們這的手電筒統一用的就是1024HZ的PWM頻率
你的抖動,要么是程序的問題,要么是電路的問題
C語言我不會,你的程序是不是調節的時候只調節PWMD_L,而PWMD_H沒有調節?
正常的是:高電平時間加1,低電平時間就減1,保持PWM頻率不變
作者: 梁廷明    時間: 2020-8-19 11:10
抖動,剛啟動的時候是有一些

作者: quentin83    時間: 2020-8-19 11:40
掃描平率問題吧。
作者: mengzhixinheng    時間: 2020-8-23 21:31
頻率太低,精度不夠,就會出現這樣的情況,硬件PWM位數不夠,就模擬PWM,但是會占用資源。這個沒有更好的方法,要么就更換芯片。
作者: 海興晶銳    時間: 2020-8-23 22:03
最好的辦法串聯電感或并聯電容
作者: AAA_MCU    時間: 2020-8-23 22:51
換stm32 ,使用高級定時器

作者: hzw854025403    時間: 2020-8-27 20:45
mengzhixinheng 發表于 2020-8-23 21:31
頻率太低,精度不夠,就會出現這樣的情況,硬件PWM位數不夠,就模擬PWM,但是會占用資源。這個沒有更好的方 ...

現在用軟件模擬增加了精度
作者: hzw854025403    時間: 2020-8-27 20:46
Y_G_G 發表于 2020-8-19 08:37
1KHZ以上的PWM頻率,LED燈就不會抖動了,不管是大功率的LED手電還是LED指示燈,都不會抖動,我們這的手電筒統一 ...

這個抖動是精度不夠引起的,和芯片也有點關系,現在用軟件的方法增加了精度
作者: hzw854025403    時間: 2020-8-27 20:50
謝謝各位,現在解決了,這是我增加了一位的精度
  1. void PWM_CH5_LED_huxi(unsigned int PWM5_huxi2_c)
  2. {
  3.         if(LED_Low_P_huxi_f == 0)
  4.         {
  5.                 PWMD_HuXi = PWM5_huxi2_c*Light_first_gear<<1;
  6.                 TK_Debug_UartPutChar('B');
  7.         }
  8.         if(LED_PWM5_F == 0)
  9.         {                                               
  10.                 PWM_COUNT++;                                                                //這個是用來增加精度的
  11.                 if(PWM_COUNT >= 2)                                                                //2是擴展了1位的精度,和下面的右移一位對應
  12.         {
  13.             PWM_COUNT = 0;
  14.             PWMD_HuXi   = PWMD_HuXi - PWM5_huxi2_c;
  15.             TK_Debug_UartPutChar('L');
  16.         }
  17.         LED_light_Hz_c = (PWMD_HuXi + PWM_COUNT)>>1;        //必須和擴展位數保持一直                
  18.         
  19.                 if(LED_light_Hz_c <= PWM5_huxi2_c)
  20.                 {       
  21.                         LED_PWM5_F = 1;                                                                //呼吸到最亮調到下面
  22.                         PWMD_HuXi = 0;
  23.                         TK_Debug_UartPutChar('L');
  24.                 }
  25.         }
  26.         else
  27.         {
  28.                 PWM_COUNT++;
  29.                 if(PWM_COUNT >= 2)
  30.         {
  31.             PWM_COUNT = 0;
  32.             PWMD_HuXi   = PWMD_HuXi + PWM5_huxi2_c;
  33.             TK_Debug_UartPutChar('H');
  34.         }
  35.         LED_light_Hz_c = (PWMD_HuXi + PWM_COUNT)>>1;
  36.                 if(LED_light_Hz_c >= LED_light_gear*Light_first_gear)
  37.                 {
  38.                         LED_PWM5_F = 0;
  39.                         Huxi_end_f = 1;
  40.                 }
  41.         }

  42. }
復制代碼

作者: wewillglow    時間: 2020-8-27 22:50
抖動是無法避免的,在程序中增加一個延時多少毫秒的指令就可以了,即
作者: wewillglow    時間: 2020-8-27 22:52
抖動是無法避免的,在i模塊的最后加一個延時多少毫秒/秒/微秒就可以了
作者: TTQ001    時間: 2020-8-29 07:53
感謝樓主,這確實很有幫助。 我將使用這方法來解決我的問題。
作者: univers    時間: 2020-8-29 22:22
頻率快點就不抖了,很簡單。
作者: gbchang    時間: 2020-8-31 14:56
亮度高的時候,人眼的視覺暫留效果強,所以感覺不到閃爍,強光手電來一下,眼前能亮半分鐘:)。
所以無論怎樣,同樣軟硬件的條件下,暗的肯定比亮的閃爍厲害。

不過樓主也可能說的不是閃爍,而是說亮度升降時出現梯度,不平滑,沒實現無級調光,那這是分辨率低造成的。
作者: cy009    時間: 2024-11-21 08:10
占空比保持,增加頻率
作者: univers    時間: 2024-11-28 16:06
看看我寫的吧,在實用中的代碼。http://www.zg4o1577.cn/bbs/dpj-172214-1.html
作者: univers    時間: 2024-11-28 16:06
看看我寫的吧,實用中的代碼。
http://www.zg4o1577.cn/bbs/dpj-172214-1.html




歡迎光臨 (http://www.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: 国产精品美女一区二区 | 亚洲视频国产视频 | 综合久久99| 日本免费一区二区三区 | 亚洲成人国产综合 | 一级毛片免费完整视频 | 免费精品 | 91极品视频 | 国产精品久久久久久久久久久久 | 阿v视频在线观看 | 91视视频在线观看入口直接观看 | 国产日韩欧美中文字幕 | 欧美日韩在线视频观看 | 久热中文字幕 | 日韩成人精品在线观看 | 欧美高清视频在线观看 | 午夜电影福利 | 久久天堂| 最新日韩在线 | 欧美成视频 | 日韩一区二区av | 亚洲狠狠 | 亚洲国产成人精品女人久久久 | 拍真实国产伦偷精品 | 国产一区二区三区免费 | 亚洲欧美视频一区 | 日日噜| 国产精品毛片av | 日韩高清一区 | 日韩成人精品一区二区三区 | 成人精品鲁一区一区二区 | 精产国产伦理一二三区 | 在线播放国产一区二区三区 | 蜜桃综合在线 | 日本一区二区在线视频 | 综合五月| 色综合天天天天做夜夜夜夜做 | 成人在线一区二区三区 | 成年人免费网站 | 国产一区在线视频 | 日本在线视 |