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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 4067|回復: 5
打印 上一主題 下一主題
收起左側

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

[復制鏈接]
跳轉到指定樓層
樓主
還有漢字標注的哪里不對請指正一下,
  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. }
復制代碼

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

使用道具 舉報

沙發
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 (37.34 KB, 下載次數: 31)

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. }
復制代碼
回復

使用道具 舉報

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

使用道具 舉報

6#
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哦,這能帶的動么
仿真波形如下;

屏幕截圖(105).png (653.66 KB, 下載次數: 29)

0.32ms

0.32ms

屏幕截圖(106).png (654.15 KB, 下載次數: 27)

2.5ms

2.5ms
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 欧美一区永久视频免费观看 | 国产精品1区2区3区 一区中文字幕 | 精品国产一区二区国模嫣然 | 亚洲码欧美码一区二区三区 | 成人精品 | 99精品网| 欧美精品99 | 成人在线播放 | 精品久久ai电影 | 欧美日韩在线观看一区 | 成人不卡视频 | 亚洲欧美综合网 | 亚洲激情在线观看 | 日韩一区二 | 中文字幕亚洲精品在线观看 | 伊人网站视频 | 女朋友的闺蜜3韩国三级 | 天天干精品 | 综合婷婷 | 久久精品二区 | 99精品在线 | 成人激情免费视频 | 日本久久网 | 日韩精品一区二区三区中文在线 | 精品国产乱码久久久久久丨区2区 | 日本精品一区 | 欧美精品一区二区在线观看 | 国产精品成人一区二区三区 | 日本激情视频网 | av片免费 | 99精品视频在线观看免费播放 | 国产精品视频999 | 国产美女特级嫩嫩嫩bbb片 | av入口 | 中文字幕日韩av | 国产精品久久午夜夜伦鲁鲁 | 精久久久| 天天拍天天色 | 精品毛片| 伊人狠狠干 | 在线视频国产一区 |