Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
C
car-controlserver
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
wenzhongjian
car-controlserver
Commits
345005f0
Commit
345005f0
authored
May 26, 2025
by
957dd
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
软件iic可以正常读取了
parent
cd8e0f93
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
30 additions
and
91 deletions
+30
-91
main
build/main
+0
-0
INA226.c
system/sensor/INA226.c
+29
-90
main.c
usr/main.c
+1
-1
No files found.
build/main
View file @
345005f0
No preview for this file type
system/sensor/INA226.c
View file @
345005f0
...
@@ -6,76 +6,15 @@
...
@@ -6,76 +6,15 @@
float
currentLSB
;
float
currentLSB
;
// I2C 起始信号
void
i2c_start_ina226
()
{
digitalWrite
(
sda_pin
,
HIGH
);
digitalWrite
(
scl_pin
,
HIGH
);
i2c_delay
();
digitalWrite
(
sda_pin
,
LOW
);
i2c_delay
();
digitalWrite
(
scl_pin
,
LOW
);
i2c_delay
();
}
// I2C 停止信号
void
i2c_stop_ina226
()
{
digitalWrite
(
sda_pin
,
LOW
);
digitalWrite
(
scl_pin
,
LOW
);
i2c_delay
();
digitalWrite
(
scl_pin
,
HIGH
);
i2c_delay
();
digitalWrite
(
sda_pin
,
HIGH
);
i2c_delay
();
}
// I2C 发送一个字节
void
i2c_write_byte_ina226
(
uint8_t
data1
)
{
for
(
int
i
=
7
;
i
>=
0
;
i
--
)
{
digitalWrite
(
sda_pin
,
(
data1
>>
i
)
&
0x01
);
i2c_delay
();
digitalWrite
(
scl_pin
,
HIGH
);
i2c_delay
();
digitalWrite
(
scl_pin
,
LOW
);
i2c_delay
();
}
// 接收 ACK
pinMode
(
sda_pin
,
INPUT
);
digitalWrite
(
scl_pin
,
HIGH
);
i2c_delay
();
digitalWrite
(
scl_pin
,
LOW
);
pinMode
(
sda_pin
,
OUTPUT
);
}
// I2C 读取一个字节
uint8_t
i2c_read_byte_ina226
(
bool
ack1
)
{
uint8_t
data1
=
0
;
pinMode
(
sda_pin
,
INPUT
);
for
(
int
i
=
7
;
i
>=
0
;
i
--
)
{
digitalWrite
(
scl_pin
,
HIGH
);
i2c_delay
();
data1
|=
(
digitalRead
(
sda_pin
)
<<
i
);
digitalWrite
(
scl_pin
,
LOW
);
i2c_delay
();
}
// 发送 ACK/NACK
pinMode
(
sda_pin
,
OUTPUT
);
digitalWrite
(
sda_pin
,
ack1
?
LOW
:
HIGH
);
digitalWrite
(
scl_pin
,
HIGH
);
i2c_delay
();
digitalWrite
(
scl_pin
,
LOW
);
pinMode
(
sda_pin
,
INPUT
);
return
data1
;
}
// 配置 INA226
// 配置 INA226
bool
INA226_configure
()
{
bool
INA226_configure
()
{
uint16_t
config
=
0x4127
;
// 默认配置:16次平均,1.1ms 转换时间,连续模式
uint16_t
config
=
0x4127
;
// 默认配置:16次平均,1.1ms 转换时间,连续模式
i2c_start
_ina226
();
i2c_start
();
i2c_write_byte
_ina226
(
INA226_ADDRESS
<<
1
);
i2c_write_byte
(
INA226_ADDRESS
<<
1
);
i2c_write_byte
_ina226
(
INA226_REG_CONFIG
);
i2c_write_byte
(
INA226_REG_CONFIG
);
i2c_write_byte
_ina226
(
config
>>
8
);
i2c_write_byte
(
config
>>
8
);
i2c_write_byte
_ina226
(
config
&
0xFF
);
i2c_write_byte
(
config
&
0xFF
);
i2c_stop
_ina226
();
i2c_stop
();
return
true
;
return
true
;
}
}
...
@@ -84,39 +23,39 @@ bool INA226_calibrate(float rShuntValue, float iMaxExpected) {
...
@@ -84,39 +23,39 @@ bool INA226_calibrate(float rShuntValue, float iMaxExpected) {
currentLSB
=
iMaxExpected
/
32767
.
0
;
// 电流 LSB
currentLSB
=
iMaxExpected
/
32767
.
0
;
// 电流 LSB
uint16_t
calibrationValue
=
(
uint16_t
)(
0
.
00512
/
(
currentLSB
*
rShuntValue
));
uint16_t
calibrationValue
=
(
uint16_t
)(
0
.
00512
/
(
currentLSB
*
rShuntValue
));
i2c_start
_ina226
();
i2c_start
();
i2c_write_byte
_ina226
(
INA226_ADDRESS
<<
1
);
i2c_write_byte
(
INA226_ADDRESS
<<
1
);
i2c_write_byte
_ina226
(
INA226_REG_CALIBRATION
);
i2c_write_byte
(
INA226_REG_CALIBRATION
);
i2c_write_byte
_ina226
(
calibrationValue
>>
8
);
i2c_write_byte
(
calibrationValue
>>
8
);
i2c_write_byte
_ina226
(
calibrationValue
&
0xFF
);
i2c_write_byte
(
calibrationValue
&
0xFF
);
i2c_stop
_ina226
();
i2c_stop
();
return
true
;
return
true
;
}
}
// 读取总线电压
// 读取总线电压
float
INA226_readBusVoltage
()
{
float
INA226_readBusVoltage
()
{
i2c_start
_ina226
();
i2c_start
();
i2c_write_byte
_ina226
(
INA226_ADDRESS
<<
1
);
i2c_write_byte
(
INA226_ADDRESS
<<
1
);
i2c_write_byte
_ina226
(
INA226_REG_BUSVOLTAGE
);
i2c_write_byte
(
INA226_REG_BUSVOLTAGE
);
i2c_start
_ina226
();
i2c_start
();
i2c_write_byte
_ina226
((
INA226_ADDRESS
<<
1
)
|
1
);
i2c_write_byte
((
INA226_ADDRESS
<<
1
)
|
1
);
uint8_t
high
=
i2c_read_byte
_ina226
(
true
);
uint8_t
high
=
i2c_read_byte
(
true
);
uint8_t
low
=
i2c_read_byte
_ina226
(
false
);
uint8_t
low
=
i2c_read_byte
(
false
);
i2c_stop
_ina226
();
i2c_stop
();
int16_t
value
=
(
high
<<
8
)
|
low
;
int16_t
value
=
(
high
<<
8
)
|
low
;
return
value
*
0
.
00125
f
;
// 每 LSB = 1.25mV
return
value
*
0
.
00125
f
;
// 每 LSB = 1.25mV
}
}
// 读取电流
// 读取电流
float
INA226_readCurrent
()
{
float
INA226_readCurrent
()
{
i2c_start
_ina226
();
i2c_start
();
i2c_write_byte
_ina226
(
INA226_ADDRESS
<<
1
);
i2c_write_byte
(
INA226_ADDRESS
<<
1
);
i2c_write_byte
_ina226
(
INA226_REG_CURRENT
);
i2c_write_byte
(
INA226_REG_CURRENT
);
i2c_start
_ina226
();
i2c_start
();
i2c_write_byte
_ina226
((
INA226_ADDRESS
<<
1
)
|
1
);
i2c_write_byte
((
INA226_ADDRESS
<<
1
)
|
1
);
uint8_t
high
=
i2c_read_byte
_ina226
(
true
);
uint8_t
high
=
i2c_read_byte
(
true
);
uint8_t
low
=
i2c_read_byte
_ina226
(
false
);
uint8_t
low
=
i2c_read_byte
(
false
);
i2c_stop
_ina226
();
i2c_stop
();
int16_t
value
=
(
high
<<
8
)
|
low
;
int16_t
value
=
(
high
<<
8
)
|
low
;
return
value
*
currentLSB
;
return
-
value
*
currentLSB
;
}
}
usr/main.c
View file @
345005f0
...
@@ -42,7 +42,7 @@ int main_start_error_return() {
...
@@ -42,7 +42,7 @@ int main_start_error_return() {
my_zlog_warn
(
"INA226初始化失败"
);
my_zlog_warn
(
"INA226初始化失败"
);
}
}
// 校准 INA226
// 校准 INA226
float
rShuntValue
=
0
.
1
;
// 分流电阻值(单位:欧姆)
float
rShuntValue
=
0
.
0
1
;
// 分流电阻值(单位:欧姆)
float
iMaxExpected
=
5
;
// 最大预期电流(单位:安培)
float
iMaxExpected
=
5
;
// 最大预期电流(单位:安培)
if
(
!
INA226_calibrate
(
rShuntValue
,
iMaxExpected
)){
if
(
!
INA226_calibrate
(
rShuntValue
,
iMaxExpected
)){
my_zlog_warn
(
"INA226校准失败"
);
my_zlog_warn
(
"INA226校准失败"
);
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment