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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

關于單片機ADC采樣值0-255怎么映射到PWM0-100

[復制鏈接]
跳轉到指定樓層
樓主
ID:232366 發表于 2023-6-4 13:55 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
用單片機定時器0做了個PWM模擬輸出實現了50HZ輸出周期為20Ms,占空比剛剛好對應為0-255級此變量"PWM_DUTY"對應0-255變化脈寬對應0-100變化沒什么問題了.問題1:怎么才能結合ADC對外部電位器采樣的數值0-255映射到對應的脈寬0-100之間電位器滿程調節呢?
問題2:比如需要限制某一個脈寬值比如脈寬1Ms-2.5M變化怎么才能把ADC數值映射到0-255滿程調節呢?
sbit PWM_OUT_GPIO=P2^0;


unsigned char PWM_DUTY=128;//此時脈寬剛剛好百分之50
uint8 ADC_Value=0;

void XPT2046_Allot()//XPT2046-ADC芯片數據分頻函數
{               
        ADC_Value=Start_XPT2046_ADC(PIN0_0_XP_ADC_8BIT,8);//啟動ADC轉換芯片函數 此函數第一個形參設置模式和通道 第二個為設置轉換的位數 范圍8-12
}




void Timer0Init()        //100微秒@12MHz"八位自動"
{
        TMOD &= 0xF0;        //設置定時器模式
        TMOD |= 0x02;        //設置定時器模式
        TL0 = 0xb2;                //設置定時初始值
        TH0 = 0xb2;                //設置定時重載值
        TF0 = 0;                //清除TF0標志
        TR0 = 1;                //定時器0不啟動
        ET0 = 1;                //允許定時器0申請中斷
        EA  = 1;                //開啟所有中斷
}


void main()
{
        while(1)
        {
                XPT2046_Allot();//XPT2046-ADC芯片數據分頻函數
        }
}

void Timer0Interrupt() interrupt 1
{   
        if(PWM_Cnt<PWM_DUTY)
        {
                PWM_OUT_GPIO=1;
        }
        else
        {
                PWM_OUT_GPIO=0;
        }
        PWM_Cnt++;
}



分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:883242 發表于 2023-6-4 15:52 | 只看該作者
總要知道ADC函數輸出值的范圍吧,不知道這個誰也不會算。
回復

使用道具 舉報

板凳
ID:232366 發表于 2023-6-4 16:07 | 只看該作者
Hephaestus 發表于 2023-6-4 15:52
總要知道ADC函數輸出值的范圍吧,不知道這個誰也不會算。

八位ADC數值0-255
回復

使用道具 舉報

地板
ID:232366 發表于 2023-6-4 16:09 | 只看該作者

ADC_Value=Start_XPT2046_ADC(PIN0_0_XP_ADC_8BIT,8);“PIN0_0_XP_ADC_8BIT”此變量就是設置ADC位數的目前是八位
回復

使用道具 舉報

5#
ID:883242 發表于 2023-6-4 16:13 | 只看該作者

ADC輸出0~255,PWM_DUTY范圍0~255你算什么啊?算個寂寞?
回復

使用道具 舉報

6#
ID:213173 發表于 2023-6-4 16:41 | 只看該作者
PWM_DUTY = ADC_Value*256/100;
回復

使用道具 舉報

7#
ID:232366 發表于 2023-6-4 16:55 來自手機 | 只看該作者
wulin 發表于 2023-6-4 16:41
PWM_DUTY = ADC_Value*256/100;

這樣寫用示波器看占空比最大才40左右
回復

使用道具 舉報

8#
ID:232366 發表于 2023-6-4 17:02 來自手機 | 只看該作者
wulin 發表于 2023-6-4 16:41
PWM_DUTY = ADC_Value*256/100;

假如ADC輸出值為255計算得到的是655.36這?
回復

使用道具 舉報

9#
ID:883242 發表于 2023-6-4 17:26 | 只看該作者
SHANWAZI 發表于 2023-6-4 16:55
這樣寫用示波器看占空比最大才40左右

這不就對了嗎,你軟件里面最大占空比是255,你以為是100,那么100/255不就是40%嗎???
回復

使用道具 舉報

