Skip to content

Commit a7a33e5

Browse files
committed
initfoc fails if current sense is not well initialised
1 parent adbdb6a commit a7a33e5

File tree

6 files changed

+25
-42
lines changed

6 files changed

+25
-42
lines changed

README.md

Lines changed: 9 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -20,47 +20,15 @@ Therefore this is an attempt to:
2020

2121

2222

23-
<blockquote class="info">
24-
<p class="heading">NEW RELEASE 📢: <span class="simple">Simple<span class="foc">FOC</span>library</span> v2.2.2 <a href="https://github.com/simplefoc/Arduino-FOC/releases/tag/v2.2.2">see release</a></p>
25-
<ul>
26-
<li>GenericCurrentSense bugfix and testing</li>
27-
<li>bugfix leonardo #170</li>
28-
<li>bugfix - no index search after specifying natural direction</li>
29-
<li>Low level API restructuring
30-
<ul dir="auto">
31-
<li>Driver API</li>
32-
<li>Current sense API</li>
33-
</ul>
34-
</li>
35-
<li>New debugging interface - <a href="https://docs.simplefoc.com/debugging">see in docs</a>
36-
<ul dir="auto">
37-
<li>Static class SimpleFOCDebug</li>
38-
</ul>
39-
</li>
40-
<li>CurrentSense API change - added method <code class="highlighter-rouge">linkDriver()</code> - <a href="https://docs.simplefoc.com/current_sense">see in docs</a></li>
41-
<li>Low-side current sensing - <a href="https://docs.simplefoc.com/low_side_current_sense">see in docs</a>
42-
<ul dir="auto">
43-
<li>ESP32 generic support for multiple motors</li>
44-
<li>Added low-side current sensing support for stm32 - only one motor
45-
<ul dir="auto">
46-
<li>f1 family</li>
47-
<li>f4 family</li>
48-
<li>g4 family</li>
49-
</ul>
50-
</li>
51-
</ul>
52-
</li>
53-
<li>New appraoch for current estimation for torque control using voltage - <a href="https://docs.simplefoc.com/voltage_torque_mode">see in docs </a>
54-
<ul dir="auto">
55-
<li>Support for motor KV rating - back emf estimation</li>
56-
<li>Using motor phase resistance</li>
57-
</ul>
58-
</li>
59-
<li>KV rating and phase resistance used for open-loop current limiting as well - <a href="https://docs.simplefoc.com/open_loop_motion_control">see in docs </a> </li>
60-
</ul>
61-
</blockquote>
62-
63-
## Arduino *SimpleFOClibrary* v2.2
23+
> FUTURE RELEASE : <span class="simple">Simple<span class="foc">FOC</span>library</span> v2.2.3
24+
> - stm32 low-side current sensing
25+
> - g4 supported
26+
> - thoroughly tested f1/f4/g4
27+
> - bugfixing
28+
> - leonardo
29+
> - mega2560
30+
31+
## Arduino *SimpleFOClibrary* v2.2.2
6432

6533
<p align="">
6634
<a href="https://youtu.be/Y5kLeqTc6Zk">

src/BLDCMotor.cpp

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -121,7 +121,15 @@ int BLDCMotor::initFOC( float zero_electric_offset, Direction _sensor_direction
121121
// and checks the direction of measuremnt.
122122
_delay(500);
123123
if(exit_flag){
124-
if(current_sense) exit_flag *= alignCurrentSense();
124+
if(current_sense){
125+
if (!current_sense->initialized) {
126+
motor_status = FOCMotorStatus::motor_calib_failed;
127+
SIMPLEFOC_DEBUG("MOT: Init FOC error, current sense not initialized");
128+
exit_flag = 0;
129+
}else{
130+
exit_flag *= alignCurrentSense();
131+
}
132+
}
125133
else SIMPLEFOC_DEBUG("MOT: No current sense.");
126134
}
127135

src/common/base_classes/CurrentSense.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ class CurrentSense{
2929
bool skip_align = false; //!< variable signaling that the phase current direction should be verified during initFOC()
3030

3131
BLDCDriver* driver; //!< driver link
32+
bool initialized = false; // true if current sense was successfully initialized
3233
void* params = 0; //!< pointer to hardware specific parameters of current sensing
3334

3435
/**

src/current_sense/GenericCurrentSense.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,8 @@ int GenericCurrentSense::init(){
1313
if(initCallback != nullptr) initCallback();
1414
// calibrate zero offsets
1515
calibrateOffsets();
16+
// set the initialized flag
17+
initialized = (params!=SIMPLEFOC_CURRENT_SENSE_INIT_FAILED);
1618
// return success
1719
return 1;
1820
}

src/current_sense/InlineCurrentSense.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,8 @@ int InlineCurrentSense::init(){
2727
if (params == SIMPLEFOC_CURRENT_SENSE_INIT_FAILED) return 0;
2828
// calibrate zero offsets
2929
calibrateOffsets();
30+
// set the initialized flag
31+
initialized = (params!=SIMPLEFOC_CURRENT_SENSE_INIT_FAILED);
3032
// return success
3133
return 1;
3234
}

src/current_sense/LowsideCurrentSense.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,8 @@ int LowsideCurrentSense::init(){
2929
_driverSyncLowSide(driver->params, params);
3030
// calibrate zero offsets
3131
calibrateOffsets();
32+
// set the initialized flag
33+
initialized = (params!=SIMPLEFOC_CURRENT_SENSE_INIT_FAILED);
3234
// return success
3335
return 1;
3436
}

0 commit comments

Comments
 (0)