<?xml version="1.0" encoding="UTF-8"?>        <rss version="2.0"
             xmlns:atom="http://www.w3.org/2005/Atom"
             xmlns:dc="http://purl.org/dc/elements/1.1/"
             xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
             xmlns:admin="http://webns.net/mvcb/"
             xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
             xmlns:content="http://purl.org/rss/1.0/modules/content/">
        <channel>
            <title>
									Microcontroller Firmware (C++) - Forum				            </title>
            <link>https://theopenexo.nau.edu/community/firmware/</link>
            <description>Discussion Board</description>
            <language>en-US</language>
            <lastBuildDate>Mon, 25 May 2026 03:32:21 +0000</lastBuildDate>
            <generator>wpForo</generator>
            <ttl>60</ttl>
							                    <item>
                        <title>When I was burning the motor program, I found that I couldn&#039;t achieve motor control at all, not even being able to control the motor&#039;s movement. However, when I used the CubeMars upper computer, I was able to achieve motor control. Why is this? How...</title>
                        <link>https://theopenexo.nau.edu/community/firmware/when-i-was-burning-the-motor-program-i-found-that-i-couldnt-achieve-motor-control-at-all-not-even-being-able-to-control-the-motors-movement-however-when-i-used-the-cubemars-upper-computer-i-w/</link>
                        <pubDate>Thu, 23 Apr 2026 07:29:37 +0000</pubDate>
                        <description><![CDATA[When I was burning the motor program, I found that I couldn&#039;t achieve motor control at all, not even being able to control the motor&#039;s movement. However, when I used the CubeMars upper compu...]]></description>
                        <content:encoded><![CDATA[<p>When I was burning the motor program, I found that I couldn't achieve motor control at all, not even being able to control the motor's movement. However, when I used the CubeMars upper computer, I was able to achieve motor control. Why is this? How should I debug to control the motor through Teensy? Can anyone help me? Thank you very much!</p>]]></content:encoded>
						                            <category domain="https://theopenexo.nau.edu/community/firmware/">Microcontroller Firmware (C++)</category>                        <dc:creator>iive</dc:creator>
                        <guid isPermaLink="true">https://theopenexo.nau.edu/community/firmware/when-i-was-burning-the-motor-program-i-found-that-i-couldnt-achieve-motor-control-at-all-not-even-being-able-to-control-the-motors-movement-however-when-i-used-the-cubemars-upper-computer-i-w/</guid>
                    </item>
				                    <item>
                        <title>After we have completed the testing according to the assembly manual on the forum, we are ready to install the exoskeleton on the human body for testing. Could you please tell me what are the safe and effective steps to follow?</title>
                        <link>https://theopenexo.nau.edu/community/firmware/after-we-have-completed-the-testing-according-to-the-assembly-manual-on-the-forum-we-are-ready-to-install-the-exoskeleton-on-the-human-body-for-testing-could-you-please-tell-me-what-are-the-safe-and/</link>
                        <pubDate>Wed, 18 Mar 2026 01:02:29 +0000</pubDate>
                        <description><![CDATA[After we have completed the testing according to the assembly manual on the forum, we are ready to install the exoskeleton on the human body for testing. Could you please tell me what are th...]]></description>
                        <content:encoded><![CDATA[<p>After we have completed the testing according to the assembly manual on the forum, we are ready to install the exoskeleton on the human body for testing. Could you please tell me what are the safe and effective steps to follow?</p>]]></content:encoded>
						                            <category domain="https://theopenexo.nau.edu/community/firmware/">Microcontroller Firmware (C++)</category>                        <dc:creator>wangchu</dc:creator>
                        <guid isPermaLink="true">https://theopenexo.nau.edu/community/firmware/after-we-have-completed-the-testing-according-to-the-assembly-manual-on-the-forum-we-are-ready-to-install-the-exoskeleton-on-the-human-body-for-testing-could-you-please-tell-me-what-are-the-safe-and/</guid>
                    </item>
				                    <item>
                        <title>After the test is completed, assistance cannot be provided.</title>
                        <link>https://theopenexo.nau.edu/community/firmware/after-the-test-is-completed-assistance-cannot-be-provided/</link>
                        <pubDate>Fri, 06 Feb 2026 09:25:27 +0000</pubDate>
                        <description><![CDATA[Hello, regarding this open-source project, we assembled it based on your open-source materials. The steps for using the upper computer to conduct motor calibration are all normal. However, w...]]></description>
                        <content:encoded><![CDATA[<blockquote>
<div>
<div>Hello, regarding this open-source project, we assembled it based on your open-source materials. The steps for using the upper computer to conduct motor calibration are all normal. However, when we tried to use it directly, this exoskeleton device was unable to provide any assistance for human walking. We also removed the comment before the #define HEADLESS statement in the code, but it still didn't work. May I ask how this situation should be resolved? Do you have any programs that can directly assist in this matter that you could share?</div>
</div>
</blockquote>]]></content:encoded>
						                            <category domain="https://theopenexo.nau.edu/community/firmware/">Microcontroller Firmware (C++)</category>                        <dc:creator>wangchu</dc:creator>
                        <guid isPermaLink="true">https://theopenexo.nau.edu/community/firmware/after-the-test-is-completed-assistance-cannot-be-provided/</guid>
                    </item>
				                    <item>
                        <title>i can not read SD_card.The debug output reads: &quot;SD.begin() failed</title>
                        <link>https://theopenexo.nau.edu/community/firmware/i-can-not-read-sd_card-the-debug-output-reads-sd-begin-failed/</link>
                        <pubDate>Tue, 03 Feb 2026 09:28:34 +0000</pubDate>
                        <description><![CDATA[i can not read SD_card,i need your help.SD.begin(SD_SELECT) allways return false(Parselni.cpp: line 73 )We know that SD_SELECT in the program is assigned the value of BUILTIN_SDCARD, and we ...]]></description>
                        <content:encoded><![CDATA[<p><span>i can not read SD_card,i need your help.</span><br /><span>SD.begin(SD_SELECT) allways return false(Parselni.cpp: line 73 )</span><br /><span>We know that SD_SELECT in the program is assigned the value of BUILTIN_SDCARD, and we tried to find the definition of BUILTIN_SDCARD. We learned that this value is not defined by the user but is inherent to the Teensy board. We added a print statement and found that BUILTIN_SDCARD is 254, and the CS pin in the SPI setup reads 3.3V instead of 0V. So far, we don't understand why SD.begin(SD_SELECT) returns false. This makes it difficult to proceed with our replication work because we cannot read the SD card's configuration parameters. Are there any solutions?</span></p>]]></content:encoded>
						                            <category domain="https://theopenexo.nau.edu/community/firmware/">Microcontroller Firmware (C++)</category>                        <dc:creator>huang_EnHong</dc:creator>
                        <guid isPermaLink="true">https://theopenexo.nau.edu/community/firmware/i-can-not-read-sd_card-the-debug-output-reads-sd-begin-failed/</guid>
                    </item>
				                    <item>
                        <title>FSR alibration？</title>
                        <link>https://theopenexo.nau.edu/community/firmware/fsr-alibration%ef%bc%9f/</link>
                        <pubDate>Sat, 13 Dec 2025 18:15:13 +0000</pubDate>
                        <description><![CDATA[We have completed part of the wiring according to the documentation, following the wiki exactly (only installing the left hip motor and two force-sensitive resistors). We have used two power...]]></description>
                        <content:encoded><![CDATA[<div class="auto-hide-last-sibling-br paragraph-pP9ZLC paragraph-element br-paragraph-space">We have completed part of the wiring according to the documentation, following the wiki exactly (only installing the left hip motor and two force-sensitive resistors). We have used two power supply schemes for the exoskeleton:</div>
<ol class="auto-hide-last-sibling-br">
<li>
<div class="auto-hide-last-sibling-br paragraph-pP9ZLC paragraph-element br-paragraph-space">Power the Nano and Teensy 4.1 directly via the computer's USB, and power the AK60v1.1 motor using a 24V battery (the main controller and motor are powered separately; the expansion circuit board is not used for powering the main controller or the motor).</div>
</li>
<li>
<div class="auto-hide-last-sibling-br paragraph-pP9ZLC paragraph-element br-paragraph-space">Power the Nano and Teensy via the expansion circuit board using a 12V lithium battery, and power the AK60v1.1 motor directly with a 24V lithium battery.</div>
</li>
</ol>
<div class="auto-hide-last-sibling-br paragraph-pP9ZLC paragraph-element br-paragraph-space">However, after performing what we believe are the necessary operations and connecting all components (including modifying parameters such as motor ID and editing SD card files), the motor still does not rotate.<br /><br /><br /></div>
<div class="auto-hide-last-sibling-br paragraph-pP9ZLC paragraph-element br-paragraph-space">In our failed attempts, the configuration of the exoskeleton is as follows:<br /><br /><br />    ;Sides - left, right, bilateral <br />    sides = bilateral<br /><br />    ;Joints used and their motor name, 0 = joint not useed, AK60, AK60v1.1, AK70, are AK80 the different CAN motors.<br />    ;Values 0(joint NOT used), NullMotor (joint IS used, no motors attached), AK60, AK60v1.1, AK70, AK80, MaxonMotor, Robstride02<br />    hip = 0<br />    knee = 0<br />    ankle = 0<br />    elbow = 0<br />    <br />    ;Joint gear ratio = velocity of driving member (motor)/velocity of the driven member (output shaft), assumes constant gearing ratio. If the motor spins 6 revolutions to 1 revolution of the output this value would be 6.<br />    ;This is for transmission gearing after the motor output shaft. If the Motor has a built in gearing that should be part of the motor class (see motor.h/.cpp)<br />    ;Values 1, 2, 3, 4.5<br />    hipGearRatio = 1<br />    kneeGearRatio = 1<br />    ankleGearRatio = 1<br />    elbowGearRatio = 1<br /><br />    ;Default controller for the joint<br />    ;Hip Controllers: zeroTorque, franksCollinsHip, constantTorque, chirp, step, phmc, calibrManager<br />    ;Knee Controllers: zeroTorque, constantTorque, chirp, step, calibrManager<br />    ;Ankle Controllers: zeroTorque, PJMC, zhangCollins, constantTorque, TREC, calibrManager, chirp, step, SPV2 <br />    ;Elbow Controllers: zeroTorque, elbowMinMax, calibrManager, chirp, step<br />    hipDefaultController = 0<br />    kneeDefaultController = 0<br />    ankleDefaultController = 0<br />    elbowDefaultController = 0</div>]]></content:encoded>
						                            <category domain="https://theopenexo.nau.edu/community/firmware/">Microcontroller Firmware (C++)</category>                        <dc:creator>wuyang</dc:creator>
                        <guid isPermaLink="true">https://theopenexo.nau.edu/community/firmware/fsr-alibration%ef%bc%9f/</guid>
                    </item>
				                    <item>
                        <title>Regarding the modification of the config.ini file</title>
                        <link>https://theopenexo.nau.edu/community/firmware/regarding-the-modification-of-the-config-ini-file/</link>
                        <pubDate>Wed, 10 Dec 2025 14:08:12 +0000</pubDate>
                        <description><![CDATA[I would like to ask what modifications I need to make to the exoskeleton&#039;s config.ini code file if I only configure the left hip motor for the exoskeleton?For the scenario where only the lef...]]></description>
                        <content:encoded><![CDATA[<div class="auto-hide-last-sibling-br paragraph-vM4cn4 paragraph-element br-paragraph-space">I would like to ask what modifications I need to make to the exoskeleton's<span> </span><code>config.ini</code><span> </span>code file if I only configure the left hip motor for the exoskeleton?<br /><br />For the scenario where only the left hip motor of the exoskeleton is configured, according to the guidelines in the wiki documentation, the modifications I have currently made in<span> </span><code>config.ini</code><span> </span>are as follows:<br /><br /><br /></div>
<div class="auto-hide-last-sibling-br paragraph-vM4cn4 paragraph-element br-paragraph-space">;Board information;<br />ALL FIELDS SHOULD BE LESS THAN 25 CHAR<br />;<br /><br />NEEDS TO BE SET IN "Config.h" PRIOR TO FLASHING TO TEENSY &amp; NANO;<br />Select one of the available board names (see list in Config.h);<br />Define the board version in "BOARD_VERSION" slot immediately after the list</div>
<div class="auto-hide-last-sibling-br paragraph-vM4cn4 paragraph-element br-paragraph-space"><br />name = leftHip<br /><br /></div>
<div class="auto-hide-last-sibling-br paragraph-vM4cn4 paragraph-element br-paragraph-space"><br />;DEPRECATED. Describes the type of battery used, values: smart(inspired energy), dumb (simple lipo)<br />name = dumb<br /><br />;<br />Sides - left, right, bilateral<br />sides = left<br /><br /><br /></div>
<div class="auto-hide-last-sibling-br paragraph-vM4cn4 paragraph-element br-paragraph-space">I want to confirm whether my modifications are correct? In addition, do I need to make any other changes besides modifying the<span> </span><code>config.ini</code><span> </span>file when only the left hip motor of the exoskeleton is configured?<br /><br /></div>
<div class="auto-hide-last-sibling-br paragraph-vM4cn4 paragraph-element br-paragraph-space">Looking forward to your reply sincerely!</div>]]></content:encoded>
						                            <category domain="https://theopenexo.nau.edu/community/firmware/">Microcontroller Firmware (C++)</category>                        <dc:creator>wuyang</dc:creator>
                        <guid isPermaLink="true">https://theopenexo.nau.edu/community/firmware/regarding-the-modification-of-the-config-ini-file/</guid>
                    </item>
				                    <item>
                        <title>After uploading the compiled OpenExo.ino to the Teensy 4.1, the serial monitor continuously restarts.</title>
                        <link>https://theopenexo.nau.edu/community/firmware/after-uploading-the-compiled-openexo-ino-to-the-teensy-4-1-the-serial-monitor-continuously-restarts/</link>
                        <pubDate>Wed, 08 Oct 2025 01:18:08 +0000</pubDate>
                        <description><![CDATA[Following the OpenExo paper and open-source documentation, I have soldered the AK Board 0.5.1 11 and purchased two AK80-9 motors for the left and right hip joints. I also placed four FSR sen...]]></description>
                        <content:encoded><![CDATA[<p class="ds-markdown-paragraph"><span>Following the OpenExo paper and open-source documentation, I have soldered the AK Board 0.5.1 11 and purchased two AK80-9 motors for the left and right hip joints. I also placed four FSR sensors on the heels of the left and right feet. Currently, the status lights and sync light unit tests have passed, and the FSR sensors can successfully detect signals. Using FranksCollinsHip, I can control the motor oscillations based on gait phases. Of course, all of this has been reconstructed by myself with reference to the OpenExo content.</span></p>
<p class="ds-markdown-paragraph"><span>I thought that after these unit tests passed, since there are no torque sensors, I sought advice from Landon Coonrod. He provided excellent suggestions, and I replaced the torque sensor PID section in Controller.cpp, directly using feedforward commands instead. I also thoroughly reviewed and updated the contents in config.ini and OpenExo.ino. It feels like I am at a critical breakthrough point, much like the final hurdle before scoring a goal in soccer. However, after uploading the firmware to the Teensy 4.1, I noticed that the serial monitor keeps restarting continuously, likely due to a memory overflow causing the watchdog to repeatedly reset. I encountered this issue two weeks ago and found that the memory overflow occurred when generating the ExoData object. I spent a whole day troubleshooting without any progress and eventually moved on to refactoring and performing unit tests. Now, as I attempt to recreate the complete OpenExo project, I am facing a similar problem again. I sincerely request guidance from professors and experts with experience in this area of the OpenExo team to see if we can quickly get the hip joint assist device into a basic working state.</span></p>
<p class="ds-markdown-paragraph"><span>I have attached my revised OpenExo files and the config.ini file. I kindly ask the experts to collaborate with me in diagnosing this issue, hoping to resolve this persistent problem this time.</span></p>]]></content:encoded>
						                            <category domain="https://theopenexo.nau.edu/community/firmware/">Microcontroller Firmware (C++)</category>                        <dc:creator>KevinGuo</dc:creator>
                        <guid isPermaLink="true">https://theopenexo.nau.edu/community/firmware/after-uploading-the-compiled-openexo-ino-to-the-teensy-4-1-the-serial-monitor-continuously-restarts/</guid>
                    </item>
				                    <item>
                        <title>Mismatch in Torque Angle Behavior</title>
                        <link>https://theopenexo.nau.edu/community/firmware/mismatch-in-torque-angle-behavior/</link>
                        <pubDate>Mon, 06 Oct 2025 20:38:23 +0000</pubDate>
                        <description><![CDATA[I am developing a quasi-passive AFO using parts of the OpenExo Design and firmware. I recently noticed an issue with between the torque-angle plots while walking. These plots are useful to c...]]></description>
                        <content:encoded><![CDATA[<p>I am developing a quasi-passive AFO using parts of the OpenExo Design and firmware. I recently noticed an issue with between the torque-angle plots while walking. These plots are useful to characterize the elastic element of the device. During loading there was a nice linear region as expected for a spring based system, but the unloading period dropped to 0 Nm of torque almost instantly. Normally the unloading curve follows the loading curve, with some hysteresis. What might be going on here? </p>]]></content:encoded>
						                            <category domain="https://theopenexo.nau.edu/community/firmware/">Microcontroller Firmware (C++)</category>                        <dc:creator>Sam Hopkins</dc:creator>
                        <guid isPermaLink="true">https://theopenexo.nau.edu/community/firmware/mismatch-in-torque-angle-behavior/</guid>
                    </item>
				                    <item>
                        <title>How to define SPI pin in AK Board 0.5.1 11?</title>
                        <link>https://theopenexo.nau.edu/community/firmware/how-to-define-spi-pin-in-ak-board-0-5-1-11/</link>
                        <pubDate>Fri, 03 Oct 2025 08:09:16 +0000</pubDate>
                        <description><![CDATA[While using the AK Board 0.5.1 11, I noticed that the SPI pin numbers are not fully defined as shown below. Could the relevant person in charge please provide the specific pin definitions fo...]]></description>
                        <content:encoded><![CDATA[<p><span>While using the AK Board 0.5.1 11, I noticed that the SPI pin numbers are not fully defined as shown below. Could the relevant person in charge please provide the specific pin definitions for SPI0 and SPI1? I measured with a multimeter and found that SPI1 is located at the bottom right of the printed circuit board (AK Board), corresponding to pins "0, 1, 26, 27" on the Teensy. If I want to add an IMU, can I use this interface? In Board.h, the SPI definitions are as follows:<br />"""""""""""""<br />//SPI Follower Pins<br />const unsigned int miso_pin ;<br />const unsigned int mosi_pin= 11;<br />const unsigned int sck_pin ;<br />const unsigned int cs_pin = 10;<br />const unsigned int irq_pin = 34;<br />const unsigned int rst_pin = 4;<br />const unsigned int spi_mode = 8; //This is 8 or 16 bit, not the actual SPI mode, I know it is confusing but that is how they chose to make the library.<br /></span>"""""""""""""</p>]]></content:encoded>
						                            <category domain="https://theopenexo.nau.edu/community/firmware/">Microcontroller Firmware (C++)</category>                        <dc:creator>KevinGuo</dc:creator>
                        <guid isPermaLink="true">https://theopenexo.nau.edu/community/firmware/how-to-define-spi-pin-in-ak-board-0-5-1-11/</guid>
                    </item>
				                    <item>
                        <title>How to use an IMU sensor in OpenExo</title>
                        <link>https://theopenexo.nau.edu/community/firmware/how-to-use-an-imu-sensor-in-openexo/</link>
                        <pubDate>Wed, 10 Sep 2025 01:55:57 +0000</pubDate>
                        <description><![CDATA[We are now attempting to control the upper limb using an IMU instead of the FSR described in the paper, and I have a couple of questions.


Do you have any prepared code or documentation ...]]></description>
                        <content:encoded><![CDATA[<p>We are now attempting to control the upper limb using an IMU instead of the FSR described in the paper, and I have a couple of questions.</p>
<ol>
<li>
<p>Do you have any prepared code or documentation for IMU-based upper-limb control? </p>
</li>
<li>
<p>We are using Adafruit’s BNO055. When we try to run the<span> </span><strong>thighIMU</strong><span> </span>within the<span> </span><strong>system check</strong><span> </span>code, the connection repeatedly fails. Do we need to adapt the code for this IMU, and if so, which sections should be changed?</p>
</li>
</ol>
<p>Our serial monitor shows the following output when running<span> </span><strong>thighIMU</strong>:</p>
<div>
<div>
<div>
<div> </div>
</div>
</div>
<div dir="ltr"><code>11:56:31.632 -&gt; Failed <span>Left Init
</span></code></div>
<div dir="ltr"><code><span>11</span>:<span>56</span>:<span>31.632</span> -&gt; <span>Got</span>: <span>0</span>
</code></div>
<div dir="ltr"><code><span>11</span>:<span>56</span>:<span>31.702</span> -&gt; <span>Got</span>: <span>0</span>
</code></div>
<div dir="ltr"><code><span>11</span>:<span>56</span>:<span>31.804</span> -&gt; <span>Got</span>: <span>0</span></code></div>
</div>]]></content:encoded>
						                            <category domain="https://theopenexo.nau.edu/community/firmware/">Microcontroller Firmware (C++)</category>                        <dc:creator>Jy</dc:creator>
                        <guid isPermaLink="true">https://theopenexo.nau.edu/community/firmware/how-to-use-an-imu-sensor-in-openexo/</guid>
                    </item>
							        </channel>
        </rss>
		