12/02/2023 21:06
elxyzad כתב:
מעניין. תראה את הקוד
...
עובד עם המודול שלך:
#!/bin/bash
PWM_CHIP=419
PWM_PERIOD_NS=1000000
PWM_DUTY_CYCLE_MIN_NS=500000
PWM_DUTY_CYCLE_MAX_NS=900000
CPU_TEMP_FILE="/sys/class/thermal/thermal_zone0/temp"
# Request the PWM
echo $PWM_CHIP > /sys/class/soft_pwm/export
# Configure the PWM
echo $PWM_DUTY_CYCLE_MIN_NS > /sys/class/soft_pwm/pwm$PWM_CHIP/duty_cycle
echo $PWM_PERIOD_NS > /sys/class/soft_pwm/pwm$PWM_CHIP/period
# Enable the PWM
echo 1 > /sys/class/soft_pwm/pwm$PWM_CHIP/enable
previous_temp_c=0
while true; do
# Read the CPU temperature
temp=$(cat $CPU_TEMP_FILE)
# Convert the temperature to Celsius
temp_c=$((temp / 1000))
# Calculate the PWM duty cycle based on the temperature
duty_cycle=$((PWM_DUTY_CYCLE_MIN_NS + (temp_c - 40) * (PWM_DUTY_CYCLE_MAX_NS - PWM_DUTY_CYCLE_MIN_NS) / 60))
# Limit the duty cycle to the minimum and maximum values
if [ $duty_cycle -lt $PWM_DUTY_CYCLE_MIN_NS ]; then
duty_cycle=$PWM_DUTY_CYCLE_MIN_NS
fi
if [ $duty_cycle -gt $PWM_DUTY_CYCLE_MAX_NS ]; then
duty_cycle=$PWM_DUTY_CYCLE_MAX_NS
fi
# Set the PWM duty cycle
echo $duty_cycle > /sys/class/soft_pwm/pwm$PWM_CHIP/duty_cycle
# Print the current CPU temperature and fan rotation status
echo "CPU temperature: $temp_c°C"
if [ $temp_c -gt $previous_temp_c ]; then
echo "Fan rotation increased"
elif [ $temp_c -lt $previous_temp_c ]; then
echo "Fan rotation decreased"
else
echo "Fan rotation unchanged"
fi
# Update the previous temperature
previous_temp_c=$temp_c
# Sleep for 1 second
sleep 1
done