Pages: [1]   Go Down
Author Topic: PWM Ausgangsfrequenz ändern  (Read 3409 times)
0 Members and 1 Guest are viewing this topic.
AREA COLOGNE
Offline Offline
Edison Member
*
Karma: 21
Posts: 1125
I am 1 of 10 who understands binary
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hallo,
ich habe folgendes Problem. Ich brauche an meinem Anrduino einen PWm ausgagng mit einer Frequenz von 30-35 Hz zu takten eines Solenoiden um eine besser Regelung zu erhalten. Ich habe mittllerwiele ein paat Anleitungen gelesen wie man die PWM Frequenz ändert die aber immer mit sich bringt das dies einfluß auf die millis() und micros() hat . Meine Frage daher ist kann ich einen "normalen" Port dafür nehmen da es bei so einem schnellen Chip ja keine besondere Frequenz ist.
Hat jemand soetwas schon in einem Projekt gesehen oder verbaut. Für Infos wäre ich dankbar
Logged

So ist das Leben:
Manchmal bis du das Denkmal, manchmal die Taube!

0
Offline Offline
Full Member
***
Karma: 1
Posts: 236
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

zur not von hand.
30ms sind ja ne ewigkeit bei 16MHz. Solange du nicht ernsthalt über 10BitAufläsung hinauswillst...
Logged

AREA COLOGNE
Offline Offline
Edison Member
*
Karma: 21
Posts: 1125
I am 1 of 10 who understands binary
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Genau so sehe ich das auch. Ich dachte nur vielleicht hat jemand was. Ich habe es noch nicht so ganz kapiert wie man funktionen ordentlich schreibt mit void ().
Logged

So ist das Leben:
Manchmal bis du das Denkmal, manchmal die Taube!

0
Offline Offline
Full Member
***
Karma: 1
Posts: 236
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Code:
Typ_des_Uebergabewerts name_der_funktion(typ_1Argument Name_1Argumnt,typ_2Arg name2Arg,...)
{was es tun soll;
return Uebergabewert;
}

Und nen void ist nen leerer variablentyp. Immer, wenn man nix übergeben will kommt das dahin.

zum Beispiel:
Code:
int plus2bitte(int var)
{var=var+2;
return var;
}

void MachDieDreiehnAn(void)
{digitalWrite(13,HIGH);

}

Ich glaub, wenn es an der Syntax hapert, solltest dich erst nach nen paar mehr Programmspielereien an die OCR-Registersachen trauen.
Oder halt damit die syntax lernen smiley
« Last Edit: February 14, 2010, 07:33:01 am by willich » Logged

AREA COLOGNE
Offline Offline
Edison Member
*
Karma: 21
Posts: 1125
I am 1 of 10 who understands binary
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

So ich habe einen eigene Funktion geschrieben mit der ich eine PWM Basisfrequenz bis ca 50Hz treiben kann mit einer Variablen ontime und
das an jedem Digital Out der Code sieht folgendermassen aus

Code:
unsigned long pmicros;
int nextCall=HIGH;

void setup(){
  pinMode(13,OUTPUT);
 }

void loop(){
Low_PWM(13,30,75);    //erster Wert AusgangsPin,Base Frequenz,Ontime 0-100%
}

void Low_PWM(int Pin, int Fre, int Value){
long time;
long ontime;
time=1000000/Fre;
  ontime=time/100*Value;
  if (micros() - pmicros > time && nextCall==HIGH) {
    digitalWrite(Pin,HIGH);
    pmicros=micros();
    nextCall=LOW;
  }
  if (micros() - pmicros > ontime&& nextCall==LOW){
    digitalWrite(Pin,LOW);
    nextCall=HIGH;
  }
}


Vielleicht hilft das jemandem weiter bzw kann das gebrauchen
« Last Edit: February 22, 2010, 12:32:23 pm by volvodani » Logged

So ist das Leben:
Manchmal bis du das Denkmal, manchmal die Taube!

AREA COLOGNE
Offline Offline
Edison Member
*
Karma: 21
Posts: 1125
I am 1 of 10 who understands binary
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

kleine Frage was passiert wenn der micros() überläuft dann geht mir ja höchstens 1Flanke kaputt. Oder denke ich dann falsch.
Logged

So ist das Leben:
Manchmal bis du das Denkmal, manchmal die Taube!

0
Offline Offline
Full Member
***
Karma: 1
Posts: 236
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

denke auch. Kann sogar sein, dass es durch die Differenz eh ausgebügelt wird. Oder dauerhaft triggert??

Musste mal durchdenken, wie das genau ist beim überlauf... Bin da grad zu faul zu smiley

Hab auch das Gefühl, dass du time in "s" und ontime in Prozent hast. Und beides mit den micros vergleichst.
« Last Edit: February 22, 2010, 01:11:10 pm by willich » Logged

AREA COLOGNE
Offline Offline
Edison Member
*
Karma: 21
Posts: 1125
I am 1 of 10 who understands binary
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hier ist jetzt ja so hier wird die maximale Zeit bei einer bestimmten Frequenz berechnet also bei 30HZ 33000µS das sind dann auch gleichzeitig meine 100% der Rets ist dreisatzt am "Ende" wird nur der Eingang auf HIGH geschrieben und dann "gewartet" bis die berechnete Zeit abgelaufen ist und dann wieder auf LOW gesetzt also bin ich zu jeder Zeit in µS unterwegs
Logged

So ist das Leben:
Manchmal bis du das Denkmal, manchmal die Taube!

0
Offline Offline
Full Member
***
Karma: 1
Posts: 236
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

ah, jau. Vergucker. smiley
Und? Schluckts Zyklen?
Logged

AREA COLOGNE
Offline Offline
Edison Member
*
Karma: 21
Posts: 1125
I am 1 of 10 who understands binary
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Wie kann ich das mit den Zyklen am besten messen. Am Anfang micros() speichern und dann am Ende
Ende-Anfang=ZyklusZeit?
Logged

So ist das Leben:
Manchmal bis du das Denkmal, manchmal die Taube!

Pages: [1]   Go Up
Jump to: