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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

寫了一個pwm控制sg90舵機轉角的程序但是不知道哪里不對,請大佬們幫忙看下

[復制鏈接]
ID:290531 發表于 2018-4-19 21:13 | 顯示全部樓層 |閱讀模式
還有漢字標注的哪里不對請指正一下,
  1. #include<reg52.h>

  2. sbit PWM=P1^0;
  3. int FX;  //方向

  4. int a,b,c; //a周期,b占空比,c低電平

  5. void dingshiqi()
  6. {
  7.         TH1=0xFF;
  8.         TL1=0xFF;
  9.         TMOD|=0x01;
  10.         EA=1;
  11.         TR1=1;
  12.         ET1=1;
  13. }

  14. void main()
  15. {
  16.         dingshiqi();
  17.         while(1)
  18.         {
  19.                 if(a==2000)
  20.                 {
  21.                         a=0;
  22.                 }
  23.                 if (b==1000)
  24.                 {
  25.                         FX=0;       
  26.                 }
  27.                 if(b==0)
  28.                 {
  29.                         FX=1;
  30.                 }
  31.                 if(c>1000)
  32.                 {
  33.                         c=0;
  34.                         if(FX==1)
  35.                         {
  36.                                 b++;
  37.                         }
  38.                         if(FX==0)
  39.                         {
  40.                                 b--;
  41.                         }
  42.                 }
  43.                 if(b<c)
  44.                 {
  45.                         PWM=1;
  46.                 }
  47.                 else
  48.                 {
  49.                         PWM=0;
  50.                 }
  51.         }
  52. }

  53. void zhongduan() interrupt 3
  54. {
  55.         TH1=0xFF;
  56.         TL1=0xFF;
  57.         a++;
  58.         b++;       
  59. }
復制代碼

回復

使用道具 舉報

ID:164602 發表于 2018-4-20 08:29 | 顯示全部樓層
好像你的程序是一個固定的PWM啊,這不對嘛。
舵機是針對不同的PWM轉到對應的角度,你的程序只有一個PWM,則轉動到相應位置,就不會動了。
我有個試驗程序,你可以看看,參考一下。#include<reg51.h>

#define GPIO_KEY P1//矩陣鍵盤

sbit DJ=P2^7;//SG90舵機的數據口

unsigned char KeyValue,GT,DT;
bit KeyState;

void KeyDown();
void DJZD (void);
void Delay10ms(unsigned int c)
{
    unsigned char a,b;
    for(c;c>0;c--)
    {
                for(b=44;b>0;b--)
                {
                        for (a=112;a>0;a--)
                        {
                        }
                }
        }
}


void main(void)//主函數
{
        KeyState=0;
        GT=30;DT=350;DJ=1;
        Delay10ms(1);
        DJ=0;
        while (1)//主循環
        {
                KeyDown();
                 if(KeyState==1)
                {
                        switch (KeyValue)
                        {
                                case (0):GT=10;DT=390;DJZD ();break;//轉動到0度
                                case (2):GT=20;DT=380;DJZD ();break;//轉動到45度
                                case (4):GT=30;DT=370;DJZD ();break;//轉動到90度
                                case (6):GT=40;DT=360;DJZD ();break;//轉動到135度
                                case (8):GT=50;DT=350;DJZD ();break;//轉動到180度
                        }                       
                        KeyState=0;
                }
        }
}
void DJZD (void)
{
        unsigned char i;
        for (i=0;i<75;i++)
        {
                DJ=1;
                Delay50us(GT);
                DJ=0;                  
                Delay50us(DT);
        }
        DJ=0;
}

void KeyDown(void)
{
        unsigned char a=0;
        GPIO_KEY=0x0f;
        if(GPIO_KEY!=0x0f)
        {
                Delay10ms(1);
                if(GPIO_KEY!=0x0f)
                {
                        KeyState=1;
                        switch(GPIO_KEY)
                        {
                                case(0X07):        KeyValue=0;break;
                                case(0X0b):        KeyValue=1;break;
                                case(0X0d): KeyValue=2;break;
                                case(0X0e):        KeyValue=3;break;
                        }
                        GPIO_KEY=0Xf0;
                        switch(GPIO_KEY)
                        {
                                case(0X70):        KeyValue=KeyValue;break;
                                case(0Xb0):        KeyValue=KeyValue+4;break;
                                case(0Xd0): KeyValue=KeyValue+8;break;
                                case(0Xe0):        KeyValue=KeyValue+12;break;
                        }
                        for (a=0;(a<25)&&(GPIO_KEY!=0xf0);a++)
                        {
                                Delay10ms(1);
                        }
                }
        }
}


