Arduino Pro Micro pwm Signal auf 10 bit Resolution einstellen.

Hallo,

da ich für mein Projekt ein analogwrite(pin,1023) brauche und im internet mit den timer nicht wirklich zurecht komme wollte ich fragen ob mir das einer erklären kann oder ein kurzen Sketch hier postet damit ich es verstehe.

Danke schonmal :slight_smile:

Hallo,
einen Arduino Pro Micro kennt die Übersicht nicht, nur ProMini oder Micro. Da wäre ein Link zu Deinem Produkt hilfreich. Der hier?

Erstmal danke für die schnelle Antwort!! : )

natürlich ist das kein original Produkt von Arduino selbst. Ich habe den von Sparkfun ja. Zumindest baugleich!

atmega32u4

hier nochmal ein Link.

Für den ATmega 328 hätte ich diese Seite, für den 32u4 wirft mir eine Suchmaschine diese aus. Schon mal probiert?

Mein einziger Arduino mit 32U4 ist fest verbaut, sonst hätte ich mal getestet.

Alternative: The TLC5940 is a 16 channel PWM unit with 12 bit duty cycle control (0 - 4095)

Hallo,

wieviele Pins willst du damit schalten?
Den Timer 1 kannste locker auf 10Bit einstellen. Nur wäre die Frage wie "umständlich" man den dann nutzen muß.
Zusatzfrage. Warum unbedingt 10bit? Brauchst die Auflösung oder wofür?

Hallo,

also ich brauhc eben mindestens 1024 teiler für die Motorsteuerung. Danke für die Links sowas such ich in vereinfachter Form!

falls es mehr als 1024 ist ist es auch kein Problem.

Hallo,

naja, Fragen nur halb beantwortet. :wink:
Motorsteuerung? Kommste da nicht besser und einfacher weg wenn du einen dafür passenden fertigen Motortreiber verwendest. Oder gehts ums selbst basteln?

UPS sorry :smiley:

also ich brauch im Grunde nur 1 pwm pin der das kann. da ich auch nur 1 motor ansteuern möchte.

und mir gehts natürlich ums selbst basteln ;D

10 bit deshalb weil ich denke das 1024 für meine zwecke ausreicht. mehr ist aber absolut kein problem. hoffentlich alle fragen beantwortet ^^

AndiIsl:
also ich brauch im Grunde nur 1 pwm pin der das kann. da ich auch nur 1 motor ansteuern möchte.

Dann könnte Motor Driver BTS7960 43A interessant sein.

leider sind das brushless Motoren mit rechts und links lauf. 36 volt 10 ampere.. also geht der leider nicht :frowning: falls du einen findest der das aushält wär das super!

Hallo,

jetzt müßtest du wissen, ob selbst basteln oder eine Shield kaufen.
Brushless vs. Brushed ? Unterschied ?
Wenn Shield, dann sollte das perfekt sein. Ich kenne das noch nicht. Habs aber schon eine Weile im Auge.

Steht jedoch Brushed dabei.
http://www.infineon.com/cms/en/product/evaluation-boards/DC-MOTORCONTR_BTN8982/evaluation-boards/DC-MOTORCONTR_BTN8982/productType.html?productType=5546d4624ad04ef9014b07c0c07922e0#section-buy

Gibts bei RS, wenn du jemanden kennst der als Gewerblicher dort bestellen kann. Vorher nachrechnen wegen der MwSt.

Oder privat hier. https://hbe-shop.de/Art-2453485-INFINEON-DCMOTORCONTRBTN8982TOBO1-EVAL-BOARD-BTN8982-DC-MOTOR-CTRL-SHIELD

kann mir nun einer sagen was ich von dem ganzen code für den atmega32u4 brauche damit man 1 Ausgang auf 1024 laufen lassen kann?

und danke für das shield! ich schau mir das gleich mal an.

leider sind die shields nur für brushed Motoren und nicht brushless... 250 watt ist ebenfalls zu wenig :frowning: das einzige was ich gefunden hab gibt es auf eBay für 12 euro..

achja unterschied gibts da vielleicht wenige bis auf die Haltbarkeit aber ich hab für das Projekt eben nur ein brushless motor zur verfügung.

Hallo,

wenn du nur einen Pin benötigst, kram ich mal einen Code heraus. Hatte mich damit mal beschäftigt.

Die brushless Motoren kenne ich nicht aus eigenem Tun, daher folgende unqualifizierte Anmerkungen:

  1. Die funktionieren wie bipolare Schrittmotoren (zwei getrennte Wicklungen), nur üblich mit höheren Umdrehungen. Bipolare Schrittmotoren werden durch zwei H-Brücken angesteuert. Brushless hat drei Phasen, also werden möglicherweise drei H-Brücken benötigt?

  2. Hier im Forum wurde immer auf fertige Schaltungen aus dem Modellbau verwiesen.

