Sari la conținut
ELFORUM - Forumul electronistilor

Incrementare pwm


Vlad Mihai

Postări Recomandate

Salut,   testez un nou proiect ce   consta in a controla   viteza unui motor de curent continuu. Folosesc o telecomanda  TV pe 38khz, in fine partea  hardware e ok, partea  soft e problema... Vreau ca atunci cand apas un anumit  buton de la telecomanda  sa  imi incrementeze   valoarea la pwm cu o anumita valoare, am scris  softul dar se comporta ca o bucla infinita acel if pentru  incrementare/decremetare, adica creste pwm  incontinuu cu  o anumita valoare. Ce e  gresit? Atasez  codul:

#include <IRremote.h>int RECV_PIN = 2;  int motor_1=9;  int motor_2=10;  int motor_3=11;int val1=0;    //constanta motor1 int val2=0;   // constanta motor2 int val3=0;   //constanta motor3int m1=5;    int m2=6;     //led-uri indicatoare stare motorint m3=7;int motor_step=20;IRrecv irrecv(RECV_PIN);decode_results results;int addr = 0;void setup(){  pinMode(m1, OUTPUT);  pinMode(m2, OUTPUT);  pinMode(m3, OUTPUT);  pinMode(motor_1, OUTPUT);  pinMode(motor_2, OUTPUT);  pinMode(motor_3, OUTPUT);  irrecv.enableIRIn();  Serial.begin(9600);}void loop(){      if (irrecv.decode(&results)) {    irrecv.resume();   }  //motor 1 control   if(results.value==16758855){    val1= val1+motor_step;      }    if(results.value==16748655){     val1=val1-motor_step;   }  if (val1 < 0) {        val1= 0;        }                          if(val1>0){  digitalWrite(m1, HIGH);  }  else  digitalWrite(m1, LOW);     //stop toate motoarele  if(results.value==16713975){     val1=0;     val2=0;     val3=0;      }    analogWrite(motor_1, val1);   analogWrite(motor_2, val2);   analogWrite(motor_3, val3);    Serial.println(val1);  delay(100);}

LE: am  testat  pe serial si functioneaza corect codul, dar pe infrarosu nu vrea..... mai incerc

LE2: am pus un led  ca sa  vad cum functioneaza, desi ar trebui ca ledul sa fie fie aprins doar atunci cand  pas pe buton, ei bine apas odata si el sta aprins incontinuu.

if(results.value==16748655){    delay(50);     val1-=20;      digitalWrite(m1, HIGH);  }  else   digitalWrite(m1, LOW);
Link spre comentariu
  • Răspunsuri 5
  • Creat
  • Ultimul Răspuns

Top autori în acest subiect

  • Vlad Mihai

    3

  • Mircea

    2

  • Liviu M

    1

Top autori în acest subiect

N-am citit codul ca nu il inteleg decat in mare ;) (limbajul) dar am o intrebare: daca atunci cand apesi pe buton ai un 1 (sa zicem) continuu, nu crezi ca e normal sa incrementeze cam instantaneu de la 0 la 100 cand un ciclu dureaza microsecunde?Pune o intarziere intre incrementari si vezi diferenta.

Editat de thunderer
Link spre comentariu

am pus  delay de  200 ms  si tot asa face... renunt la proiect, ca  un    atmega 328 nu poate controla  3 motoare  simultan... cel putin cu programarea care o stiu eu nu merge...

Link spre comentariu

Simplifica pentru un singur motor. Rezolva intai incrementarea si decrementarea. Apoi fa stopul. Dupa, adauga si celelalte motoare. Lucreaza pe module. Fa fiecare modul sa fie functional si apoi pune-le impreuna.

 

Mai pune intrebari, ca mai raspunde cate cineva. 

Nu te da batut, ca nu ai de ce! 

 

In fine, la mine uneori merge si sa-l las balta vreo cateva zile. Apoi, pe drum de la munca conducand, sau la dus (imi ia 5-10 minute ca stau sa ma gandesc la ale mele) imi vine o alta idee de cum sa fac. Si de la zero il fac sa mearga. Curaj, mestere!

Link spre comentariu

Cand nu apesi nici un buton, nu mai intri in if(irrecv.decode()), asa ca results.value ramane cu valoarea de la ultima apasare de buton. 'Sterge' cumva results.value (un else la if(irrecv.decode()) de exemplu).

Link spre comentariu

Ca deobicei Liviu are  dreptate si ma scoate  din belele, dar oricum am renuntat la proiect ca nu mai am timp de el (ma pregatesc de migrare catre sudul tarii), dar am testat si  merge bine.. Thunderer multumesc de incurajari, iti pregatesc o surpriza sper, peste cateva luni (am inceput lucrul la un  robot 4x4 bldc cu carcasa din fibra de sticla  care are inclus tot felul de nebunii) :rade:  Numai bine!

Link spre comentariu

Creează un cont sau autentifică-te pentru a adăuga comentariu

Trebuie să fi un membru pentru a putea lăsa un comentariu.

Creează un cont

Înregistrează-te pentru un nou cont în comunitatea nostră. Este simplu!

Înregistrează un nou cont

Autentificare

Ai deja un cont? Autentifică-te aici.

Autentifică-te acum



×
×
  • Creează nouă...

Informații Importante

Am plasat cookie-uri pe dispozitivul tău pentru a îmbunătății navigarea pe acest site. Poți modifica setările cookie, altfel considerăm că ești de acord să continui.Termeni de Utilizare si Ghidări