University Programs Knowledge Base

cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 

University Programs Knowledge Base

Discussions

Sort by:
2013 Global Freescale Cup Participant: USA Car Specs: -Custom motor driving circuitry -FRDM-KL25Z -Dual line scan camera Related Videos             
View full article
2013 Global Freescale Cup Participant: Brazil Car Specs: -Freescale "Bolero" MPC5604B 32-bit MCU
View full article
After completing the LED, Motor Control and servo tutorials, students should be comfortable with many of the subjects necessary to enable and input data from the Line Scan Camera. The line scan camera module consists of a CMOS linear sensor array of 128 pixels and an adjustable lens. This camera has a 1x128 resolution. The camera is mounted on a boom above the car to ensure the greatest field of view. Determining the angle of orientation about the pivot at the top of the boom will change the “look ahead” distance of the camera and enable more efficient steering algorithms Solution Overview One method of implementation is to take the entire readout of the camera and store it in the memory. Then a line detection algorithm can be used to locate the position of the black line. Due to varying lighting conditions, some level of pixel thresholding may be necessary as the intensity differences across the data may not always produce a clear indication of the line location. A good approach is to use an algorithm that looks for changes in the magnitude of voltage from one portion of the array to another, since the camera’s AO magnitude is directly related to the brightness the pixel array senses. If the microcontroller finds a significant decrease in magnitude followed by large increase in magnitude this would give us a good indication of the location of the line. For this a derivative function can be utilized. Once we have successfully determined the position of the black line, immediately adjust the wheels to adjust the direction of the car so that the black line will remain in the center of the camera’s view. Sample camera output (for illustrative purposes only) The camera outputs an analog signal from 0 to 5V depending on the grey-scale value of the image. to simplify our sample we will assume that we have set limits for the line and have transformed the data to digital bits using a threshold value. 0’s are high intensity (non-line locations), 1’s are low intensity (black or line locations) 10000000000000000000000000000000001111101000000000000000000010000000000000000 Since the camera provides a 128x1 bit picture, and the camera will be pointing down at the track which is a fixed width. A control algorithm should be developed to line up the 1’s in the center of the 128 bits. The center of the field of view will be require calibration and testing, but it is assumed that the camera will remain in a fixed location pointing down the center of the forward looking axis of rotation. Usage For normal operation of the camera, the following signals must be produced and processed: CK (clock) - latches SI and clocks pixels out (low to high) continuous signal SI (serial input to sensor) begins a scan / exposure discrete pulses, pulse must go low before rising edge of next clock pulse AO (analog output) - Analog pixel input from the sensor (0-Vdd) or or tri-stated The CK and SI signals are simple ON/OFF signals which can be produce using a GPIO Pin, setting the pin high and low corresponding to the desired exposure time of the camera. The only other requirement is to read the Analog Output of the camera which requires the initialization of the Analog Module and setting it to the proper pinout.  Actual camera output, below:                                                                                                                        Yellow = SI, Green = Camera Signal, Purple = clock More camera waveforms and information (Power Point) available here This link shows a video of the camera connected to the oscilloscope http://www.youtube.com/watch?v=YOAd3ERnXiQ To obtain this signal, connect channel 1, 2 and 3 of an oscilloscope to the SI pulse (Trigger off this signal), CLK, and AO signals. GPIO Details are provided in the LED tutorial. The timing for creation and read of the signals is crucial and is detailed in the diagram below. This information can also be found in the Line Scan Datasheet. Analog Read: The Analog Output (AO) signal from the camera needs to be processed and read by the microcontroller's Analog to Digital Converter (ADC). This ADC device converts a continuous signal into a discrete number which is proportional to the signal voltage. An 8 bit ADC has 256 discrete levels (2^8). If a analog signal between 0 and 5 volts is sampled, a digital discrete number of 0 would correspond to zero volts, and a digital discrete number of 255 would correspond to 5 volts. A number such as 145w would correspond to about 2.8 volts. The maximum signal sample rate is limited by the microcontroller. Proper configuration of the ADC peripheral and the multiplexer of the chip will configure a pin to read in an analog signal when calling the function. More details on analog to digital converters can be found on the wikipedia site here. Read/Write In write mode, the GPIO pin can be set, cleared, or toggled via software initiated register settings. Microcontroller Reference Manual: Analog to Digital Converter You will find high level information about GPIO usage in several different areas of a reference manual. See the reference-manual article for more general information. Relevant Chapters: (see GPIO chapters for clock and SI Creation)  Introduction: System Modules: System Integration Modules (SIM) - provides system control and chip configuration registers Chip Configuration: Signal Multiplexing: Port control and interrupts Hardware The device discussed within this tutorial is the Line Scan Camera featuring TAOS 1401  Focusing the camera: Once the sensor is perfectly working the next step is to find the best position of the lens that will generate the clearest images. The best way to do it is using an oscilloscope: Connect the SI and AO signals to the oscilloscope Set the SI pulse so that it can be clearly seen and then trig the AO signal with the SI signal using the trig function Fix the camera looking at a sheet of paper with a black line in the center The image of the black line will appear on the oscilloscope screen Screw the camera until you find the position where the line seems the clearest Camera Circuit   5 wires must be connected  ground power SI CLK AO Camera Limitations According to the datasheet:  "The sensor consists of 128 photodiodes arranged in a linear array. Light energy impinging on a photodiode generates photocurrent, which is integrated by the active integration circuitry associated with that pixel. During the integration period, a sampling capacitor connects to the output of the integrator through an analog switch. The amount of charge accumulated at each pixel is directly proportional to the light intensity and the integration time." Integration Time: T T = (1/fmax)*(n-18)pixels + 20us, where n is the number of pixels Minimum integration time: 33.75us Maximum integration time: capacitors will saturate if exceeding 100ms frequency range 5 Khz - 8 Mhz (8 Mhz is fmax in equation above) The integration time is the following: It occurs between the 19th CLK cycle and the next SI pulse. The CLK frequency itself has little to do with the integration time. One each rising edge, the clock outputs one of the previously sampled intensity values. This means that integration time should be set by varying the time between SI pulses, not changing the clock frequency. Make the CLK frequency high, and have as much time as needed between the two SI pulses to obtain the desired intensity value. Helpful Hints Light can be transmitted through the pcb on the back of the camera. This unwanted extra light shining on the CMOS linear sensor can induce significant errors into your signals received. A shroud or housing for the camera unit can easily eliminate this problem. One of the easiest solutions is to place a piece of electrical tape across the back of the camera in the highlighted area indicated in the picture below. When testing the car on the track or transporting it, it is not uncommon for the focus on the camera to loosen or change. Therefore it is recommended that after adjusting your camera focus for maximum performance you make mark (ex. metallic sharpie) between the lens and its body so you can realign the camera lens to it's proper position easily if it does shift.   *When hooking up the linescan camera, regardless of position or focus there is a drop off at each end of the image data. This is easily viewed with an oscilloscope. This effect is undesirable, particularly when you are finding your line position utilizing a derivative approach. These fallouts cause erroneous derivative values, and hence a poor line position solution. Two solutions we found useful were: (1) Ignoring the first 10-15 pixels and last 10-15 pixels of the image data array, and then determining the line position; (2) Often when making decisions in the code as to where the line was at it was found useful to use a threshold value for the difference in the derivative position, and secondly a binary threshold on the camera data. Note that the falloff depends on camera focus, position, etc. Therefore, these threshold values and pixels in which to ignore are relative to a specific instance. The problem however is common to the camera.  * Saving previous line position values Since the camera can read the line very quickly while the servo can only update every 20ms, there are multiple camera reads before the servo can update, if you are reading the camera fast and then overriding without saving them in some form then those camera reads are being wasted and are better off not having occurred. What can help is to create some sort of filter by bringing new values into an array with previous values and preforming some sort of averaging. The following code will take the new line position value and place it in a 1xA array where A is defined by CAMERA_AVG. NO AVERAGING IS OCCURRING HERE all that is happening is the camera values are being saved in a simple array, what is done with them is up to you. The way this works is that it shifts the entire array so the oldest data point is discarded in order to make room for the new line position at the other end of the array. It will only adds the new value if there is one available if not it copies the previous first position value to the new first position value. CAMERA_AVG => an integer value for how long the averaging length will occur gfpLineAverage => global floating point array of camera center line values fpLinePos => returned from read camera this is the center line position ReadCamera() => is the read camera function call returns a floating point value of fpLinePos // this will shift the values up and throw away the oldest value // then add a new reading for (i=CAMERA_AVG;i>0;i—) { gfpLineAverage[i]=gfpLineAverage[i-1]; } // if no line was detected the previous camera value will be passed on if (fpLinePos=ReadCamera()) { gfpLineAverage[0]= fpLinePos; } For example an array of of center line position values ranging from 0-127 could look like. Initial values [51 50 52 54 58 55] New position of 45 read [45 51 50 52 54 58] New position of 44 read [44 45 51 50 52 58] No value read [44 44 45 51 50 52] No value read [44 44 44 45 51 50] New position of 50 read [50 44 44 44 45 51] Tutorials Line Scan Camera: Kinetis ARM Cortex M4 Tutorial Specifics of how to configure the K40 ADC, to create the delay code is covered in the K40: Line Scan Camera Tutorial. Line Scan Camera: Qorivva Tutorial Specifics of how to configure and program the trk-mpc5604b board to blink an LED is covered in the qorivva:line-scan-camera Tutorial. Additional Resources Freescale app note on interfacing with a linescan camera Freescale app note on interfacing with an RCA camera
View full article
Want to know what the camera sees in an autonomous Freescale Cup Car? A unique drivers perspective view captured with an IPOD touch. Thanks to Josh and Doug ...
View full article
Highlights for Freescale Cup Malaysia 2011. Enjoy it 🙂
View full article
You can view the history of the "motor control shield" here.  The latest Freescale Cup Motor Control board (part number TFC-SHIELD), which is included by default in the kit, is pinned out to directly connect to the FRDM-KL25Z development board.  If you are using the TRK-MPC560xB or other board you will have to direct-wire the connections, as illustrated below.
View full article
A peek at where vehicle technology is headed.
View full article
Este video faz um resumo do trabalho da Equipe LAB_TELECOM, da Faculdade de Tecnologia da Unicamp. Ficamos em 5º Lugar.
View full article
On this page you will find additional notes to chassis assembly you may find useful. Examples of components used are obtained from the http://www.soselectronic.com/ distributor. Cables To connect battery you will need cable shown at the image top right. You can use the cable provided with the car and add an appropriate connector to its end. This usually requires special crimping tool, so it may be more appropriate to buy the "Tamyia charging cable" (shown on the bottom left side of the image above), cut the banana ends and attach the connector to the board. If you search for the appropriate type of the connector, it is called usually Tamiya charging connector, Tamiya jack 6,3 mm (SOS code 70479) or similar. Another cable you have to assemble is a power supply cable for the microprocessor board. You will need approx. 10-15 cm long cable with the barrel jack (SOS code 3834) or similar on one end and 2-pin 2.54mm connector (e.g. SOS code 4934 + 4937) on the other end. NOTE: Never power the microprocessor board and interface boards from different power supplies! In such case the grounds on both boards are not connected and you can damage the board. The grey flat ribbon cable that interconnects the boards is for signals only, there is no common GND connection! Battery You may find (as we did) the provided cable strips too weak to hold the battery on the place. Replace them with the classic electricians cable strips (e.g. SOS code 67504). Also do not forget that the batteries need to be charged fully the first time you charge them or they will not be able to fully charge in the future. If you jump the gun because you want to test your code as soon as you can you will hurt yourself later as we found our battery was absolutely shot in later stages of our build. Motor wires To attach the motor to the interface board you may find (as we did) the cables too short. Then remove 6 screws on the bottom (see image on the left), open the motor box and desolder the short wires. Replace with approx. 15 cm long silicon cables at least 1mm2. End of the cables should be connected to the 3-pin connectors with the 3,9mm pitch (e.g. SOS order code 5914 ) - see image on the right. Again, the contacts should be attached using a special crimp tool. Camera To attach the camera we found useful to prepare two metal L-shaped pieces made from aluminium. With the help of black plastic distance posts (already available in the kit) and these metal stands, you may freely change the position of the camera over the surface. You may use following files to cut the required shapes (drawing was made using the QCad program): Preview (.pdf) CAD file (.dxf)   Base board There was no motherboard in the kit, so you will need to provide your own. To make life easier, we offer you our CAD files created with QCad program. You may use it to produce your board. We use plexiglass for ours, but any other plastic material is appropriate. The large hole in the middle is for cables from the servo. We attach the board to the car using the plastic standoffs (you will need them 55 mm long, so in our case, we used the combination of 40 + 15 mm) - see an example (SOS code 10260). To attach both the processor and interface boards the simillar 5mm plastic standoffs were used. Preview (.pdf) CAD file (.dxf) Getting all together Please, notice the orientation of cables, especially the power supplies. You may find useful following connection diagram. Enlarged Schematic (.png) NOTE: Never power the microprocessor board and interface boards from different power supplies! In such case the grounds on both boards are not connected and you can damage the board. The grey flat ribbon cable that interconnects the boards is for signals only, there is no common GND connection! Servo Motor connectors The parts provided are extremely flimsy and if you snap them in and the wheels are not perfectly straight the wheels will align wrong when the servo first turns on. First off just concentrate on one wheel at a time and we found it useful to have one person hold the wheel straight while the arm was in the proper position and then we used needle nose pliers to quickly and precisely snap the pieces into the wheel. Don't be afraid to use some muscle we hesitated a few times at first because it didn't look good but it was fine.
View full article
Take some time to get yourself familiar with C programming before you continue on the programming tutorial. Here is a list of topics that you should be comfortable with, and a couple of good tutorials below. Topics included: Program Structure Commenting Variables Keywords Data Types Decimal, Binary and Hexadecimal Equivalents ASCII Text/Number Conversion Math Operators Increment & Decrement Shift Logical Operators Bitwise Operators Loops If Statement Switch Statement Functions Recursion Local Variables vs. Global Arrays Pointers Typdef, struct and union Preprocessor Directives Static, const and Volatile Keywords Tutorial 1: PSU Intro to C for Embedded Design   From PSU Freescale Cup Senior Design Course Tutorial 2: Learning Programming with C This Freescale course consists of a collection of lessons that will introduce you to the fundamentals of programming using the C programming language. Coding for Readability Sometimes when a project has the ability to grow with new features, it is best to code in modules. This allows one to easily take a more modular approach to designing their program. Despite the fact that C does not support Classes like C++ does, you can create structures that can be addressed globally with little code, which is especially useful for microcontroller based projects. An example of a structure which will be made global: This goes in the globals.h file typedef struct {   unsigned char ServoPWM;   char ServoAngle;   unsigned char DrivePWM;   int TimeOut;   int Current;   int Speed; } sMotor; extern volatile sMotor Motor; This will go in any other file that we want our structure to be accessible from #include <Globals.h> volatile sMotor Motor; This is how to address the variable in the structure #include <Globals.h> volatile sMotor Motor; If you decided to have two distinguishable motors you could do this in the globals.h extern volatile sMotor Motor1; extern volatile sMotor Motor2; Then do this in the other files volatile sMotor Motor1; volatile sMotor Motor2; Helpful Hints In developing an algorithm to detect the line position, we found two basic errors in the coding practice which caused catastrophic errors in line detection. Both of these tips are very basic coding practice. First, when using C code, it usually benefits the user to initialize all variables to some value, especially if computations are involved. Often times when the value wasn't initialized it would seem to acquire a wrong value seemingly from nowhere. Secondly, when doing calculations with arrays, make sure to do calculations with array indices that actually exist. Many times we would make the mistake in our loops of trying to use an index that wasn't assigned a value. Therefore it would acquire an unknown value from memory that caused errors in our calculations.
View full article
2013 Global Freescale Cup Participant: Japan Car Specs: -Freescale "Bolero" MPC5604B 32-bit MCU
View full article
The Embedded World 2013 trade show was held last week (26-28 Feb) in Nuremberg. The exhibition attracted over 22,500 visitors (1.3% increase over 2012) of which 29% are from outside Germany. This year, for the 2nd time, Freescale presented its University Programs presentation in addition to its large demo booth in Hall 4A. The University Programs area is dedicated in linking the industry with the universities we partner with, showing demos and achievements from students related to today's Freescale technologies. This year we featured the following demonstrations: ROS (Robot Operating System) communication to a robotic arm and sensor array system featuring distributed computing system based on iMX535 platform from the University of Applied Sciences Georg-Simon-Ohm in Nuremberg Tennis game demonstration as teaching programming tool using the Kinetis K60 Tower system from the University of Applied Sciences of Munich IP Camera stabilisation system for drone system using MPC5604B Track Board from the University of Applied Sciences of Ingolstadt eCARus 2.0 2-seater electric buggy featuring i.MX and 16-bit automotive S12 technologies from the Technical University of Munich Rescue Robot for remote assistance in disaster areas using i.MX and 16-bit automotive S12 technologies from the Technical University of Ostrava FSLBOT mini robot demonstration running on ColdFire from the University of Applied Sciences in Landshut FSLBOT and other student robot projects running on Kinetis K60 Tower systems from the University of Applied Sciences in Deggendorf Here are a few pictures showing robots roaming the grounds and attracting the attention of several visitors. http://www.radio-electronics.com/articles/processing-embedded/embedded-world-2013-the-inside-74
View full article
Kinetis Header Part 2 of 2
View full article
The TWR-K40X256 Kit is a Freescale evaluation board powered by the Kinetis K40 microcontroller. The Kinetis microcontroller family is a set of 32 bit ARM Cortex M4 chips which feature flexible storage, lower power usage, high performance and optional Floating Point Unit with many useful peripherals. For more information on the Kinetis family see Freescale's Kinetis website. The Tower System is a prototyping platform with interchangeable and reusable modules along with open source design files. Freescale K40 MCU Tower Module: TWR K40X256 Hardware Setup There are several main hardware configuration steps. After installing the battery, once the USB cable has been connected between the evaluation board and PC, it may be necessary to update the chip firmware which requires moving a jumper pin on the evaluation board. TWR K40X246 Hardware Setup Instructions Board Specific Tutorials K40 Blink LED K40 Drive DC Motor K40 Drive Servo Motor K40 Line Scan Camera Board Tips The TWR-K40X256 features a socket that can accept a variety of different Tower Plug-in modules featuring sensors, RF transceivers, and more. The General Purpose TWRPI socket provides access to I2C, SPI, IRQs, GPIOs, timers, analog conversion signals, TWRPI ID signals, reset, and voltage supplies. The pinout for the TWRPI Socket is defined in Table 3 of the TWR-K40X256 User's Manual, but the user manual does not describe how to order a connector. A Samtec connector, part number: SFC-110-T2-L-D-A is the proper female mating connector for the TWR-K40X256 TWRPI socket. SIDE A/SIDE B White DOTS for counting Pins Solder Wire to GND, and to MCU VDD Pin for testing purposes Important Documents TWR-K40X256 User's Manual TWR-K40X256 Schematics External Links TWR-K40X256-KIT Webpage Kinetis Discussion Forum Tower Geeks Community Website Tower Geeks Freescale Cup Group
View full article
The components of this kit will provide students with the basic materials. The challenge for teams is to collaborate with peers to design the interconnecting hardware and to create the algorithms that will give a vehicle the competitive edge. The sensor interfacing, vehicle navigation, signal processing and control systems techniques students will learn can be applied to most embedded systems. Included in the Freescale Cup Kit Part Number: TFC-KIT Model Car chassis Line Scan Camera Interface and Motor Controller Board   Part Number: TFC-5604B-KIT  All pieces inside TFC-KIT Freescale Microcontroller Board (Qorivva MPC5604B) Getting Started: 1. Purchase the kit 2. Explore the tutorials and reference materials Take the Freescale Cup Training Tutorials Browse through the sample code within the tutorials Download the reference manuals for your microcontroller, many which are linked to from this wkik Navigate to the training modules and videos of the Designing and programming your Cup Car: Hardware 1.Tools needed: In addition to what is provided in the kit, you will need several other tools you will need to design and build a working intelligent car. Must have Soldering iron Solder Solder wick Wire (gauges) Oscilloscope Useful Power Supply Solder remover bulb Oscilloscope DMM Optional Access to a Rapid Prototyping Machine Software such as Eagle or PCBArtist 2.Electronics Components you will want to obtain soon Software What we’ve provided The software provided in this wikiwill get you started in your task of creating an intelligent car. We have included files which you can load onto your microcontroller which blink a led, activate the motor and servo, as well as a small simple driver for the camera which sends it the proper signals and reads data into your microcontroller. What you need to design Your job will be to connect the various components together, refine and add to the code we have provided and create a working intelligent car. Start thinking about how you will determine where the line is on the track, what algorithm you will use for steering and deciding how much power you want to send to your motor. You may want to read up on PID controllers, or other types of control systems. Are there any special features that you might want to add to your car – such as real time debugging? Those features will require extra work and up front planning. Planning and Teamwork You might not have the time to document all your designs and concepts properly before sitting down to code or to create a piece of hardware, but you might want to create an ordered list of all the different tasks which will be necessary to finish the car, who will do those items, and when you want each task to be finished. A schedule will help you determine if you are on track with your goals …
View full article
2013 Global Freescale Cup Participant from Mexico Car Specs: -Freescale "Bolero" TRK-MPC5604B
View full article
2013 Global Freescale Cup Participant: India Car Specs: -Freescale "Bolero" MPC5604B 32-bit MCU
View full article
FTF2011 - Freescale Cup Invitational - Finals Third Place Team
View full article
Tiro al blanco que funciona con un LED infrarrojo. Para más información vea el video. Gracias.
View full article