冰楓論壇

 找回密碼
 立即註冊
ads_sugarbook
搜索
查看: 483|回覆: 0
打印 上一主題 下一主題

[討論] hk32f030m 智能電壓電流表

[複製鏈接]

2609

主題

0

好友

945

積分

高級會員

Rank: 4

UID
373967
帖子
7423
主題
2609
精華
0
積分
945
楓幣
1101
威望
925
存款
26000
贊助金額
0
推廣
0
GP
1205
閱讀權限
50
在線時間
407 小時
註冊時間
2023-1-12
最後登入
2024-5-2

2023端午節紀念勳章 2023中秋節紀念勳章 2023聖誕節紀念勳章

跳轉到指定樓層
1
發表於 2023-4-9 11:44:45 |只看該作者 |倒序瀏覽
製作一個智能電壓電流表,需要以下材料:

HK32F030M開發板 x 1
OLED顯示屏 x 1
INA219電流電壓感測器模塊 x 1
連接線若干
以下是 HK32F030M 的基本資訊:

主頻:72 MHz
FLASH:64 KB
RAM:8 KB
INA219模塊是一個高精度、高速度的電流電壓感測器模塊,可以感測電流、電壓等參數。 OLED顯示屏則可以用來顯示感測到的電流、電壓等數值。

以下是連接線的連接方式:

INA219的VCC接開發板的3.3V
INA219的GND接開發板的GND
INA219的SDA接開發板的PB9
INA219的SCL接開發板的PB8
OLED顯示屏的VCC接開發板的3.3V
OLED顯示屏的GND接開發板的GND
OLED顯示屏的SDA接開發板的PA10
OLED顯示屏的SCL接開發板的PA9
以下是程式碼的基本架構:

#include "hk32f030m.h"
#include "hk32_i2c.h"
#include "hk32f030m_gpio.h"
#include "INA219.h"
#include "OLED.h"

#define OLED_ADDR   0x78
#define INA_ADDR    0x80
初始化函數

void System_Configuration(void)
{
    // 初始化 I2C 接口
    I2C_Configuration(I2C1, 100000);
    I2C_Cmd(I2C1, ENABLE);

    // 初始化 INA219
    INA219_Init(INA_ADDR);

    // 初始化 OLED
    OLED_Init(OLED_ADDR);
    OLED_Clear();
}
主函數

int main(void)
{
    uint16_t voltage, current;

    System_Configuration();

    while (1)
    {
        // 讀取電壓和電流值
        voltage = INA219_GetBusVoltage_V(INA_ADDR);
        current = INA219_GetCurrent_mA(INA_ADDR);

        // 在 OLED 上顯示電壓和電流值
        OLED_Set_Pos(0, 0);
        OLED_PutString("Voltage: ");
        OLED_PutInt(voltage);
        OLED_PutString(" V");

        OLED_Set_Pos(0, 1);
        OLED_PutString("Current: ");
        OLED_PutInt(current);
        OLED_PutString(" mA");

        // 延遲 500ms
        Delay(500);
    }
}
INA219庫文件
arduino
Copy code
#include "hk32_i2c.h"

#define CONFIG_ADDR             0x00
#define SHUNT_VOLTAGE_ADDR      0x01
#define BUS_VOLTAGE_ADDR        0x02

下面是HK32F030M智能電壓電流表的零件清單、連接圖和示例代碼。

零件清單
HK32F030M開發板 x1
OLED屏幕 x1
ACS712電流傳感器 x1
10K電位器 x1
杜邦線若干
連接圖
ACS712傳感器的VCC引腳連接到3.3V電源,GND引腳連接到地,OUT引腳連接到開發板的PB0引腳。

電位器的中心引腳連接到開發板的PA0引腳,兩側引腳連接到3.3V電源和地。

OLED屏幕則通過I2C總線連接到開發板的PB10和PB11引腳。

lua
Copy code
            +-----------------------+
            | HK32F030M開發板         |
            |                       |
            |                       |
            |            +----------+  OLED屏幕
            |            |          |
            |            |  +-------|------+
            |            |  |       |      |
            |            |  |       |      |
    ACS712  |   PB0 <----|--+       |      |
     電流傳感器 |            |       |      |
            |   3.3V -----|----------+      |
            |            |                  |
            |            |                  |
    10K電位器 |   PA0 <----|----------------+
            |            |
            |   3.3V -----+
            |            |
            |   GND <-----+
            +------------+
示例代碼

#include "hk32f030m.h"
#include "ssd1306.h"
#include "acs712.h"

int main(void)
{
    float voltage, current;
    char buf[32];

    // 初始化OLED屏幕
    ssd1306_init();
    ssd1306_clear();

    // 初始化ACS712傳感器
    acs712_init();

    while (1) {
        // 讀取電壓和電流值
        voltage = (float)hk_adc_read(HK_ADC_CH1) * 3.3 / 4096;
        current = acs712_read();

        // 在OLED屏幕上顯示電壓和電流值
        sprintf(buf, "V=%.2fV", voltage);
        ssd1306_display_string(0, 0, buf);
        sprintf(buf, "I=%.2fA", current);
        ssd1306_display_string(0, 1, buf);
        ssd1306_refresh();

        hk_delay_ms(1000); // 等待1秒鐘
    }
}
以上示例代碼使用了HK32F030M開發板上的ADC模塊讀取電壓值,同時使用ACS712傳感器讀取電流值,並在OLED屏幕上顯示。

代碼中還包含了SSD1306 OLED屏幕和ACS712傳感器的驅動庫,需要在項目中添加對應的文件。
收藏收藏0 推0 噓0


把本文推薦給朋友或其他網站上,每次被點擊增加您在本站積分: 1骰子
複製連結並發給好友,以賺取推廣點數
簡單兩步驟,註冊、分享網址,即可獲得獎勵! 一起推廣文章換商品、賺$$
高級模式
B Color Image Link Quote Code Smilies |上傳

廣告刊登意見回饋關於我們職位招聘本站規範DMCA隱私權政策

Copyright © 2011-2024 冰楓論壇, All rights reserved

免責聲明:本網站是以即時上載留言的方式運作,本站對所有留言的真實性、完整性及立場等,不負任何法律責任。

而一切留言之言論只代表留言者個人意見,並非本網站之立場,用戶不應信賴內容,並應自行判斷內容之真實性。

小黑屋|手機版|冰楓論壇

GMT+8, 2024-5-2 15:13

回頂部