Geogak:
what is the purpose of this aplication, Cooling a large PC.
what are the tolerances?
is the goal steady airflow?
would you be willing to add an airflow meter?
PID may be a good solution, What should the PV be, Tempature, airflow, something else?
The purpose is to cool medium to large size PCs either with reduced noise and/or low temperatures as the main goal.
I'd like to have individual control of each fan, and as input to their automatic control I plan to add several temperature probes.
I am not familiar with air flow meters, but I'm not against trying to incorporate them. I could possibly also make custom hall effect sensors for each fan, but that may produce unwanted noise, and I'd also prefer to not have such components visible.
avr_fred:
Now, back to the OP. You used so many buzz words in your description, I'm not sure what you are really trying to do. Just what is "variable and dynamic"? I fully understand variable, that is the point of PWM but what do you mean by using the word dynamic? Just being redundant?
I'd like to have the voltage be variable (e.g. using some PWM driver for simplicity), and the voltage smoothing to accommodate for a large range of loads dynamically. E.g. with a 50% duty cycle, to get close enough to a smooth 6V to allow for a reliable RPM feedback signal. I don't know if I can achieve this with a simple low pass filter.
avr_fred:
The reason for hall sensor feedback is so you can apply PWM and still get solid speed feedback from the fan. It is in the form of a pulse or pulses for each rotation of the shaft. So, your statement is confusing since hall sensor feedback is independent of the fans supply.
Normally, 3 and 4 wire computer fans pulse once on the sense wire per half revolution of the blades. The constant switching on and off of the 12V power when driven by a PWM controlled transistor or MOSFET is not only switching the motor, but also affects the hall effect sensor. For my 3 wire fans this appears to result in a lot of jitter on the sense wire. When I have my Arduino set to register interrupts on a rising edge, I get several thousands of triggers per second. And some fans, at some "sweet spot" duty cycle below 100%, seem to mess up the Arduino's internal time keeping (millis() and delay() are affected), but that's another issue.
Driving my 4 wire fans, which can accept a PWM signal directly on the fourth blue wire, using a PWM controlled transistor or MOSFET seem to give me valid RPM measurements even below 100% duty cycle. I assume these fans have some more advanced design and that their hall sensor is somewhat isolated.
I have some Noctua 3 wire fans which do not seem to produce any useful RPM signal data at much less than 12V, even if there is no fluctuations in the supply voltage. At least they do not constantly send a signal full of jitter when the voltage is held constant.
avr_fred:
In the end, it doesn't matter if you use an NPN or PNP transistor, that only changes the logic polarity to drive it. But, given a 300ma load, I'd go with a logic level mosfet rather than trying to use a transistor since mosfets are superior to transistors for use as on/off switches. A small, simple N channel device like the IRLML0030TRPBF is fine for PWM'ing a 12 volt fan, just don't forget a diode across the fan.
I'm open to all suggestions. I have access to multiple transistors (NPN and PNP), and a couple of NPN MOSFETs. I do not yet have any PNP MOSFETs at home. The PNP transistor I chose for my latest test is low voltage (20V) and most importantly high current (700 mA). It works just as well as the NPN MOSFET I initially used. Both circuits cause a lot of jitter from the hall effect sensor, when driven at anything less than a 100% duty cycle. The advantage I saw with the PNP transistor is when paired with something like the constant current PWM driver that the TLC5940 is.
Perhaps what I'm after is a simplified buck converter, if there is such a thing.