Jump to content
ELFORUM - Forumul Electronistilor
Sign in to follow this  
Vlad Mihai

Incrementare pwm

Recommended Posts

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);

Share this post


Link to post
Share on other sites

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.

Edited by thunderer

Share this post


Link to post
Share on other sites

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...

Share this post


Link to post
Share on other sites

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!

Share this post


Link to post
Share on other sites

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).

Share this post


Link to post
Share on other sites

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!

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this  

×
×
  • Create New...