10#
ID:232366 發表于 2023-6-4 17:40 來自手機 | 只看該作者
Hephaestus 發表于 2023-6-4 17:26
這不就對了嗎,你軟件里面最大占空比是255,你以為是100,那么100/255不就是40%嗎???

那怎么換算過來使他剛剛好ADC值0-255變化 使占空比0-100呢?
回復

使用道具 舉報

11#
ID:232366 發表于 2023-6-4 17:45 來自手機 | 只看該作者
Hephaestus 發表于 2023-6-4 17:26
這不就對了嗎,你軟件里面最大占空比是255,你以為是100,那么100/255不就是40%嗎???

那比如 我要在某一個占空比之間變化比如默認為1ms-2.5ms 之間變化 怎么才能把這其中的值對應到ADC的0-255電位器滿里程調節呢 電位器跳到最小就是1毫秒最大就是2.5毫秒?程序該怎么改?
回復

使用道具 舉報

12#
ID:883242 發表于 2023-6-4 18:19 | 只看該作者
SHANWAZI 發表于 2023-6-4 17:40
那怎么換算過來使他剛剛好ADC值0-255變化 使占空比0-100呢?

5樓已經回復你了。
回復

使用道具 舉報

13#
ID:232366 發表于 2023-6-4 22:52 來自手機 | 只看該作者
Hephaestus 發表于 2023-6-4 18:19
5樓已經回復你了。

感謝感謝  看來還是我的程序有問題 思路不對
回復

使用道具 舉報

14#
ID:123289 發表于 2023-6-5 11:06 | 只看該作者
最簡單的方案:
將0-255所對應的PWM0-100值計算出來,建立一個數組。即完成對應關系了。
回復

使用道具 舉報

15#
ID:232366 發表于 2023-6-5 16:10 | 只看該作者
yzwzfyz 發表于 2023-6-5 11:06
最簡單的方案:
將0-255所對應的PWM0-100值計算出來,建立一個數組。即完成對應關系了。

老師能否舉個例指導一下???
回復

使用道具 舉報

