
Portuguese: 
Grüzi YouTubers.
Daqui é o homem de "sootaque" suíço.
Com um novo episódio em torno de sensores e micro controladores.
No vídeo # 131 artilhámos o nosso Raspi.
Uma das novas alterações foi um ventilador de refrigeração
que se liga automaticamente, caso a temperatura do CPU
seja muito elevada.
Os espectadores sugeriram tornar a velocidade do ventilador variável.
E isto é o que vamos fazer hoje.
Também vamos aprender algumas coisas sobre PWM, controladores PID, MOSFET
e transistores. Até um pouco de magia.
Então, vamos começar: No vídeo # 131 eu usei um
conceito simples: Um transístor MOSFET para ligar
e desligar o ventilador e um programa Python que mede a temperatura do CPU e liga
o MOSFET, quando a temperatura é demasiado alta.

English: 
Grüzi YouTubers.
Here is the guy with the Swiss accent.
With a new episode around sensors and microcontrollers.
In video #131 we pimped our Raspi.
One of the new features was a cooling fan
which switched automatically on if CPU temperature
was too high.
Viewers suggested to make the speed of the
fan variable.
And this is, what we will do today.
We also will learn a few things about Pulse
Width Modulation, PID controllers, MOSFET
transistors, and even a little of magic.
So, let’s start: in video #131 I used a
simple concept: A MOSFET transistor to switch
the fan on and off and a Python program which
measures the CPU temperature and switched
the MOSFET on, when the temperature was too
high.

English: 
Very simple.
I used a beefy IRLZ44N transistor, because
it is logic level.
In video #137 I showed, that these FETs switch
on at a voltage of below 2.5 volt.
This is, why they are ideal for microprocessors
with 3.3 volt logic.
First, let’s do some tests on the breadboard:
I used the same diagram as in the last video
and we see, that the fan starts to run full
speed if we connect the gate of the transistor
to 3.3 volt and it is switches off if we connect
the gate to ground.
I connect now a button between 3.3 volt and
the gate to switch the voltage.
As soon as I push the switch, the fan starts
to run.

Portuguese: 
Muito simples.
Utilizei um transístor robusto o IRLZ44N, porque opera em nível lógico TTL.
No vídeo # 137 eu mostrei que esses FETs operam a uma voltagem inferior a 2,5 volt.
E é por isso que eles são ideais para micro processadores com lógica de 3,3 volt.
Primeiro, vamos fazer alguns testes na placa de ensaio:
Usei o mesmo diagrama do último vídeo
e vemos, que o ventilador começa a girar a toda a velocidade quando ligamos a porta do transístor
a 3,3 volt e que se desliga se ligarmos
a porta à terra (Ground GND).
Eu introduzo agora um interruptor entre os 3,3 volts e a porta para mudar a tensão.
Assim que eu ligo o interruptor, o ventilador começa a funcionar.

Portuguese: 
Infelizmente, o ventilador continua a funcionar mesmo se eu desligar o interruptor.
Não é bem o que esperávamos.
Certo ?
Então, vamos medir a tensão da porta para verificar, se eu cometi algum erro de ligação.
Se olharmos para o osciloscópio, vemos que
a tensão de porta é zero volt.
Mas também vemos que, assim que eu encosto a sonda, o ventilador pára.
Magia ?
Vamos  tentar de novo.
E desta vez, deixo a sonda colocada,
porque queremos «ver» a verdade.
A tensão realmente alterna entre zero e
3,3 volt.
Mas o ventilador agora comporta-se de forma diferente: Ele faz exactamente o que queremos.
Ele liga e desliga.
Óptimo.
Mas o que aconteceu ?
A explicação não é transparente.
Mas temos uma pista, se virmos de perto esta curva: O sinal não é um rectângulo regular:

