• Don't use TX and it's alive

    Johan Westlund08/22/2018 at 18:14 0 comments

    So GPIO1 aka TX is used for some special boot mode so it can't be pulldowned: https://bbs.espressif.com/viewtopic.php?t=796

    So I moved direction to gpio16 instead. Now I'm also getting a direction indicator on the NodeMCUs inbuilt LED that is connected to gpio16.

    I also had problem with gpio15 not being pulldowned enough when connected to DRV8825. So for now I removed it and shorted sleep and reset together to be controlled by the same pin.

    Found out that fault (that I pulled up) is connected to the sleep pin on the DRV8825. So have to remove it and see if it will work after.

    Test code:

    // Test sketch for drv8825 on NodeMCU v1.0
    
    // pinout definition for generic ESP-12E
    #define stepPin 3
    #define directionPin 16
    #define sleepPin 15
    #define resetPin 13
    #define m2_Pin 12
    #define m1_Pin 14
    #define m0_Pin 4
    #define enablePin 5
    #define faultPin 2
    #define endswitchPin 0
    
    #define MOTOR_STEPS 200
    
    void setStepSize() { //Going to add more later
      // Full step
      digitalWrite(m0_Pin, LOW);
      digitalWrite(m1_Pin, LOW);
      digitalWrite(m2_Pin, LOW);
    }
    
    void setup() {
    
      // REMEMBER THAT YOU CAN'T USE SERIAL FROM THIS POINT
      // DRV8825 has inbuilt pulldown resistors for all input pins. No need to set it.
      pinMode(stepPin, OUTPUT);
      pinMode(directionPin, OUTPUT);
      pinMode(sleepPin, OUTPUT);
      pinMode(resetPin, OUTPUT);
      pinMode(m2_Pin, OUTPUT);
      pinMode(m1_Pin, OUTPUT);
      pinMode(m0_Pin, OUTPUT);  
      pinMode(enablePin, OUTPUT);
    
      setStepSize();
      digitalWrite(resetPin, HIGH);
      digitalWrite(sleepPin, HIGH);
      digitalWrite(enablePin, LOW);
      
    }
    
    void loop() {
      // put your main code here, to run repeatedly:
      digitalWrite(directionPin, HIGH);
      for (int i = 0; i < MOTOR_STEPS; i++) {
        digitalWrite(stepPin, LOW);
        delay(10); //10 ms
        digitalWrite(stepPin, HIGH);
        delay(10); //10 ms
      }
      digitalWrite(directionPin, LOW);
      for (int i = 0; i < MOTOR_STEPS; i++) {
        digitalWrite(stepPin, LOW);
        delay(10); //10 ms
        digitalWrite(stepPin, HIGH);
        delay(10); //10 ms
      }
      delay(1000);
    }

     After flashing the code the motor is spinning 360 degrees and back again, wait 1 s and repeat.

    PROOF: https://www.facebook.com/beaverelectronics/videos/vb.161215301217651/242073909790273/?type=2&theater

    Going to add WiFi control, add better motor control, fix the small issues and test sleep in next step.

  • How does the pins work

    Johan Westlund08/17/2018 at 11:33 0 comments

    This list is made with only mentioning how it handles digital logic and interrupts

    DRV8825: https://www.pololu.com/product/2133

    PinFunctionStatus
    EN
    Logic high to disable device output and indexer
    Input, Internal pulldown
    M0Set step mode
    Input, Internal pulldown
    M1Set step modeInput, Internal pulldown
    M2Set step modeInput, Internal pulldown
    RSTLogic low to reset indexer and disable output
    Input, Internal pulldown
    SLPLogic low to enter low-power sleep
    Input, Internal pulldown
    STPRising edge move stepper one step
    Input, Internal pulldown
    DIRLogic level sets direction
    Input, Internal pulldown
    FLTLogic low when in fault condition
    Output, open-drain, pullup to sleep pin

    Limit switch:

    PinFunctionStatus
    1Endstop, need interrupt pin preferably
    Output, Normaly Open

    This means that we need 8 outputs that doesn't have fixed pullups and can handle boot with pulldowns on the pins. And 2 interrupt inputs with at least one that has a pullup.

    As seen in the list below this means that D3 and D4 need to be inputs and one of the serial lines as output.

    NodeMCU v1.0 Amica ESP-12E:

    PinFunctionStatusCan be used as
    D0
    GPIO16
    Not usable with deepsleep, Hi-Z DIO, no interrupt
    Output
    D1GPIO5Hi-Z DIO
    Output, Input, Interrupt
    D2GPIO4Hi-Z DIO
    Output, Input, Interrupt
    D3GPIO0No Hi-Z DIO (prefere pullup)
    Input, Interrupt
    D4GPIO2Don’t connect to ground at boot time (prefere pullup)
    Input, Interrupt
    D5GPIO14Hi-Z DIO
    Output, Input, Interrupt
    D6GPIO12Hi-Z DIO
    Output, Input, Interrupt
    D7GPIO13
    Hi-Z DIO
    Output, Input, Interrupt
    D8GPIO15
    Can't have pullup (only pulldown DIO)
    Output
    RXGPIO3
    Not usable during Serial transmission
    Output, Input, Interrupt (if serial not used)
    TXGPIO1
    Not usable during Serial transmission, Don’t connect to ground at boot time
    Output, Input, Interrupt (if serial not used)
    A0ADC0
    Analog
    Not usable as DIO
    SD3GPIO10
    Might be connected to flashmemory!!!
    Not usable
    SD2GPIO9
    Might be connected to flashmemory!!!
    Not usable
    SD1MOSI

    Unknown
    CMDCS

    Unknown
    SDOMISO

    Unknown
    CLKSCLK

    Unknown
    ENEnable
    DigitalWrite/Read not possible
    Not usable
    RSTReset
    DigitalWrite/Read not possible
    Not usable