Today we focused in the encoders. The module to correct the speed of the motors is done but it is not using directly the encoders yet, we tested it with a fake function to simulate the real velocity that is going to be calculated from the encoders.
The module which calculates the real velocity from the encoders is not 100% yet, but almost. Tomorrow we are going to complete this module and link it with the corrector module.
We fixed FreeRTOS too, as it was not running in flash memory, seems that the first position of flash (where the stack pointer should be) is protected as we couldn’t write on it, we still need to investigate why. Now we are able to turn on Tutobot and the program runs automatically.
The OLED is not working yet, we verified the pin assignments in the FPGA (in Libero) and it seems ok, the code seems ok too, we are still investigating.
While measuring some pins with the oscilloscope, we got once the same curve that we got yesterday while trying to measuring the line sensors, so we concluded we never captured a signal from them. Today we notice that in Libero they are not configured as inout pins, and for some reason we can not change this parameter, this still needs to be investigated.
Today we worked on the peripherals of our robot.
We debuged the motors and now they are working fine.
The encoders are returning values with good resolution, tomorrow we will work to assemble a control with motors+encoders.
The pins of the line sensors seems not responding really good, we tried to capture the signal with a logic analyzer and an oscilloscope. We could measure the response with the oscilloscope, but only once =/, using the same program and same osciloscope.
The proximity sensors are not giving us good resolution between closer objects and farther ones.
Leds with pwm are working really well, we can choose in a register to use the pwm mode or not.
Zigbee is still not working after we programmed the SysBoot with DirectC.
Good news! We managed DirectC to program the Sysboot of SmartFusion and now it is working! xD. Now it goes automatically to fix a position in the memory at start-up where we can load the user program.
Tomorrow (actually today) we will complete the rest of the libraries, sensors and motors mainly.
Updates of the project:
- SmartFusion A2F200 and OpenOCD
After preparing the patch to OpenOCD to support writing in the flash memory, we sent the patch. It was refused due the amount of code from Actel we used to generate the embedded bin program. We could provide a cleaner code, removing the unused things from Actel’s driver, but it is working and we don’t have much time, after Rose we can work more in the patch.
If you are still interested in this patch you can found it here. Or send us an email .
Our PCB has arrived! \o/ Seems that we are going to weld the components tomorrow
- Libero (FPGA and project configuration)
The routing of FPGA is done, a map between MSS ans FPGA, which are the things that can be connected directly with a GPIO and which can not. So after we have our robot, we will be able to drive the peripherals which doesn’t need a complex FPGA support.
Necessary HDL modules will be done together with the peripheral’s drive.
We integrated FreeRTOS to our project. There is just some minor things we need to configure, as the code work in the Ram but doesn’t in Rom memory =/
SPI driver is done and tested for SmartFusion Evaluation Board, we will need to adjust some aspects of the drive to our SPI flash memory
After the OpenoCD patch, we tested DirectC in flash it is working but it is not fully integrated with the project. Tomorrow we hope to have the FPGA programing environment working and tested with our Robot.
More updates tomorrow.
Today Gabriel started to work in the code to write in the SPI flash memory. Thalita and I continue working in OpenOCD to support writting in the NVM flash memory of SmartFusion.
We organized our presentation for tomorrow too.
Some diagrams to help understand the project :
Hardware diagram :
Flashing the FPGA Fabric diagram :
More updates tomorrow.
Saturday our PCB was completed, some screen shots :
Gabriel is working in the DirectC, a set of code to implement In-application programming (IAP) for the Cortex and FPGA. The main goal is to program the FPGA from an image.dat file generated by Libero IDE as we won’t be using a FlashPro chip and we are not sure if the FlashPro software can be used without it.
We also studied how to work with Libero, route pins of FPGA and generate an image.dat file. The program is not complicated and the Libero Project of Tutobot should be ready soon.
Now Thalita and I, we are working in a patch to OpenOCD to be able to write in the flash memory of SmartFusion by OpenOCD. The idea is loading a code in RAM which writes on the Flash as we didn’t find any documentation about driving the Flash memory directly through JTAG.
More updates tomorrow.
These two days we are a bit slow because the most part of the group has classes about human formation from 8:30 am to 6:30pm, so we are just working at night.
The bootstrap of programming the MSS (Microcontroller SubSystem, the non-FPGA part of SmartFusion) in Linux is done, now we are able to embed a bootloader and a OS, but unfortunately just in ram.
Programing in flash will be done latter as we need to find out how to program the SmartFusion FPGA part in Linux as we use the most part of our peripherals in FPGA. We will start this tomorrow.
For the PCB, Thalita is advancing in our model, placing the components and making the shape of our robot. Now she knows how to perform holes in the board for the wheels. Models of the motors and the wheels will be added soon in the Expedition Library to help making a good placement and avoid errors.
Our PCB is 99% finished, the others 1% is about the decoupling capacitors. SmartFusion documentation recommends the use of capacitor of several different values to filter different frequencies with a small resistance for each frequency. It recommends using capacitors multiple of 10, for example eight capacitors of 0,01µF, four of 0,1µF, two of 1µF and one electrolytic capacitor, to maintain a certain capacitance and resistance in some frequencies.
However, we couldn’t find anything about how to calculate the numbers of capacitors to use in our PCB. In the Evaluation Kit, seems that they tried to use as many capacitors they could fit near the VCCs of the µC.
We worked in the software too, finally programming the SmartFusion in Linux is working. We played with the UART.
This week, Gabriel and me, we will be developing the software, Thalita will be responsible of the decoupling capacitors and routing as this can not be divided in several tasks, but of course we don’t forget that we are a team
Our schematic is almost ready, we are working in VCCs, GNDs and respective capacitor and inductors, considering analogic and digital signals in the SmartFusion according to this document, we almost finished it today, this should be finished by tomorrow morning.
All the others schematics are ready, we are just waiting the LT3979 and the battery connector to be added in the Expedition library.
The biggest inconvenient of SmartFusion is that informations are spread in several different documents, there is the general datasheet, the documentation of the FPGA, the doc of the MSS, another doc of the Analog, SmartFusion Board Design Guidelines, Board-Level Considerations, and there are others. This kind of division can be a good organization, but sometimes the information we are looking for is broken in several pieces, each piece in a different document.
Using the simulation tool from Linear we got results about the behavior of our circuit to generate 3.3v and supply a current at least 1.2A with the LTC3113.
The circuit is ok, we should use an inductance which support more than 3A.
Considering the ESR of the input and output capacitance, the variation in the ripple changes but it is still is not significant.
You can find more tests here : Power-supply-3.3-data.