1.jpg
回復

使用道具 舉報

ID:290531 發表于 2018-4-20 15:01 | 顯示全部樓層
HC6800-ES-V2.0 發表于 2018-4-20 08:29
好像你的程序是一個固定的PWM啊,這不對嘛。
舵機是針對不同的PWM轉到對應的角度,你的程序只有一個PWM, ...

我拷了你的程序試了一下好像不行
回復

使用道具 舉報

ID:290531 發表于 2018-4-20 19:22 | 顯示全部樓層
  1. #include<reg52.h>

  2. sbit PWM=P2^0;

  3. int count;

  4. void zhongduankaiguan()
  5. {
  6.         EA=1;
  7.         TR1=1;
  8.         ET1=1;
  9.         TMOD|=0x01;
  10.         TH1=0xfe;
  11.         TL1=0x0c;          
  12. }
  13. void main()
  14. {
  15.    zhongduankaiguan();
  16.    if(count<=5)
  17.         {
  18.                 PWM=1;
  19.         }
  20.         else
  21.         {
  22.                 PWM=0;
  23.         }
  24. }

  25. void dingshiqi() interrupt 3
  26. {
  27.         TH1=0xfe;
  28.         TL1=0x0c;
  29.         TR1=0;
  30.         count++;
  31.         count=count%40;
  32. }
復制代碼
回復

使用道具 舉報

ID:553625 發表于 2019-7-21 15:35 | 顯示全部樓層
你的PWM信號是直接定義出來的嗎?
單片機產生PWM信號應該是需要定時器中斷產生脈沖信號的
你這個思路好像不太對
回復

使用道具 舉報

ID:505677 發表于 2019-7-21 21:50 | 顯示全部樓層
本寶寶也是小白一枚,拿你的程序調試了
好像不能運行  
所以按你的意思給你改了一下

  1. #include<reg52.h>

  2. sbit PWM=P2^0;

  3. int count;


  4. void zhongduankaiguan()
  5. {
  6.         EA=1;
  7.         TR1=1;
  8.         ET1=1;
  9.         TMOD|=0x01;
  10.         TH1=0xfe;
  11.         TL1=0x0c;         
  12. }
  13. void main()
  14. {
  15.    zhongduankaiguan();
  16.    count=1;
  17.    while(1)
  18.    {
  19.                            if(count<=5)
  20.                 {
  21.                         PWM=1;
  22.                 }
  23.                 else
  24.                 {
  25.                         PWM=0;
  26.                 }
  27.         }
  28. }

  29. void dingshiqi() interrupt 3
  30. {
  31.         TR1=0;
  32.                 TH1=0xfe;
  33.         TL1=0x0c;
  34.         TR1=1;
  35.         count++;
  36.                 if(count==40)count=1;
  37. }
復制代碼

這只能產生0.32ms   2.5ms固定的pwm波形
我最近也打算買個舵機玩,我好像記得淘寶買的舵機脈沖時基是20ms  這只有2.5ms哦,這能帶的動么
仿真波形如下;

0.32ms

0.32ms

2.5ms

2.5ms
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 久久精品国产免费 | 精国产品一区二区三区 | 三级黄色片在线观看 | 国产一级片免费在线观看 | 黄视频在线网站 | 国产羞羞视频在线观看 | 日韩一区二区黄色片 | 天天弄天天操 | 成人亚洲在线 | 男人天堂网址 | 精品国产乱码久久久久久蜜臀 | 日韩成人在线视频 | 日韩一区二区三区在线 | 午夜久久久久久久久久一区二区 | 国产成人精品久久二区二区91 | 亚洲有码转帖 | 99在线免费观看 | 一区二区三区亚洲 | 九九久久国产精品 | 午夜爱爱毛片xxxx视频免费看 | 日韩久久综合 | 欧美日一区二区 | 国产免费自拍 | 国产免费视频在线 | 黄色大片在线播放 | 韩国理论电影在线 | 91视在线国内在线播放酒店 | 999热精品 | 牛牛热在线视频 | 91xx在线观看 | 亚洲精品视频一区二区三区 | 日韩在线观看中文字幕 | 国产一区二区三区视频 | 91免费版在线观看 | 亚洲国产一区视频 | 久久久蜜桃 | 免费中文字幕日韩欧美 | 国产成人福利 | 欧美成人精品二区三区99精品 | 91久久久久久久久久久久久 | 精品在线观看一区二区 |