Forum: Gesperrte Threads Atmel Code in C zur Motorsteuerung


von remi (Gast)


Angehängte Dateien:

Lesenswert?

Hallo zusammen,

ich könnte im Rahmen eine wissenschaftliche Arbeit, um CAN Nachrichten 
mit dem AT90CAN128 Mikrocontroller zu senden, eine CAN Bibliothek 
anpassen und könnte damit Nachrichten zwischen zwei Mikrocontrollern 
empfangen und senden und das ganze mit Canoe beobachten.

Nun will ich in diese Bibliothek eine Code schreiben sodass ich einen DC 
Motor über CAN Bus Steuern kann.

Die Schaltung habe ich gebaut ich weiß aber nicht in welche Stelle meine 
Code schreibe. Welche Ports und Bits ich benutzen soll? ob ich eine PWM 
Signal erzeugen muss um den Motor zu starten?

Vielen Dank

: Verschoben durch Admin
von remi (Gast)


Lesenswert?

Ich habe diese Code im Internet gefunden

The in the following program we set up TIMER0 in fast pwm mode and use 
the generated PWM signals to vary the brightness of a LED. This is the 
simplest program to get you started with PWM signal generation. We start 
with minimum brightness and increase it gradually and then again reduce 
it gradually to zero. This process is repeated as long as the system is 
powered

die Code ist aber für ATmega16 oder ATmega32 geeignet.
wie kann ich die Code für mein AT90Can128 Mikrocontroller anpassen?
weil vom Prinzip ist genau das was ich mit dem Motor schaffen möchte.




#include <avr/io.h>
#include <util/delay.h>

void InitPWM()
{
   /*
   TCCR0 - Timer Counter Control Register (TIMER0)
   -----------------------------------------------
   BITS DESCRIPTION


   NO:   NAME   DESCRIPTION
   --------------------------
   BIT 7 : FOC0   Force Output Compare [Not used in this example]
   BIT 6 : WGM00  Wave form generartion mode [SET to 1]
   BIT 5 : COM01  Compare Output Mode        [SET to 1]
   BIT 4 : COM00  Compare Output Mode        [SET to 0]

   BIT 3 : WGM01  Wave form generation mode [SET to 1]
   BIT 2 : CS02   Clock Select               [SET to 0]
   BIT 1 : CS01   Clock Select               [SET to 0]
   BIT 0 : CS00   Clock Select               [SET to 1]

   The above settings are for
   --------------------------

   Timer Clock = CPU Clock (No Prescalling)
   Mode        = Fast PWM
   PWM Output  = Non Inverted

   */


   TCCR0|=(1<<WGM00)|(1<<WGM01)|(1<<COM01)|(1<<CS00);

   //Set OC0 PIN as output. It is  PB3 on ATmega16 ATmega32

   DDRB|=(1<<PB3);
}

/******************************************************************
Sets the duty cycle of output.

Arguments
---------
duty: Between 0 - 255

0= 0%

255= 100%

The Function sets the duty cycle of pwm output generated on OC0 PIN
The average voltage on this output pin will be

         duty
 Vout=  ------ x 5v
         255

This can be used to control the brightness of LED or Speed of Motor.
*********************************************************************/

void SetPWMOutput(uint8_t duty)
{
   OCR0=duty;
}

/********************************************************************

Simple Wait Loop

*********************************************************************/

void Wait()
{
 _delay_loop_2(3200);
}

void main()
{
   uint8_t brightness=0;

   //Initialize PWM Channel 0
   InitPWM();

   //Do this forever

   while(1)
   {
      //Now Loop with increasing brightness

      for(brightness=0;brightness<255;brightness++)
      {
         //Now Set The Brighness using PWM

         SetPWMOutput(brightness);

         //Now Wait For Some Time
         Wait();
      }

      //Now Loop with decreasing brightness

      for(brightness=255;brightness>0;brightness--)
      {
         //Now Set The Brighness using PWM

         SetPWMOutput(brightness);

         //Now Wait For Some Time
         Wait();
      }
   }
}

von Oliver S. (oliverso)


Lesenswert?

remi schrieb:
> Welche Ports und Bits ich benutzen soll?

Die, an denen du den Motor angeschlossen hast.

remi schrieb:
> ob ich eine PWM
> Signal erzeugen muss um den Motor zu starten?

Das kommt auf den Motor an, aber laufen wird er wohl einfach so. Willst 
du allerdings die Drehzahl verstellen, brauchst du eine PWM.

Oliver

von Michael J. (Gast)


Lesenswert?

Eine Bibliothek stellt normalerweise Funktionalität an Schnittstellen 
bereit, d.h. an ihrem Code selbst wird nichts geändert.
Wenn Du eine Nachricht bekommst (wie auch immer Deine Bibliothek Dir das 
mitteilt), schaltest Du einfach den Pin ein. Wenn Du den Motor nur 
einschalten musst, brauchst Du kein PWM. Das, was Du da in den Anhang 
gepackt hast ist ziemlich nutzlos, da kann man nämlich nur rauslesen, 
dass Du einen Motor an den µC angeschlossen hast. An welchen Pin der 
geht usw. fehlt.
Was soll denn das für eine wissenschaftliche Arbeit sein, bei der das 
Ziel ist, einen Motor einzuschalten?!

Viel Erfolg^^

Michael

von remi (Gast)


Lesenswert?

Die Arbeit ist die Kommunikation zwischen zwei AT90CAN128 
Mikrocontroller über CAN Bus zu realisieren damit werden Nachrichten 
gesendet und empfangen und das ganze mit Canoe simulieren.

Die Arbeit geht dann weiter um quasi die Funktionsnachbildung eines 
Steuergerät darzustellen.

Ich wollte aber was ausprobieren mit der CAN Bibliothek und zwar über 
CAN Bus erstmals einen DC Motor mit 5V Eingangsspannung zu starten.

Mein Mikrocontroller ist an Pin(VCC) und Pin(GND) an dem Motor 
angeschlossen. Die Frage ist auch welche Pin soll ich noch benutzen.

danke

von Michael L. (Firma: Ingenieurbüro Lehr) (ml-net)


Lesenswert?

wissenschaftliche Arbeit 2016!!!

von Bernhard R. (b-r)


Lesenswert?

Hallo remi,

deine Beiträge hören sich so an, als würde dir schon das grundlegenste 
Wissen fehlen. Das ist nicht schlimm, man sollte dann aber nicht gleich 
eine CAN Kommunikation als Einstiegsprojekt auswählen.

Arbeite dich durch die verschiedenen Tutorials, und stelle dann gezielte 
Fragen wenn du was nicht verstehst.

z.B.
https://www.mikrocontroller.net/articles/Absolute_Beginner

dann später

https://www.mikrocontroller.net/articles/CAN_Bibiliothek_f%C3%BCr_AT90CAN_Prozessoren

von Oliver S. (oliverso)


Lesenswert?

Ach ja, wenn du keine gespaltene Persönlichkeit bist, dann kannst du 
dich ja mit deinem Hausaufgabenkollegen zusammentun...

Beitrag "C Programcode für Motorsteurung"

Ansonsten reicht ein Thread, und du solltest dich mit dir selber auf 
einen Namen einigen.

Oliver

: Bearbeitet durch User
von Bastian W. (jackfrost)


Lesenswert?

Es gibt noch zwei weiter mit der Aufgabe :

Beitrag "DC motor mit 5V Eingangsspannung"

Beitrag "Elektronik Bauteile um Motor zu starten mit AT90CAN"

Und da läuft CAN schon.

Gruß JackFrost

von Bernhard R. (b-r)


Lesenswert?

Ach, ist das lästig.....

Würde mich interessieren für welche "wissenschaftliche" Arbeit das 
gebraucht wird.

Naja, dann macht er wahrscheinlich morgen einen neuen Thread auf...

von Axel R. (Gast)


Lesenswert?

Drei Neuankömmlinge wollten einer altem Omi vorm Kauflang lauthals um 
sie herum wuselnd davon in Kenntnis setzen, das ihr Licht am Rad nicht 
ginge. Dazu stellten Sie das Rad hinten auf und ein anderer trat kräftig 
in die Pedale.
Als ich schnellen Schrittes hinzu kam und das Wort "Nabendynamo" 
erwähnte, rannten alle, als ginge es um ihr Leben, offenbar konnte sie 
mit dem Wort nichts anfangen oder es trägt in ihrer Landessprache 
vertreibenden Charakter ... Und ja, die alte Dame hatte ihr Portemonaise 
noch.
Das Rad kurz vorn angehoben und angetrieselt - Licht ging NATÜRLICH.
-Fachkräfte-

Axelr.
DG1RTO

von Andreas S. (andreas) (Admin) Benutzerseite


Lesenswert?


Dieser Beitrag ist gesperrt und kann nicht beantwortet werden.