// ALGORITHM #macro A_EWMA 54C09C3D-A06D-48FC-8A64-D090D9E1981E #macro A_TABLE 3AFD73EE-A9A5-496E-A675-51EAFCB859B3 #macro A_LINEARMATH 5974888D-F9F6-4132-AC67-D32E515C9B4E #macro A_MINMAXSELECT 0AE20A40-02E5-42A1-961C-0CBFBB9EC380 // // INPUT #macro I_OS_PWR_MODE_MPTF {8945AB0A-35DD-4BEE-82A5-8138892C280D}_1 // #macro I_SOC_TEMP {87008365-EA3A-461C-B83D-6AC6E8DB2F8A}_112 // // OUTPUT #macro O_FAN1_ACTIVE_RPM {91F589E0-45F0-4C6E-A17D-24FD8E8CBDCE}_730 // // **Simple Fan Control Demos** // // DEMO-A - SOC Temp Driven Fan RPM // Will monitor and average the SOC temperature in dK units using an EWMA moving average, then feed that averaged temp into a LINEARMATH function to calculate a target RPM stored in VN1000 //1,0,0,%A_EWMA%,1,1,1,%I_SOC_TEMP%,%VN900%,8000,0,30,0 //1,1,0,%A_LINEARMATH%,1,1,1,%VN900%,%VN1000%,8000,0,10,-29300,0,0 // // DEMO-B - OS Power Mode Driven Fan RPM // Will monitor the OS PWR MODE and then in a lookup TABLE output a target RPM stored in VN1001 1,0,0,%A_TABLE%,1,1,1,%I_OS_PWR_MODE_MPTF%,%O_FAN1_ACTIVE_RPM%,4,0,0,1,3,5,7,2,4,6,7,15,25,35,45 // // ARBITRATION // looks at the max of two desired RPMs from DEMO-A, VN1000, and DEMO-B, VN1001, and sets the higher to the output channel //1,2,0,%A_MINMAXSELECT%,1,2,1,%VN1000%,%VN1001%,%O_FAN1_ACTIVE_RPM%,8000,0,0,1