English: 
Unfortunately, the fan continues to run even
if I open the switch.
Not what we expected.
Right?
So, lets measure the gate voltage to check,
if I made a wiring mistake.
If we look at the oscilloscope, we see, that
the gate voltage is zero volts.
But we also see, that, as soon as I connected
the probe, the fan stopped.
Magic?
Let’s try again.
And this time, I leave the probe connected,
because we want to «see» the truth.
The voltage really switches between zero and
3.3 volt.
But the fan now behaves differently: It does
exactly, what we want.
It switches on and off.
Great.
But what happened?
The explanation is somehow hidden.
But we get a clue, if we look very close to
this curve: The signal is not a clean rectangle:

English: 
When we open the contact, it does not go immediately
to zero, it has a curve, which is typical
for the discharge of a capacitor.
Maybe, there is somewhere a capacitor?
Yes, there is a capacitor between the gate
of a MOSFET and ground.
And if we leave the gate open, this capacitor
stays charged, the gate voltage stays high,
and the transistor stays on.
What happened when I connected the probe?
Each probe of an oscilloscope has an input
resistance.
As soon as I connected the probe to the gate,
this capacitor was discharged and the transistor
switched off.
BTW: This behavior is completely different
compared with a bipolar NPN transistor and
is typical for a FET.

Portuguese: 
Quando abrimos o contacto, a tensão não desce imediatamente para zero,  existe uma curva, o que é típico
da descarga de um condensador.
Talvez, exista um condensador algures ?
Sim, há um condensador entre a porta
de um MOSFET e terra.
E se deixarmos a porta aberta, este condensador permanece carregado, logo a tensão da porta permanece alta,
e o transístor permanece ligado.
O que aconteceu quando eu liguei a sonda?
Cada sonda de um osciloscópio tem uma dada resistência de entrada.
Assim que liguei a sonda à porta,
este condensador foi descarregado e o transístor
desligou-se.
BTW: Este comportamento é completamente diferente do de um transístor NPN bipolar
e é típico de um FET.

English: 
To prove my point, I replace the FET transistor
with a 1 nF capacitor.
And you see, its behavior is very similar.
Of course, it does not switch the fan…
And if we have a look into the data sheet
of the transistor, we find the value of this
capacitance, too.
So, best practice is to connect a resistor
between gate and ground, in parallel to the
capacitance.
In our case, the Raspi GPIO has a quite low
resistance.
So, this resistor is already “built-in”
and we do not need to add an additional one.
For the next step, we have to know the maximum
speed of the fan.
It is about 7800 RPM at 5 volt.
As we saw, I can switch the fan on and off.
If I do this fast, then the fan cannot get
to its full speed anymore.

Portuguese: 
Para provar isto, eu substituí o transístor FET por um condensador de 1 nF.
E vemos que o seu comportamento é muito semelhante.
Claro que ele não liga o ventilador ...
E olharmos para a folha de dados
do transístor, encontramos o valor desta
capacitancia.
Então, a melhor prática é ligar uma resistência entre a porta e terra, em paralelo com essa
capacitancia.
No nosso caso, o GPIO do Raspi tem uma resistência muito baixa.
Assim, esta resistência já é “built-in”
e nós não precisamos adicionar nada.
Para a próxima etapa, temos de saber a velocidade máxima do ventilador.
Ela é cerca de 7800 RPM a 5 volt.
Como vimos, eu posso ligar e desligar o ventilador.
Se eu fizer isso rapidamente, o ventilador já não atinge a sua velocidade máxima.

Portuguese: 
Nem tem tempo para parar completamente.
Alguns de vocês sabem que eu ainda sei código Morse, mas esta tipo de comutação é muito desgastante
até para mim.
Então, é melhor substituir o meu dedo e ligar antes um gerador de onda à porta do FET.
Ele comuta a tensão a cada 0,5 segundo:
ligado e desligado.
O que acontece ?
As RPM começam a flutuar e o medidor mostra cerca de 4000 RPM.
Se eu reduzir a percentagem do tempo ligado para 20%, o ventilador tem tempo para parar completamente
e o medidor mostra cerca de 1000 RPM, obviamente, com grande oscilação.
É fácil reduzir essa oscilação: Basta
apenas aumentar a frequência de comutação do
sinal para digamos 10 Hz.
Agora, já não há oscilação e o
medidor mostra uma forma mais ou menos constante 1000 RPM.

