arduino-uno - 如何在arduino上执行积分
解决方案
1.) 模型
假设 CBat 是电池的容量并且是常数(物理学家更喜欢用字母 Q 表示电荷;CBat 可能会随着老化而减少,“健康状况”)
按定义:
SOC(t) = Q(t)/CBat
微分方程:
dQ/dt = I(t)
近似值:“dt=1”
Q(t)-Q(t-1) ~= I(t)
或者
SOC(t) ~= SOC(t-1) + I(t)/Cbat
2.) Ardunio:以下是纯虚拟脚本,在线编译器无法使用。
// Assume current coming from serial port
const float C_per_Ah = 3600;
// signal adjustment
const float current_scale_A = 0.1; // Ampere per serial step
const int current_offset = 128; // Offset of serial value for I=0A
float CBat_Ah = 94; /* Assumed Battery Capacity in Ah */
float Cbat_C = CBat_Ah * C_per_Ah; /* ... in Coulomb */
float SOC = 0.7; /* Initial State of Charge */
int incomingByte = current_offset; // for incoming serial data, initial 0 Ampere
float I = 0; /* current */
// the setup routine runs once when you press reset:
void setup()
{
Serial.begin(9600); // opens serial port, sets data rate to 9600 bps
}
// the loop routine runs over and over again forever:
void loop()
{
delay(1000); // wait for a second
if (Serial.available() > 0)
{
// read the incoming byte:
incomingByte = Serial.read();
}
I = (incomingByte-current_offset) * current_scale_A;
SOC = SOC + I/Cbat_C;
Serial.print("New SOC: ");
Serial.println(SOC, 4);
}
推荐阅读
- javascript - onClick 通过使用键迭代数据并替换为状态中的新数据来替换以前的状态项?
- apache-spark - 验证一个 pyspark Dataframe 中的行数据与另一个 Dataframe 匹配
- angular - Angular - 根据所选项目搜索数据
- javascript - 在数组中添加它们的值时删除重复项
- javascript - 是否可以根据另一个值在构造函数中设置默认值?
- vba - 将每张幻灯片保存为单独的文件
- java - 用逐帧动画制作transitionX动画会导致滞后
- android - 回收站视图项目中的文本超出屏幕
- python - python manage.py migrate 不创建表
- laravel - 如何在 Laravel 存储中将 app/public 更改为 app/something