当前位置:首页 > AI娱乐 > 正文内容

求助!STM32F103+ATT7022EU,读不到电压、电流、频率

admin2周前 (05-27)AI娱乐18

求助!STM32F103+ATT7022EU,读不到电压、电流、频率

电压与电流的参数设定,针对STM32F103微控制器,采用att7022eu芯片,具体操作通过define指令完成。

求助!STM32F103+ATT7022EU,读不到电压、电流、频率 第1张

各位英雄豪杰,我在使用STM32F103控制器读取ATT7022E时,仅能偶尔获取到各相的电压、电流以及频率数据(大约每10次才能成功读取1次,读取到的电压值显示为250伏以上,频率为50赫兹);同时,在串口调试工具中显示的信息同样不稳定,有时某些寄存器的数据是准确的,而有时则出现错误,甚至重启设备后,下一次读取的数据又恢复了正确。

各位使用ATT7022E模块的同行,能否帮忙审查一下我的代码,找出其中的问题所在?

依据《ATT7022EU应用指南》的记载,我对VCC、AVCC、VDD、REFCAP、RESET以及IRQ这些引脚的电平进行了检测,结果显示均处于正常状态,这表明该芯片正在正常运行。

做项目,结尾阶段,最后卡在这里了,急啊!

请用过ATT7022E的朋友帮忙,万分感谢!

ATT7022E.h内容如下:

#ifndef _ATT7022EU_H_

#define _ATT7022EU_H_

#define RST_Port as GPIOE, 表示这是用于ATT7022EU与STM32连接的RST引脚的配置,具体定义为GPIOE。

CS引脚定义为GPIOA,此为ATT7022EU与STM32之间连接所使用的控制信号脚(STM32负责向ATT7022EU输出数据)。

#define SCL_Port GPIOA //此定义将SCL引脚指定为GPIOA,用于ATT7022EU与STM32之间的连接(STM32向ATT7022EU发送数据)

DATA_Port定义为GPIOA,此为ATT7022EU与STM32间连接的DATA引脚(STM32负责向ATT7022EU输出数据)。

#define DIN_Port as GPIOA, 此定义用于ATT7022EU与STM32之间的连接,其中DIN引脚负责将数据从ATT7022EU传输至STM32。

定义RST_Pin为GPIO_Pin_2,此引脚用于连接ATT7022EU与STM32,实现复位功能。

CS_Pin 定义为 GPIO_Pin_4,此引脚是用于连接 ATT7022EU 与 STM32 的 CS 线(STM32向ATT7022EU输出数据)。

#define SCL_Pin                GPIO_Pin_5        // 该定义用于指定STM32与ATT7022EU之间连接的SCL引脚(STM32负责向ATT7022EU发送数据)

DATA_Pin 被设定为 GPIO_Pin_7,这是ATT7022EU与STM32之间连接的数据引脚(STM32通过此引脚向ATT7022EU输出数据)。

#define DIN_Pin GPIO_Pin_6, 该引脚是ATT7022EU与STM32之间连接时使用的DIN端口,负责将数据从ATT7022EU传输到STM32。

#define 定义 Set_CS 函数,其功能是通过调用 GPIO_SetBits 函数,将 CS_Port 端口的 CS_Pin 引脚设置为高电平。

定义 Clr_CS 函数att7022e,其功能为通过 CS_Port 端口对 CS_Pin 引脚进行低电平操作,以实现复位控制。

定义宏Rev_CS,其功能为通过GPIO_WriteBit函数设置CS_Port端口的CS_Pin引脚状态,具体操作是将该引脚的输出电平设置为高电平或低电平,取决于当前GPIO_ReadOutputDataBit函数读取到的电平状态。

#define 定义 Set_SCL 函数,其功能是利用 GPIO_SetBits 函数,对 SCL_Port 端口的 SCL_Pin 引脚进行置位操作。

定义 Clr_SCL 函数,其功能是执行 GPIO_ResetBits 操作,针对 SCL_Port 和 SCL_Pin 进行位清零处理。

