硬汉嵌入式论坛

 找回密码
 立即注册
查看: 1069|回复: 1
收起左侧

[有问必答] 请问为什么AD7606两次采样的值(over_current和now_current)不一样

[复制链接]

2

主题

5

回帖

11

积分

新手上路

积分
11
发表于 2024-7-22 00:11:13 | 显示全部楼层 |阅读模式

这是主循环

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)不一样
先谢过各位大佬了!
回复

使用道具 举报

34

主题

206

回帖

308

积分

高级会员

积分
308
发表于 2024-7-22 08:38:24 | 显示全部楼层
先不看读的其他问题 这地方
DB_data = (uint16_t)DB_data1;
不应该是
*DB_data = (uint16_t)DB_data1;
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2025-8-12 08:48 , Processed in 0.036155 second(s), 22 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表