1875|5

6841

帖子

11

TA的资源

版主

楼主
 

【平头哥RVB2601创意应用开发】电源监控 [复制链接]

 

【前言】感谢@sipower为我提供串口1更换IO,复用启动串口1。【平头哥RVB2601创意应用开发】环境监测终端05-温湿度采集和显示 - 平头哥RISC-V RVB2601活动专区 - 电子工程世界-论坛 (eeworld.com.cn)根据他的帖子,这两天成功调通了串口。因为只有一个串口可以用,所以把方案更改为用无线串口接收到模块来接收信息。

【材料准备】1、电能计量监控模块;2、无线串口接收模块。

【实现步骤】

1、串口1的实始化:

static int my_uart1_init(void)
{
	int ret = -1;
	uart1.port = UART1_PORT_NUM;
	csi_pin_set_mux(PA27, PA27_UART1_RX);  //复用端口设置
    csi_pin_set_mux(PA28, PA28_UART1_TX);
	
	/* uart attr config */
    uart1.config.baud_rate    = 9600;
    uart1.config.data_width   = DATA_WIDTH_8BIT;
    uart1.config.parity       = NO_PARITY;
    uart1.config.stop_bits    = STOP_BITS_1;
    uart1.config.flow_control = FLOW_CONTROL_DISABLED;
    uart1.config.mode         = MODE_TX_RX;

    /* init uart1 with the given settings */
    ret = hal_uart_init(&uart1);
    if (ret != 0) {	
        printf("uart1 init error !\n");	
    }
	else{
		printf("uart1 init succsecc !\n");
	}
	return ret;
}

  2、建立串口收发任务:

/*
 * 功能:创建串口1接收任务,接收数据并把数据解析出来,存放在buff中,由U8g2显示函数定时刷新。
 * 
 * 
 */
static void application_task1_entry(void *arg)
{
	int ret = -1;
	uint32_t rx_size = 0;
	float Irms=0;       //电流有效值
	float Vrms=0;       //电压有效值
	float Frequency=0;  //频率
	float PowerFactor=1;//功率因数
	float PActive=0;    //有功功率
	double W_KWH=0;     //累积功耗
	int n=0;
    while (1) {
		ret = hal_uart_recv_II(&uart1, uart_data_buf, 24,
                               &rx_size, UART_RX_TIMEOUT);
	    LOGD(TAG, "RECV len:%d data:%x",rx_size,uart_data_buf[0]);
        if (rx_size ==  24) 
		{
			if((uart_data_buf[0] == 0x55) && (uart_data_buf[0] == 0x55))
			{
				Vrms=(double)(((uint32_t)uart_data_buf[6]<<24)|((uint32_t)uart_data_buf[7]<<16)|((uint32_t)uart_data_buf[8]<<8)|((uint32_t)uart_data_buf[9]<<0))/1000.0;
				Irms=(double)(((uint32_t)uart_data_buf[10]<<24)|((uint32_t)uart_data_buf[11]<<16)|((uint32_t)uart_data_buf[12]<<8)|((uint32_t)uart_data_buf[13]<<0))/1000.0;
				PActive=(double)(((uint32_t)uart_data_buf[14]<<24)|((uint32_t)uart_data_buf[15]<<16)|((uint32_t)uart_data_buf[16]<<8)|((uint32_t)uart_data_buf[17]<<0))/1000.0;
				Frequency=(double)(((uint32_t)uart_data_buf[18]<<24)|((uint32_t)uart_data_buf[19]<<16)|((uint32_t)uart_data_buf[n++]<<8)|((uint32_t)uart_data_buf[20]<<0))/1000.0;
				sprintf(disp_Vrms,"%.1fV",Vrms);
				sprintf(disp_Irms,"%.2fA",Irms);
				sprintf(disp_PActive,"%.2fW",PActive);
				sprintf(disp_Frequency,"%.2fHz",Frequency);
				
			}
			LOGD(TAG, "RECV len:%d data:%x",rx_size,uart_data_buf[0]);
            
        }

        /* sleep 100ms */
        aos_msleep(50);
		//memset(uart_data_buf,0,UART_BUF_SIZE);
    }

    aos_task_exit(0);
}


/*
 * 功能:创建串口1发送任务,向电源监控模块发送获取监控数据的命令
 * 
 * 
 * 
 */
