Hallo ik heb een vraag. Ik gebruik een ATMEGA48 en wil via een zelfgemaakte print met dubbelpolige relai een motor kunnen sturen. maar ik kom er niet uit met de code. Ook niet hoe ik de motor uit moet zetten. Ik heb niet zoveel ervaring en wil graag een beetje hulp als het kan?? De instellingen heb ik wel redelijk voor de pwm kanalen maar ik weet niet hoe ik die motorregeling moet realiseren. graag een beetje op gang helpen als het kan??

Met een relais aleen kun je geen (goede) PWM bedrijven, de frequenties liggen eenvoudigweg te hoog.

De PWM regeling zelf doe je met een stevige FET, eventueel kun je relais gebruiken om de motor de andere kant op te laten draaien, maar daar kun je ook een H-brug voor gebruiken.

PWM op een relais is niet te doen. Het relais gaat veel te snel kapot en het regelt ook niet .

Wel kan je met een FET PWM maken en dat ompolen via een relais.

Ja ik heb er een fet op, sorry dat ik het niet erbij gezegd had. Ik heb mijn pwm instellingen al wel, maar ik weet niet hoe ik de echte regeling aan moet pakken. enige ideen van codes hoe ik het kan doen?

maar ik weet niet hoe ik de echte regeling aan moet pakken

Wat bedoel je daar mee.

Als je de PWM al hebt zet je daar een fet achter. Probeer dan eerst een de motor aan de sturen. Als dat lukt zorg je voor een schakeling met een relais die stroom door de motor ompoolt.

Ik gok er maar op, dat de TS wat voorbeeldcode wenst om bv. iets als dit schema aan te sturen.
Dat zou je zo kunnen doen:


    TCCR1A = _BV(WGM11) | _BV(COM1A1);			// 16-bit fast-PWM
    ICR1 = 9999;					// Resolutie = 1/10000
    TCCR1B = _BV(CS10) | _BV(WGM12) | _BV(WGM13);	// geen prescaler
    OCR1A = 2500;					// 1/4 speed
    DDRB |= _BV(PB1);					// OC1A (PB1) = PWM-uitgang

OCR1A kan variëren van 0 tot 9999. Maar als de puls/pause-verhouding te laag is, gaat de motor helemaal niet draaien.
Je moet dus even proefondervindelijk uitzoeken wat de minimum nuttige waarde voor OCR1A is.

Als je beide FET's in het schema voorziet van een pull-down weerstand (10k of zo), hetgeen altijd een aanrader is, kan je de motor laten uitbollen door de PWM-pin als ingang te schakelen.


    DDRB &= ~(_BV(PB1));					// OC1A (PB1) = ingang

Wil je de motor geforceerd stoppen, dan kan je bovenstaande code uitvoeren, het relais ompolen, en kortstondig de motor terug activeren. Maar dan ben je IMHO beter af met een H-brug.
Hou er in ieder geval rekening mee, dat je dan met stromen te maken krijgt die een veelvoud van de nominale motorstroom zijn!