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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

使用單片機PWM調制呼吸燈的時候,低亮度時會發生抖動,怎么處理

  [復制鏈接]
跳轉到指定樓層
樓主
ID:586048 發表于 2020-8-18 15:04 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
如題,請問一下各位大佬,在呼吸燈慢慢亮起來的時候,在低亮度區,會發生抖動,有沒有辦法不降低頻率且不增加硬件的情況下解決這個問題?

有人說可以提高PWM的精度,但是我看不懂,有沒有大佬能解答一下的?
或者說大佬們有更好的解決方法?
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂2 踩
回復

使用道具 舉報

沙發
ID:586048 發表于 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位怎么會提高他的精度呢
回復

使用道具 舉報

板凳
ID:809311 發表于 2020-8-18 15:58 | 只看該作者
都是這樣子的。pwm波總會有抖動的。程序也不好解決。
回復

使用道具 舉報

地板
ID:213173 發表于 2020-8-18 16:51 | 只看該作者
hzw854025403 發表于 2020-8-18 15:15
看不懂是什么意思,硬件是8位的,他擴展到12位,但是硬件沒有的分了,多出來的4位 硬件8位不支持,那他多 ...

PWM周期大于20ms就會閃爍。
回復

使用道具 舉報

5#
ID:586048 發表于 2020-8-18 18:48 | 只看該作者
wulin 發表于 2020-8-18 16:51
PWM周期大于20ms就會閃爍。

不是常亮的時候閃爍,是呼吸的時候會有一點抖動,從暗到亮的時候抖動,我現在的頻率是22K,1000的精度,如果是4千的精度就不會出現抖動,但是頻率就下降了。
回復

使用道具 舉報

6#
ID:401564 發表于 2020-8-19 08:37 | 只看該作者
1KHZ以上的PWM頻率,LED燈就不會抖動了,不管是大功率的LED手電還是LED指示燈,都不會抖動,我們這的手電筒統一用的就是1024HZ的PWM頻率
你的抖動,要么是程序的問題,要么是電路的問題
C語言我不會,你的程序是不是調節的時候只調節PWMD_L,而PWMD_H沒有調節?
正常的是:高電平時間加1,低電平時間就減1,保持PWM頻率不變
回復

使用道具 舉報

7#
ID:235954 發表于 2020-8-19 11:10 | 只看該作者
抖動,剛啟動的時候是有一些
回復

使用道具 舉報

8#
ID:800832 發表于 2020-8-19 11:40 | 只看該作者
掃描平率問題吧。
回復

使用道具 舉報

9#
ID:89515 發表于 2020-8-23 21:31 | 只看該作者
頻率太低,精度不夠,就會出現這樣的情況,硬件PWM位數不夠,就模擬PWM,但是會占用資源。這個沒有更好的方法,要么就更換芯片。
回復

使用道具 舉報

10#
ID:748646 發表于 2020-8-23 22:03 來自手機 | 只看該作者
最好的辦法串聯電感或并聯電容
回復

使用道具 舉報

11#
ID:739727 發表于 2020-8-23 22:51 | 只看該作者
換stm32 ,使用高級定時器
回復

使用道具 舉報

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

現在用軟件模擬增加了精度
回復

使用道具 舉報

13#
ID:586048 發表于 2020-8-27 20:46 | 只看該作者
Y_G_G 發表于 2020-8-19 08:37
1KHZ以上的PWM頻率,LED燈就不會抖動了,不管是大功率的LED手電還是LED指示燈,都不會抖動,我們這的手電筒統一 ...

這個抖動是精度不夠引起的,和芯片也有點關系,現在用軟件的方法增加了精度
回復

使用道具 舉報

14#
ID:586048 發表于 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. }
復制代碼
回復

使用道具 舉報

15#
ID:815969 發表于 2020-8-27 22:50 | 只看該作者
抖動是無法避免的,在程序中增加一個延時多少毫秒的指令就可以了,即
回復

使用道具 舉報

16#
ID:815969 發表于 2020-8-27 22:52 | 只看該作者
抖動是無法避免的,在i模塊的最后加一個延時多少毫秒/秒/微秒就可以了
回復

使用道具 舉報

17#
ID:420836 發表于 2020-8-29 07:53 | 只看該作者
感謝樓主,這確實很有幫助。 我將使用這方法來解決我的問題。
回復

使用道具 舉報

18#
ID:382454 發表于 2020-8-29 22:22 來自手機 | 只看該作者
頻率快點就不抖了,很簡單。
回復

使用道具 舉報

19#
ID:808485 發表于 2020-8-31 14:56 | 只看該作者
亮度高的時候,人眼的視覺暫留效果強,所以感覺不到閃爍,強光手電來一下,眼前能亮半分鐘:)。
所以無論怎樣,同樣軟硬件的條件下,暗的肯定比亮的閃爍厲害。

不過樓主也可能說的不是閃爍,而是說亮度升降時出現梯度,不平滑,沒實現無級調光,那這是分辨率低造成的。
回復

使用道具 舉報

20#
ID:619259 發表于 2024-11-21 08:10 | 只看該作者
占空比保持,增加頻率
回復

使用道具 舉報

21#
ID:382454 發表于 2024-11-28 16:06 | 只看該作者
看看我寫的吧,在實用中的代碼。http://www.zg4o1577.cn/bbs/dpj-172214-1.html
回復

使用道具 舉報

22#
ID:382454 發表于 2024-11-28 16:06 | 只看該作者
看看我寫的吧,實用中的代碼。
http://www.zg4o1577.cn/bbs/dpj-172214-1.html
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 亚洲一区二区三区免费视频 | 亚洲高清一区二区三区 | 91色站| 久久精品中文 | 99亚洲综合 | 涩在线| 国产色婷婷久久99精品91 | 欧美精品成人一区二区三区四区 | 成人av网站在线观看 | 九九热免费在线观看 | 97日韩精品 | 国产精品久久久久久久久久久久久 | 99精品视频免费观看 | 国产精品九九 | 美女视频黄色的 | 久久久激情 | 日韩成人久久 | 久久久久国 | 日韩精品一区二区三区视频播放 | 久久久亚洲一区 | 亚洲精品一区二区三区四区高清 | 久久99深爱久久99精品 | 国产日产精品一区二区三区四区 | 日日噜噜噜夜夜爽爽狠狠视频, | 精品欧美乱码久久久久久 | 最新超碰| 久久久久国产精品一区二区 | 久在线| 人人射人人草 | 五月天天色 | 亚洲欧美日韩电影 | 精品久久一 | 韩国av电影网| 久久久久久成人 | 性色av香蕉一区二区 | 91在线精品视频 | 国产日韩欧美在线 | 黄色在线免费观看 | 午夜影院在线观看视频 | 黑人巨大精品欧美一区二区免费 | 国产精品久久久久久婷婷天堂 |