Difference between revisions of "S14: Data Acquisition using CAN bus"

From Embedded Systems Learning Academy
Jump to: navigation, search
(Schedule)
(Project Source Code)
 
(121 intermediate revisions by 2 users not shown)
Line 1: Line 1:
=== Grading Criteria ===
 
<font color="green">
 
*  How well is Software & Hardware Design described?
 
*  How well can this report be used to reproduce this project?
 
*  Code Quality
 
*  Overall Report Quality:
 
**  Software Block Diagrams
 
**  Hardware Block Diagrams
 
**:  Schematic Quality
 
**  Quality of technical challenges and solutions adopted.
 
</font>
 
 
 
== Project Title ==
 
== Project Title ==
 +
Data Acquisition using CAN bus
  
 
== Abstract ==
 
== Abstract ==
Our project is to implement a high speed data acquisition system using CAN and storing the data into the SD card.
+
Our project is to implement a high speed data acquisition system using CAN and perform tasks according to the data received. Our system will collect data from sensors over multiple nodes and transmit the data over the CAN bus. The CAN packets are received by a single node which will do the required functionality as desired by the application.The LEDs at the receiver node simulate the functions which ca be done using the data acquired over the CAN bus.The purpose is to gather all the data simultaneously over the CAN bus and implement hardware filtering to manage the data packets on the CAN bus
 +
 
 +
Figure 1 shows the system block diagram:
 +
 
 +
 
 +
 
 +
[[File:244 DataAcquisitionusing CAN BlockDiag.jpg|center|frame]]
  
 
== Objectives & Introduction ==
 
== Objectives & Introduction ==
Our idea is to use the on board accelerometer and gyroscope together as a motion/gesture sensor to identify the motion then it will send to the other board via CAN bus. We are planning to use 9 degree of freedom MPU-9150 sensor for doing precise movement tracking. Recognized movement will trigger predefined tasks and transmit to Anroid phone via UART-Bluetooth module. More sensors will also be added to do data acquisition.
+
The objective of this project to implement CAN bus and establish communication between devices.Our idea is to use use 6 degree of freedom MPU-6050 sensor as motion/gesture, ultrasonic range finder HC-SR04 as obstacle detector for data harvesting and sending these data over the CAN bus. Specific movement/range will trigger predefined tasks and transmit the control to different LEDs. According to the direction of the accelerometer and its tilt movement, as well as ultrasonic sensor distance, specific application at the third node would be done.
  
 
=== Team Members & Responsibilities ===
 
=== Team Members & Responsibilities ===
 
*  Shweta Bohare
 
*  Shweta Bohare
 +
**  Can bus Interface
 
*  Mradula Nayak
 
*  Mradula Nayak
 +
**  Can bus Interface
 
*  Heng Zhang
 
*  Heng Zhang
**  Driver Development
+
**  6 DOF and Ultrasonic sensors
 +
 
 
*  All Team
 
*  All Team
 
**  FreeRTOS Software Design
 
**  FreeRTOS Software Design
 +
**  3D on the computer
  
 
== Schedule ==
 
== Schedule ==
Show a simple table or figures that show your scheduled as planned before you started working on the project.  Then in another table column, write down the actual schedule so that readers can see the planned vs. actual goals.  The point of the schedule is for readers to assess how to pace themselves if they are doing a similar project.
 
  
 
