Sunday, September 20, 2020

Controlling Lego Power Functions Servo Motor

 Idea

Control Lego Power Functions Servo motor to it's full functionality. The Servo motor moves to 90 degree on both sides assuming, center is at 0 and it can also do 7 steps to each side.

Implementation

Lego Power Functions uses PWM frequency of 1150 Hz. Using this frequency, Power Functions servo can do 7 steps using duty cycles, 26.6, 38.9, 51.2, 63.0, 75.0, 87.2 and 100. I confirmed my tinkering with oscilloscope, that it is giving correct frequency and duty cycles. 

Below are my findings so far

Microbit

Kitronik All in one Robotic board

This is the first board, I have tinkered with. It can be powered with Lego 8881 battery box. By setting PCA frequency to 1150, it can step through with correct duty cycles. 

The microbit Makecode is here. To set desired PWM frequency for this board, see line 132 in robotics.ts.  I also added a functionality to brake motor, see Line 303 robotics.ts

Dfrobot Driver expansion board

My tinkering failed with this board. After updating the code, stepping always tunring motor to all the way 90 degree. Oscilloscope reading was not showing correct frequency and duty cycle which I was using.  

I don't have electrical, electronics knowledge but my guess is it is due to the design of the board. This board has led which light up when motors are running. These leds are lighting up when move motors by hand.

Elecfreaks Motor:bit

This board just have a TB6612 based motor driver chip. PWM has to be set by Microbit using analogSetPeriod. See forward function here at Line 24

Testing of this is below in Slow motion
or




Raspberry Pi

Adafruit DC motor Bonnet

The board is available here, Adafruit has detailed steps on how to use this board with Raspberry Pi, so just used those steps

By default, PWM frequency is set to 1600. After installing the library, I changed the code to accept pca_frequency when creating the class object. To do so
  1. Edit /usr/local/lib/python3.7/dist-packages/adafruit_motorkit.py or locate adafruit_motorkit.py based on installation
  2. Add default parameter, pca_frequence=1600 like this


Wiring

Lego PF servo uses all four wires. Side wires are to power and middle two wires are used to set duty cycle and direction. 

I use Lego PF Extension wires to connect Servo with custom Motor Driver boards. This way the motor can be reuse in Pure Lego based projects

This picture should give an idea about wiring and connections 

2 comments:

  1. Vint Ceramic Art | TITNIA & TECHNOLOGY
    Explore an all new “Vint Ceramic Art” ventureberg.com/ project 바카라 사이트 on TITNIA & TECHNOLOGY. Our team titanium metal trim of sculptors and artists 출장안마 have created new and https://deccasino.com/review/merit-casino/

    ReplyDelete
  2. The world of sports activities bets and video games has turn out to be extra accessible, and you'll catch enjoyable 1xbet on-line. You may even experience the same thrill as you'd when playing in} offline. Green Gaming is our award-winning methodology for making certain protected and sound playing in}. With help of|assistance from|the assist of} our ingenious Green Gaming software, gamers can examine their betting behavior and determine whether it is sound or unsafe.

    ReplyDelete