16#
ID:647261 發表于 2023-6-5 16:22 | 只看該作者
  1. sbit PWM_OUT_GPIO=P2^0;


  2. unsigned char PWM_DUTY=50;//此時脈寬剛剛好百分之50
  3. uint8 ADC_Value=0;

  4. void XPT2046_Allot()//XPT2046-ADC芯片數據分頻函數
  5. {               
  6.         ADC_Value=Start_XPT2046_ADC(PIN0_0_XP_ADC_8BIT,8);//啟動ADC轉換芯片函數 此函數第一個形參設置模式和通道 第二個為設置轉換的位數 范圍8-12
復制代碼

回復

使用道具 舉報

17#
ID:647261 發表于 2023-6-5 17:11 | 只看該作者
不知道為什么,直接弄成代碼改,只顯示一部分,我的建議更改如下:
unsigned char PWM_DUTY=50; 這里的PWM_DUTY應該是0~100,不要做成0~255
PWM_DUTY = ADC_Value * 100 /255,這里出來的就是百分比了,比如ADC值127,算出來就是49,也就是49%
PWM_Cnt++;后面再加一句 if(PWM_Cnt ==100)PWM_Cnt=0;
就是設置100個數,對應100%,和DUTY對比
回復

使用道具 舉報

18#
ID:232366 發表于 2023-6-5 17:40 | 只看該作者
sttt300 發表于 2023-6-5 17:11
不知道為什么,直接弄成代碼改,只顯示一部分,我的建議更改如下:
unsigned char PWM_DUTY=50; 這里的PWM ...

感謝老師辛勤回復!首先這方法我已經試過了!目的是實現占空比0-99變化很方便。但是還是沒達到目的!!!
首先周期是固定的我要讓ADC采樣到的數值0-255均勻分布出來取對應上這占空比!
比如默認脈寬是1毫秒狀態對應電位器為最小值狀態。如果調節電位器脈寬從1毫秒開始變化到2.5毫秒也就是電位器擰到最大就是2.5毫秒。問題是這我始終弄不明白??????
回復

使用道具 舉報

19#
ID:232366 發表于 2023-6-5 17:41 | 只看該作者
sttt300 發表于 2023-6-5 17:11
不知道為什么,直接弄成代碼改,只顯示一部分,我的建議更改如下:
unsigned char PWM_DUTY=50; 這里的PWM ...


目前程序已修改了剛剛好占空比是0-99的。

unsigned char data PWM_DUTY=50;//調節此變量就可以調節占空比0-99變化

void Timer0Interrupt() interrupt 1
{   
        PWM_Cnt++;
        if(PWM_Cnt>=100)//總周期為10ms
        {
                PWM_Cnt=0;
        }

        if(PWM_Cnt<PWM_DUTY)//高電平的半個周期
        {
                PWM_OUT_GPIO=1;
        }
        else
        {
                PWM_OUT_GPIO=0;//低電平的半個周期
        }
}
回復

使用道具 舉報

20#
ID:123289 發表于 2023-6-6 15:16 | 只看該作者
1、周期需要固定時,用一個變量PT表達周期,再用一個變量PA表示高或低電平的寬度。
2、要達到u%(1%)的精度,PA:PT必須<u%。

回復

使用道具 舉報

21#
ID:1034262 發表于 2023-6-6 18:19 | 只看該作者
PWM = ADC*100/255
回復

使用道具 舉報

22#
ID:232366 發表于 2023-6-6 18:45 來自手機 | 只看該作者
yzwzfyz 發表于 2023-6-6 15:16
1、周期需要固定時,用一個變量PT表達周期,再用一個變量PA表示高或低電平的寬度。
2、要達到u%(1%)的精度 ...

這就有點深奧咯!
回復

使用道具 舉報

23#
ID:123289 發表于 2023-6-7 10:33 | 只看該作者
例:PT=100ms,PA=5ms,用P01做PWM輸出。輸出脈沖寬度=PA,周期=PT
用定時器做個定時為1ms的中斷。中斷服務程序這樣寫:
1、如果PT=PA=0,就復位PT=100ms,PA=5ms,跳至第4步;否則執行下一步。(計時PWM周期到了,復位進入下個周期)
2、PA<>0,執行PA-1;反之PA=0,放弁不做。(計時PWM脈沖輸出寬度,計滿之后不再計了)
3、PT<>0,執行PT-1;反之PT=0,放弁不做。(計時PWM周期,計滿之后不再計了)
4、P01 = PA。(這里需要修改,自己去想)。
5、中斷返回退出 。
這里的1ms就是u,1ms/PT=1ms/100ms=1%,就是PWM能達到的精度。
回復

使用道具 舉報

24#
ID:232366 發表于 2023-6-7 16:42 | 只看該作者
yzwzfyz 發表于 2023-6-7 10:33
例:PT=100ms,PA=5ms,用P01做PWM輸出。輸出脈沖寬度=PA,周期=PT
用定時器做個定時為1ms的中斷。中斷服 ...

感謝老師辛勤回復
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 久久久久国产精品午夜一区 | 亚洲国产成人久久久 | 午夜网| 最新高清无码专区 | 国产精品视频中文字幕 | 国产精品 亚洲一区 | 午夜一区二区三区 | 国产成人精品一区二区三 | 久久www免费人成看片高清 | 亚洲三区在线 | 你懂的免费在线 | 99视频免费 | 国产一区视频在线 | 91久久久久 | gav成人免费播放视频 | 欧美高清视频 | 一级a性色生活片久久毛片 午夜精品在线观看 | 国产一区二区三区在线视频 | 超碰美女在线 | 天堂一区二区三区四区 | 91精品国产欧美一区二区成人 | 精品无码久久久久久国产 | 欧美色综合天天久久综合精品 | 久久久成人动漫 | 国产美女精品视频免费观看 | 国产精品久久久久一区二区三区 | 在线观看中文字幕 | 精品96久久久久久中文字幕无 | 综合网视频 | 99re视频精品 | 国产日韩久久久久69影院 | 男女在线网站 | 久久一区二区视频 | 91精品久久久久久久久中文字幕 | 毛片免费观看视频 | 午夜看片网站 | 欧美一页 | 在线亚洲欧美 | 亚洲iv一区二区三区 | 看羞羞视频 | 中文字幕日韩专区 |