3.8 KiB
3.8 KiB
I2C Fan Controller v2
because I found a cool new microcontroller
This one is based on WCH CH32V003 and it's (should be) much better than the shitty ATTiny one.
The i2c_driver.h is copied wholesale from ch32fun i2c_slave examples folder. It literally just works.
How compile?
There's a Makefile shithead
We compile on Debian/ubuntu. Other than the usual build-essential stuff you need also
sudo apt install gcc-riscv64-unknown-elf libnewlib-dev libudev-dev
You will also need to clone the ch32fun repo somewhere and modify the Makefile.
You will also need to compile minichlink. Included in the ch32fun repo.
???..
Or just use PlatformIO idc. It has debugging.
Register index
Registers are 8 bit each, but they hold 16-bit values. Bytes in even registers are high, bytes in odd registers are low.
| Register address | Function | R/W |
|---|---|---|
| 0x00, 0x01 | whoami | RO |
| 0x02, 0x03 | Current fan speed (RPM) | RO |
| 0x04, 0x05 | Target fan speed (RPM). Initial default speed is 750 RPM. | R/W |
| 0x06, 0x07 | Current duty cycle | R/W |
| 0x08, 0x09 | Maximum duty cycle | RO |
| 0x0a | State register | RO |
| 0x0b | Mode register | R/W |
State register
| Bit | Description |
|---|---|
| 0 (0000000x) | Steady state flag. 0 - fan didn't (yet) reach the target speed. 1 - fan reached the requested target speed or fan running in constant duty mode. |
| 1 (000000x0) | Fan stalled. 0 - fan operating normally. 1 - fan stalled. |
Mode register
| Bit | Description |
|---|---|
| 0 (0000000x) | Mode of operation: 0 - Constant duty cycle mode, the controller will keep the fan at a duty cycle set in register 0x06 and not change it automatically. 1 - Target RPM mode, the controller will target RPM set in register 0x04. This is the initial mode. |
| 1 (000000x0) | Fan type: 0 - Fan controlled by PWM pin (4 pin plug), this is the initial mode. 1 - Fan controlled by DC voltage (3 pin plug) |
| 2 (00000x00) | Fan power disable: 0 - Fan operates normally. 1 - 12V supply to the fan is cut. |
TODO:
- fan modes, states
- pwm/dc mode