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

標(biāo)題: 關(guān)于單片機ADC采樣值0-255怎么映射到PWM0-100 [打印本頁]

作者: SHANWAZI    時間: 2023-6-4 13:55
標(biāo)題: 關(guān)于單片機ADC采樣值0-255怎么映射到PWM0-100
用單片機定時器0做了個PWM模擬輸出實現(xiàn)了50HZ輸出周期為20Ms,占空比剛剛好對應(yīng)為0-255級此變量"PWM_DUTY"對應(yīng)0-255變化脈寬對應(yīng)0-100變化沒什么問題了.問題1:怎么才能結(jié)合ADC對外部電位器采樣的數(shù)值0-255映射到對應(yīng)的脈寬0-100之間電位器滿程調(diào)節(jié)呢?
問題2:比如需要限制某一個脈寬值比如脈寬1Ms-2.5M變化怎么才能把ADC數(shù)值映射到0-255滿程調(diào)節(jié)呢?
sbit PWM_OUT_GPIO=P2^0;


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

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




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


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

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




作者: Hephaestus    時間: 2023-6-4 15:52
總要知道ADC函數(shù)輸出值的范圍吧,不知道這個誰也不會算。
作者: SHANWAZI    時間: 2023-6-4 16:07
Hephaestus 發(fā)表于 2023-6-4 15:52
總要知道ADC函數(shù)輸出值的范圍吧,不知道這個誰也不會算。

八位ADC數(shù)值0-255
作者: SHANWAZI    時間: 2023-6-4 16:09
SHANWAZI 發(fā)表于 2023-6-4 16:07
八位ADC數(shù)值0-255

ADC_Value=Start_XPT2046_ADC(PIN0_0_XP_ADC_8BIT,8);“PIN0_0_XP_ADC_8BIT”此變量就是設(shè)置ADC位數(shù)的目前是八位
作者: Hephaestus    時間: 2023-6-4 16:13
SHANWAZI 發(fā)表于 2023-6-4 16:07
八位ADC數(shù)值0-255

ADC輸出0~255,PWM_DUTY范圍0~255你算什么啊?算個寂寞?
作者: wulin    時間: 2023-6-4 16:41
PWM_DUTY = ADC_Value*256/100;
作者: SHANWAZI    時間: 2023-6-4 16:55
wulin 發(fā)表于 2023-6-4 16:41
PWM_DUTY = ADC_Value*256/100;

這樣寫用示波器看占空比最大才40左右
作者: SHANWAZI    時間: 2023-6-4 17:02
wulin 發(fā)表于 2023-6-4 16:41
PWM_DUTY = ADC_Value*256/100;

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

作者: Hephaestus    時間: 2023-6-4 17:26
SHANWAZI 發(fā)表于 2023-6-4 16:55
這樣寫用示波器看占空比最大才40左右

這不就對了嗎,你軟件里面最大占空比是255,你以為是100,那么100/255不就是40%嗎???
作者: SHANWAZI    時間: 2023-6-4 17:40
Hephaestus 發(fā)表于 2023-6-4 17:26
這不就對了嗎,你軟件里面最大占空比是255,你以為是100,那么100/255不就是40%嗎???

那怎么換算過來使他剛剛好ADC值0-255變化 使占空比0-100呢?
作者: SHANWAZI    時間: 2023-6-4 17:45
Hephaestus 發(fā)表于 2023-6-4 17:26
這不就對了嗎,你軟件里面最大占空比是255,你以為是100,那么100/255不就是40%嗎???

那比如 我要在某一個占空比之間變化比如默認為1ms-2.5ms 之間變化 怎么才能把這其中的值對應(yīng)到ADC的0-255電位器滿里程調(diào)節(jié)呢 電位器跳到最小就是1毫秒最大就是2.5毫秒?程序該怎么改?
作者: Hephaestus    時間: 2023-6-4 18:19
SHANWAZI 發(fā)表于 2023-6-4 17:40
那怎么換算過來使他剛剛好ADC值0-255變化 使占空比0-100呢?

5樓已經(jīng)回復(fù)你了。
作者: SHANWAZI    時間: 2023-6-4 22:52
Hephaestus 發(fā)表于 2023-6-4 18:19
5樓已經(jīng)回復(fù)你了。

