新手入门
- 积分
- 13
- 金钱
- 13
- 注册时间
- 2021-7-1
- 在线时间
- 2 小时
|
2金钱
想使用stm32f405来驱动ADM1191实现被测电阻两端的电压电流的实时监控
原理图:

我的程序:
int main()
{
uint8_t rd_buf[3];
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
LED_GPIO_Config();
init_control_power_pin();
SysTick_Init();
//Usart1_init(115200);
//Uart4_init(115200);
_485_init(115200);
power_en();
//__1191_convert_con();
while(1)
{
if(ee_CheckOk())
{
if(__1191_read_V(rd_buf)) //读取数据
{
for(u8 i=0;i<2;i++)
{
_485_SendByte(rd_buf);
//Delay_ms(1000);
}
}
else
myprintf("read data failed\r\n");
}
else
myprintf("no i2c device!\r\n");
LED_TOGGLE;
Delay_ms(1000);
}
}
uint8_t __1191_convert_once()
{
i2c_Start();
i2c_SendByte(ADDRESS_ADM1191_ARM|ADM1191_I2C_WR);
if(i2c_WaitAck() != 0)
{
goto cmd_fail;
}
i2c_SendByte(0x01);
if(i2c_WaitAck() != 0)
{
goto cmd_fail;
}
i2c_Stop();
cmd_fail: /* 命令执行失败后,切记发送停止信号,避免影响I2C总线上其他设备 */
/* 发送I2C总线停止信号 */
i2c_Stop();
return 0;
}
/*从ADM1191读取电压*/
uint8_t __1191_read_V(uint8_t *_pReadBuf)
{
CONV_EN();
__1191_convert_once();
Delay_us(200);
i2c_Start();
//myprintf("125\n");
i2c_SendByte(ADDRESS_ADM1191_ARM | ADM1191_I2C_RD);
if (i2c_WaitAck() != 0)
{
goto cmd_fail; /* EEPROM器件无应答 */
}
//Delay_us(500);
for(uint8_t i=0;i<2;i++)
{
_pReadBuf = i2c_ReadByte();
if(i == 1)
{
i2c_NAck();
}
else
i2c_Ack();
}
i2c_Stop();
CONV_DISABLE();
return 1;
cmd_fail: /* 命令执行失败后,切记发送停止信号,避免影响I2C总线上其他设备 */
/* 发送I2C总线停止信号 */
i2c_Stop();
return 0;
}
void CONV_EN()
{
GPIO_SetBits(CONV_GPIO_PORT,CONV_GPIO_PIN);
}
void CONV_DISABLE()
{
GPIO_ResetBits(CONV_GPIO_PORT,CONV_GPIO_PIN);
}
串口助手获取的数据:

我的疑问:
原理图上是12v,所以所测电压应该在12v左右,但跟我实际测得的数据偏差太大。
求各位大佬救救孩子吧!!!!!!!!!
求求了!!!!!
|
|