C++ Servo Drive Code 伺服驱动代码-立哥开发

    技术2022-07-11  80

    // Copy Right by Jacky Zong . Vision 3.20 . This optional setting causes Encoder to //use more optimized code, // but the downside is a conflict if any other part of your sketch // or any other library you’re using requires attachInterrupt(). // It must be defined before Encoder.h is included. //#define ENCODER_OPTIMIZE_INTERRUPTS

    #include <Encoder.h> #include “pins_arduino.h”

    // Change these two numbers to the pins connected to your encoder // or shift register circuit which emulates a quadrature encoder // case 1: both pins are interrupts // case 2: only first pin used as interrupt Encoder myEnc(5, 6);

    // Connect a DC voltmeter to this pin. const int outputPin = 12;

    /* This simple circuit, using a Dual Flip-Flop chip, can emulate quadrature encoder signals. The clock can come from a fancy function generator or a cheap 555 timer chip. The clock frequency can be measured with another board running FreqCount

    +5V | Quadrature Encoder Signal Emulator

    Clock | Input o------------------------------ ---------------------------o Output1 | |14 | | | | | | _______________ | | CD4013 | | | | CD4013 | | 5 | | 1 | | 9 | | 13 ---------| D Q |-----|--------| D Q |------o Output2 | | | | | | | | | 3 | | | 11 | | | ----|> Clk | ---------|> Clk | | | | | | | 6 | | 8 | | | ----| S | ----| S | | | | | | | | | | 4 | _ | 2 | 10 | _ | 12 | *----| R Q |— *----| R Q |---- | | | | | | | | | | |_______________| | |_______________| | | | | | | | | | 7 | | | | | | | -------------------------------------------------------------- | | | | | | ----- ----- ----- — — — - - - */

    void setup() { pinMode(outputPin, OUTPUT); }

    #if defined(AVR) #define REGTYPE unsigned char #elif defined(PIC32MX) #define REGTYPE unsigned long #endif

    void loop() { volatile int count = 0; volatile REGTYPE *reg = portOutputRegister(digitalPinToPort(outputPin)); REGTYPE mask = digitalPinToBitMask(outputPin);

    while (1) { myEnc.read(); // Read the encoder while interrupts are enabled. noInterrupts(); *reg |= mask; // Pulse the pin high, while interrupts are disabled. count = count + 1; *reg &= ~mask; interrupts(); } }

    Processed: 0.012, SQL: 9