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

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 3261|回復(fù): 8
打印 上一主題 下一主題
收起左側(cè)

萌新求教一個(gè)關(guān)于DA轉(zhuǎn)換(PWM)的問(wèn)題,求指點(diǎn)

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
本帖最后由 明日香 于 2020-7-29 10:05 編輯

實(shí)驗(yàn)現(xiàn)象是DA模塊上的小燈成呼吸效果,由亮變暗
這是完整的程序:

請(qǐng)問(wèn),這個(gè)程序里value是代表一個(gè)周期里的高電平,那count的作用是什么呢?為什么要判斷count大于100?count每次加1的時(shí)間應(yīng)該是1us吧,count加到100再清零是只為了產(chǎn)生100us的間隔嗎?
timer1代表一個(gè)周期1ms,它肯定大于等于value吧,為什么要判斷它小于value呢?
還有這個(gè)程序,value==1000則DIR=0,value==0則DIR=1,那value處于1000和0之間怎么辦?
以及,這個(gè)PWM的周期timer1為什么是1000us,這個(gè)周期是自己設(shè)定的嗎?


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

使用道具 舉報(bào)

沙發(fā)
ID:808700 發(fā)表于 2020-7-29 11:07 | 只看該作者
value表示高電平的時(shí)間,count的作用就是100us使其變化一次,判斷value和timer的大小關(guān)系,只能為了決定PWM端口的電平,,可以改周期
回復(fù)

使用道具 舉報(bào)

板凳
ID:804115 發(fā)表于 2020-7-29 13:59 | 只看該作者
上面這段代碼的功能雖然實(shí)現(xiàn)了,但是命名真的很不規(guī)范,不易讀懂,好在是我讀懂了。

經(jīng)過(guò)分析:各個(gè)參數(shù)的含義如下:
1. timer1:PWM的周期,為1ms;
2. DIR :呼吸燈的變化方向,如果從硬件上來(lái)說(shuō),燈是用高電平1點(diǎn)亮的話,那么DIR=1代表呼吸燈越來(lái)越亮,DIR=0則是變暗;反之亦然;
3. value:用于控制單個(gè)周期內(nèi)高電平的持續(xù)時(shí)間。它只能設(shè)置成小于或者等于周期時(shí)間;它為0,則本周期高電平持續(xù)時(shí)間為0,占空比為0%,它為1000時(shí),則高電平持續(xù)在整個(gè)周期內(nèi),則占空比為100%。中間的值則介于這兩者之間,占空比計(jì)算:(value/10)%,具體為什么除以10,請(qǐng)看下面的count的介紹。
4. count :用于指定相鄰兩個(gè)周期的波形中高電平的增加量,或者叫相鄰兩周期波形占空比的增加量;判斷count大于100指的是相鄰兩個(gè)周期的波形的增加量為:周期/100 = timer1/100 = 10us. 所以相鄰兩個(gè)周期的占空比變化為10us/1000us = 1%;

通過(guò)上面的分析,我們知道輸出各個(gè)周期的波形的占空比依次為:
0%,1%,2%,3%,...  ,99%,100%,99%,98%,...,2%,1%
按照上面的變化規(guī)律反復(fù)進(jìn)行,就形成呼吸燈了。
其中0%到100%是逐漸變亮,而100%到0%則是逐漸變暗。
由于一個(gè)波形的周期是1ms,那么一個(gè)呼吸周期就是200ms。
回復(fù)

使用道具 舉報(bào)

地板
ID:796670 發(fā)表于 2020-7-30 09:46 | 只看該作者
1692483014 發(fā)表于 2020-7-29 13:59
上面這段代碼的功能雖然實(shí)現(xiàn)了,但是命名真的很不規(guī)范,不易讀懂,好在是我讀懂了。

經(jīng)過(guò)分析:各個(gè)參數(shù) ...

請(qǐng)問(wèn)為什么一個(gè)周期是1ms?這個(gè)是自己設(shè)定的嗎?還是固定的?
回復(fù)

使用道具 舉報(bào)

5#
ID:576088 發(fā)表于 2020-7-30 10:42 | 只看該作者
這個(gè)程序三個(gè)關(guān)鍵變量:1.timer1是PWM周期,周期為1000*1us,因?yàn)槎〞r(shí)中斷實(shí)現(xiàn)的是1us定時(shí),每次timer1++,然后主程序82行判斷是否到達(dá)1000,如果到達(dá)則完成定時(shí)1000*1us,此時(shí)要重新清零timer1,同時(shí)在這里86行控制引腳PWM=P2.1輸出正負(fù)電平。2:value確實(shí)是控制占空比的變量,正如你所說(shuō)的現(xiàn)象是呼吸燈,那么這個(gè)占空比就不是定值了,需要程序設(shè)計(jì)占空比的更改,既要有占空比大小的更改,即value值要變化,同時(shí)也有方向的控制,即一會(huì)兒占空比變大,一會(huì)兒變小,用DIR正負(fù)來(lái)控制增減。3:count是控制value變化速度的,假如我們把value的增減周期和PWM的周期都設(shè)置成1000*1us,這個(gè)時(shí)候呼吸燈就會(huì)變化得相對(duì)很慢,試想一下每次PWM周期到了,value占空比僅僅增加或者減小1就很不明顯了。所以count就是把value更改的時(shí)間縮短了,換言之,這樣每次PWM周期到了,value占空比更改的數(shù)值+/- 10,這樣呼吸燈的效果也好看
回復(fù)