static void application_task2_entry(void *arg)
{
	int ret = -1;
	uint8_t uart_tx_buf[] = {0x55,0x55,0x01,0x02,0x00,0x00,0xAD};
    while (1) {
		ret = hal_uart_send(&uart1, uart_tx_buf, sizeof(uart_tx_buf), UART_TX_TIMEOUT);
		if (ret == 0) {
			printf("uart1 data send succeed !\n");
		}
        aos_msleep(1000);
    }
    aos_task_exit(0);
}

3、任务启动后由u8g2定时刷新显示:

sprintf(disp,"%02d-%02d %02d:%02d:%02d",this_time.tm_mon+1,this_time.tm_mday,this_time.tm_hour,this_time.tm_min,this_time.tm_sec);
u8g2_DrawStr(&u8g2,10,60,disp);
u8g2_SetFont(&u8g2,u8g2_font_7x13_tr);
u8g2_DrawStr(&u8g2,4,24,disp_Vrms);//显示电压值
u8g2_DrawStr(&u8g2,80,24,disp_Irms);//显示电压值
u8g2_DrawStr(&u8g2,4,40,disp_PActive);//显示功率值
u8g2_SendBuffer(&u8g2);

4、实验成果:

 

 

 

 【讨论】经过快一个多月的学习,基本上项目快成形了。下一步采集温度用无线串口发送给RVB2601。基本上就快可以交作业了。
 

最新回复

不错,学习学习   详情 回复 发表于 2024-11-11 09:35
点赞 关注
 
 

回复
举报

6841

帖子

11

TA的资源

版主

沙发
 


视频添加如下:有时间显示,IP地址显示、信号强度显示:

 

 

 
 
 

回复

2万

帖子

74

TA的资源

管理员

板凳
 

谢谢分享

加EE小助手好友,
入技术交流群
EE服务号
精彩活动e手掌握
EE订阅号
热门资讯e网打尽
聚焦汽车电子软硬件开发
认真关注技术本身
 
 
 

回复

149

帖子

0

TA的资源

一粒金砂(中级)

4
 

这个电能计上面是不是有一个电流互感器呀?

点评

这个东西呀,他有电源互感器,还有个电压互感器。  详情 回复 发表于 2022-5-11 18:53
 
 
 

回复

6841

帖子

11

TA的资源

版主

5
 
梦溪开物 发表于 2022-5-11 16:05 这个电能计上面是不是有一个电流互感器呀?

这个东西呀,他有电源互感器,还有个电压互感器。

 
 
 

回复

3

帖子

0

TA的资源

一粒金砂(初级)

6
 

不错,学习学习

 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
推荐帖子
单片机控制飞梭的原理

有搞过这方面的朋友吗?能否给个AVR控制这个元件的原理

电子设计竞赛优秀论文word版

电子设计竞赛优秀论文word版---简易智能电动车3

期待黄智伟老师分析2011年大赛试题!

本帖最后由 paulhyde 于 2014-9-15 09:29 编辑 在竞赛版块看到不少黄智伟老师一系列的帖子。。非常给力。。。期待黄智伟老师根 ...

【暑期酷学】 学会使用三极管

【之一】 简述 总发现有人这样问,我想xx(实现某个功能)用什么IC? 我觉得,设计一个电路,要讲究的是性能及价格统筹考 ...

了解一下电路仿真的SPICE

利用软件进行仿真的技术已经在电子电路的设计和评估中得到广泛应用。这其中也是有诸多原因的。例如,随着运行和信号的高速化,加 ...

C/C++的主函数为什么返回0

在C++或则C中,不同的开发平台有不同的main函数形式。 1.int main(); 1.1 int说明返回值是int型,在结束函数时需要使用retur ...

要驱动分辨率高的屏幕有什么方案?

目前公司已经有驱动800x600的项目了,用的是单片机驱动,现在想要驱动更高分辨率的屏幕大概是1280x720的,我觉得单片机驱动起来 ...

首发!全志T527第一款核心板,高性能8核处理器带AI NPU

今天,米尔电子联合战略合作伙伴全志科技,隆重发布第一款T527核心板及开发板。基于全志T527高性能可选AI功能MPU,配备八核A55高 ...

FireBeetle 2 ESP32 C6开发板 OneWire与DS18B20

OneWire库是一个流行的Arduino库,允许与 1-Wire设备通信,如温度传感器DS18B20,开关和其他外设。库还抽象了通过单个数据线与这 ...

关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表