{| class="wikitable"
 
{| class="wikitable"
Line 40: Line 38:
 
! scope="row"| 1
 
! scope="row"| 1
 
| 2/25
 
| 2/25
| 2/29
+
| 3/18
 
|
 
|
 
* Order sensors
 
* Order sensors
 
* System design
 
* System design
| Completed. Waiting for the parts.
+
| Completed.Other parts are ordered.
 
|-
 
|-
 
! scope="row"| 2
 
! scope="row"| 2
| 3/1
+
| 3/18
| 3/7
+
| 3/26
| Interface with sensors
+
| Self-Loop testing of CAN Bus
| Completed?
+
| Completed.
 
|-
 
|-
 
! scope="row"| 4
 
! scope="row"| 4
| 3/15
+
| 3/27
| 3/21
+
| 4/13
| Develop CAN communication and SPI microSD I/O
+
| Write on microSD SPI microSD I/O
|  
+
| Initial write on SD-card is done.
 
|-
 
|-
 
! scope="row"| 5
 
! scope="row"| 5
| 3/22
+
| 4/6
| 3/28
+
| 4/12
|  
+
|Interfacing ultrasonic sensor with the board.
* Build MPU-9150 data processing algorithm
+
|Done
* Can use Arduino for debugging platform
 
|
 
 
|-
 
|-
 
! scope="row"| 6
 
! scope="row"| 6
| 3/29
+
| 4/13
| 4/11
+
| 4/27
| Test MPU-9150 data processing algorithm
+
|Accelerometer data transmission between 2-Boards.
|
+
|Done
 
|-
 
|-
 
! scope="row"| 7
 
! scope="row"| 7
| 4/12
+
| 4/22
| 4/18
+
| 4/27
| Design Android App to receive/send signal via Bluetooth
+
| Communication between 3 CAN Nodes
|  
+
| Done
 
|-
 
|-
 
! scope="row"| 8
 
! scope="row"| 8
| 4/19
+
| 4/28
| 4/25
 
| Implement motion tracking algorithm on ARM-android system
 
|
 
|-
 
! scope="row"| 9
 
| 4/26
 
 
| 5/5
 
| 5/5
 
| Testing and remove bugs, further enhancements
 
| Testing and remove bugs, further enhancements
|  
+
| Done
 
|-
 
|-
! scope="row"| 10
+
! scope="row"| 9
| 5/8
+
| 5/22
| 5/8
+
| 5/22
 
| Demo
 
| Demo
 
|  
 
|  
 +
|-
 +
 
|}
 
|}
  
Line 116: Line 108:
  
 
<td>
 