English: 
And it does not have time to stop completely.
Some of you know, that I still know the Morse
code, but this switching is too exhausting
even for me.
So, I replace my finger and connect a waveform
generator to the gate.
It switches the voltage every 0.5 seconds
on and off.
What happens?
The RPM starts to fluctuate and the meter
shows around 4000 RPM.
If I reduce the percentage of the on-time
to 20%, the fan has the time to go to a complete
stop and the meter shows around 1000 RPM,
obviously with a lot of fluctuation.
It is easy to reduce this fluctuation: We
just increase the switching frequency of the
signal to let’s say 10 Hz.
Now, there is no more fluctuation and the
meter shows a more or less constant 1000 RPM.

Portuguese: 
Se eu aumentar o ciclo de trabalho para 50% novamente,
temos 4000 RPM, que é cerca de 50% do
máximo de 7800 RPM.
Muito bom.
Com este sistema, nós podemos variar a velocidade do ventilador.
E podemos usar um sinal de 3.3 volts digital para fazer isso.
Que está em linha com as possibilidades do nosso Raspi.
Se aumentarmos a frequência ainda mais, nada acontece de especial.
Só se ampliarmos a borda da curva,
vemos que a tensão é superior a
5 volt.
Aqui isso não é perigoso, porque
o nosso MOSFET pode lidar com isso.
Mas, noutras outras situações, onde comutamos bobinas, motores, ou outros indutores, esta tensão pode ser  muito mais elevada, e pode
até destruir o transístor.

English: 
If I increase the duty cycle to 50% again,
we get 4000 RPM, which is around 50% of the
maximum 7800 RPM.
Very good.
With this system, we obviously can vary the
speed of the fan.
And we can use a digital 3.3 volt signal to
do so.
Which fit’s exactly the possibilities of
our Raspi.
If we increase the frequency even more, nothing
special happens.
Only if we zoom in to the edge of the curve,
we see, that the voltage goes higher than
5 volt.
In our situation, this is not dangerous, because
our MOSFET can handle that.
But in other situations, where we switch coils,
this voltage can get much higher, and can
even destroy the transistor.

English: 
Fortunately, there is a simple trick available:
We connect a diode, preferably a fast Schottky
type, in parallel to the coil (or in our case,
fan).
And now, this overshooting is gone.
Another thing I have to mention if we drive
MOSFETs with PWM signals: Charging and discharging
the gate capacitor draws current from the
driving pin.
The higher the frequency, the higher the average
current, because a capacitor behaves like
a short circuit at high frequencies.
This is, why you have to add a protection
resistor between the GPIO and the gate.
This resistor limits the current.
Today, we only use very low frequencies.
So, this is not too dangerous for our Raspi
and I did not implement one.
Now, our hardware is ready.
Let’s go to the software.

Portuguese: 
Felizmente, há um truque simples:
Ligamos um díodo, de preferência um Schottky rápido
em paralelo com a bobina ou, no nosso caso, ventilador.
E agora, esta subida de tensão desaparece.
Outra coisa que tenho que mencionar se comutamos MOSFETs com sinais PWM: O carregamento e descarregamento
do condensador inserido na porta extrai corrente do pino.
Quanto maior a frequência, maior a média da corrente, porque um condensador comporta-se como
um curto-circuito a frequências elevadas.
É por isso que temos de adicionar uma resistência de protecção entre o GPIO e a porta.
Esta resistência limita a corrente.
Hoje, só usámos frequências muito baixas.
Então não é muito perigoso para o nosso Raspi, logo não usei a resistência.
Agora, o nosso hardware está pronto.
Vamos para o software.

