Go Down

Topic: signal carré (Read 426 times) previous topic - next topic

vtec35

bonjour tout le monde,j ai besoin de sortir un signal carré 5v-0v-5v-0v donc les periodes sont identique

est ce que la fonction tone le permet?

al1fch


68tjs

En dehors des fonctions arduino, simples d'emploi mais très restrictives, si tu as une carte basée sur un atmega tu peux utiliser un timer en mode CTC. 
Le choix de la fréquence sera beaucoup plus fin.
Le démarage et l'arrêt du signal sera nettement plus bref et propre.
Lecture de la datasheet du micro et utilisation des registres obligatoire. 

vtec35

alors l utilisation va etre hyper basic

je sors sur un tip 122


afin de commuté du 5v en 12v


ensuite j alimente un electro aimant, l idée etant de faire vibrer un objet metallique



ça c est pour le cas d utilisation d'un 12vdc


sinon premier test que j vais faire c est avec un 12vac et une diode

68tjs

Un 12V AC ne te donnera pas un 12V continu.
Fait des recherches sur "redressement simple alternance" et aussi double alternance.

En alternatif la tension indiquée est la tension efficace et pas la tension de crête de la sinusoïde.
Le continu est obtenu en ne gardant qu'une alternance ou les deux en  redressant l'alternance négative.
La valeur de la tension continue obtenue après filtrage est  la valeur moyenne de ces morceaux de sinusoïde.

Veff = Vcrete/racine(2)
Vmoy = Vcrete/PI en simplz alternance et le double en double alternance.

vtec35

non 12vac avec diode va donné un signal sinusoidale entre 0 et 12, et un signal a 0 entre 0 et -12

ça fait un faux carré

je test deja ça, ensuite je complexifie un peu avec l arduino le tip122 et le tone

vtec35

voila j ai preparer mon programme pour 2 version


la premiere sortie digital alimente un simple moteur a balourd en 5v ON/OFF

la seconde sortie analogique envoi un tone donc une periode haute 5v et une periode 0v de meme durée, à une frequence determiné par un potard


mais j aimerais preparer une 3eme version, mais la je ne sais pas trop comment m y prendre, tout en faisant quelque chose de non bloquant



determiner moi meme le temps haut, et le temps bas, je crois que la fonction pulse collerais, mais je ne vois pas trop comment l enchainer sans bloquer le reste du code

68tjs

#7
May 19, 2019, 07:18 pm Last Edit: May 19, 2019, 07:24 pm by 68tjs
Quote
non 12vac avec diode va donné un signal sinusoidale entre 0 et 12, et un signal a 0 entre 0 et -12
Non.
L'équation du signal "EDF" est V= Vcrête*sin(2*PI*50*t)
Et Vcrète = Veff*racine(2).

Donc en 230V alternatif la tension de crête est égale à 325 V
Après transformateur abaisseur le rapport Vcrête/Vefficace reste le même.

Si tu fais un détecteur crête, c'est à dire que tu ne tires aucun micro ampère sur le signal redressé dans ce cas la tension sera égale à 12Veff * racine(2) = 17V.

Si tu tire de la puissance tu aura après filtrage :
Vmoy = Vcrête/PI ou 2*Vcrête/PI selon que le redressement est simple alternance ou double alternance.

Simple alternance  5,40 V= (filtrage : 50Hz)
double alternance 10,8 V=  (filtrage : 100 Hz)
Auxquels il faudra retirer la tension aux bornes des diodes
Transformateur à point milieu au secondaire : 1 Vd soit 0,8V
Transformateur sans point milieu et Pont de Graetz : 2Vd soit 1,6V

Si tu fais quelque chose de bâtard entre vrai détecteur crête et vrai filtrage tu aura quelque chose entre 17 V=  et  5,4V= (ou 10,8V=) qui dépendra du courant consommé.

vtec35

ça y est tu m a largué....

68tjs

Il faut bien comprendre la notion de tension "efficace".
En continu une tension de 1V appliquée à une résistance de 1 ohms donnera naissance à un courant de 1 A ce qui donnera une puissance de 1 W.

Au début de l'étude des courants alternatifs les découvreurs de l'époque ont cherché à raccrocher les effets du signal alternatif, en fait signal sinusoïdal , à ceux du courant continu qu'ils connaissaient déjà bien.
Ils ont cherché une valeur qui aurait la même "efficacité" que la valeur continue.

Il ont choisi comme point commun la puissance dans une résistance.

Et ils ont trouvé (le calcul est une "simple" intégrale) que la valeur "équivalente" de la tension sinusoïdale qui donnerait 1W dans une résistance de 1 ohms vaut Vcrête/racine(2).

EDF te fait payer de l'énergie et l'énergie c'est de la puissance multipliée par un temps, d'où les kilowatts multipliés par des heures. Donc la valeur communément admise dans la distribution de l'électricité est la valeur efficace.
PS : les kWh sont une unité d'épicier, l'unité officielle est le joule qui vaut 1W pendant 1 seconde.

C'est important de bien faire la distinction entre les deux notions.
Si tu conçois une alimentation le transformateur que tu va connecter sur le  230V EDF devra être capable de tenir  plus de ± 325V car c'est les valeurs max de tension qu'il verra en permanence.

kamill

