64 lines
1.7 KiB
ReStructuredText
64 lines
1.7 KiB
ReStructuredText
.. _servo-motor-sample:
|
|
|
|
Servomotor
|
|
##########
|
|
|
|
Overview
|
|
********
|
|
|
|
This is a sample app which drives a servomotor using PWM.
|
|
|
|
The sample rotates a servomotor back and forth in the 180 degree range with a
|
|
PWM control signal.
|
|
|
|
This app is targeted for servomotor ROB-09065. The corresponding PWM pulse
|
|
widths for a 0 to 180 degree range are 700 to 2300 microseconds, respectively.
|
|
Different servomotors may require different PWM pulse widths, and you may need
|
|
to modify the source code if you are using a different servomotor.
|
|
|
|
Requirements
|
|
************
|
|
|
|
The sample requires a servomotor whose signal pin is connected to a pin driven
|
|
by PWM. The servo must be defined in Devicetree using the ``pwm-servo``
|
|
compatible (part of the sample) and setting its node label to ``servo``. You
|
|
will need to do something like this:
|
|
|
|
.. code-block:: devicetree
|
|
|
|
/ {
|
|
servo: servo {
|
|
compatible = "pwm-servo";
|
|
pwms = <&pwm0 1 PWM_MSEC(20) PWM_POLARITY_NORMAL>;
|
|
min-pulse = <PWM_USEC(700)>;
|
|
max-pulse = <PWM_USEC(2500)>;
|
|
};
|
|
};
|
|
|
|
Note that a commonly used period value is 20 ms. See
|
|
:zephyr_file:`samples/basic/servo_motor/boards/bbc_microbit.overlay` for an
|
|
example.
|
|
|
|
Wiring
|
|
******
|
|
|
|
BBC micro:bit
|
|
=============
|
|
|
|
You will need to connect the motor's red wire to external 5V, the black wire to
|
|
ground and the white wire to the SCL pin, i.e. pin P19 on the edge connector.
|
|
|
|
Building and Running
|
|
********************
|
|
|
|
The sample has a devicetree overlay for the :ref:`bbc_microbit`.
|
|
|
|
This sample can be built for multiple boards, in this example we will build it
|
|
for the bbc_microbit board:
|
|
|
|
.. zephyr-app-commands::
|
|
:zephyr-app: samples/basic/servo_motor
|
|
:board: bbc_microbit
|
|
:goals: build flash
|
|
:compact:
|