Basically,  is a rectangular plane base with a CNC mechanism on it  (ball-screw, two guides, cart and four linear bearings); the CNC simple mechanism is, actually, replacing an expensive actuator; on sides there are two triangular rods sistem needed for lateral stability of leg. The CNC mechanism is driven by a step-by-step DC motor, witch is driven by an MCU. This MCU is a PIC648 wich send to stepper impulses for STEP & DIR, using a simple stepper driver with L298 and diodes bridges; on the LCD there are displayed info about the limits of cart stroke and cart position; all this infos are converted in degrees of knee moving for easy user setings. 

  Hereunder are images of simulations of mechanical device:

(First I was tried a simplified version, as you can see, after I was tested it, I was remake a second version.)

1- side view, intermediate pos., v.1

2- pan view, intermediate pos., v1.0

3- side view, relaxed, v1.0

4- side view, flexed, v1.0

5 -side view middle of cart stroke, v1.1

6- 3D view, v1.1

7- side view relaxed, v1.1

8- side view flexed, v1.1

9- front view (motor side), v1.1

  Next, I will post images from the construction process, detailes and some other signifiant parts of work. This is the firsat version, wich was modified later in version 1.1.

Last, I was modified the original version, because that was not very stable, so now I'll show you pictures when working to second version, more stable and easy to use.

Now some of subassemblyes:

DIY stepper driver

DIY stepper controller with PIC MCU

Home sw

Power supply

Here I'll show you the source code:


;// Code Generator: BoostC Compiler -

;// Version : 7.03

;// License Type : Pro License

;// Limitations : PIC12,PIC16 max code size:Unlimited, max RAM banks:Unlimited


include ""

; Heap block 0, size:96 (0x00000110 - 0x0000016F)

__HEAP_BLOCK0_BANK EQU0x00000002



; Heap block 1, size:96 (0x00000190 - 0x000001EF)

__HEAP_BLOCK1_BANK EQU0x00000003



; Heap block 2, size:74 (0x000000A6 - 0x000000EF)

__HEAP_BLOCK2_BANK EQU0x00000001



; Heap block 3, size:0 (0x00000000 - 0x00000000)

__HEAP_BLOCK3_BANK EQU0x00000000



__div_16_1_00003_arg_a EQU0x00000074 ; bytes:2

__div_16_1_00003_arg_b EQU0x00000076 ; bytes:2

CompTempVarRet212 EQU0x0000007D ; bytes:2

__div_16_1_00003_1_r EQU0x0000007A ; bytes:2

__div_16_1_00003_1_i EQU0x0000007C ; bytes:1

__div_8_8_00000_arg_a EQU0x0000006F ; bytes:1

__div_8_8_00000_arg_b EQU0x00000070 ; bytes:1

CompTempVarRet216 EQU0x00000073 ; bytes:1

__div_8_8_00000_1_r EQU0x00000071 ; bytes:1

__div_8_8_00000_1_i EQU0x00000072 ; bytes:1

__rem_8_8_00000_arg_a EQU0x0000006F ; bytes:1

__rem_8_8_00000_arg_b EQU0x00000070 ; bytes:1

CompTempVarRet218 EQU0x00000074 ; bytes:1

__rem_8_8_00000_1_c EQU0x00000072 ; bytes:1

__rem_8_8_00000_1_i EQU0x00000073 ; bytes:1

gbl_status EQU0x00000003 ; bytes:1

gbl_14_LSR EQU0x00000020 ; bytes:4

gbl_float_detect_tininess EQU0x00000049 ; bytes:1

gbl_float_rounding_mode EQU0x0000004A ; bytes:1

gbl_float_exception_flags EQU0x0000004B ; bytes:1

gbl_15_gbl_aSig EQU0x00000024 ; bytes:4

gbl_15_gbl_bSig EQU0x00000028 ; bytes:4

gbl_15_gbl_zSig EQU0x0000002C ; bytes:4

gbl_15_gbl_aExp EQU0x0000004C ; bytes:1

gbl_15_gbl_bExp EQU0x0000004D ; bytes:1

gbl_15_gbl_zExp EQU0x00000037 ; bytes:2

gbl_15_gbl_aSign EQU0x0000004E ; bytes:1

gbl_15_gbl_bSign EQU0x0000004F ; bytes:1

gbl_15_gbl_zSign EQU0x00000050 ; bytes:1

gbl_15_gbl_zSigZero EQU0x00000051 ; bytes:1

gbl_15_gbl_ret EQU0x00000030 ; bytes:4

gbl_indf EQU0x00000000 ; bytes:1

gbl_tmr0 EQU0x00000001 ; bytes:1

gbl_pcl EQU0x00000002 ; bytes:1...

Read more »