Practica 4
Practica 4
LABORATOTIO No 4
1. Probar los Programas y adquirir datos almacenándolos en un vector para luego despegarlos en una
gráfica de muestras vs tiempo escalado en voltios vs tiempo
%EJEMPLO1
2. function voltaje=ADC_Serial(muestras)
3. close all;
4. clc;
5. voltaje=0;
6.
7. delete(instrfind({'port'},{'COM3'}));
8. puerto=serial('COM3');
9. puerto.BaudRate=9600;
10.
11. fopen(puerto);
12. contador=1;
13.
14. figure('Name','Grafica voltaje')
15. title('GRAFICA VOLTAJE ADC-SERIAL');
16. xlabel('Numero de Muestras');
17. ylabel('Voltaje (V)');
18. grid off;
19. hold on;
20. while contador<=muestras
21. ylim([0 5.1]);
22. xlim([0 contador+50]);
23. valorADC=fscanf(puerto,'%d')';
24. voltaje(contador)=valorADC(1)*5/1024;
25. plot(voltaje);
26. drawnow
27. contador=contador+1;
28. end
29. fclose(puerto);
30. delete(puerto);
31. end
PARA UN CASO DE 800 MUESTRAS, PARA LA ENTRADA DE UNA SEÑAL DIGITAL
ans =
Columns 1 through 3
Columns 4 through 6
Columns 7 through 9
Columns 10 through 12
Columns 13 through 15
3.8232 3.8574 3.8281
Columns 16 through 18
Columns 19 through 21
Columns 22 through 24
Columns 25 through 27
Columns 28 through 30
Columns 31 through 33
Columns 34 through 36
Columns 40 through 42
Columns 43 through 45
Columns 46 through 48
Columns 49 through 51
Columns 52 through 54
Columns 55 through 57
Columns 58 through 60
3.8428 3.8232 3.7207
Columns 61 through 63
Columns 64 through 66
Columns 67 through 69
Columns 70 through 72
Columns 73 through 75
Columns 76 through 78
Columns 79 through 81
Columns 85 through 87
Columns 88 through 90
Columns 91 through 93
Columns 94 through 96
Columns 97 through 99
0 0 0
0.1221 0 0.2197
0 0.0537 0
0 0 0.2051
0 0.2148 0
0.0195 0 0.0293
0 0.2490 0
Columns 712 through 714
0.1660 0 0
0 0.1221 0
0.2295 0 0.0732
0 0 0
0.1904 0 0.2051
0 0 0
0.0049 0 0.2393
0 0 0.1025
0 0.2490 0
0.0635 0 0
0 0.1709 0
0.2148 0 0.0244
0 0.0049 0
0.2393 0 0.1855
Columns 757 through 759
0 0 0
0.0879 0 0.2637
0 0.0830 0
0 0 0.1758
0 0.2295 0
0.0293 0 0
0 0.2344 0
0 0.0586 0
0.2686 0 0.0928
0 0 0
0.1709 0 0.2344
0 0.0342 0
0 0 0.2295
0 0.1953
>>
2. Realizar una ampliación de la adquisición de datos por medio de dos entradas analógicas y verificar
cual
el tiempo de muestreo.
function voltaje=ADC_Serial2(muestras)
close all; %Cierra todo lo que matlab tenga abierto
clc; %limpiar la pantalla
voltaje=0;%Declara variable en la cual se van a guardar los valores
voltaje1=0;%Declara variable en la que se van a guardar los datos de la primera
señal
voltaje2=0;%Declara variable en la que se van a guardar los datos de la segunda
señal
fopen(puerto);
contador=1;
vectorM =
Columns 1 through 11
1 2 3 4 5 6 7 8 9 10 11
Columns 12 through 22
12 13 14 15 16 17 18 19 20 21 22
Columns 23 through 33
23 24 25 26 27 28 29 30 31 32 33
Columns 34 through 44
34 35 36 37 38 39 40 41 42 43 44
Columns 45 through 55
45 46 47 48 49 50 51 52 53 54 55
Columns 56 through 66
56 57 58 59 60 61 62 63 64 65 66
Columns 67 through 77
67 68 69 70 71 72 73 74 75 76 77
Columns 78 through 88
78 79 80 81 82 83 84 85 86 87 88
Columns 89 through 99
89 90 91 92 93 94 95 96 97 98 99
100 101 102 103 104 105 106 107 108 109 110
111 112 113 114 115 116 117 118 119 120 121
122 123 124 125 126 127 128 129 130 131 132
133 134 135 136 137 138 139 140 141 142 143
144 145 146 147 148 149 150 151 152 153 154
155 156 157 158 159 160 161 162 163 164 165
177 178 179 180 181 182 183 184 185 186 187
188 189 190 191 192 193 194 195 196 197 198
199 200
ans =
Columns 1 through 6
Columns 7 through 12
Columns 13 through 18
Columns 19 through 24
0 3.7146 0 3.7097 0 3.7097
Columns 25 through 30
Columns 31 through 36
Columns 37 through 42
Columns 43 through 48
Columns 49 through 54
Columns 55 through 60
Columns 61 through 66
Columns 73 through 78
Columns 79 through 84
Columns 85 through 90
Columns 91 through 96
>>
3. Adquirir las muestras de un sistema de segundo orden de simple entrada y simple salida cuya entrada sea
una señal de pulsos cuadrados de frecuencia 10 [Hz]
function voltaje=ADC_Serial(muestras)
close all;
clc;
voltaje=0;
ans =
Columns 1 through 6
0.3271 3.3398 3.5986 3.4717 3.5986 3.5303
Columns 7 through 12
Columns 13 through 18
Columns 19 through 24
Columns 25 through 30
Columns 31 through 36
Columns 37 through 42
Columns 43 through 48
Columns 55 through 60
Columns 61 through 66
Columns 67 through 72
Columns 73 through 78
Columns 79 through 84
Columns 85 through 90
Columns 91 through 96
3.5986 3.5596 3.5986 3.5645 3.5938 3.5645
3.5986 3.5596
>>
Investigar
1. Cual la velocidad de conversión en las tarjetas Arduino Uno, Mega y Due
Este conversor ADC va conectado a un multiplexor, para que así, con uno solo de estos podamos tener varías entradas,
como es en el caso de las placas Arduino que normalmente cuenta con 6 de estas. La Arduino MEGA en cambio cuenta
con 16 entradas analógicas.
A continuación, haremos un programa con Arduino para calcular el tiempo de muestreo que tiene nuestra placa. Para
este ejemplo solo requerimos de una placa Arduino y el código será el siguiente:
2. void setup(){
3.
4. Serial.begin(9600);
5. muestreo();
6.
7. }
8.
9. void loop(){
10. }
11.
12. void muestreo(){
13.
14. unsigned long time1=0;
15. unsigned long time=0;
16. Serial.println("*************************");
17. Serial.println("ENSAYO TIEMPO DE MUESTRO:");
18. Serial.println("*************************");
19. for(byte i =0; i<4; i++){
20. time1=micros();
21. int A=analogRead(A0);
22. time=micros()-time1;
23. Serial.print(" Muestra: ");
24. Serial.print(i+1);
25. Serial.print(" Tiempo: ");
26. Serial.println(time);
27. }
28.
29. }
30. Activando el serial monitor podremos ver los resultados de nuestro experimento:
31.
32. El código que he utilizado para este fin es el siguiente:
33. unsigned long tini;
34. unsigned long tbucle;
35. unsigned long ttotal;
36. unsigned long tdummy;
37. int i=0;
38. int val=0;
39. void setup() {
40. Serial.begin(9600);
41. Serial.println("Comenzamos!");
42. }
43. void loop() {
44. i++;
45. Serial.print("Medida ");
46. Serial.print(i);
47. Serial.print(":t");
48. tini = millis();
49.
50. tdummy=millis();
51. for(unsigned long int i=0;i<10000;i++){
52. }
53. tbucle=millis();
54.
55. for(unsigned long int i=0;i<10000;i++){
56. al=analogRead(A2);
57. }
58. ttotal=millis();
59.
60. Serial.print((float)(ttotal-tbucle-(tbucle-tini))/10.00);
61. Serial.println(" uS");
62. }
63. Los tiempos obtenidos son:
Excepto en la primera medida, las demás tiene un tiempo de muestreo de 112 micro segundos, lo que equivale a una
frecuencia de muestreo de 8.928 kHz, podemos tomar por valido ya que estoy utilizando una placa Arduino UNO. A
demás debemos tener en cuenta una pequeña perdida de tiempo que tenemos al guardar y calcular las variables time1
y time.
Otro factor a tener en cuenta del ADC es su resolución, para ello hablamos de los bits de resolución que tiene, los bits
no permiten hacer combinaciones, cuantos mas tengamos mayor numero de combinaciones podremos hacer, cada
una de estas combinaciones muestra una medida del sistema analógico, la cantidad de medidas que tenemos serán 2
elevado al numero de bits de resolución. Puesto que Arduino UNO, en mi caso, tiene un ADC de 10 bits
de resolución tendrá 1024 combinaciones. La placa Arduino DUE por ejemplo cuenta con un ADC de 12 bits
(4096 combinaciones).
Pero hay un segundo factor que interviene en la resolución, es el rango de medida, El rango de Voltae de las
placas Arduino por defecto es de 5v o 3.3v. Con esto sabemos que en voltios tenemos una resolución igual a;
A continuación haremos un ejemplo con Arduino de la resolución midiendo el voltaje en un potenciómetro, iremos
girando las manecilla del potenciómetro y veremos que conversión da el ADC y a que corresponde en voltaje.
Comprobaremos a demás que el paso calculado antes de 4.88mV es correcto.
Una vez compilado, abrimos el serial monitor y comenzamos a rotar el potenciómetro para ver que sucede, si ha sido
montado correctamente, os saldrá lo siguiente:
A partir de estos datos reales podemos conocer el resolución tenemos cuando trabajamos en el rango de voltaje de 0 a
5v, para ello cogemos dos muestras cuales quieras, por ejemplo la 21 y la 22 y hacemos lo siguiente:
Arduino UNO, en mi caso, tiene un ADC de 10 bits de resolución tendrá 1024 combinaciones. La placa Arduino DUE por
ejemplo cuenta con un ADC de 12 bits (4096 combinaciones).
Pero hay un segundo factor que interviene en la resolución, es el rango de medida, El rango de Voltae de las
placas Arduino por defecto es de 5v o 3.3v. Con esto sabemos que en voltios tenemos una resolución igual a;