Hier gibt es ein paar schöne Bilder: Low Cost Fahrtregler für Brushless-Motoren

danke agmue und doc dafür gibts jeweils 1 karma Punkt :smiley:

ja da hast du recht für 3 Phasen braucht man 2 H-Brücken.

Hallo,

schöner Erklärungslink agmue. Danke.
Jetzt bin ich ganz verunsichert ob man mit fertigen Fahrtregler noch PWM benötigt. Irgendwas zum steuern doch irgendwie? Im Modellbausektor bin ich nicht unterwegs.

Falls doch benötigt, hier der versprochene Code. Wenn du einen Arduino Uno hast, dann mußte Pin 12 auf 10 ändern. Der Timerausgang ist hart kodiert.
Edit: wer lesen kann ... :slight_smile:
du hast ja einen Micro, da ist das Pin 10 wie beim Uno..

Die PWM Frequenz ist nur noch durch den Prescaler veränderbar. Bei 10Bit bleibt ja OCR1A fest auf 1023.
7,6Hz , 30,5Hz , 122,2Hz , 977,5Hz und 7,82kHz

Weiteres zur Selbstbeschäftigung steht im µC Datenblatt. Dann kannste auch selbst die Auflösung ändern und am Timer rumfummeln. :slight_smile:

Democode. Poti an A0 und LED o.ä. an Pin 12 (bzw. Pin 10).

/*
 Doc_Arduino - german Arduino Forum
 IDE 1.6.7
 Arduino Mega2560
 
 Timer 1: Phase & Frequenz Correct, Mode 9
 TOP:  OCR1A     (Takt-Frequenz)
 Pulsweite: OCR1 (<= TOP)
 Schaltpin: 12   (OC1B bzw. PB6) nicht invertiert
*/

#include <avr/pgmspace.h>

const byte _PWMpin  = 12;   // OC1B bzw. PB6 nicht invertiert, IRFxxxx Mosfet o.ä. 
const byte _Poti = A0;      // Potentiometer

    
void setup()  { 
  Serial.begin(9600);
  
  digitalWrite(_PWMpin, LOW);    // OC1B bzw. PB6 nicht invertiert
  pinMode(_PWMpin, OUTPUT);      
  
  set_Timer1();
  
}

  
void loop() {           
  
  int value = analogRead(_Poti);   
  OCR1B = value;                   //  PWM an Pin 12
  Serial.print(F("PWM Wert: ")); Serial.println(value);
  delay(1000);
  
                              
}   // loop Ende


// ****** Funktionen ******* //
    
void set_Timer1()       //  10 Bit PWM, Phase Frequency Correct, Mode 9
{
  cli();         // Interrupts ausschalten
  TCCR1A = 0;    // Reset TCCR1A Register 
  TCCR1B = 0;    // Reset TCCR1B Register
  TIMSK1 = 0;    // Reset TIMSK1 Register (disable Timer Compare Interrupts)
  TCNT1  = 2;    // setzt Start-Counter größer OCR1B, damit keinen Zündeffekt beim Start
  TCCR1A = (1<<COM1B1) | (1<<WGM10);              // nicht invertiert
  TCCR1B = (1<<WGM13) | (1<<CS11) | (1<<CS10);    // Prescaler 64 >> 122Hz (TOP 1023)
  OCR1A = 1023;  // TOP Wert bestimmt Auflösung und mit Prescaler den PWM Takt
  OCR1B = 0;     // Pulsweite, OCR1B < 1023 (2^10)
  sei();         // Interrupts einschalten
}  // end Funktion

Wobei es hier auch Modus 3 mit einem festem TOP von 1023/0x3FF tun würde. Modus 7 ist das gleiche mit Fast PWM.

Hallo,

im Prinzip schon. Es gibt aber einen Grund warum ich Mode 9 nehme. Hiermit bekommt man ein Tastverhältnis von 0 und 100%. Bei anderen Modi muß man sich mittels invertiert oder nicht invertiert entscheiden was einem lieber ist.

Oder man fragt ab ob man an den Grenzen ist und schaltet PWM ab. So macht es auch analogWrite()

Hallo,

jetzt mal Butter bei de Fische. Ist doch unnötig. Warum nicht Mode 9 nehmen und kann damit alles erschlagen was man benötigt. Was analogWrite vormacht muß man ja nicht immer nach machen.