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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 6367|回復: 5
收起左側

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

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


比如說現在電機信號線連接的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 發表于 2020-12-29 16:48 | 顯示全部樓層
當然可以,只不過有點幼稚而已,受影響極大.
回復

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 黄色一级片免费 | 国产香蕉视频在线观看 | 久久久久久久久久国产精品 | 在线看片a | www.色com | 久草免费福利 | www.一区 | 欧美精品在线免费观看 | 午夜久久久久久 | 黄色小视频免费观看 | 精品久久久久久一区二区里番 | 18国产免费视频动漫 | 一区二区三区不卡视频 | 婷婷综合视频 | 日韩免费高清视频 | 黄色一级片黄色一级片 | 久久久久女人精品毛片九一 | 国产伦精品一区二区免费 | 99热久| 九九热在线精品视频 | 成人免费福利 | 免费黄色大片 | 久久手机免费视频 | 成人网在线 | 国产不卡在线视频 | 激情小说五月天 | 亚洲国产二区 | 国产在线免费 | 韩国av在线 | 日本在线不卡视频 | 黄色一级在线观看 | 玖草在线 | 老司机精品福利视频 | 97在线免费观看视频 | 国产乱国产乱300精品 | 午夜在线观看免费视频 | 在线视频黄| 日本天堂网 | 国产精品乱 | 亚洲国产第一页 | 欧美一级日韩一级 |