定义宏Rev_SCL,通过GPIO_WriteBit函数设置SCL_Port端口的SCL_Pin引脚的电平状态,具体操作为将SCL_Pin引脚的电平设置为高电平或低电平,这取决于GPIO_ReadOutputDataBit函数读取SCL_Pin引脚当前输出电平的状态,如果当前为高电平,则通过1减去该值得到低电平,反之亦然。

#define 设置数据              GPIO将位设置至高电平 (DATA端口号, DATA引脚号)

#define Clr_DATA, 通过GPIO_ResetBits函数, 对DATA_Port端口中的DATA_Pin引脚进行置零操作。

定义宏Rev_DATA,其值为将DATA_Port的DATA_Pin引脚的输出状态取反att7022e,即将GPIO_WriteBit函数应用于该引脚,并传入参数(1减去GPIO_ReadOutputDataBit函数读取的该引脚输出数据位的状态)。

#define 定义 Set_RST 函数求助!STM32F103+ATT7022EU,读不到电压、电流、频率,其功能是通过 GPIO_SetBits 函数设置 RST_Port 端口的 RST_Pin 引脚。

#define Clr_RST, 通过GPIO_ResetBits函数,对RST_Port端口的RST_Pin进行置零操作。

定义宏Rev_RST,即GPIO_WriteBit函数应用于RST_Port端口,对LED54_Pin引脚进行位操作,该操作为将GPIO_ReadOutputDataBit函数读取的RST_Pin引脚输出数据取反后,再写入到LED54_Pin引脚。

定义 Rd_MISO 为 GPIO_ReadInputDataBit 函数读取 DIN_Port 端口的 DIN_Pin 引脚状态,若为高电平则返回 1。

#define r_Pflag                       0x3D   //表示功率流向的标识

#define R_Sflag   十六进制的2C   //表示状态寄存器的标志

定义常量r_Pa为十六进制的数值1。

定义常量r_Pb为十进制的2。

#define 注册参数为 0x03

#define r_Pt                              0x04       // 表示有功功率的标识

定义常量r_Qa为十六进制的5。

定义宏r_Qb的值为0x06。

定义常量r_Qc为十进制数7。

#define r_Qt                              0x08       //表示无功率输出

#define 常量r_Sa  为十六进制的0x09

定义常量r_Sb为十进制数10。

定义常量r_Sc为十六进制的0x0B。

#define R_ST                               十六进制数0C       //表示视在功率的数值

定义常量r_UaRms为十六进制的0x0D。

定义宏r_UbRms的值为0x0E。

定义宏r_UcRms的值为0x0F。

#define 定义 r_UtRms 的值为 0x2B,代表电压的有效值。

定义常量r_IaRms为十进制的16。

定义宏r_IbRms为十六进制的11。

定义宏r_IcRms的值为0x12。

#define 定义 r_ItRms 的值为 0x13,表示电流的有效值。

定义常量r_Pfa为十六进制的14。

#define 定义了变量 r_Pfb,其值为 0x15。

定义宏r_Pfc为十六进制数16。

#define 功率因数标识符 0x17  //表示功率因数值

#define 线网频率值为  0x1C

定义常量r_Epa为十六进制的1E。

定义常量r_Epb为十六进制的1F。

定义常量r_Epc为十六进制的20。

#define r_Ept                               0x21       // 表示累加的有功电能的寄存器地址

定义常量r_Eqa为十六进制的22。

定义常量r_Eqb为十六进制的23。

定义常量r_Eqc为十六进制的24。

#define r_Eqt                              0x25       // 此标识代表累加无功电能的数值

定义常量r_Epa2为十六进制的31。

定义常量r_Epb2为十六进制的数值32。

定义常量r_Epc2为十六进制的数值33。

#define r_Ept2                      0x34       //表示清零功能的电能寄存器

定义常量r_Eqa2为十六进制的35。

定义常量r_Eqb2为十六进制的数值36。

