Metematica per PWM

Ciao a tutti

vorrei realizzare un controllo in PWM regolato dalla lettura di una temperatura, con le seguenti impostazioni:

l'uscita pwm deve essere off se la temperatura misurata('Tm')e minore del valore 'T1'

l'uscita pwm deve essere all'1% al raggiungimento di 'T1' ( Tm= T1)

l'uscita PWM deve incrementare la % d'uscita gradualmene finchè non raggiunge il valore di 'T2' quindi PWM =255 quando Tm = T2

l'uscita PWM deve mantenere l'uscita al 100% (PWM=255 se Tm > T2

esempio:

T1= 10
T2= 40

tra il valore 10 e 40 vorrei una variazione da 0 a 255

non sto riusceno ad trovare una formula matematica che realizzi questa condizione mantenendo i valori T1 e T2 editabili da tastierino ed lcd.

Suggerimenti?

non funziona così?

ValoreDaUsarePerPWM = map (tm,t1,t2,0,255);

Patrick_M:
non funziona così?

ValoreDaUsarePerPWM = map (tm,t1,t2,0,255);

adesso provo.

nel frattempo do ore di studio sono arrivato a questo tramite excel:

ValoreDaUsarePerPWM = (tm-t2+t1)/(255/t1)

Dalle specifiche del primo post:

 > T2 --> 255
== T2 --> 100% --> 255
== T1 --> 1%   --> 3
 < T1 --> 0

Per tutto il range: T1 <= Tm <= T2

pwm = K1*Tm + K2

dove:
K1 = 252 / (T2 - T1)
K2 = 3 - (K1 * T1)

Ad ogni variazione di T1 o T2 si ricalcolano K1 e K2.

Patrick_M:
non funziona così?

ValoreDaUsarePerPWM = map (tm,t1,t2,0,255);

No perché map() non gestisce i valori minori o maggiori, ossia lui rimappa tutto (ad esempio map(0, 10, 20, 0, 100) dà un valore negativo). Servono due "if()".

docdoc:
No perché map() non gestisce i valori minori o maggiori, ossia lui rimappa tutto (ad esempio map(0, 10, 20, 0, 100) dà un valore negativo). Servono due "if()".

tra il valore 10 e 40 vorrei una variazione da 0 a 255

i valori esterni non venivano li ho contemplati... :wink: