Archiv verlassen und diese Seite im Standarddesign anzeigen : PWM Signale auswerten
maexlich
25.06.2007, 16:23
Hi,
ich bin ziemlicher Robotik einsteiger und hab ein kleines Problem:
Ich möchte über einen Atmel versuchen die PWM Signale meines ADXL202
auszuwerten, aber wie stelle ich den Timer bzw. counter so ein das er mir die länge des strom-an impulses misst und dies in einen verwendbaren wert umwandelt? (Ja ich hab das Datenblatt gelesen aber mein englisch ist nicht das beste)
Danke im vorraus,
MFG Max
Könnte man z.B. mit dem input capture pin machen, bei steigender(fallender) Flanke wird der Timerwert im ICP Register gespeichert und du bekommst nen Interrupt, wo du das auslesen kannst.
Grüsse, Stefan
maexlich
26.06.2007, 12:21
Hab ich mir auch schon gedacht aber was kann man im Icp register machen?
Im ICP Register wird der TCNT Wert gespeichert, bei dem der ICP Interrupt auftrat.
Also z.B. die steigende Flanke.
Du speicherst in der ICP Interrupt Routine diesen Wert ab und stellst in der ICP Interrupt Routine den Interupt auf fallende um.
Tritt dieser Interrupt auf liest Du wieder das ICP Register aus und ziehst den vorhergehenden Wert ab.
Der Pausenwert kann genauso errechnet werden.
Und schon hast Du eine Aussage über die Pulslänge.
Welche Teilerfaktoren Du für den Timer einstellen musst und ob Du noch irgendwelche Überlaufregister brauchst ist von der min und max Frequenz des PWM Signals und der gewünschten Präzision abhängig.
Das Datenblatt des ADXL202 mag ich jetzt nicht studieren, welche minimalen und maximalen Impulslängen können den auftreten ?
maexlich
27.06.2007, 13:30
Danke für die Info,
so viel ich weiss kann man die Pulslaenge über einen Wiederstand einstellen
MFG,
Max
maexlich
27.06.2007, 20:06
den duty cycle jedenfals bei der impulsdauer kp im datenblatt steht das die impulsdauer bei 0g beschleunigung 50% des duty cycles beträgt...
Hier einen kleinen prototyp der aber irgendwie nicht funktioniert, ](*,) er benutzt die count72kHz funktion von der Asuro Lib d.h. alle 0.0000138s wird durch ein Interrupt count72kHz um eins erhöt. Zum testen hab ich einen Modelbauempfänger an den Int0 Pin angeschlossen:
#include "asuro.h"
volatile unsigned char status, wert;
extern unsigned char count72kHz;
void StartPwm(void) {
DDRD &= ~(1<<PD2); //Datenrichtungsbit löschen
MCUCR &= ~(1<<ISC01); //Interrupt einstellung von
MCUCR |= (1<<ISC00); //Int0 einstellen auf Steigende und Fallende //Spannung
GICR |= (1<<INT0); //Interrupt von Pin Int0 setzen
}
void StopPwm(void) {
GICR &= ~(1<<INT0); //Interrupt deaktivieren
}
SIGNAL (SIG_INTERRUPT0) {
if (status == 1) { //Wenn Status = 1 counter aktiv
wert = count72kHz;
status = 0;
}
else {
count72kHz = 0;
status = 1;
}
MFG,
Max
maexlich
05.07.2007, 08:08
Keine hilfe mehr nötig. Gesegnet sei google. O:)
maexlich
Powered by vBulletin® Version 4.2.5 Copyright ©2024 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.