positioner_testing_project/User/driver/dac161s997.c

57 lines
1.7 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#include "dac161s997.h"
/**
* @brief 向DAC161S997芯片写入寄存器值
*
* 该函数通过SPI接口向DAC161S997芯片写入指定的寄存器值。
*
* @param dac_num DAC芯片编号
* @param reg 要写入的寄存器地址
* @param data 要写入的数据16位
*/
void dac161s997_write_reg(chip_type_e dac_num, uint8_t reg, uint16_t data)
{
uint8_t data_buffer[3] = {0, 0, 0};
data_buffer[0] = reg;
data_buffer[1] = data >> 8;
data_buffer[2] = data;
board_spi_init(dac_num); // 初始化SPI因为ADC芯片也用SPI1但是时序不同
board_spi_cs_on(dac_num);
spi_transmit_receive(&hspi1, data_buffer, 3);
board_spi_cs_off(dac_num);
}
/**
* @brief 初始化DAC161S997 DAC设备
*/
void dac161s997_init(void)
{
dac161s997_write_reg(DAC161S997_1, DAC161S997_ERR_LOW_REG, 0xFFFF);
dac161s997_write_reg(DAC161S997_1, DAC161S997_ERR_CONFIG_REG, 0x070E);
dac161s997_write_reg(DAC161S997_2, DAC161S997_ERR_LOW_REG, 0xFFFF);
dac161s997_write_reg(DAC161S997_2, DAC161S997_ERR_CONFIG_REG, 0x070E);
}
/**
* @brief DAC161S997芯片输出函数
*
* 此函数用于设置DAC161S997芯片的输出电流。
*
* @param dac_num DAC芯片类型
* @param current 需要设置的电流值,单位:毫安
*/
void dac161s997_output(chip_type_e dac_num, float current)
{
uint32_t dac_code = (uint32_t)((current * 65535.0f) / 24.0f);
uint8_t data_buffer[3] = {0, 0, 0};
data_buffer[0] = DAC161S997_DACCODE_REG;
data_buffer[1] = dac_code >> 8;
data_buffer[2] = dac_code;
board_spi_init(dac_num); // 初始化SPI因为ADC芯片也用SPI1但是时序不同
board_spi_cs_on(dac_num);
spi_transmit_receive(&hspi1, data_buffer, 3);
board_spi_cs_off(dac_num);
}