使用道具 舉報(bào)

6#
ID:576088 發(fā)表于 2020-7-30 10:45 | 只看該作者
明日香 發(fā)表于 2020-7-30 09:46
請(qǐng)問(wèn)為什么一個(gè)周期是1ms?這個(gè)是自己設(shè)定的嗎?還是固定的?

這個(gè)周期是靈活規(guī)定的,200ms我覺(jué)得也可以,更改timer1判斷的值就好(82行)
回復(fù)

使用道具 舉報(bào)

7#
ID:804115 發(fā)表于 2020-8-1 02:26 | 只看該作者
明日香 發(fā)表于 2020-7-30 09:46
請(qǐng)問(wèn)為什么一個(gè)周期是1ms?這個(gè)是自己設(shè)定的嗎?還是固定的?

是你的代碼里if(timer1>1000)那句話看出來(lái),timer1是每1000us從0重新開(kāi)始,說(shuō)明就是1ms,這個(gè)1ms的周期你可以自己改,但是要注意其他值也要跟著相應(yīng)調(diào)整才行,看懂我上面寫的原理,你就知道咋調(diào)試了,你試著自己改一下參數(shù),讓燈呼吸的過(guò)程更加緩慢,來(lái)驗(yàn)證你的推斷。
回復(fù)

使用道具 舉報(bào)

8#
ID:213173 發(fā)表于 2020-8-1 09:28 | 只看該作者
樓主這個(gè)程序有嚴(yán)重錯(cuò)誤,定時(shí)中斷周期1us,執(zhí)行中斷函數(shù)4條指令需要8us時(shí)間,就算能勉強(qiáng)運(yùn)行,根本就不是預(yù)期結(jié)果。代碼改這樣既容易理解也能實(shí)戰(zhàn)。
  1. #include "reg52.h"

  2. typedef unsigned int u16;
  3. typedef unsigned char u8;

  4. sbit PWM=P2^1;

  5. bit  DIR;
  6. u16  count;
  7. u8   value=0;


  8. void Timer1Init()
  9. {
  10.         TMOD|=0X20;//自動(dòng)重裝
  11.         TH1 = 0x38;//200us
  12.         TL1 = 0x38;
  13.         ET1 = 1;
  14.         EA  = 1;
  15.         TR1 = 1;
  16. }

  17. void main()
  18. {        
  19.         Timer1Init();
  20.         while(1);               
  21. }

  22. void Timer1() interrupt 3
  23. {
  24.         count++;
  25.         if(count==100)
  26.         {
  27.                 count=0;
  28.                 if(DIR)
  29.                 {
  30.                         value++;
  31.                         if(value==100)
  32.                         {
  33.                                 DIR=0;
  34.                         }
  35.                 }
  36.                 else
  37.                 {
  38.                         value--;
  39.                         if(value==0)
  40.                         {
  41.                                 DIR=1;
  42.                         }
  43.                 }
  44.         }
  45.         if(count>=value)
  46.         {
  47.                 PWM=1;
  48.         }
  49.         else
  50.         {
  51.                 PWM=0;
  52.         }
  53. }
復(fù)制代碼
回復(fù)

使用道具 舉報(bào)

9#
ID:810243 發(fā)表于 2020-8-1 11:07 | 只看該作者
單片機(jī)中確實(shí)要注意指令執(zhí)行周期,保證需求要求的時(shí)序
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 最新国产精品 | 国产在线激情视频 | 香蕉视频久久久 | 一区二区手机在线 | 国产免费观看一区 | 欧洲妇女成人淫片aaa视频 | 免费特级黄毛片 | 久久久www成人免费精品 | 在线免费观看黄色网址 | 91精品国产91久久久久久吃药 | 日本不卡高清视频 | 欧美一区二区三区视频在线播放 | 97高清国语自产拍 | 天天躁天天操 | 欧美一区二区免费视频 | 欧美精品一区二区在线观看 | 亚洲一区视频在线 | 人操人人干人 | 91一区二区 | 精品欧美一区二区在线观看 | 免费看欧美一级片 | 日韩欧美在线观看视频网站 | 东方伊人免费在线观看 | 99精品国产一区二区青青牛奶 | 国产一级片免费视频 | av日日操| 久久精品亚洲国产奇米99 | a久久 | 国产乱码精品一区二三赶尸艳谈 | 国产在线网址 | 久久久久久国产精品免费 | 久久亚洲国产精品日日av夜夜 | 久久久久91| 欧美美女一区二区 | 欧美一级久久 | 2022国产精品 | 国产精品国产三级国产aⅴ原创 | 日本网站在线看 | 热re99久久精品国产99热 | 日韩黄色免费 | 欧美一级网站 |