|
这是主循环
while (1)
{
begin:
v_sum = 0;
c_sum = 0;
for (g = 0; g < 64; g++)
{
AD7606_startconvst(); // ad7606开始转换
delay_us(1);
AD7606_read_data(temp_db[g]); // 读取数据放至数组temp_db[]
// 电流检测
if ((float)(temp_db[g][0] * 10000.0 / 32768) > CURRENT_MAX)
{
// 触发刹车
HAL_GPIO_WritePin(GPIOE, GPIO_PIN_7, GPIO_PIN_SET);
printf("over_current : %f\r\n", (float)(temp_db[g][0] * 10000.0 / 32768));
// 等待电流恢复正常
while ((float)(temp_db[g][0] * 10000.0 / 32768) > CURRENT_MAX)
{
delay_us(10);
AD7606_startconvst();
delay_us(1);
AD7606_read_data(temp_db[g]);
printf("now_current : %f\r\n", (float)(temp_db[g][0] * 10000.0 / 32768));
}
// 解除刹车
HAL_GPIO_WritePin(GPIOE, GPIO_PIN_7, GPIO_PIN_RESET);
goto begin;
}
v_sum += temp_db[g][7];
c_sum += temp_db[g][0];
delay_us(5);
}
这是AD7606_startconvst函数
/* * 名称:AD7606_startconvst() * 功能:启动转换 */
void AD7606_startconvst(void)
{
convstA_Reset;
convstB_Reset;
delay_us(11);
convstA_Set;
convstB_Set;
}
这是AD7606_read_data函数
/*
* 名称:AD7606_read_data()
* 功能:读取数据
* 返回值:返回一个结构体指针,该指针为指向结构体数组的首地址
*/
void AD7606_read_data(int16_t * DB_data)
{
uint8_t i,j;
for(i=0;i<8;i++)
{
uint16_t DB_data1 = 0;
cs_Reset;
//printf("CSRESET\r\n");
delay_us (3);
for(j=0;j<16;j++)
{
clk_Reset;
delay_us (4);
DB_data1 = ((uint16_t)(HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_5))<< (15-j)) + DB_data1;
clk_Set;
delay_us (4);
}
cs_Set;
//printf("CS\r\n");
DB_data = (uint16_t)DB_data1;
}
}
请问为什么两次采样的值(over_current和now_current)不一样
先谢过各位大佬了!
|
|