210 lines
7.8 KiB
Plaintext
210 lines
7.8 KiB
Plaintext
This file is auto-generated from the content of common/usbservo.h
|
|
You'll have more fun if you read the HTML-content in htmldoc or the PDF.
|
|
|
|
|
|
* [1]Main Page
|
|
* [2]Files
|
|
|
|
USB-Servo
|
|
|
|
Introduction
|
|
|
|
The USB-Servo is a device to control a servo via USB. A servo is a
|
|
motorized device that is commonly used in remote controlled cars and
|
|
planes. I built this device to activate a toy puppet. The puppet has a
|
|
button on its bottom, if you press the button the puppet collapses.
|
|
When the computer is able to press the button, I can use the puppet to
|
|
signal information like someone's online-state in the Jabber-network:
|
|
when my friend goes online, the puppet stands up, when he logs off it
|
|
collapses.
|
|
|
|
Servos are connected with three-wire-cables. A red and a black one for
|
|
the power, and a yellow one for the signal. Power has to be between
|
|
4.8 and 6 volts, so the 5 volts from the USB-port is in the range. The
|
|
signal doesn't take much current, so you can connect it directly to
|
|
the controller. The angle of the servo is controlled with pulse width
|
|
modulation (PWM). It gets a signal of about 50Hz (one pulse every
|
|
20ms), the length of the pulse tells the servo the angle to adjust.
|
|
|
|
A problem that I didn't really solve is the power consumption: I don't
|
|
know the current that runs through the motor. It seems to be low
|
|
enough not to cause any problems, but I don't know how high it will
|
|
get when the servo is blocked. YOU HAVE BEEN WARNED, I don't feel
|
|
responsible for USB-ports catching fire... :-/
|
|
|
|
There are three parts included in the distribution: The firmware for
|
|
an ATmega8 microcontroller, a commandline-client that can be run under
|
|
Linux, and the circuits needed to build the device.
|
|
|
|
This project is based on my USB-LED-Fader, which itself is based on
|
|
the PowerSwitch example application by Objective Development. Like
|
|
those, it uses Objective Development's firmware-only USB driver for
|
|
Atmel's AVR microcontrollers.
|
|
|
|
Objective Development's USB driver is a firmware-only implementation
|
|
of the USB 1.1 standard (low speed device) on cheap single chip
|
|
microcomputers of Atmel's AVR series, such as the ATtiny2313 or even
|
|
some of the small 8 pin devices. It implements the standard to the
|
|
point where useful applications can be implemented. See the file
|
|
"firmware/usbdrv/usbdrv.h" for features and limitations.
|
|
|
|
Building and installing
|
|
|
|
Both, the firmware and Unix command line tool are built with "make".
|
|
You may need to customize both makefiles.
|
|
|
|
Firmware
|
|
|
|
The firmware for this project requires avr-gcc and avr-libc (a
|
|
C-library for the AVR controller). Please read the instructions at
|
|
[3]http://www.nongnu.org/avr-libc/user-manual/install_tools.html for
|
|
how to install the GNU toolchain (avr-gcc, assembler, linker etc.) and
|
|
avr-libc.
|
|
|
|
Once you have the GNU toolchain for AVR microcontrollers installed,
|
|
you can run "make" in the subdirectory "firmware". You may have to
|
|
edit the Makefile to use your preferred downloader with "make
|
|
program". The current version is built for avrdude with a parallel
|
|
connection to an stk200-compatible programmer.
|
|
|
|
If working with a brand-new controller, you may have to set the
|
|
fuse-bits to use the external crystal:
|
|
|
|
avrdude -p atmega8 -P /dev/parport0 -c stk200 -U hfuse:w:0xC9:m -U lfuse:w:0x9
|
|
F:m
|
|
|
|
Afterwards, you can compile and flash to the device:
|
|
|
|
make program
|
|
|
|
Commandline client and demo application
|
|
|
|
The command line tool and the demo application require libusb. Please
|
|
take the packages from your system's distribution or download libusb
|
|
from [4]http://libusb.sourceforge.net/ and install it before you
|
|
compile. Change to directory "commandline", check the Makefile and
|
|
edit the settings if required and type
|
|
|
|
make
|
|
|
|
This will build the unix executable "usb-servo" which can be used to
|
|
control the device, and the demo application "xservopointer".
|
|
|
|
Usage
|
|
|
|
Connect the device to the USB-port. If it isn't already, the servo
|
|
will move to the 0-position.
|
|
|
|
Commandline client
|
|
|
|
Use the commandline-client as follows:
|
|
|
|
usb-servo status
|
|
usb-servo set <angle>
|
|
usb-servo test
|
|
|
|
Parameters
|
|
|
|
* angle: The angle you want to set the servo to. 0 is full left, 255
|
|
is full right.
|
|
|
|
Examples
|
|
|
|
Get the status of the servo:
|
|
|
|
usb-servo status
|
|
|
|
This will tell you the angle the servo is currently put to.
|
|
|
|
Current servo angle: 42
|
|
|
|
Set a new angle:
|
|
|
|
usb-servo set 23
|
|
|
|
This sets the servo to the angle 23. 0 is full left, 255 is full
|
|
right, so with 23 the servo will be almost on the left side.
|
|
|
|
Test the device:
|
|
|
|
usb-led-fader test
|
|
|
|
This function sends many random numbers to the device. The device
|
|
returns the packages, and the client looks for differences in the sent
|
|
and the received numbers.
|
|
|
|
Demo application xservopointer
|
|
|
|
This is a pure fun thing, nobody will need it. That was reason enough
|
|
to write it...
|
|
|
|
To use it, you have to position the servo centered above the screen
|
|
(with a little tweaking in the source, you can change that position).
|
|
Then, you attach a pointer to the servo and start the application.
|
|
|
|
You'll never ever have to search for your mouse cursor in the future.
|
|
The pointer on the servo will always show you where to search.
|
|
|
|
Drawbacks
|
|
|
|
The main drawback is the mentioned power consumption. I tested it with
|
|
my servo on my notebook, it is not sure to work on other systems. THIS
|
|
MAY BE HARMFUL FOR YOUR COMPUTER, and nobody but yourself will be
|
|
responsible for any damages.
|
|
|
|
Another, not so big problem is the crude implementation of the PWM. I
|
|
got the timing-values by trial and error, and they might not fit on
|
|
your servo. On the other hand, I think that servos should be
|
|
interchangeable. But this is my first and only one, so I can't say
|
|
anything about that.
|
|
|
|
Files in the distribution
|
|
|
|
* Readme.txt: Documentation, created from the htmldoc-directory.
|
|
* firmware: Source code of the controller firmware.
|
|
* firmware/usbdrv: USB driver -- See Readme.txt in this directory
|
|
for info
|
|
* commandline: Source code of the host software (needs libusb).
|
|
Here, you find the pure commandline client (usb-servo) and the fun
|
|
demo application (xservopointer).
|
|
* common: Files needed by the firmware and the commandline-client.
|
|
* circuit: Circuit diagrams in PDF and EAGLE 4 format. A free
|
|
version of EAGLE is available for Linux, Mac OS X and Windows from
|
|
[5]http://www.cadsoft.de/.
|
|
* License.txt: Public license for all contents of this project,
|
|
except for the USB driver. Look in firmware/usbdrv/License.txt for
|
|
further info.
|
|
* Changelog.txt: Logfile documenting changes in soft-, firm- and
|
|
hardware.
|
|
|
|
Thanks!
|
|
|
|
I'd like to thank Objective Development for the possibility to use
|
|
their driver for my project. In fact, this project wouldn't exist
|
|
without the driver.
|
|
|
|
About the license
|
|
|
|
My work - all contents except for the USB driver - are licensed under
|
|
the GNU General Public License (GPL). A copy of the GPL is included in
|
|
License.txt. The driver itself is licensed under a special license by
|
|
Objective Development. See firmware/usbdrv/License.txt for further
|
|
info.
|
|
|
|
(c) 2006 by Ronald Schaten - [6]http://www.schatenseite.de
|
|
_________________________________________________________________
|
|
|
|
|
|
Generated on Sat Oct 28 14:16:28 2006 for USB-Servo by [7]doxygen
|
|
1.4.7
|
|
|
|
References
|
|
|
|
1. file://localhost/home/rschaten/microcontroller/usb-servo/htmldoc/main.html
|
|
2. file://localhost/home/rschaten/microcontroller/usb-servo/htmldoc/files.html
|
|
3. http://www.nongnu.org/avr-libc/user-manual/install_tools.html
|
|
4. http://libusb.sourceforge.net/
|
|
5. http://www.cadsoft.de/.
|
|
6. http://www.schatenseite.de/
|
|
7. http://www.doxygen.org/index.html
|