感謝感謝  看來還是我的程序有問題 思路不對
作者: yzwzfyz    時間: 2023-6-5 11:06
最簡單的方案:
將0-255所對應(yīng)的PWM0-100值計算出來,建立一個數(shù)組。即完成對應(yīng)關(guān)系了。
作者: SHANWAZI    時間: 2023-6-5 16:10
yzwzfyz 發(fā)表于 2023-6-5 11:06
最簡單的方案:
將0-255所對應(yīng)的PWM0-100值計算出來,建立一個數(shù)組。即完成對應(yīng)關(guān)系了。

老師能否舉個例指導(dǎo)一下???
作者: sttt300    時間: 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芯片數(shù)據(jù)分頻函數(shù)
  5. {               
  6.         ADC_Value=Start_XPT2046_ADC(PIN0_0_XP_ADC_8BIT,8);//啟動ADC轉(zhuǎn)換芯片函數(shù) 此函數(shù)第一個形參設(shè)置模式和通道 第二個為設(shè)置轉(zhuǎn)換的位數(shù) 范圍8-12
復(fù)制代碼


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

作者: SHANWAZI    時間: 2023-6-5 17:40
sttt300 發(fā)表于 2023-6-5 17:11
不知道為什么,直接弄成代碼改,只顯示一部分,我的建議更改如下:
unsigned char PWM_DUTY=50; 這里的PWM ...

感謝老師辛勤回復(fù)!首先這方法我已經(jīng)試過了!目的是實現(xiàn)占空比0-99變化很方便。但是還是沒達到目的!!!
首先周期是固定的我要讓ADC采樣到的數(shù)值0-255均勻分布出來取對應(yīng)上這占空比!
比如默認脈寬是1毫秒狀態(tài)對應(yīng)電位器為最小值狀態(tài)。如果調(diào)節(jié)電位器脈寬從1毫秒開始變化到2.5毫秒也就是電位器擰到最大就是2.5毫秒。問題是這我始終弄不明白??????
作者: SHANWAZI    時間: 2023-6-5 17:41
sttt300 發(fā)表于 2023-6-5 17:11
不知道為什么,直接弄成代碼改,只顯示一部分,我的建議更改如下:
unsigned char PWM_DUTY=50; 這里的PWM ...


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

unsigned char data PWM_DUTY=50;//調(diào)節(jié)此變量就可以調(diào)節(jié)占空比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;//低電平的半個周期
        }
}
作者: yzwzfyz    時間: 2023-6-6 15:16
1、周期需要固定時,用一個變量PT表達周期,再用一個變量PA表示高或低電平的寬度。
2、要達到u%(1%)的精度,PA:PT必須<u%。


作者: coody_sz    時間: 2023-6-6 18:19
PWM = ADC*100/255
作者: SHANWAZI    時間: 2023-6-6 18:45
yzwzfyz 發(fā)表于 2023-6-6 15:16
1、周期需要固定時,用一個變量PT表達周期,再用一個變量PA表示高或低電平的寬度。
2、要達到u%(1%)的精度 ...

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

感謝老師辛勤回復(fù)




歡迎光臨 (http://www.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: 国产在线一区二区三区 | 国产91网址 | 夜夜操天天艹 | 国产精品久久在线观看 | 欧美一级二级视频 | 欧美日韩视频在线播放 | 激情 一区 | 亚洲黄色网址视频 | 一区二区高清 | 欧美福利影院 | 国产一级视频在线播放 | www.天天操 | 九九热这里只有精品在线观看 | 国产精品久久午夜夜伦鲁鲁 | 国产精品国产三级国产aⅴ浪潮 | 国产精品一区二 | 久久久久久国产 | 本道综合精品 | 日韩欧美在线一区 | 欧美在线a | 日韩国产一区 | 国产aⅴ爽av久久久久久久 | 福利视频网址 | 欧美一卡二卡在线观看 | 欧美xxxx网站| 欧美日韩在线一区 | 日韩中文字幕一区二区 | 国产成人99av超碰超爽 | 国产日韩欧美在线观看 | 黄色一级特级片 | 久久精品成人 | 国产精品视频观看 | 日韩精品一区二区三区中文字幕 | 一级黄色夫妻生活 | 99久久精品免费看国产四区 | 精品一区二区久久 | 久久伊人青青草 | 成人妇女免费播放久久久 | 久久国产精品网站 | 国产一区二区三区免费观看在线 | 亚洲电影成人 |