c - ESC电机不改变速度

标签 c raspberry-pi gpio wiringpi

我将四轴飞行器的电机连接到 Raspberry Pi Zero。但是,当我尝试旋转电机(即设置速度)时,结果发现电机开始快速旋转,它们也可以定期关闭,然后再次开始高速旋转。我怎样才能改变速度?为什么它们有时会关闭?

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <math.h>
#include <wiringPi.h>

#define RIGHT_MOTOR 1
#define LEFT_MOTOR 4

void init_ESC(int num);
void set_speed(int num, int speed);

int main ()
{

  int speed = 3320;

  wiringPiSetup();

  pinMode(RIGHT_MOTOR, PWM_OUTPUT);
  pinMode(LEFT_MOTOR, OUTPUT);

  //pwmSetMode(PWM_MODE_MS);
  //pwmSetClock(50 * pow(10, 6) / 1920 / 1024);

  init_ESC(RIGHT_MOTOR);
  delay(1000);

  while (1)
  {
    set_speed(RIGHT_MOTOR, speed);
    //set_speed(LEFT_MOTOR, speed);
    //printf("speed = %d\n", speed);

  }

  return 0;
}

void init_ESC(int num){
        pwmWrite(num, 0);
        delay(20);
        pwmWrite(num, 1024);
        delay(1);
}

void set_speed(int num, int speed){
    pwmWrite(num, 0);
    delay(20);
    pwmWrite(num, 1024);
    pwmWrite(num, 0);
    delay(20);
    pwmWrite(num, 1024);
    delayMicroseconds(1100);
}

最佳答案

在繁忙的循环中很难实现良好的伺服/电调控制。即使您的程序在其他方面是正确的,操作系统有时也会运行其他进程,并且您的计时会受到影响。

我建议使用servoblaster软件:https://github.com/richardghirst/PiBits/tree/master/ServoBlaster 。它在 pi 中使用中断和 DMA 硬件来保持良好的精度。

关于c - ESC电机不改变速度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56961041/

相关文章:

c - 将时间间隔结构化为可打印格式

c++ - 为树莓派交叉编译google v8库

c - LPC1769 FIOPIN 如何工作?

linux-kernel - 如何在 linux 内核设备树中定义时钟多路复用器

java - C 语言的 TCP 客户端和 Java 语言的服务器

连接来自 char 输入的字符串

printf_s 和 scanf_s 函数的跨平台使用 - C (linux/win32)

raspberry-pi - Raspberry PI 上的 Java 服务包装器

python - 从 Python Flask 中的链接获取信息

java - Beaglebone 黑十字发育