![]() |
|
#1
|
|||
|
|||
|
Auto Fan Control for 48xx: a guide
In this guide i’ll show how to optimize the fan control of 48xx video cards from ATI by tuning the parameters of the fan controller with Rivatuner.
In order to fully take advantage of this guide you must use Rivatuner 2.11. Since the 4870 X2 uses a different fan controller with respect to single GPU sisters (4870 and 4850), the automatic fan control of these boards will be described in different sections. Before beginning, lemme say this: in this guide you’ll not find the exact parameters optimal for your system; in fact optimal parameters for fan control depend on a number of factors that are unique for each system/user, i.e. the desired temperature in idle/3d, the power consumption in idle (that can vary greatly by optimizing the powerplay states), the ambient temperature, the efficiency of the whole cooling system, the tolerated noise and so on. So don’t expect that the parameters i’ll show you (parameters that work nicely on my system based on my tastes) work out of box for you. In the end some tuning is expected from you, but don’t worry, i’ll show you the logic behind auto fan control, so it should be easy to find the right parameters for each system: this is the spirit of this guide. Ok, let’s begin. Index Part I - Preliminary steps: how to configure rivatuner for automatic fan control and for Crossfire systems Part II - Automatic Optimized fan control for 4870 X2 Part III - Automatic Optimized fan control for 4850/4870 Part IV - How to reduce the power drawn in idle Part I - Preliminary steps Open Rivatuner, click on power user tab, find the group "Rivatuner \ Fan" , expand it by clicking on the "+" sign and change the value of the parameter "AutoFanSpeedControl" to 3 by double clicking on the right column: ![]() Now close and restart Rivatuner. Congratulations: the auto fan control rules have been unlocked. Now open the low level settings window: it is enough to click on the little arrow on the right under the active display adapter and left click on the first button: ![]() Now select the fan tab: ![]() You will see the low level fan settings window. Fan settings Tab for x2: ![]() Fan settings Tab for 4870/4850: ![]() Now activate the low level fan control. It is enough to check the box "Enable low-level fan control". You'll get this prompt: ![]() Click on "Detect now" and wait some seconds: good, now we can change the fan control rules. If you have multiple video cards linked in crossfire, you can configure the fan controllers of the different video cards at the same time by enabling the cloning mode option for fan control in Rivatuner: in this way when you change the fan controller parameters of the master board, the fan controller parameters of the other boards are set equals to the ones of the master board; this is done automatically by Rivatuner. Note that this operation mode is valid only for same model video cards (i.e. 2 4870x2 or 2 4850 and so on). To enabling fan cloning operational mode, browse to Power User Tab of Rivatuner, search the group "Rivatuner \ Fan" and set the variable EnableFanControlCloning = 1: ![]() Remember: you need to close and restart Rivatuner in order for the setting to take effect. If you interested in 4870x2 fan control, browse to part II of this guide, otherwise jump directly to part III, where i discuss about 48xx single GPU boards. Last edited by ribbell; 09-18-2008 at 08:48 AM..
|
|
#2
|
|||
|
|||
|
Excellent work, i will try my hands at it tonight after work. Sticky this mods!!!!
|
|
#3
|
|||
|
|||
|
Awesome, can't wait for the 4850/4870 fix and the idle core settings!
Props for an awesome guide! Last edited by wellaxer; 09-12-2008 at 09:23 AM..
|
|
#4
|
|||
|
|||
|
Should this work for 4870s in Crossfire? (I can not Overclock the secondary one in Crossfire with Rivatuner 2.10).
I have to admit I care more about dynamic fan control than I do about OC.
|
|
#5
|
|||
|
|||
|
Yes, with rivatuner 2.11 it will work for 4870 crossfire (you will be able to set auto control rules for both cards).
|
|
#6
|
|||
|
|||
|
Part II - Automatic Optimized fan control for 4870 X2
1) Basic Automatic Control As you can see, you can choose between two operating modes: Fixed, where you select a fixed fan speed by moving the upper slider, and Auto, where you let the fan controller varying the fan speed based on the GPU temperature and on the parameters of automatic operation mode. Let’s see in detail the auto control mode. Auto should be selected by default. If Fixed mode is selected, select Auto. Now I’ll show how to change the parameters in order to force the fan speed to vary linearly as a function of GPU temperature between a minimum fan speed (at which the fan duty cycle is Duty_Cycle_Min) and a maximum fan speed (at which the fan duty cycle is Duty_Cycle_Max). Note that the fan duty cycle is given in percents, so if duty_cycle = 50, this means that the fan voltage is 50 % of the maximum value (12 V). We can assume that fan speed in this condition is also 50 % of the maximum reachable fan speed. Let’s call T_min the temperature where the fan duty cycle is Duty_Cycle_Min and with T_max the temperature where the fan duty cycle is Duty_Cycle_Max. In other words, when the temperature varies from T_min to T_max, the fan duty cycle varies from Duty_Cycle_Min to Duty_Cycle_Max following the temperature linearly, i.e. the fan control law is a ramp. The parameters that Rivatuner let us change are the following: Duty_Cycle_Min Duty_Cycle_Max T_min T_range T_operating T_low_limit T_high_limit From this list, you can see Duty_Cycle_Min, Duty_Cycle_Max and T_min…where is T_max? In fact in the fan controller you cannot specify T_max. T_max can be assigned by changing T_range using this relation: T_range=2/3*100*(T_max-T_min)/(100-Duty_Cycle_Min) The others parameters are to be set in this way: T_operating=110 T_low_limit=0 T_high_limit=110 More on these parameters on the advanced control section. Example: We want the minimum fan speed equal to 34 % of the maximum reachable fan speed. The fan speed has to be increased starting from a GPU temperature of 55 °C and has to be equal to maximum reachable value at 95°C. We have to enter the following parameters: Duty_Cycle_Min=34 Duty_Cycle_Max=100 T_min=55 T_range=2/3*100*(T_max-T_min)/(100-Duty_Cycle_Min)=2/3*100*(95-55)/(100-34)=40.4->40(Rivatuner accepts only integer values) T_operating=110 T_low_limit=0 T_high_limit=110 So, let’s modify these parameters in Rivatuner: ![]() ![]() If we want that these parameters are applied at windows startup, it is enough to check the box "Apply fan settings at windows startup": ![]() Now click on the apply button and voila, the job is done. Just some observations: -Please take note that you don't need Rivaruner to start automatically with windows in order to apply the fan settings: by checking the box "Apply fan settings at windows startup", rivatuner will start with windows, apply the needed changes and close itself. -You can save the settings you just changed by clicking on the diskette icon: enter the name you want for the fan profile and click ok: ![]() I named the profile Automatic. In this way you can create two or more fan profiles and activate them just by selecting in the drop-down menu the associated profile. -About Trange, this parameter can assume only 16 possible values. When you enter the computed value for Trange, Rivatuner will automatically adjust the computed Trange to the closest possible value. -I said that by setting the fan control parameters as shown, the fan speed will vary linearly with the GPU temperature...this is right and wrong at the same time ![]() Let's explain better this concept with some screenshots. On the main tab of Rivatuner open the Hardware Monitor Window by clicking on the usual little arrow and selecting the last icon: ![]() You will get a window like this: ![]() In this screenshot we see the memory clock and core clock of the master gpu, the core temperature of the master gpu, the fan speed and the fan duty cycle. Now the core temperature shown in this window is the same as the one reported by CCC and other utilities (like GPU-Z). Fact is that the controller doesn't change the fan speed based on this core themperature, but on "another" core temperature that is taken from external sensor of the fan. We can see this temperature easily: right click on the core temperature graph, select setup: ![]() From the data provider drop down menu select ADT7473.dll:0 and click ok: ![]() This is the hardware monitor after ADT7473.dll:0 has been selected: ![]() See, the core temperature has changed from 53 °C to 56 °C, in fact in my case the temperature reported by the fan sensor is 3-4 °C higher than the temperature you see in CCC. Ok, let's test the parameters chosen for automatic fan control. The testing procedure is simple: starting form idle condition, i launch a fullscreen application ( GRID in this case), play some time, then return to the desktop and wait that the system cool down. Well, this is the result: ![]() Note that the temperature shown in this screenshot is from the fan sensor, i.e. the higher one. So, in idle the temperature is 56 °C while the fan speed duty cycle is 36 %, higher than the minimum fan speed duty cycle (34 %) because the temperature is higher than Tmin (55 °C). Then the 3d application is started, as you can deduce from core/memory clocks switching (powerplay in action). See, the temperature increases and the fan duty-cycle follows nicely the temperature profile. I marked the maximum temperature reached ( 77 °C) where the fan speed is 69 %. Take note that these results are with a room temperature of 30 °C ( ) 2) Advanced Automatic Control Now i'll show how to take advantage of dynamic control mode of the fan controller. This mode has been disabled in the previous example by setting T_operating=110 and T_low_limit=0. Now we'll change these parameters to further optimize tha auto control mode of the fan controller. Let's first explain the dynamic control mode. The aim of this control mode is to regulate the fan speed in such a way that the temperature of the GPU will be close to the target temperature set by T_operating when the GPU is under load. In other words the fan control tries to keep the temperature close to T_operating with the minimum possible fan speed. T_operating should be set to the value we would have for the GPU temperature under 3d. Of course T_operating should be a realistic value: if T_operating is too low, even at 100 % fan speed it would be impossible for the fan controller to keep the GPU temperature close to the target temperature set by T_operating; if T_operating is too high, the GPU temperature would become too high under 3d. T_low_limit is important when the GPU is in 2d. When the temperature becomes lower than T_low_limit, the fan controller decreases the fan speed until the fan speed becomes the minimum fan speed or the temperature becomes higher than T_low_limit as an effect of the reduced speed. In other words it tries to keep the temperature close to T_low_limit again with the minimum fan speed. So, in short, T_operating should be set to our desired temperature in 3d and T_low_limit a little higher than our idle temperature with the minimum ducy-cycle chosen. Because the dynamic control varies the fan speed increasing or decreasing Tmin, it is clear that is not important the value we set for this parameter, because it will be changed by fan controller. About Trange, now we can choose a greater value for Trange (greater Trange means that the fan speed varies slower with temperature) because in this control mode it's the job of the controller to vary faster the fan speed when the GPU temperature approaches the target temperature set by T_operating. Example We want a GPU temperature in 3d close to 85 °C. The minimum fan speed we want is 34 % (as before). Moreover the fan speed has to be decreased faster when the gpu temperature is under 60 °C. Finally we want a quieter system than the previous case when the GPU temperature is far from the target temperature (i.e. light load): it is enough to set Trange higher -> let's double Trange: Duty_Cycle_Min=34 Duty_Cycle_Max=100 T_min=60 T_range=80 T_operating=85 T_low_limit=60 T_high_limit=110 It is reccomended that the first time you enable the dynamic control set Tmin=T_low_limit (60 °C n this case). Let's enter the new values in Rivatuner: ![]() ![]() Please note that after you enter these values, now the button save becomes active: since we changed the startup settings of auto control mode, rivatuner gives us the choice to save the new settings. So if we want these settings to be applied at windows startup, let's click on the save button: ![]() Moreover we can save the profile for these settings: ![]() I named the new profile Dynamic. Ok, now we have two auto control settings: Automatic (linear control law) and Dynamic (adapted linear control law) and we can switch quicky between them. Time for the results: ![]() Well, as you can see now the fan speed varies slower than the previous case (Trange is higher) when the 3d application is started. When the tenperature becomes higher than 80 ° C the dynamic control takes on (this happens at T_operating - 5 °C): i marked three points at 80°C and 81°C and as you can see the fan speed increases with the time, even if the core temperature has increased a little:it's the control action that tries to stop the increase of the temperature. When the 3d application is closed, the fan speed start to decrease with the temperature until T_low_limit is reached (60 °C): as you can see the temperature is constant, but the fan speed in decreasing further until it reaches the minimum allowable (34 %). Last edited by ribbell; 09-16-2008 at 09:31 AM..
|
|
#7
|
|||
|
|||
|
For the almighty mods: please sticky this thread !
![]() Congrats for ribbell, nice job and informative post . ![]()
|
|
#8
|
|||
|
|||
|
Good writeup man. I am glad you can use Rivatuner now with the new 4800 series.
|
|
#9
|
|||
|
|||
|
They should rename Rivatuner or have the same program under a different name for ATI lol. Always felt wierd to use RivaTuner with a ATI card.
|
|
#10
|
|||
|
|||
|
Part III - Automatic Optimized fan control for 4850/4870
[Big thanks to Unwinder who found out the variuos parameters of the Ati integrated fan controller: here's the original post of Unwinder with the explanation of the controller parameters] Ok, now we are on the fan control tab of rivatuner with low level settings enabled. You can choose between fixed mode, where the fan duty cycle is fixed and can be modified by moving the upper slider, and auto mode, where the fan speed is controlled automatically by the integrated fan controller of the GPU based on the auto parameters you set for this control mode. The auto control mode of the integrated fan controller have two operating modes: the linear control mode and the look-up table control mode. Let's discuss first the parameters shared by the two control modes. T_min: is the temperature at which the fan speed start to be increased. Under T_min, regardless of the control mode selected, tha fan speed is zero or costant. T_max: is the temperature at which the fan speed is set at 100%. T_hysteresis: when the temperature reaches the value T_min-T_hysteresis, the fan is stopped. After the fan has been deactivated, the fan is reactivated when the temperature becomes higher than T_min. Reccomended settings: Q: Do you want your fan always on A: YES! -> Reccomended setting = 7 (this should be the maximum values for 48xx) Q: Do you want your fan always on A: Damn, shut down that damn thing asap! -> Reccomended setting = 0 (take note that in this way you could have rapid continuos activation/reactivation of the fan in idle) Keep in mind that on some boards the minimum duty-cycle is forced to be greater than zero, so on these boards the fan can be never deactivated. In other words, even if we set a fan duty-cycle equal to zero, the effective duty-cycle applied to the fan is gretaer than zero (tipically 20 %). Anyway you should play with this setting and find your optimal value. Moreover if your core temperature will never become lower than T_min, this setting will have absolutely no effect. PWM_ramp_on: if this value is set to 1, the controller modifies the fan duty-cycle softly in order to reduce drastic changes in the noise generated by the fan. Reccomended setting: 1 PWM_ramp: this value control "how softly" the controller varies the fan speed when PWM_ramp_on = 1. Lower values of PWM_ramp -> the fan speed varies slower Higher values of PWM_ramp -> the fan speed varies faster Reccomended setting: 1 PWM_hysteresis: a value of PWM_hysteresis greater than zero introduces a step variation in the duty-cycle. Reccomended setting: 0 Spinup_cycle: is the value of the fan duty-cycle that is applied by the controller when the fan has to be stated (for example when the temperature becomes higher than T_min after the fan has been stopped). Reccomended setting: the default value shoud be 80. Based on various reports, a much lower value should be perfeclty fine. You can try with something like 20/40 % if you are pissed by the fan suddenly acting like a hairdryer. Spinup_time: it's the time for which the fan duty-cycle is equal to the Spinup_cycle. Reccomended setting: leave this alone. Ok, now it's time to describe the two control modes 1) Linear control mode To activate this control mode we have to set: PWM_mode = 2 In this control mode the fan speed varies linearly as a function of the core temperature of the GPU. The fan speed duty-cycle is equal to Duty_cycle_min at T_min (the parameter introduced in the previous section) and to 100% at T_M. From the list of parameters of the fan controller we can see Duty_cycle_min and T_min, but there'no parameter named T_M. T_M in fact can be set by varying the parameter of the controller T_slope through this relation: T_slope=16*(100-Duty_cycle_min)/(T_M-T_min) Example: We want the minimum fan speed equal to 35 % the maximum reachable fan speed. The fan speed has to be increased starting from a temperature equal to 55 °C. The fan speed has to be equal at 100 % the maximum reachable fan speed at a temperature equal to 95 ° C. These are the correct parameters: T_min=55 Duty_cycle_min=35 T_slope=16*(100-Duty_cycle_min)/(T_M-T_min)=16*(100-35)/(95-55)=26 (choose the nearest integer here) T_max=T_M=95 Other parameters: PWM_mode = 2 T_hysteresis=0 PWM_ramp_on=1 PWM_ramp=1 PWM_hysteresis=0 Spinup_cycle=34 You can ignore all the lookup entries in Rivatuner for this control mode. Time to enter the parameters in Rivatuner. After you finished, you can check the box "Apply fan settings at windows startup" if you want these parameters to be applied automatically at windows startup. Finally apply the settings by clicking on the button Apply. For the screenshots of this procedure you can refer to the second part of this guide (the section relative to 4870 X2), the steps at this point are almost identical. 2) Look-up table control mode This control mode is activated by setting: PWM_mode = 3 This control mode is characterized by 8 look-up entries. Each look-up table entry is definied by two values: the temperature (left column in rivatuner low level fan tab) and the fan duty cycle (right column in rivatuner low level fan tab). So you define this control mode by setting 8 couples of values for temperature and duty-cycle. The logic of the look-up entries is pretty simple. Let's call T0 and Duty_Cycle0 the temperature and the fan duty cycle we set for the first look-up entry in Rivatuner (Look_up_entry_0), T1 and Duty_Cycle1 the temperature and the fan duty cycle we set for the second look-up entry in Rivatuner (Look_up_entry_1). When the temperature is in the range T0,T1, the fan duty cycle is Duty_Cycle0 if the temperature is closer to T0 and Duty_Cycle1 if the temperature is closer to T1. Ok, what happens when the temperature is greater than T1? Following the same logic, now the controller behavior is definied by the Look_up_entry_1 and the Look_up_entry_2. Example Look_up_entry_0 -> T0=30 Duty_Cycle0=0 Look_up_entry_1 -> T1=55 Duty_Cycle1=30 Look_up_entry_2 -> T2=70 Duty_Cycle2=50 Look_up_entry_3 -> T3=80 Duty_Cycle3=63 Look_up_entry_4-> T4=87 Duty_Cycle4=81 Look_up_entry_5-> T5=92 Duty_Cycle5=87 Look_up_entry_6-> T6=95 Duty_Cycle6=93 Look_up_entry_7-> T7=97 Duty_Cycle7=100 In this way, when the temperature is in the range 30/55, the fan duty cycle varies between 0 and 30, when the temperature is in the range 55/70, the fan duty cycle varies between 30 and 50, when the temperature is in the range 70/80, the fan duty cycle varies between 50 and 63...and so on. From these settings you can note that switching from two look-up entries (for example look-up-entries 0/1) to the next two (for example look-up-entries 1/2), makes the fan speed to vary faster as the temperature increases. This is the correct way to setup the look-up entries. Other parameters: PWM_mode = 3 T_min=T0=30 (i.e. set T_min equal to the temperature of the first look-up entry) T_max=T7=97 (i.e. set T_max equal to the temperature of the last look-up entry) T_hysteresis=0 PWM_ramp_on=1 PWM_ramp=1 PWM_hysteresis=0 Spinup_cycle=0 Last edited by ribbell; 09-16-2008 at 08:40 AM..
|
|
#11
|
|||
|
|||
|
Thanks for putting all this info into a guide. I'm pretty familiar with RivaTuner, having beta tested the last few versions including 2.11, but still, I did learn a couple things.
However I would have to say that the writing style is somewhat hard to follow and could use a more refined and concise "technical writing" style. Basically your guide is about twice as long as it needs to be to get all the information across, and it could use a little more consistent formatting and logical structuring, as well as fewer but better-illustrated graphics/screenshots. I hope you take this as constructive criticism, and thanks again for taking the time to create this guide.
|
|
#12
|
|||
|
|||
|
Quote:
Well, i hope that at least the guide can be followed without problems. Edit: Ok, i re-arranged a little the guide structure and deleted some screenshot. Hope it's better now. Last edited by ribbell; 09-13-2008 at 03:23 PM..
|
|
#13
|
|||
|
|||
|
The chnages look great ribbell. Keep up the good work
|
|
#14
|
|||
|
|||
|
very nice.
when do you expect the 2.11 version??? will it be significantly different in mechanics to set it up for automatic fan function??? As far as I'm concerned, you can NEVER have enough pictures. I am really dumb and pictures are worth way more than text. That's why Kyle's little video was so helpful. Keep it up man. ![]()
|
|
#15
|
|||
|
|||
|
Quote:
|
|
#16
|
|||
|
|||
|
Quote:
Procedure for rivatuner 2.11 will be absolutely the same described here. The new version shoud be out in next few days: the beta testing started seven days ago and Unwinder predicted 7/14 days, so final release is near. Quote:
when the teperature fall down the temperature T_min-T_hysteresis, the fan is deactivated. In order for the fan to be reactivated, the temperature should become higher than T_min. In this way it is possible to avoid rapid activation/deactivation of the fan. In fact a value of T_Hysteresis = 0 would force deactivation/reactivation of the fan each time the temperature would cross T_min in lower direction/upper direction. Anyway on some boards the minimum fan speed can never become zero by design, regardless of the T_hysteresis setting. Can you test on your system what happens when core temperature becomes lower than Tmin-Thysteresis? About the possible values of T_hysteresis, you are right, i made a mistake, the maximum possible value for T_hysteresis on 48xx integrated fan controller should be 7. Edit: ok, i updated a little the section on T_Hysteresis. Last edited by ribbell; 09-14-2008 at 04:57 PM..
|
|
#17
|
|||
|
|||
|
Yes, if the T_min is set above the current idle temp + T_hysteresis, the reference duty cycle goes to 0%, however the fan speed is set to 1000RPM at least in my case. This also seems to occur regardless of whether T_hysteresis is 0 or 7 or anything in between.
|
|
#18
|
|||
|
|||
|
Thanx for reporting, So in your case the minimum duty cycle applied is forced to be something like 20 %, like for my x2.
|
|
#19
|
|||
|
|||
|
Wow, great guide, trying this as soon as i get home.
|
|
#20
|
|||
|
|||
|
TMI, head just went poof >.<
|
![]() |
| Thread Tools | Search this Thread |
|
|