https://github.com/neoxic/atmega-rc-dual-motor-driver
RC Dual Motor Driver firmware for ATmega MCUs
https://github.com/neoxic/atmega-rc-dual-motor-driver
atmega atmega32u4 avr ibus motor-controller motor-driver pwm-controller pwm-driver radio-control rc
Last synced: 3 months ago
JSON representation
RC Dual Motor Driver firmware for ATmega MCUs
- Host: GitHub
- URL: https://github.com/neoxic/atmega-rc-dual-motor-driver
- Owner: neoxic
- License: gpl-3.0
- Created: 2021-06-01T07:43:19.000Z (almost 4 years ago)
- Default Branch: master
- Last Pushed: 2023-08-06T04:52:08.000Z (almost 2 years ago)
- Last Synced: 2025-01-15T19:55:21.514Z (4 months ago)
- Topics: atmega, atmega32u4, avr, ibus, motor-controller, motor-driver, pwm-controller, pwm-driver, radio-control, rc
- Language: C
- Homepage:
- Size: 20.5 KB
- Stars: 2
- Watchers: 3
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
RC Dual Motor Driver firmware for ATmega MCUs
=============================================This firmware turns an ATmega MCU into an RC (radio control) bidirectional dual motor driver:
* By default, RC channel 1 controls forward/reverse for both motors while RC channel 2 controls differential steering between them.
* In independent mode, RC channels 1 and 2 control the motors independently.
* iBUS servo interface can be used to connect to a FlySky receiver.
* Controls need to be returned to their initial positions (re-armed) on startup or signal loss.
* Status LED indicates how many RC channels are active by blinking that number of times.
* Watchdog resets the device in case of signal loss.Supported MCUs
--------------+ ATmega16U4
+ ATmega32U4 (Teensy 2.0, Arduino Micro/Leonardo)
+ ATmega32U6Dependencies
------------+ cmake
+ avr-gcc
+ avr-libc
+ avrdudeInstallation
------------Check out _#define_ statements at the beginning of _src/config.h_ to see if you need to change settings before building the firmware. Options to consider:
* The default PWM frequency is 16kHz at 8Mhz clock. It can be decreased by a multiple of 2 using the PWM_DIV value. It can also be doubled by switching to 16Mhz clock via the CLK_16MHZ option.
* The output pins can be inverted via the *_INV options.
* If iBUS is used, RC-to-RX channel mapping can be configured using the IBUS_CHx values.
To build, run (with your own MCU):
cmake -B build -D MCU=ATMEGA32U4
cd build
makeTo install on the device using AVRDUDE, run (with your own programmer):
make PROG=usbasp flash
or for Teensy 2.0:
make flash-teensy
Pinout
------| Pin | # | I/O | Description |
|-----|---:|-----|----------------|
| D4 | 4 | IN | RC channel 1 |
| C7 | 13 | IN | RC channel 2 |
| D2 | 0 | IN | iBUS servo |
| D7 | 6 | OUT | PWM 1 |
| B6 | 10 | OUT | PWM 2 |
| F7 | 18 | OUT | Forward 1 |
| F6 | 19 | OUT | Forward 2 |
| B4 | 8 | OUT | Reverse 1 |
| B5 | 9 | OUT | Reverse 2 |
| D6 | 12 | OUT | Status LED |Numbers denote Arduino pins.
Building a dual 12A bidirectional ESC
-------------------------------------Check out this [How-To](https://github.com/neoxic/STM8-RC-Dual-Motor-Driver#building-a-dual-12a-bidirectional-esc) for more information.