He conectado una batería / 2 baterías (GND y A0) y la medición mostrada en el puerto com26 está bien. He conectado el LM35 (el LM35 tiene 1 grado celsius para un valor medido de 10 mV) en el VCC y el GND y el pin de salida está conectado al A0 (entrada analógica). El valor leído en el puerto com26 a temperatura ambiente (26 grados centígrados) es de 40 grados centígrados. No entiendo cuál es el problema. El sensor está bien porque he usado un multímetro y el valor de salida es 262 mV, dividido por 10 = 26 grados centígrados. pero el uC mide 400mV (en lugar de 262mV) que significa 40 grados. He utilizado una fuente de alimentación externa para el sensor LM35 y el mismo problema. He usado 3.3 y 5V para el LM35 (de la placa de control de estado) y el mismo problema ... Estoy muy agradecido por este problema ...
Soy un principiante en STM32, así que ayúdame.
** Actualización: he realizado actualizaciones de firmware, actualizaciones de la biblioteca stm32, actualizaciones de la imagen 2 ... En la imagen dos, las lecturas de las primeras filas son de una batería de 1.28 V El resto son del sensor LM35. La batería parece estar bien, pero para LM35 obtengo 367 mV en lugar de 270 mV (medido con un multímetro) No sé por qué el valor de L35 no está bien desde el ADC de la unidad ** **
código a continuación:
#include "test_env.h"
Serial pc(USBTX, USBRX);
AnalogIn analogValue(A2);
DigitalIn userButton(USER_BUTTON);
DigitalOut led(LED1);
// Calculate the corresponding acquisition measure for a given value in mV
#define MV(x) ((0xFFF*x)/3300)
void notify_completion(bool success) {
led = 0;
pc.baud(9600);
int count = 0;
bool enFlag = true;
while (1) {
count++;
if (userButton == 0) {
enFlag = (enFlag == true) ? false : true;
//pc.close();
}
if (enFlag) {
unsigned short meas = (analogValue.read_u16());
float final = (float) 3300 / 65535 * (float) meas; // normal 0.0008 or 3.3v-3300mV 0,8058608058608059 3300/4095
pc.printf("%d;%d val in mV: %d, tmp:%d \n", count, meas, (int) final, int(analogValue.read() * 3300));
}
led = !led;
wait(2.f);
}
}