Z potrzeby chwili zmajstrowałem dekoder PPM. Zbudowany w oparciu o Arduino Nano na atmedze 168 (kupiłem kiedyś kilka sztuk, akurat ma 6 wyjść PWM).
Układ wygląda tak na zdjęciach (akurat wersja 5 kanałów wyjściowych, gdyż nie przylutowany rząd pinów na wyjściu D11). Całość ma masę 6 gram. Przy obecnym układzie pinów i kabelkolorazegii zasilanie można podać jednym przewodem serwowym razem z sygnałem PPM.
Załącznik:
IMG_20181202_222031.jpg [ 103.2 KiB | Przeglądane 6772 razy ]
Załącznik:
IMG_20181202_222045.jpg [ 2.54 MiB | Przeglądane 6772 razy ]
Jakiś tam nakręcony na kolanie krótki filmik z działania:
Kod napisany w oparciu o bibliotekę PPMReader (
https://github.com/DzikuVx/PPMReader):
Wejście PPM na pinie
D2Wyjścia PWM na serwa kolejno na pinach
D3, D5, D6, D9, D10, D11Kod:
#include "PPMReader.h"
#include "Servo.h"
PPMReader ppmReader(2, 0, false);
Servo servArray[6];
void setup()
{
servArray[0].attach(3);
servArray[1].attach(5);
servArray[2].attach(6);
servArray[3].attach(9);
servArray[4].attach(10);
servArray[5].attach(11);
}
void loop()
{
int count;
while(ppmReader.get(count) != 0)
{
//Serial.print(ppmReader.get(count));
if(count < 6)
servArray[count].write(map(ppmReader.get(count), 810, 2210, 0, 180));
count++;
}
}
Całość zdaje się działać. Nie ma rezystorów zabezpieczających piny atmegi. Serwa jakby drżą. Jeszcze nie wiem jak to naprawić. Może zbyt często próbuję odświeżać sygnał PWM, lub niepotrzebnie go ustawiam ponownie na tą samą wartość, jeśli ta nie uległa zmianie.
Jakieś sugestie?