欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 6829|回復: 5
收起左側(cè)

請問單片機的任意IO口都能輸出PWM波嗎?可以不用定時器,用延時程序改變占空比嗎?

[復制鏈接]
ID:796670 發(fā)表于 2020-12-29 16:30 | 顯示全部樓層 |閱讀模式
小弟對PWM波原理不太明白,PWM波原理是高低電平的占比不同吧?
那么下圖這一排IO口都能輸出PWM波嗎?用一根信號線控制電機轉(zhuǎn)速,就是讓這個IO口處于0和1的時間不同,就能改變占空比嗎?
可以不用定時器,用延時程序來確定占空比嗎?
11.jpg


比如說現(xiàn)在電機信號線連接的IO口地址為P2^1,那么要怎么寫程序輸出PWM波呢?

這樣寫對嗎?
sbit IN1=P2^0;               
void delay(uint z)        //延時               
{
   uint x,y;               
   for(x=z;x>0;x--)
      for(y=110;y>0;y--);
}

void motor(int n1)                 /電機功率
{                                    
                   
          for(i=0;i<6000;i++)
    {
            IN=1;
            delay(2);     //占空比20%
           IN=0;
         delay(8);
                }


}
回復

使用道具 舉報

ID:332444 發(fā)表于 2020-12-29 16:48 | 顯示全部樓層
當然可以,只不過有點幼稚而已,受影響極大.
回復

使用道具 舉報

ID:332444 發(fā)表于 2020-12-29 16:49 | 顯示全部樓層
沒什么實際用途,若是固定占空比或許可行,若結(jié)合其他功能,肯定存在問題.
回復

使用道具 舉報

ID:824490 發(fā)表于 2020-12-29 17:05 | 顯示全部樓層
可以的,如果MCU不忙的話,不然會出錯的:
// 理論上本代碼適用所有的51系列(或兼容型號)單片機,可用于制作小玩具之類。
//不使用計數(shù)器,不使用中斷。。
//測試條件: KEILC51,STC12C5A60S,5V,   藍色LED
#include <reg51.H>
#include <string.h>
#include <INTRINS.H>
#define uchar unsigned char
//以下所有與脈沖相關的數(shù)值改變,均會影響變化的快慢,可適當調(diào)整
#define max_pluse 100  //最大脈寬,這里設為100,適當增減在LED表現(xiàn)為亮度變化的圓滑度
sbit led=P2^1;  //LED的控制腳
void  pwm_out(char  pwm_h);
/*
void delay(char n)//簡單延時,會影響LED變化的時間,看情況插入
{
    while (n--)
    {
        _nop_();
        _nop_();
    }
}
*/////
void  main()
  {
   char  pwm;
    while(1)
  {
   for(pwm=0;pwm<max_pluse;pwm++)   //從0%到100%脈寬變化,在LED上表現(xiàn)為從暗到亮
      {pwm_out(pwm);}         //
   for(pwm=max_pluse;pwm>0;pwm--)   //從100%到0%脈寬變化,在LED上表現(xiàn)為從亮到暗
      {pwm_out(pwm);}         //
   }
}
void  pwm_out(char pwm_h)     //產(chǎn)生連續(xù)固定的脈寬波
{
    char  j;
    char  k;
    for (j=0;j<100;j++)       //連續(xù)脈寬波個數(shù),這里設為100個,
{
for (k=0;k<max_pluse;k++)     //產(chǎn)生單個脈寬波
{
//////////////////////////////
         if (k<pwm_h)
{led=0;}
else
{led=1;}
/////////////////////////////
          //led=k/pwm_h;     //上面注釋中的代碼可用此行替代,但可能會增加代碼空間
         //delay(2);            // 加入延時是為了拓寬單個脈沖寬度
       }
     }
}
回復

使用道具 舉報

ID:420836 發(fā)表于 2020-12-29 23:26 | 顯示全部樓層
不同的單片機具有不同的IO功能。
回復

使用道具 舉報

ID:330938 發(fā)表于 2020-12-30 10:45 | 顯示全部樓層
1.你對占空比的理解是對的,但還有一點你漏了,就是頻率,或者說一個高低電平的時長也是PWM波的關鍵參數(shù).
2.你的程序?qū)懙男Ч?單片機只控制一個I/O口的高低電平變換,這樣是可以產(chǎn)生PWM波的,但是占空比不穩(wěn)定,原因在于你這個延時函數(shù)本身延時就是不精準的,可以放到中斷里做高低電平的轉(zhuǎn)換,這樣PWM波的占空比和頻率可以穩(wěn)定一些.當然以上這些是建立在單片機只控制一個IO口也只做高低電平轉(zhuǎn)換的情況下分析的
如果加入其他功能,你這樣的程序根本產(chǎn)生不了PWM波,
3.你想問的是不是有些教材上標出了PWM引腳,原因是有些單片機是有硬件PWM,這樣可以產(chǎn)生穩(wěn)定且不受干擾的PWM波.
4.比如說你現(xiàn)在要產(chǎn)生占空比20%的頻率固定的PWM波,你這個程序,最后跑出來的占空比可能在20%~50%波動.然后你加一些其他功能(比如按鍵,LED燈之類的),占空比就飄了,變成10%~90%,
如果改成中斷,也就是你說的定時器,固定時間進來改變一下IO的電平,因為時間一樣所以可以產(chǎn)生50%的占空比,實際跑出來可能就是48%~52%,同理加上其他一些功能,占空比可能就變成45%~55%,對一些要求不高的設備是可以用的
要是換到硬件PWM那你產(chǎn)生的占空比是固定的,不受你添加的功能影響,除非單片機程序跑飛了
回復

使用道具 舉報

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

本版積分規(guī)則

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

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

快速回復 返回頂部 返回列表