定义常量r_Eqc2为十六进制的37。

#define r_Eqt2                      0x38       //该定义用于表示清零功能的无功电能寄存器地址

#define 高频输出参数常量  0xA0  //此处定义了一个常量,用于表示高频输出的相关参数

#define UADC 为 0xBF,表示电压通道的放大倍数。

#define U增益A                      0x9B

#define U增益B  0x9C

#define UgainC 0x9D,代表分相电压的校准参数。

定义宏IgainA为十六进制的1A。

定义宏IgainB为十六进制的1B。

#define IgainC 0x1C // 此宏定义用于设置分相电压的校准参数

#define PgainB 0x05 // 表示B相功率增益设置为5

#define Vu, 电压通道所采集的电压值为0.190。

#define Vi 为 0.003,表示电流通道的采样电压值。

定义常量Un为220,表示额定电压值。

定义符号In,其值为4.15,代表额定电流。

定义Meter_G为1.163,这是ATT7022E的常数。

定义Meter_HFConst常量,其值为(2.592乘以10的10次方乘以Meter_G的平方乘以Vu乘以Vi)除以(In乘以Un乘以Meter_Ec)。

#define 高频常数表达式为:(2.592×10^10×米_常数×米_常数×微变量×变量)/(电流_入×电流_出×米_常数电常数)

电表常数设定为3200,此值为默认数值,但需注意,根据实际测量结果产生的误差att7022e,此数值应适时进行调整。

typedef struct  // 该结构体仅需读取电压、电流以及频率数据,其他信息暂时不予考虑,无需处理。

// // u32 P; // 表示该变量代表有功功率的数值

// //         float Rp;

// // u32 Q; // 表示该变量代表无功功率的数值

// //         float Rq;

u32 S表示,该数值代表视在功率。

// //         float Rs;

u32 URms; // 表示电压的有效数值

float Rurms;

u32 IRms;  // 表示电流的有效值,具体数值为32位无符号整数。

float Rirms;

定义一个无符号整型变量Pf,代表功率因数。

// //         float Rpf;

u32 Freq;  // 表示线网的频率值

float Rfreq;

}DataTypeDef;

定义数据类型A、B、C、T。

但需注意,这一默认值需根据实际测量中出现的误差进行相应的调整!

float PhaseB_I_Amp_Factor; // B相电流的放大系数设定为1.0,作为初始值;然而,这一数值需依据实际测量的误差情况进行相应调整!

float PhaseC_I_Amp_Factor;  //C相电流的放大系数设定为1.0,此为初始值,需根据实际测得的误差进行相应的调整!

float PhaseT_I_Amp_Factor; // T相电流放大倍数设定,初始值为1.0,需注意,此值应依据实际测量误差进行相应调整!

float PhaseA_V_Amp_Factor; // 代表A相的电压放大系数,其初始设定为1.0,但需注意,这一数值需依据实际测量的误差情况进行相应调整!

应根据实际测量中出现的误差进行相应的调整!

float PhaseC_V_Amp_Factor;  //此变量代表C相电压的放大倍数,其初始设定为1.0。请注意,这一默认值需根据实际测量中出现的误差进行相应的调整!

float PhaseT_Voltage_Amplification_Ratio = 1.0; //T相电压放大比率设定为1.0,此为初始标准值,需依据实际测量结果中的误差进行相应调整!

void delay_us1(u16 time);

函数u32 SPI_ATT_Read(u8 data)执行操作;该操作将SIG转换为Sflag.7标志位。

该函数SPI_ATT_Write用于向指定通信地址写入数据,其中com_add参数代表通信地址,data2参数表示写入的数据。当通信地址为0xD3,数据为0x000000时,该操作可以实现软件复位。

void ATT7022_Init(void);

void ATT_Adjust(void);

void ATT_Test(void);

void Read_ATT_AData(void);

void Read_ATT_BData(void);

void Read_ATT_CData(void);

void Read_ATT_TData(void);

执行 Output_ATT 函数,输出 DataTypeDef 类型的数据。

