Author Archives: admin

Easycat and SOEM

In this post, I am sharing a code that I developed for integrating Easycat slaves and Simple Open Ethercat Master (SOEM).

This is still an ongoing project, and thus there are many insufficient parts.

The info about Easycat:

www.bausano.net/

The info about SOEM

https://openethercatsociety.github.io/

The code is attached here

http://youngmok.com/public_data/SOEM.zip

http://youngmok.com/public_data/TestEasyCat.zip

 

The below is the setup pic.

IMG_0099

The below is an execution example.

reneu@reneu-Precision-T1600:~/soem/SOEM/build/test/linux/my_test$ sudo ./my_test eth0
SOEM (Simple Open EtherCAT Master)
Simple test
Starting simple test
ec_init succeeded.
5 slaves found and configured.
Slaves mapped, state to SAFE_OP.

Slave:1
Name:EK1100
Output size: 0bits
Input size: 0bits
State: 18
Delay: 0[ns]
Has DC: 1
Configured address: 1001
Outputs address: 0
Inputs address: 0
FMMUfunc 0:0 1:0 2:0 3:0

Slave:2
Name:EL1014
Output size: 0bits
Input size: 4bits
State: 18
Delay: 0[ns]
Has DC: 1
Configured address: 1002
Outputs address: 0
Inputs address: 8062180
FMMU0 Ls:40 Ll:   1 Lsb:0 Leb:3 Ps:1000 Psb:0 Ty:1 Act:1
FMMUfunc 0:2 1:0 2:0 3:0

Slave:3
Name:EL3102
Output size: 0bits
Input size: 48bits
State: 2
Delay: 0[ns]
Has DC: 1
Configured address: 1003
Outputs address: 0
Inputs address: 8062181
FMMU0 Ls:41 Ll:   6 Lsb:0 Leb:7 Ps:1180 Psb:0 Ty:1 Act:1
FMMUfunc 0:2 1:3 2:0 3:0

Slave:4
Name:EasyCAT 32+32
Output size: 256bits
Input size: 256bits
State: 18
Delay: 0[ns]
Has DC: 1
Configured address: 1004
Outputs address: 8062140
Inputs address: 8062187
FMMU0 Ls:0 Ll:  32 Lsb:0 Leb:7 Ps:1000 Psb:0 Ty:2 Act:1
FMMU1 Ls:47 Ll:  32 Lsb:0 Leb:7 Ps:1200 Psb:0 Ty:1 Act:1
FMMUfunc 0:1 1:2 2:0 3:0

Slave:5
Name:EasyCAT 32+32
Output size: 256bits
Input size: 256bits
State: 18
Delay: 0[ns]
Has DC: 1
Configured address: 1005
Outputs address: 8062160
Inputs address: 80621a7
FMMU0 Ls:20 Ll:  32 Lsb:0 Leb:7 Ps:1000 Psb:0 Ty:2 Act:1
FMMU1 Ls:67 Ll:  32 Lsb:0 Leb:7 Ps:1200 Psb:0 Ty:1 Act:1
FMMUfunc 0:1 1:2 2:0 3:0
Request operational state for all slaves
Operational state reached for all slaves.

0:
O: ff 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
I: d4 d2 db 79 25 86 ab cd ef 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 6c 94
1:
O: ff 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
I: d4 d2 db 79 25 86 ab cd ef 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 6c 94
2:
O: ff 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
I: d3 cf db 79 25 86 ab cd ef 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 6c 94
3:
O: ff 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
I: d3 d1 db 79 25 86 ab cd ef 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 6c 94
4:
O: ff 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
I: d3 d1 db 79 25 86 ab cd ef 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 6c 94
5:
O: ff 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
I: d3 d1 db 79 25 86 ab cd ef 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 6c 94
6:
O: ff 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
I: d4 d1 db 79 25 86 ab cd ef 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 6c 94
7:
O: ff 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
I: d3 d1 dc 79 24 86 ab cd ef 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 70 90
8:
O: ff 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
I: d3 d1 dc 79 24 86 ab cd ef 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 70 90
9:
O: ff 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
I: d3 d1 dc 79 24 86 ab cd ef 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 70 90
10:
O: ff 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
I: d3 d2 dc 79 24 86 ab cd ef 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 70 90

Slide9

Four bar mechanism made of paper

Today I am introducing “Four bar mechanism made of paper”

The four-bar mechanism is very useful in the design of mechanical components. The best way to understand four-bar mechanisms is to build it by yourself.  Here, I am introducing how to make a four-bar mechanism with only a paper, screws and nuts. It is very easy to follow.

If you want to know the theories of four-bar mechanisms, see the wiki. Here

1. What you need to prepare

One sheet of paper, four screws and nuts, and a nail (or any sharp one)

2. Procedure

  1.   Prepare a sheet of paperSlide2
  2.  Tear the paper like thisSlide3
  3.   Fold two timesSlide4
  4.  Write numbers like the pictureSlide5
  5.  Make holesSlide6
  6.  Now you should have four bars with eight holesSlide7
  7.  Connect bars. Here the sequence is very important. If you do not follow this sequence the linkage will not rotate because interference with other linkages.Slide8
  8.  Connect allSlide9
  9.  Hold (4) and rotate (1)

This is the result.

This is a Grashof mechanism.

So far, I have introduced how to build a four-bar mechanism made of paper. I hope that this post helps your projects. If you have any question, please leave a reply.

ads7813

ADS7813 ADS7812 Arduino Code

Hi, Today I am sharing ADS7813 ADS7812 Arduino Code. <Download>

1. ADS7813 ADS7812: Low-Power, Serial 16/12-Bit Sampling ANALOG-TO-DIGITAL CONVERTER

ADS7813/ADS7812 is a general purpose ADC made by Texas Instrument, and it is pretty easy to operate through SPI. You can see the datasheet from here.

2. Connections

This is the electric connection diagram that I used for my setup. I have used ADS7813 but all configurations are same with ADS7812. Just only difference is that the resolution of ADS7812 is 12bit .

ads7813

 

This electric connection is actually a reference connection provided by TI datasheet. With this connection, I made the Arduino code like this.

3. Arduino code

#include <SPI.h>

const int i_conv = 8;
const int i_busy = 9;

void setup() {
  Serial.begin(9600);

  // start the SPI library:
  SPI.begin();

  pinMode(i_conv, OUTPUT);
  pinMode(i_busy, INPUT);

  delay(100);
}

void loop(){

  bool i_busy_status=1;
  byte data1;
  byte data2;
  digitalWrite(i_conv,HIGH);
  delay(1);
  digitalWrite(i_conv,LOW);
  while ( digitalRead(i_busy) == LOW ){
  }
  data1 = SPI.transfer(0x00);
  data2 = SPI.transfer(0x00);
  digitalWrite(i_conv,HIGH);
  Serial.print(data1);
  Serial.print(" ");
  Serial.print(data2);
  Serial.print("\n");
 
}

I included only very essential part so that you might be easily able to understand the code. I am also attaching the code. <Download>

4. Operation video

This is the video showing the operation.

 

Nowadays I am playing with an Arduino, and I got many helps from communities. I hope this ADS7813 ADS7812 Arduino Code can help your project.

 

 

Matlab Code for Numerical Hessian Matrix

Matlab code for numerical hessian matrix

In this post, I am sharing a Malab code calculating a numerical hessian matrix. 

You can download here.

You can use NumHessian.m  with this syntax.

function hf = NumHessian(f,x0,varargin)

You can understand how to use simply by reading these two simple examples.

Example 1

>> NumHessian(@cos,0)

ans =

-1.0000

Example 2

function y=test_func(x,a)
y=ax(1)x(2)*x(3);

>> NumHessian(@test_func,[1 2 3]’,2)

ans =

0 6.0000 4.0000
5.9999 -0.0001 1.9998
3.9999 2.0000 0

I hope this Matlab code for numerical Hessian matrix helps your projects

This Matlab code is based on another Matlab function, NumJacob, which calculates a numerical Jacobian matrix. If you are interested in this, visit here.

If you want to know the theory on Hessian matrix, please read this Wiki.

I acknowledge that this code is originally made by Parviz Khavari, a visitor of this blog, and I modified to post here.

 

Compiling a Matlab C code with GCC/G++

In this post, I am sharing how to compile a C code generated by Matlab C coder with GCC compiler. Let me explain with an example.

1. Generating a C code with Matlab C coder.

I will use a very simple Matlab code, and the below is the code

function y = add_coder(a,b)
y=a+b

With the Matlab C coder, let’s auto-generate the C code. You have to specify the types of variables and some other options. If you just read the dialog box, it might not be difficult.

As a result, you can see this kind of result. If your Matlab version is not 2015, it might be little different, but its big flow is almost same.

directory_matlab_coder

 

2. Let’s compile the code generated by Matlab C coder

This is my main.cpp file that is modified from the auto-generated main.cpp by Matlab C coder

#include "rt_nonfinite.h"
#include "add_coder.h"
#include "add_coder_terminate.h"
#include "add_coder_initialize.h"
#include "stdio.h"

int main()
{
  /* Initialize the application.
     You do not need to do this more than one time. */
  add_coder_initialize();

  /* Invoke the entry-point functions.
     You can call entry-point functions multiple times. */
  double a=10;
  double b=20.0;
  double y;
  y = add_coder(a, b);
  printf("y: %lf\n",y);

  /* Terminate the application.
     You do not need to do this more than one time. */
  add_coder_terminate();
  return 0;
}

I located this main.cpp file with other all codes.

Now let’s compile all codes. Just compile main.cpp with all other cpp files. like this.

compilation_example

 

I am attaching all related files as a zip file. <Download>

 

Isn’t it easy??!!!

Have a good day~~!