English: 
In video #131 we already had a software which
started automatically at boot-up, reads the
temperature, and switches the fan.
So, we use exactly this software and add a
few lines.
First, we have to be able to generate a pulsed
signal.
This is also called PWM, or pulse width modulated
signal.
Fortunately, the Raspis can create such a
signal at their GPIO pins.
We use Python for our program to control the
fan.
In Python, the command to enable PWM on a
pin is:
myPWM=GPIO.PWM(fanPin,50) where fanPin is
the pin number, and 50 is the frequency.
As we found out, the frequency is not so important
for our application.
That’s why I choose 50 Hertz.
Now, we can start the pin with the command
myPWM.start(50), where 50 is the duty cycle.

Portuguese: 
No vídeo # 131 já temos um software que arranca automaticamente no boot-up, lê a
temperatura e comuta o ventilador.
Então, usamos este software e adicionamos algumas linhas.
Em primeiro lugar, temos de ser capazes de gerar um sinal de impulso.
Também chamado PWM, ou sinal de largura de impulso modulado.
Felizmente, o Raspi pode este tipo de
sinal nos seus pinos GPIO.
Nós usamos o Python para o nosso programa de controlo do ventilador.
Em Python, o comando para activar o PWM num pino é:
myPWM = GPIO.PWM (fanPin, 50), onde fanPin é o número do pino, e 50 é a frequência.
Como descobrimos, a frequência não é muito importante nesta nossa aplicação.
É por isso que escolhemos 50 Hertz.
Agora, podemos inicializar o pino com o comando myPWM.start (50), onde 50 é o ciclo de trabalho (duty cycle).

English: 
If we later want to change the duty cycle,
we have to use the command myPWM.ChangeDutyCycle(fanSpeed),
where, fanSpeed is the variable for the duty
cycle.
Now we have nearly everything necessary to
fulfill our task.
The only missing part is how to determine
how fast the fan should run.
Let’s assume, we want a stable temperature
of 45 degrees.
Then, we could measure the actual temperature
and calculate the difference.
Let’s assume, we measure 55 degrees.
Then, the difference is 10 degrees, and let’s
assume, we want full speed at this temperature.
Then, we would have the following formula:
fanSpeed (in %) = 10 * (actualTemp – desiredTemp)
Now, let’s assume the temperature difference
gets smaller and smaller.

Portuguese: 
Se mais tarde quisermos alterar o ciclo de trabalho,
temos que usar o comando myPWM.ChangeDutyCycle(VEL.VENT),
onde, VEL.VENT é a variável para o ciclo de trabalho.
Agora temos quase tudo para
a nossa tarefa.
A única parte que falta é como determinar quão rápido o ventilador deve rodar.
Vamos supor que queremos uma temperatura estável de 45 graus.
Então, poderíamos medir a temperatura real e calcular a diferença.
Vamos supor que medimos 55 graus.
Então, a diferença é de 10 graus, e vamos assumir que queremos toda a velocidade a esta temperatura.
Então, teríamos a seguinte fórmula:
VEL.VENT (em%) = 10 * (actualTemp - desiredTemp)
Agora vamos supor que a diferença de temperatura fica cada vez menor.

English: 
Then, the speed of the fan gets smaller and
smaller.
But unfortunately, the temperature will never
exactly reach the 45 degrees, also, because
the fan will stop at about 10% duty cycle.
This regulator is called p regulator because
it is proportional.
If we want to get a more precise control,
we have to add an I part, an integration part.
To achieve this, we sum up all differences
between the desired and the actual temperature.
If our fan stops at let’s say 46 degrees,
and we add the differences every second, this
value adds up quickly and the fan starts to
run, even with this small temperature difference.
This is, why I also implemented an I part
in my program.
If you watch my video #28, you see the term
“PID controller”.

