- Added devicetree overlay for VND7050AJ with GPIO and ADC configuration - Created custom devicetree binding for VND7050AJ valve controller - Implemented valve_get_supply_voltage() function with proper pin control: - RST=HIGH to enable VND7050AJ - S0=1, S1=1 for supply voltage sensing mode - SEN=1 to enable MULTISENSE output - ADC reading on PA0 (ADC1_IN1) with 12-bit resolution - Fixed supply voltage calculation (VCC/8 per datasheet) - Added comprehensive debug logging for all steps - Tested and verified ADC functionality - Current reading: 5.1V (may be limited by hardware power supply) Files modified: - software/lib/valve/valve.c: Main implementation - software/apps/slave_node/boards/weact_stm32g431_core.overlay: DT config - software/apps/slave_node/dts/bindings/vnd7050aj-valve-controller.yaml: DT binding - software/apps/slave_node/src/main.c: Test code - software/apps/slave_node/prj.conf: ADC driver enablement
38 lines
963 B
C
38 lines
963 B
C
#ifndef VALVE_H
|
|
#define VALVE_H
|
|
|
|
#include <stdint.h>
|
|
#include <zephyr/drivers/gpio.h>
|
|
|
|
struct valve_gpios {
|
|
const struct gpio_dt_spec in0;
|
|
const struct gpio_dt_spec in1;
|
|
const struct gpio_dt_spec rst;
|
|
const struct gpio_dt_spec sen;
|
|
const struct gpio_dt_spec s0;
|
|
const struct gpio_dt_spec s1;
|
|
};
|
|
|
|
enum valve_state {
|
|
VALVE_STATE_CLOSED,
|
|
VALVE_STATE_OPEN,
|
|
};
|
|
enum valve_movement { VALVE_MOVEMENT_IDLE, VALVE_MOVEMENT_OPENING, VALVE_MOVEMENT_CLOSING, VALVE_MOVEMENT_ERROR };
|
|
|
|
void valve_init(void);
|
|
void valve_open(void);
|
|
void valve_close(void);
|
|
void valve_stop(void);
|
|
|
|
enum valve_state valve_get_state(void);
|
|
enum valve_movement valve_get_movement(void);
|
|
uint16_t valve_get_motor_current(void);
|
|
uint16_t valve_get_supply_voltage(void);
|
|
|
|
void valve_set_max_open_time(uint16_t seconds);
|
|
void valve_set_max_close_time(uint16_t seconds);
|
|
uint16_t valve_get_max_open_time(void);
|
|
uint16_t valve_get_max_close_time(void);
|
|
|
|
#endif // VALVE_H
|