void Read_ATT_TestData(void);

执行任务监控函数,参数为指向数据的指针。

定义了一个函数,该函数名为itoa求助!STM32F103+ATT7022EU,读不到电压、电流、频率,其参数包括一个整数值、一个字符指针以及一个基数,函数的作用是将整数值转换为字符串形式,并将结果存储在由字符指针指向的字符串中。

加入微信交流群:************ ,请猛戳这里→点击入群

扫描二维码推送至手机访问。

版权声明:本文由前沿科技娱乐汇发布,如需转载请注明出处。

本文链接:https://kejiyl.com/post/3272.html

分享给朋友:

“求助!STM32F103+ATT7022EU,读不到电压、电流、频率” 的相关文章

游戏设计中 AI 辅助美术创作的精彩案例解析

游戏设计中 AI 辅助美术创作的精彩案例解析

在当今的游戏设计领域,AI 技术正逐渐展现出其强大的辅助作用,尤其是在美术创作方面。AI 能够为游戏美术师提供创意灵感、加速创作流程,并创造出令人惊叹的视觉效果。以下是一些精彩的案例,让我们一起来深入解析 AI 辅助美术创作的魅力。案例一:《塞尔达传说:荒野之息》在这款经典的开放世界游戏中,AI 辅...

利用 AI 技术为游戏增添独特的文化元素

利用 AI 技术为游戏增添独特的文化元素

在当今数字化的时代,游戏已经成为人们生活中不可或缺的一部分。而随着 AI 技术的不断发展,它为游戏行业带来了前所未有的变革和机遇。其中,利用 AI 技术为游戏增添独特的文化元素,成为了游戏开发者们追求的目标之一。AI 技术可以通过对大量的文化数据进行学习和分析,提取出各种文化元素的特征和内涵。这些文...

AI 在游戏设计中对玩家行为预测的应用

AI 在游戏设计中对玩家行为预测的应用

在当今的游戏设计领域,人工智能(AI)正发挥着越来越重要的作用,其中对玩家行为的预测便是其关键应用之一。通过对玩家行为的精准预测,游戏开发者能够打造出更具吸引力、更能满足玩家需求的游戏体验,为游戏产业带来全新的变革。AI 对玩家行为的预测首先体现在游戏剧情的引导上。传统游戏剧情往往是线性的,玩家只能...

AI 音乐在现场演出中的创新呈现方式

AI 音乐在现场演出中的创新呈现方式

在当今的音乐领域,AI 音乐正以其独特的魅力和创新的呈现方式,逐渐在现场演出中占据重要的地位。AI 音乐不再仅仅是虚拟的声音创作,而是通过与现场演出的紧密结合,为观众带来了前所未有的体验。AI 音乐在现场演出中的第一个创新呈现方式是与传统乐器的融合。传统乐器一直是音乐现场的核心,它们的音色和表现力赋...

AI 生成音乐与传统音乐制作的成本效益对比

AI 生成音乐与传统音乐制作的成本效益对比

在当今数字化的时代,音乐制作领域正经历着一场深刻的变革,AI 生成音乐逐渐崭露头角,与传统音乐制作方式形成了鲜明的对比。从成本和效益两个维度来看,这两种音乐制作模式各有优劣。传统音乐制作通常需要一支庞大的专业团队,包括作曲家、编曲家、乐手、录音师、混音师等。每个环节都需要投入大量的人力、物力和时间。...

AI 如何为游戏角色赋予鲜活的智能与情感

AI 如何为游戏角色赋予鲜活的智能与情感

在当今的游戏领域,AI 技术正逐渐成为塑造游戏角色的重要力量。它不仅能够赋予游戏角色出色的智能表现,还能让这些角色拥有丰富而鲜活的情感,从而使玩家能够更加深入地与游戏世界互动,沉浸其中。AI 为游戏角色赋予智能主要体现在多个方面。在角色的行为逻辑方面,AI 可以根据不同的情境和目标,做出合理且多样化...