<td>
MPU-9150[https://www.sparkfun.com/products/11486]
+
GY 521 board(MPU-6050)
 
</td>
 
</td>
  
 
<td>
 
<td>
$39.95 x1
+
$5.90 x1
 
</td>
 
</td>
  
 
<td>
 
<td>
9 DOF motion sensor
+
6 DOF motion sensor
 
</td>
 
</td>
 
</tr>
 
</tr>
Line 130: Line 122:
 
<tr>
 
<tr>
 
<td>
 
<td>
BC-127[https://www.sparkfun.com/products/11927]
+
TJA1049TK[http://www.nxp.com/products/interface_and_connectivity/transceivers/can_transceivers/TJA1049TK.html]
 
</td>
 
</td>
  
 
<td>
 
<td>
$49.95 x1
+
$0.00 x4; free samples
 
</td>
 
</td>
  
 
<td>
 
<td>
Bluetooth module to UART/SPI
+
high-speed CAN transceiver
 +
</td>
 +
</tr>
 +
 
 +
<tr>
 +
<td>
 +
HC-SR04[http://www.micropik.com/PDF/HCSR04.pdf]
 +
</td>
 +
 
 +
<td>
 +
$3.00 x1; free samples
 +
</td>
 +
 
 +
<td>
 +
Ultrasonic ranging module
 
</td>
 
</td>
 
</tr>
 
</tr>
Line 148: Line 154:
  
 
<td>
 
<td>
$$$$$
+
$249.00
 
</td>
 
</td>
  
Line 159: Line 165:
  
 
== Design & Implementation ==
 
== Design & Implementation ==
The design section can go over your hardware and software design.  Organize this section using sub-sections that go over your design and implementation.
 
  
=== Hardware Design ===
 
Discuss your hardware design here.  Show detailed schematics, and the interface here.
 
  
=== Hardware Interface ===
+
=== Hardware Design and Implementation ===
In this section, you can describe how your hardware communicates, such as which BUSes used. You can discuss your driver implementation here, such that the '''Software Design''' section is isolated to talk about high level workings rather than inner working of your project.
+
 
 +
In our project we are using three nodes to communicate over a CAN bus. The CAN Controller is embedded on the SJ-ONE board which transmits the microcontroller logic signals to CAN transceiver. The CAN transceiver is a voltage converter which transmits the data on CAN bus by converting it into electrical signals required for CAN.
 +
The CAN tranceiver requires a 5V supply for its working. Hence we have designed a Power Circuit to provide 5V dc to the CAN transceiver.
 +
In the project, data is acquired from two sensors, each connected to separate nodes. We are using MPU-6050 which is interfaced with Node 1 via I2C protocol.
 +
Ultrasonic sensor HC-SR04 is connected to Node 2 which detects the distance of an object from the sensor.
 +
The receiver node gets the data from Node 1 and Node 2 and it simulates the data on the LEDs connected.
 +
 
 +
=== Description of parts ===
 +
 
 +
[[File:CMPE244_S14_REGULATED POWER.jpg|250px|thumb|left|Power supply Circuit]]
 +
'''Power Supply: LM7805 '''<br/ >
 +
An LM7805 linear regulator IC is used for this purpose. It converts a DC input voltage of range 7-25 V to a stable +5 V. It requires just two external capacitors and is very easy to useThe input DC voltage for LM7805 could be obtained from a 9V DC wall adapter that can supply 1 Amp of load current.We need the 5 volt supply for all the external ICs have been used in this project like MCP2551 and MPU6050.The following schematic is generate the 5Volt regulated power.
 +
 
 +
 
 +
 
 +
 
  
=== Software Design ===
 
Show your software design.  For example, if you are designing an MP3 Player, show the tasks that you are using, and what they are doing at a high level.  Do not show the details of the code.  For example, do not show exact code, but you may show psuedocode and fragments of code.  Keep in mind that you are showing DESIGN of your software, not the inner workings of it. 
 
  
=== Implementation ===
+
 
This section includes implementation, but again, not the details, just the high levelFor example, you can list the steps it takes to communicate over a sensor, or the steps needed to write a page of memory onto SPI Flash. You can include sub-sections for each of your component implementation.
+
 
 +
 
 +
 
 +
 
 +
 
 +
 
 +
 
 +
 
 +
 
 +
[[File:CMPE244_DA_CAN_MCP2551.jpg‎|200px|thumb|right|MCP2551]]
 +
'''CAN transceiver: MCP2551 '''<br/ >
 +
The MCP2551 is a high-speed CAN, fault-tolerant device that serves as the interface between a CAN protocol controller and the physical bus. The MCP2551 device provides differential transmit and receive capability for the CAN protocol controller, and is fully compatible with the ISO-11898 standard, including 24V requirements. It will operate at speeds of up to 1 Mb/s.
 +
It is used for following functions:<br/ >
 +
1. As a Transmitter: It operates in two states Dominant and Recessive. When differential voltage between CANH and CANL is less than 102 V it operated in dominant mode, and when the voltage difference is less than 1.2 volt it operates in Recessive mode. These both modes are corresponds to the TXD pin.<br/>
 +
2. Maximum nodes: allowing a maximum of 112 nodes to be connected.<br/ >
 +
3. Receiver Function: The RXD output pin reflects the differential bus voltage between CANH and CANL. The Low and High states of the RXD output pin correspond to the Dominant and Recessive states of the CAN bus, respectively. <br/>
 +
4. Operations.High speed flow control and standby. High-Speed mode is selected by connecting the RS pin to VSS. In this mode, the transmitter output drivers have fast output rise and fall times to support high-speed CAN bus rates. The slope, or slew rate (SR), is controlled by connecting an external resistor (REXT) between RS and VOL (usually ground). The device may be placed in Standby or SLEEP mode by applying a high-level to the RS pin. <br/ >
 +
[http://www.sparkfun.com/datasheets/DevTools/Arduino/MCP2551.pdf MCP2551]
 +
 
 +
 
 +
 
 +
 
 +
[[File:CMPE244_DA_CAN_MPU6050.jpg‎|100px|thumb|left|MPU6050]]
 +
'''Motion Sensor: MPU-6050'''<br />
 +
The MPU-6050 is a motion sensor that combines two chips: the MPU-6050, which contains a 3-axis gyroscope, 3-axis accelerometer and an onboard Digital Motion Processor. Although the built-in processor is integrated with 6-axis MotionFusion algorithms, such as Kalmann filter, it is not open source. As a result, we simply use MPU-6050 as a 6 DOF motion sensor and renders high resolution 6 DOF informations to the SJ-One board for further usage. When developing the MPU driver, we refer to the sparkfun github site: (1. https://github.com/sparkfun/MPU-6050_Breakout; 2. http://www.botched.co.uk/pic-tutorials/mpu6050-setup-data-aquisition/) as well as the given drivers in SJSU-Dev by Professor Preetpal Kang. It is communicate with SJ-One board via I2C ports.
 +
 
 +
 
 +
 
 +
 
 +
 
 +
 
 +
 
 +
[[File:CMPE244_S14_HC-SR04.jpg‎‎|100px|thumb|right|HC-SR04]]
 +
'''Ultrasonic Sensor: HC-SR04 '''<br />
 +
The Ultrasonic Ranging Module HC-SR04 is a low power simple module, with 4 ports: VCC(5V), GND, Trig(input), Echo(output). It is connected to the SJ-One board through GPIO pins, since it doesn't have protocols. Whenever we need to measure the range, we supply a short 10 us Pulse to the trigger input to invoke this sensor then it will send out 8 cycle burst of ultrasound at 40 kHz so as to receive its echo. The formula to calculate the distance is through the time intervals from trigger signals and the echo signals by: us/58 = centimeters.
 +
<br/ >
 +
 
 +
 
 +
 
 +
=== Hardware Implementation at each NODE===
 +
[[File:CMPE244_S14_DA_CAN_Interfacing.jpg‎|500px]] <br/>
 +
[[File:CMPE244_S14_DA_CAN_PinInterface.jpg‎|200px|thumb|left|Pin interface on each Node]]
 +
[[File:CMPE244_S14_NODE1.jpg|400px|thumb|right|Node 1]]
 +
[[File:CMPE244_S14_NODE2.jpg|400px|thumb|left|Node 2]]
 +
[[File:CMPE244_S14_NODE3.jpg|400px|thumb|right|Node 3]]
 +
'''Node 1'''<br />
 +
On node 1, we have connected MPU-6050 on I2C2 of SJONE-Board. CAN transceiver is connected on CAN1 of SJONE- board. A terminating resistor is also connected to the CAN transceiver of Node1. <br />
 +
'''Node 2'''<br />
 +
On node 2, we have connected HC-SR04 on GPIO pins P1.6 and P1.7. It transmits the distance of the object over the CAN bus. CAN transceiver with terminating resistor is also connected on this node.<br />
 +
'''Node 3'''<br />
 +
On node 3, we have connected the CAN transceiver on CAN1 of SJONE- board. We have connected 5 LEDs, one for distance from ultrasonic sensor on Node 2 and other 4 LEDs determine the tilt of the object on Node 1.<br />
 +
 
 +
 
 +
 
 +
 
 +
 
 +
 
 +
 
 +
 
 +
 
 +
 
 +
 
 +
 
 +
 
 +
 
 +
 
 +
 
 +
 
 +
 
 +
 
 +
 
 +
 
 +
 
 +
 
 +
 
 +
=== Software Design and Implementation===
 +
In our project, every node has to compute the data and transmit it over the CAN bus. For proper synchronization of the transmission, we have divided each function into tasks which communicate via Queues. We have utilized FreeRTOS API for managing the tasks and queues.<br/>
 +
Software implementation is done using:<br/>
 +
'''1. CAN driver
 +
'''2. I2C driver for MPU-6050'''
 +
'''3. Ultrasonic sensor trigerring'''<br/>
 +
 
 +
'''1.CAN driver'''<br/>
 +
CAN is a high-speed data bus for deterministic communication.It transmits at 100k,250k, 500k and 1Mbit speeds.CAN nodes communicate by transferring CAN frames and each node has a ID associated with it. The ID for each node is developed in the program.
 +
CAN bus works in the following modes:
 +
1. OFF MODE: It does not accept any message from any node.
 +
2. BYPASS MODE: It accepts all the messages that it receives.
 +
3. Acceptance Filtering: It accepts only the specific messages of the id stored in its RAM.
 +
 
 +
In our design, we have 2 transmitter nodes and one receiver node. Hence we have implemented Acceptance filtering at the receiver node to acknowledge the messages of the transmitter nodes. The transmitting nodes are in OFF mode,as it need not receive any messages from the other transmitter node. <br/>
 +
 
 +
'''FLOW DIAGRAMS EXPLAINING TRANSMITTER AND RECEIVER FLOW DIAGRAM'''<br/>
 +
[[File:CMPE244_DA_CAN_CANtx.jpg|800px|thumb|center|Can transmitter driver]]    [[File:CMPE244_DA_CAN_CANrx.jpg|800px|thumb|center|Can receiver driver]]
 +
<br/>
 +
 
 +
 
 +
   
 +
'''2. I2C driver for MPU-6050'''<br/>
 +
At node 1, the I2C driver is written to interface with MPU-6050. The device address of MPU-6050 is 0x69. The I2C state machine goes through different dtages to read from data from MPU-6050. The configuration resistors of MPU-6050 is first set. Since we are only reading accelerometer values, we are only reading the 16-bit registers of X,Y, Z-axis.<br/>
 +
The Tasks at Node 1 are performing the functions in the following manner:<br/>
 +
[[File:CMPE244_DA_CAN_Node1SFFLOW.jpg|800px|thumb|center|Node1]]<br/>
 +
 
 +
'''3. Ultrasonic sensor trigerring'''<br/>
 +
At node 2, we are getting the distance of the object from the node using an ultrasonic sensor. An ultrasonic burst is triggered using a Trigger pin on the sensor module. The receiver part of the sensor then listens for the echo return pulse. An Echo pin on the sensor remains at HIGH voltage level during the time and the distance of the object can be calculated from this duration.
 +
Distance of the object is calculated using the formula:
 +
Distance = ((Time taken) * 340m/s) /
 +
 
 +
The tasks at Node 2 are performed as follows:<br/>
 +
[[File:CMPE244_DA_CAN_Node2SFFLOW.jpg|800px|thumb|center|Node2]]<br/>
 +
               
 +
At node 3, there are LEDs which work according to the data sent over from the two nodes. The tasks are distributed as follows:<br/>
 +
 
 +
[[File:CMPE244_DA_CAN_Node3SFFLOW.jpg|800px|thumb|center|Node3]]<br/>
  
 
== Testing & Technical Challenges ==
 
== Testing & Technical Challenges ==
Describe the challenges of your project. What advise would you give yourself or someone else if your project can be started from scratch again?
+
'''Hardware issues'''<br/>
Make a smooth transition to testing section and described what it took to test your project.
+
1. During self loop, we recognized that there has to be a 1K resistor at the Rs pin of transceiver which has to be connected to ground. <br/>
 +
2. Designing of power supply took a lot of time. We designed a separate power supply to provide continuous 5V supply.<br/>
 +
3. Due to improper connections of transceiver and power supply, the CAN transceiver IC was burnt and we had to replace it many times.<br/>
  
Include sub-sections that list out a problem and solution, such as:
+
'''Software issues'''<br/>
 +
1.The mode register of CAN was not getting written because of error in clock set. We set the clock source to 2 in sys_config.h.<br/>
 +
2.The CMR register was not set during self loop, because of which the CAN transmission had not started.<br/>
 +
3.The data sent from the sensors had to be sent to CAN controller and at the receiver node proper timing delay had to be put to process the data from two nodes.<br/>
 +
4.Hardware filtering didn't work for a lot of time due to a error in the CAN driver. We have written a separate piece of code to set the hardware filtering.<br/>
 +
5.Reading serial data from SJONE- board to plot on MATLAB or processing software was not successful since the board was getting reset once the port was opened.<br/>
  
=== My Issue #1 ===
+
== Conclusion ==
Discuss the issue and resolution.
+
The aim of the project was implementation of CAN controller and we were able to achieve that. However, we could not do the GUI to show the data received on the receiver node. But we definitely learnt various platforms on which GUI can be done. The project has helped us learn about the driver of CAN bus.
  
== Conclusion ==
 
Conclude your project here.  You can recap your testing and problems.  You should address the "so what" part here to indicate what you ultimately learnt from this project.  How has this project increased your knowledge?
 
  
 
=== Project Video ===
 
=== Project Video ===
Upload a video of your project and post the link here.
+
https://www.youtube.com/watch?v=P1lKoc-L61o
  
 
=== Project Source Code ===
 
=== Project Source Code ===
Send me your zipped source code and I will upload this to SourceForge and link it for you.
+
*  [https://sourceforge.net/projects/sjsu/files/CmpE244_SJSU_S2014/ Sourceforge source code link]
  
 
== References ==
 
== References ==
 
=== Acknowledgement ===
 
=== Acknowledgement ===
Any acknowledgement that you may wish to provide can be included here.
+
<br/>
 +
We would like to express our heartfelt gratitude to Prof. Preetpal Kang who gave us an opportunity to do this project on the topic (Data Acquisition using CAN bus) which enhanced our understanding of CAN bus and its protocol as well as provided us knowledge about different sensors.<br/>
 +
Secondly we would also like to thank our classmates who helped us a lot in the application of this project within the limited time frame.
  
 
=== References Used ===
 
=== References Used ===
List any references used in project.
+
1. http://users.ece.utexas.edu/~valvano/Datasheets/MCP2551.pdf
 
+
2. http://www.micropik.com/PDF/HCSR04.pdf
=== Appendix ===
+
3. http://www.invensense.com/mems/gyro/documents/PS-MPU-6000A-00v3.4.pdf
You can list the references you used.
+
4. http://www.socialledge.com/sjsu/index.php?title=SJ_One_Board

Latest revision as of 23:40, 6 August 2014

Project Title

Data Acquisition using CAN bus

Abstract

Our project is to implement a high speed data acquisition system using CAN and perform tasks according to the data received. Our system will collect data from sensors over multiple nodes and transmit the data over the CAN bus. The CAN packets are received by a single node which will do the required functionality as desired by the application.The LEDs at the receiver node simulate the functions which ca be done using the data acquired over the CAN bus.The purpose is to gather all the data simultaneously over the CAN bus and implement hardware filtering to manage the data packets on the CAN bus

Figure 1 shows the system block diagram:


244 DataAcquisitionusing CAN BlockDiag.jpg

Objectives & Introduction

The objective of this project to implement CAN bus and establish communication between devices.Our idea is to use use 6 degree of freedom MPU-6050 sensor as motion/gesture, ultrasonic range finder HC-SR04 as obstacle detector for data harvesting and sending these data over the CAN bus. Specific movement/range will trigger predefined tasks and transmit the control to different LEDs. According to the direction of the accelerometer and its tilt movement, as well as ultrasonic sensor distance, specific application at the third node would be done.

Team Members & Responsibilities

  • Shweta Bohare
    • Can bus Interface
  • Mradula Nayak
    • Can bus Interface
  • Heng Zhang
    • 6 DOF and Ultrasonic sensors
  • All Team
    • FreeRTOS Software Design
    • 3D on the computer

Schedule

Week# Start Date End Date Task Actual
1 2/25 3/18
  • Order sensors
  • System design
Completed.Other parts are ordered.
2 3/18 3/26 Self-Loop testing of CAN Bus Completed.
4 3/27 4/13 Write on microSD SPI microSD I/O Initial write on SD-card is done.
5 4/6 4/12 Interfacing ultrasonic sensor with the board. Done
6 4/13 4/27 Accelerometer data transmission between 2-Boards. Done
7 4/22 4/27 Communication between 3 CAN Nodes Done
8 4/28 5/5 Testing and remove bugs, further enhancements Done
9 5/22 5/22 Demo

Parts List & Cost

</tr>
Parts Cost Comment

SJ One Board[1]

$80.00 x3

Each board uses for different functions

GY 521 board(MPU-6050)

$5.90 x1

6 DOF motion sensor

TJA1049TK[2]

$0.00 x4; free samples

high-speed CAN transceiver

HC-SR04[3]

$3.00 x1; free samples

Ultrasonic ranging module

Total Cost

$249.00

Keep it low

Design & Implementation

Hardware Design and Implementation

In our project we are using three nodes to communicate over a CAN bus. The CAN Controller is embedded on the SJ-ONE board which transmits the microcontroller logic signals to CAN transceiver. The CAN transceiver is a voltage converter which transmits the data on CAN bus by converting it into electrical signals required for CAN. The CAN tranceiver requires a 5V supply for its working. Hence we have designed a Power Circuit to provide 5V dc to the CAN transceiver. In the project, data is acquired from two sensors, each connected to separate nodes. We are using MPU-6050 which is interfaced with Node 1 via I2C protocol. Ultrasonic sensor HC-SR04 is connected to Node 2 which detects the distance of an object from the sensor. The receiver node gets the data from Node 1 and Node 2 and it simulates the data on the LEDs connected.

Description of parts

Power supply Circuit

Power Supply: LM7805
An LM7805 linear regulator IC is used for this purpose. It converts a DC input voltage of range 7-25 V to a stable +5 V. It requires just two external capacitors and is very easy to useThe input DC voltage for LM7805 could be obtained from a 9V DC wall adapter that can supply 1 Amp of load current.We need the 5 volt supply for all the external ICs have been used in this project like MCP2551 and MPU6050.The following schematic is generate the 5Volt regulated power.









MCP2551

CAN transceiver: MCP2551
The MCP2551 is a high-speed CAN, fault-tolerant device that serves as the interface between a CAN protocol controller and the physical bus. The MCP2551 device provides differential transmit and receive capability for the CAN protocol controller, and is fully compatible with the ISO-11898 standard, including 24V requirements. It will operate at speeds of up to 1 Mb/s. It is used for following functions:
1. As a Transmitter: It operates in two states Dominant and Recessive. When differential voltage between CANH and CANL is less than 102 V it operated in dominant mode, and when the voltage difference is less than 1.2 volt it operates in Recessive mode. These both modes are corresponds to the TXD pin.
2. Maximum nodes: allowing a maximum of 112 nodes to be connected.
3. Receiver Function: The RXD output pin reflects the differential bus voltage between CANH and CANL. The Low and High states of the RXD output pin correspond to the Dominant and Recessive states of the CAN bus, respectively.
4. Operations.High speed flow control and standby. High-Speed mode is selected by connecting the RS pin to VSS. In this mode, the transmitter output drivers have fast output rise and fall times to support high-speed CAN bus rates. The slope, or slew rate (SR), is controlled by connecting an external resistor (REXT) between RS and VOL (usually ground). The device may be placed in Standby or SLEEP mode by applying a high-level to the RS pin.
MCP2551



MPU6050

Motion Sensor: MPU-6050
The MPU-6050 is a motion sensor that combines two chips: the MPU-6050, which contains a 3-axis gyroscope, 3-axis accelerometer and an onboard Digital Motion Processor. Although the built-in processor is integrated with 6-axis MotionFusion algorithms, such as Kalmann filter, it is not open source. As a result, we simply use MPU-6050 as a 6 DOF motion sensor and renders high resolution 6 DOF informations to the SJ-One board for further usage. When developing the MPU driver, we refer to the sparkfun github site: (1. https://github.com/sparkfun/MPU-6050_Breakout; 2. http://www.botched.co.uk/pic-tutorials/mpu6050-setup-data-aquisition/) as well as the given drivers in SJSU-Dev by Professor Preetpal Kang. It is communicate with SJ-One board via I2C ports.




HC-SR04

Ultrasonic Sensor: HC-SR04
The Ultrasonic Ranging Module HC-SR04 is a low power simple module, with 4 ports: VCC(5V), GND, Trig(input), Echo(output). It is connected to the SJ-One board through GPIO pins, since it doesn't have protocols. Whenever we need to measure the range, we supply a short 10 us Pulse to the trigger input to invoke this sensor then it will send out 8 cycle burst of ultrasound at 40 kHz so as to receive its echo. The formula to calculate the distance is through the time intervals from trigger signals and the echo signals by: us/58 = centimeters.


Hardware Implementation at each NODE

CMPE244 S14 DA CAN Interfacing.jpg

Pin interface on each Node
Node 1
Node 2
Node 3

Node 1
On node 1, we have connected MPU-6050 on I2C2 of SJONE-Board. CAN transceiver is connected on CAN1 of SJONE- board. A terminating resistor is also connected to the CAN transceiver of Node1.
Node 2
On node 2, we have connected HC-SR04 on GPIO pins P1.6 and P1.7. It transmits the distance of the object over the CAN bus. CAN transceiver with terminating resistor is also connected on this node.
Node 3
On node 3, we have connected the CAN transceiver on CAN1 of SJONE- board. We have connected 5 LEDs, one for distance from ultrasonic sensor on Node 2 and other 4 LEDs determine the tilt of the object on Node 1.













Software Design and Implementation

In our project, every node has to compute the data and transmit it over the CAN bus. For proper synchronization of the transmission, we have divided each function into tasks which communicate via Queues. We have utilized FreeRTOS API for managing the tasks and queues.
Software implementation is done using:
1. CAN driver 2. I2C driver for MPU-6050 3. Ultrasonic sensor trigerring

1.CAN driver
CAN is a high-speed data bus for deterministic communication.It transmits at 100k,250k, 500k and 1Mbit speeds.CAN nodes communicate by transferring CAN frames and each node has a ID associated with it. The ID for each node is developed in the program. CAN bus works in the following modes: 1. OFF MODE: It does not accept any message from any node. 2. BYPASS MODE: It accepts all the messages that it receives. 3. Acceptance Filtering: It accepts only the specific messages of the id stored in its RAM.

In our design, we have 2 transmitter nodes and one receiver node. Hence we have implemented Acceptance filtering at the receiver node to acknowledge the messages of the transmitter nodes. The transmitting nodes are in OFF mode,as it need not receive any messages from the other transmitter node.

FLOW DIAGRAMS EXPLAINING TRANSMITTER AND RECEIVER FLOW DIAGRAM

Can transmitter driver
Can receiver driver



2. I2C driver for MPU-6050
At node 1, the I2C driver is written to interface with MPU-6050. The device address of MPU-6050 is 0x69. The I2C state machine goes through different dtages to read from data from MPU-6050. The configuration resistors of MPU-6050 is first set. Since we are only reading accelerometer values, we are only reading the 16-bit registers of X,Y, Z-axis.
The Tasks at Node 1 are performing the functions in the following manner:

Node1

3. Ultrasonic sensor trigerring
At node 2, we are getting the distance of the object from the node using an ultrasonic sensor. An ultrasonic burst is triggered using a Trigger pin on the sensor module. The receiver part of the sensor then listens for the echo return pulse. An Echo pin on the sensor remains at HIGH voltage level during the time and the distance of the object can be calculated from this duration. Distance of the object is calculated using the formula: Distance = ((Time taken) * 340m/s) /

The tasks at Node 2 are performed as follows:

Node2

At node 3, there are LEDs which work according to the data sent over from the two nodes. The tasks are distributed as follows:

Node3

Testing & Technical Challenges

Hardware issues
1. During self loop, we recognized that there has to be a 1K resistor at the Rs pin of transceiver which has to be connected to ground.
2. Designing of power supply took a lot of time. We designed a separate power supply to provide continuous 5V supply.
3. Due to improper connections of transceiver and power supply, the CAN transceiver IC was burnt and we had to replace it many times.

Software issues
1.The mode register of CAN was not getting written because of error in clock set. We set the clock source to 2 in sys_config.h.
2.The CMR register was not set during self loop, because of which the CAN transmission had not started.
3.The data sent from the sensors had to be sent to CAN controller and at the receiver node proper timing delay had to be put to process the data from two nodes.
4.Hardware filtering didn't work for a lot of time due to a error in the CAN driver. We have written a separate piece of code to set the hardware filtering.
5.Reading serial data from SJONE- board to plot on MATLAB or processing software was not successful since the board was getting reset once the port was opened.

Conclusion

The aim of the project was implementation of CAN controller and we were able to achieve that. However, we could not do the GUI to show the data received on the receiver node. But we definitely learnt various platforms on which GUI can be done. The project has helped us learn about the driver of CAN bus.


Project Video

https://www.youtube.com/watch?v=P1lKoc-L61o

Project Source Code

References

Acknowledgement


We would like to express our heartfelt gratitude to Prof. Preetpal Kang who gave us an opportunity to do this project on the topic (Data Acquisition using CAN bus) which enhanced our understanding of CAN bus and its protocol as well as provided us knowledge about different sensors.
Secondly we would also like to thank our classmates who helped us a lot in the application of this project within the limited time frame.

References Used

1. http://users.ece.utexas.edu/~valvano/Datasheets/MCP2551.pdf
2. http://www.micropik.com/PDF/HCSR04.pdf
3. http://www.invensense.com/mems/gyro/documents/PS-MPU-6000A-00v3.4.pdf
4. http://www.socialledge.com/sjsu/index.php?title=SJ_One_Board