路与本 2023-01-16 17:45 采纳率: 25%
浏览 132

stc32g12k128单片机控制舵机360旋转问题

stc32g12k128单片机控制舵机360旋转问题
舵机没反应
使用定时器0
晶振是22.1184mhz

程序为:

#include "stc32g.h"
#include "intrins.h"
#define duoji  P21
typedef unsigned int u16;    
typedef unsigned char u8;
u8 count=0;
u8 PWM_count=0;
void Delay1000ms()        //@22.1184MHz
{
    unsigned long i;

    _nop_();
    _nop_();
    i = 5529598UL;
    while (i) i--;
}


void time0_Init (void)
{
    
      AUXR |= 0x80;
      TMOD &=0xF0;
      TL0 = 0xCD;                
      TH0 = 0xD4;    
      TF0=0;
      ET0=1;
      EA=1;
      TR0=1;
}
void main()
 {
      EAXFR=1;
      CKCON=0x00;
      WTST=0x00;
     time0_Init ();
     while(1)
     { 
            PWM_count=5;      
            Delay1000ms();
              }
 }
        
void TM0_Rountime(void) interrupt 1
{
  TL0=0xCD;                
    TH0=0xD4;
    count++;
    count%=40;
    if(count<PWM_count)
        duoji=1;
    else
        duoji=0;
}


```

  • 写回答

2条回答 默认 最新

  • m0_54204465 2023-01-16 19:22
    关注

    这个程序看起来是在使用STC32G12K128单片机来控制舵机360度旋转,但是程序中并没有看到具体控制舵机旋转的部分。程序中使用了定时器0来控制PWM脉宽,但是没有具体说明如何连接舵机和单片机,以及如何控制舵机转动。建议进一步研究舵机的控制原理和连接方式,并将相关代码加入程序。我可以给出一个简单的示例代码来控制舵机,但是需要您提供舵机的具体连接方式和参数。

    以下是一个简单的示例代码,使用STC32G12K128单片机来控制舵机360度旋转:

    #include "stc32g.h"
    
    #define SERVO_PIN P21  // 舵机连接的引脚
    #define SERVO_MIN 1000  // 舵机最小脉宽
    #define SERVO_MAX 2000  // 舵机最大脉宽
    
    void delay_us(unsigned int us)
    {
        while(us--)
        {
            _nop_();
            _nop_();
        }
    }
    
    void servo_init()
    {
        P21_pushpull_out;  // 设置舵机引脚为输出
    }
    
    void servo_control(unsigned int angle)
    {
        int pulse_width = SERVO_MIN + (SERVO_MAX - SERVO_MIN) * angle / 180;
        SERVO_PIN = 1;
        delay_us(pulse_width);
        SERVO_PIN = 0;
        delay_us(20000 - pulse_width);
    }
    
    void main()
    {
        servo_init();
        while(1)
        {
            for(int i = 0; i <= 180; i++)
            {
                servo_control(i);
                delay_ms(15);
            }
            for(int i = 180; i >= 0; i--)
            {
                servo_control(i);
                delay_ms(15);
            }
        }
    }
    
    

    这段代码通过调整脉宽来控制舵机旋转到指定角度,最小脉宽和最大脉宽根据实际舵机需要调整。

    需要注意的是,这段代码仅是一个示例,需要根据实际情况进行调整和完善。

    评论 编辑记录

报告相同问题?

问题事件

  • 创建了问题 1月16日

悬赏问题

  • ¥100 用两台电脑局域联网进行MT5的EA参数优化,但是连接不上
  • ¥15 FastAPI报错: AsyncSession不是有效Pydantic类型
  • ¥30 python写递归代码
  • ¥50 这Mac系统提示虚拟内存不足,怎么解决
  • ¥15 Rs232电路无法收发数据,求帮助
  • ¥15 百度cookie扫码登录器
  • ¥15 微机原理汇编语言debug调试实验
  • ¥23 matlab可以把相图转换为庞加莱映射吗
  • ¥15 Arduino电机和openmv连接异常
  • ¥15 Arcgis河网分级报错