0

我将四轴飞行器的电机连接到 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);
}
4

2 回答 2

0

非常感谢,我使用了 pigpio.h 库。编译命令:gcc pulse.c -pthread -lpigpio -lrt 需要使用 gpioServofunction (pin, pulse); 值应该在 1000 到 2000 的范围内,因为在使用这些电机时需要不同时间间隔的信号,速度取决于它。从 1000 到 2000 是微秒。这是一个小图: 但是使用 PWM SIGNAL,我不太明白如何更改 PWM 频率,还是默认为 50?

计划 ESC 到 Arduino 或 Raspbarry Pi

很重要!!!警告! 我强烈建议将微秒值(速度)设置为不超过 1000-1200,因为速度非常高,可能会伤到自己。当心。

仍然有不同的库和其他语言,它们在这个站点上呈现:

其他库和局域网

#include <stdio.h>
#include <pigpio.h>

int main(){

    if(gpioInitialise() < 0){
        fprintf(stderr, "pigpio initialisation faled\n");
        return 1;
    }

    gpioSetMode(23, PI_OUTPUT);

    //Unlock ESC
    gpioServo(23, 1500);
    time_sleep(1);

    int speed = 1200;        

    while(1){
        //for(int speed = 1100; speed < 2000; speed+=100){
            //for(int i = 0; i < 20; i++){
                gpioServo(23, speed);
                //time_sleep(0.2);
            //}
            //printf("us = %d\n", speed);
        //}
    }

    return 0;
}
于 2019-07-10T10:41:04.840 回答
0

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

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

于 2019-07-10T04:36:01.223 回答