18
18
#include " Common.h"
19
19
#include " Wire.h"
20
20
21
+ #define PMIC_ADDRESS 0x6B
22
+ #define PMIC_REG00 0x00
23
+ #define PMIC_REG01 0x01
24
+ #define PMIC_REG02 0x02
25
+ #define PMIC_REG04 0x04
26
+ #define PMIC_REG05 0x05
27
+
21
28
String mc::MotorController::getFWVersion () {
22
29
char ret[5 ];
23
30
getData (GET_VERSION, (uint8_t *)ret);
@@ -42,6 +49,14 @@ float mc::MotorController::getTemperature() {
42
49
43
50
int mc::MotorController::begin () {
44
51
Wire.begin ();
52
+
53
+ // PMIC initialization raw APIs: are sused to initialize the
54
+ // PMIC when used with nano 33 iot
55
+ #ifdef ARDUINO_SAMD_NANO_33_IOT
56
+ Serial.println (" Board: Nano 33 IoT" );
57
+ enable_battery_charging ();
58
+ Serial.println (" Charging enabled...." );
59
+ #endif
45
60
String version = getFWVersion ();
46
61
if (version.c_str ()[0 ] == ' 0' ) {
47
62
return 1 ;
@@ -59,4 +74,27 @@ int mc::MotorController::getFreeRam() {
59
74
int ret;
60
75
getData (GET_FREE_RAM, (uint8_t *)&ret);
61
76
return ret;
77
+ }
78
+
79
+ void mc::MotorController::enable_battery_charging () {
80
+ Wire.beginTransmission (PMIC_ADDRESS);
81
+ Wire.write (PMIC_REG00);
82
+ Wire.write (0x06 ); // min sys voltage 3.88V + max input current 2.0 A
83
+ Wire.endTransmission ();
84
+ Wire.beginTransmission (PMIC_ADDRESS);
85
+ Wire.write (PMIC_REG01);
86
+ Wire.write (0x1B ); // Charge Battery + Minimum System Voltage 3.5V
87
+ Wire.endTransmission ();
88
+ Wire.beginTransmission (PMIC_ADDRESS);
89
+ Wire.write (PMIC_REG02);
90
+ Wire.write (0x00 ); // Charge current 512 mA
91
+ Wire.endTransmission ();
92
+ Wire.beginTransmission (PMIC_ADDRESS);
93
+ Wire.write (PMIC_REG04);
94
+ Wire.write (0x9E ); // Charge Voltage Limit 4.128V
95
+ Wire.endTransmission ();
96
+ Wire.beginTransmission (PMIC_ADDRESS);
97
+ Wire.write (PMIC_REG05);
98
+ Wire.write (0x8A ); // Enable Battery Charge termination + disable watchdog
99
+ Wire.endTransmission ();
62
100
}
0 commit comments