Bonjour,
bonjour tout le monde,j ai besoin de sortir un signal carré 5v-0v-5v-0v donc les periodes sont identique
est ce que la fonction tone le permet?
Oui, si tu n'es pas trop regardant sur la résolution. De plus la fonction tone a du jitter.
mais j aimerais preparer une 3eme version, mais la je ne sais pas trop comment m y prendre, tout en faisant quelque chose de non bloquant
determiner moi meme le temps haut, et le temps bas, je crois que la fonction pulse collerais, mais je ne vois pas trop comment l enchainer sans bloquer le reste du code
La fonction pulse permet de mesurer la durée d'une impulsion et non de la générer.

Tu peux trouver un exemple ici.
Attention, le programme donné est pour une carte mega, pour une uno il faut outputPin = 9

Si tu nous disais ce que tu veux faire et quel est ton cahier des charges pour les limites de fréquence et résolution, il serait plus facile de t'aider.

vtec35

en fait je suis en train de fabriquer un "vibreur" electro magnetique a partir d'un electro aimant en 12vdc qui a une force de 60kg, a defaut de ne pas avoir trouver de "bobine" en 220v




l'idée est de le faire aimanter, desaimanter, aimanter, desaimanter


donc pour ça je dois l alimenter, ne plus l alimenter, l alimenter, etc...

on me dit que y a de grande chance que cela ne marche pas, je souhaite donc faire mes 4 essais, avant de conclure que cela ne marche pas et du coup chercher une bobine en 220v a demonter qq part


pour les limite des bornes, en fait j en sais rien ça va être du tatonnage

je suis en train de faire un chassis a lamelle pour eviter que la piece ne se colle à l aimant

on peut tres bien faire un bout de programme avec les variables en tete, comme ça c est simple à modifier


voila deja mon code pour les 3 premiers tests:

Code: [Select]
# define entree_analogique A1
# define entree_gavage  5
# define sortie_gavage  6
# define sortie_analogique_gavage A2
# define sortie_analogique_gavage optimisé A3


unsigned long tempsgavage =2000;
unsigned long timergavage =0;
int detectiongavage =0;
bool premier_remplissage = false;
int debut_timer_gavage = 0;
int frequence = 0;

void calcul_frequence()
{
  frequence = analogRead(entree_analogique);
}
void etat_entree()
{
 if (digitalRead (entree_gavage) == LOW)
 {
  detectiongavage = 1;
  //Serial.println("detectiongavage = 1");
 }
 else
 {
  detectiongavage = 0;
  //Serial.println("detectiongavage = 0");
 }
}
void timer_gavage()
{
  if (debut_timer_gavage != 1)
  timergavage = millis() + tempsgavage;
  if (debut_timer_gavage == 1 && millis() > timergavage)
  {
    digitalWrite(sortie_gavage,HIGH);  //activation de la sortie avec un decalage de 20000ms
    tone ( sortie_analogique_gavage,frequence);
    debut_timer_gavage = 2 ;
  }
}
void gavage()
{

  //Serial.println("debut_timer_gavage=");
//Serial.println(debut_timer_gavage);
 //Serial.println("detectiongavage=");
//Serial.println(detectiongavage);
 Serial.println("premier_remplissage=");
Serial.println(premier_remplissage);

  if (premier_remplissage == true)
  {
    if (detectiongavage == 0)
    {
     digitalWrite(sortie_gavage,HIGH);
     tone ( sortie_analogique_gavage,frequence);
    }
   else
    {
    digitalWrite(sortie_gavage,LOW);
    noTone(sortie_analogique_gavage);
    premier_remplissage = false ;
    }
  }
  else
  {
       if (detectiongavage == 0 && debut_timer_gavage == 0)
       {
         debut_timer_gavage = 1;
         Serial.println("debut_timer_gavage = 1");
        }
       else if (detectiongavage == 1 && debut_timer_gavage==2)
       {
         digitalWrite(sortie_gavage,LOW);
        noTone(sortie_analogique_gavage);
         debut_timer_gavage =0;
       }
  }

 
}



void setup()
{
  // put your setup code here, to run once:


  pinMode (entree_gavage, INPUT);
  pinMode (sortie_gavage, OUTPUT);
  digitalWrite (sortie_gavage,LOW);

  premier_remplissage = true;
  Serial.begin(115200);
 

}

void loop() {
  // put your main code here, to run repeatedly:
  etat_entree();
  timer_gavage();
  gavage();
  calcul_frequence();

}



kamill

Dans ce cas, je pense que la fonction tone() est effectivement largement suffisante pour les premiers essais.

68tjs

#13
May 20, 2019, 10:10 am Last Edit: May 20, 2019, 10:11 am by 68tjs
Caractéristiques de la bobine ?  12V alternatif ou continu, résistance de la bobine, etc,  donnes la datasheet !
il faut encore arracher les infos une par une,   voir -> Règles du forum francophone..

Si la bobine  est 12V= je ne vois pas à quoi servira la fonction tone..

Fais un schéma de ton installation telle que tu l'as prévoi AVEC tous les renseignements pour y voir plus clair :  nous et surtout toi.
Papier stylo sans oublier la règle pour tirer les traits et scan ou photo.

dbrion06

"Si la bobine  est 12V= je ne vois pas à quoi servira la fonction tone.."
Je crois que le montage est le suivant:
arduino + fonction tone -> transistor de puissance -> bobine (et diode de protection)
Et qu'il veut faire des essais d'alimentation de la bobine par des impulsions

Go Up