#ifndef _AYN_SC8721_H_ #define _AYN_SC8721_H_ #include #include #include class SC8721 { public: // sc8721内部寄存器地址 enum sc8721_registers { REG_CSO = 0x01, REG_SLOPE_COMP = 0x02, REG_VOUT_SET_MSB = 0x03, REG_VOUT_SET = 0x04, REG_GLOBAL_CTRL = 0x05, REG_SYS_SET = 0x06, REG_TERM_SET = 0x07, REG_FREQ_SET = 0x08, REG_STATUS_1 = 0x09, REG_STATUS_2 = 0x0A }; //------------------------------ // 功能: 构建设备对象 // 输入: pin_sda I2C SDA 引脚 // pin_scl I2C SCL 引脚 // pin_ce 芯片是使能引脚,高有效 // 返回: 无 // 例子: SC8721 sc8721(13,14,15); //------------------------------ SC8721(unsigned char pin_sda, unsigned char pin_scl, unsigned char pin_ce); //------------------------------ // 功能: 待机模式 // 输入: enable 使能信号(0 = 退出待机模式,1 = 启用待机模式) // 返回: 无 // 例子: sc8721.chipStanby(1); //------------------------------ void chipStanby(bool enable); //------------------------------ // 功能: 停机模式 // 输入: enable 使能信号(0 = 退出停机模式,1 = 启用停机模式) // 返回: 无 // 例子: sc8721.shutdown(0); //------------------------------ void chipShutdown(bool enable); //------------------------------ // 功能: 设置输出电流限制 // 输入: iout_ilim 设置输出电流限制值 // 返回: 输入寄存器值 (0 = 输入值错误,X = 寄存器输入的CSO_SET值) // 例子: sc8721.setOutputCurrentLimit(0.5); //------------------------------ bool setOutputCurrentLimitRegister(float iout_ilim); //------------------------------ // 功能: 设置电缆跌落补偿 // 输入: level 补偿档位(0 = 不补偿 // 1 = 50mV/A // 2 = 100mV/A // 3 = 150mV/A) // 返回: 无 // 例子: sc8721.setCableDropCompensation(0); //------------------------------ void setCableDropCompensation(unsigned char level); //------------------------------ // 功能: 设置输出电压 // 输入: voltage 设置输出电压 // 返回: // 例子: sc8721.setOutputCurrentLimit(3.3); //------------------------------ void setOutputVoltageRegister(float voltage); //------------------------------ // 功能: 设置载入相关寄存器((CSO_SET/VOUT_SET /FB_DIR) // 输入: 无 // 返回: 无 // 例子: sc8721.loadSetting(); //------------------------------ void loadSettingRegister(); //------------------------------ // 功能: 设置开关频率 // 输入: level 补偿档位(0 = 260kHz // 1 = 500kHz // 2 = 720kHz // 3 = 920kHz) // 返回: 无 // 例子: sc8721.setSwitchFreq(1); //------------------------------ void setSwitchFreq(unsigned char level); //------------------------------ // 功能: 直接输出设定电压 // 输入: voltage 设置输出电压 // 返回: 无 // 例子: sc8721.outputVoltage(3.3); //------------------------------ void outputVoltage(float voltage); //------------------------------ // 功能: 直接输出设定限流 // 输入: iout_ilim 设置输出电流限制值 // 返回: 无 // 例子: sc8721.outputCurrentLimit(1.0); //------------------------------ void outputCurrentLimit(float iout_ilim); private: unsigned char _pin_sda = -1; unsigned char _pin_scl = -1; unsigned char _pin_ce = -1; const uint8_t i2c_address = 0x62; //arduino iic address is 7-bit float Rs = 0.01; int Rcso = 62000; float max_iout_ilim = (256 * 8) / (Rs * Rcso); }; #endif