Portuguese: 
Então a velocidade do ventilador deverá também ser cada vez meno.
Mas, infelizmente, a temperatura nunca será exactamente 45 graus, porque
o ventilador pára com um ciclo de trabalho de cerca de 10%.
Este tipo de regulador é chamado regulador tipo P porque é proporcional.
Se quisermos obter um controle mais exacto, temos de acrescentar uma parte I, de integração.
Para conseguir isso, somam-se todas as diferenças entre a temperatura desejada e a real.
Se o nosso ventilador parar, digamos, nos 46 graus, e adicionamos as diferenças a cada segundo, este
valor sobe rapidamente e a ventoinha começa a girar, mesmo com esta pequena diferença de temperatura.
Foi por isso que eu também implementei uma parte I no meu programa.
No meu vídeo # 28, vemos o termo
“Controlador PID”.

English: 
So, there is one letter missing: The D or
differential part.
This part is used to get a faster reaction.
This is important for self-balancing systems,
for example.
With our fan, speed of regulation is not so
important.
This is, why I did not implement a D part.
So, our controller is only called “PI controller”.
Guys, who followed the instructions from video
#131 and already have a fan implemented just
need to get the improved program.
All the others have to watch video #131 and
follow the instructions there.
Finally, we check, if everything works.
To do that, I switch the program off and the
CPU temperature rises to 65 degrees.

Portuguese: 
Então, falta uma letra: 
D ou parte diferencial.
Esta parte é usada para obtermos uma reacção mais rápida.
Isto é importante para os sistemas auto-equilíbribrados, por exemplo.
Para o nosso ventilador, a velocidade da regulação não é muito importante.
Assim não implementei uma parte D.
Então, o nosso controlador só pode ser chamado “controlador PI”.
Quem seguiu as instruções do vídeo
# 131 e tem já um ventilador apenas
precisa de obter o programa melhorado.
Todos os outros têm que partir do vídeo # 131 e seguir as instruções.
Por fim, verificamos se tudo funciona.
Para fazer isso, eu desligo o programa e a temperatura do processador eleva-se a 65 graus.

English: 
As soon as we start the program, the fan starts
to run with 100% speed.
The temperature starts to decrease, and the
fan also decreases its speed till we reach
45 degrees.
Then, the temperature oscillates around our
desired temperature, and the fan needs only
30 to 40% of its power to keep the temperature
at this CPU load.
It would immediately adapt its power if the
CPU load would change.
So, we now have a quiet fan and a reasonable
CPU temperature.
I think, this is really “cool”.
So, summarized, we know now how to use PWM
on a Raspi and we also know how to properly
drive a Mosfet transistor.
And we programmed a simple PI controller.
Fortunately, there was no Magic, just a lack
of understanding.

Portuguese: 
Assim que reiniciamos o programa, o ventilador começa com uma velocidade correspondente a 100%.
A temperatura começa a diminuir, e a
ventoinha também diminui a sua velocidade até chegar
aos 45 graus.
Assim, a temperatura oscila em torno de nossa pretendida, e o ventilador necessita apenas de
30 a 40% da sua capacidade para manter a temperatura, dada esta carga do CPU.
Adapta-se imediatamente se a
carga do CPU mudar.
Então, temos agora uma ventoinha silenciosa e uma temperatura do CPU razoável.
Eu acho isso “cool”.
Assim, resumindo, sabemos agora como usar PWM num Raspi e também sabemos
comutar um transístor MOSFET.
E programámos um controlador simples PI.
Felizmente, não havia magia, apenas um ligeiro mal entendido (capacitancia dos FET).

English: 
As it is quite often in life
I hope, this video was useful or at least
interesting for you.
If true then like.
Bye

Portuguese: 
Como acontece muitas vezes na vida.
Espero que, este vídeo tenha sido útil, ou, pelo menos,
interessante para si.
Se for verdade, então gosto ( like ).
Adeus!
