Polypfreak1987 I have code, He does what you want to do, sorry I can not explain how it works because my english is bad.
Source
Code:
 ///////////////////////////////
#include <acknex.h>
#include <default.c>
///////////////////////////////

ENTITY* gondela_ph=NULL;
var gcon;

action gondela ()
{
	phent_settype (my,PH_RIGID,PH_BOX);
	phent_setmass(my,1,PH_SPHERE);
	gcon = phcon_add(PH_HINGE,my,NULL);
	phcon_setparams1(gcon,my.x,vector(0,0,1),nullvector);
	phcon_setparams2(gcon,vector(-360,360,0),nullvector,nullvector);
	gondela_ph = my;
}

action fun_sp ()
{
	var con;
	VECTOR aang;
	while(!gondela_ph) wait(1);
	phent_settype (my,PH_RIGID,PH_SPHERE);
	phent_setmass(my,1,PH_SPHERE);
	con = phcon_add(PH_HINGE,my,gondela_ph);
	
	//now find rotate axis 
	vec_set(aang,gondela_ph.x);vec_sub (aang,my.x);vec_normalize(aang,1);
	//
	phcon_setparams1(con,vector(my.x,my.y,gondela_ph.z),vector(aang.x,aang.y,0),nullvector);
	phcon_setparams2(con,vector(-360,360,0),nullvector,nullvector);
}
void main ()
{
	level_load ("map.wmb");
	ph_setgravity (vector(0,0,-300));
	while(!gondela_ph) wait(1);
	while (1)
	{
		phcon_setmotor (gcon,vector(3,50,0),nullvector,nullvector);
		wait(1);
	}
}



A7 Commercial cool
Celeron 1700, GeForce 5500 FX 256mb, 1 Gb Ram