/*To Generate Sine Wave*/ void *rt_task_sin (void *arg) { RT_TASK *task; static float f = 50, td, t, Vsin_t, s; /*frequency =50Hz*/ /*s = Step size*/ /* td = Time delay between two samples*/ static float Auto_correction; static int i,j; task = rt_task_init(nam2num("rtl1"), 1, 4096, 0); s = 2*Vm_sin/Mag_level_Var_sin; td = 1/(f*n); Auto_correction = (Mag_level_Var_tri - Mag_level_Var_sin)/2; rt_make_hard_real_time(); while (!stop) { t = i*td; Vsin_t = Vm_sin*sin(2*M_PI*f*t); Vsin_k [j] = (Vsin_t+Vm_sin)/s + Auto_correction; rt_sleep(nano2count(50000)); /*50us*/ i++; j++ if(i == (n-1)) i=0; if(j==99) j=0; } rt_make_soft_real_time(); rt_task_delete(task); } /*To Generate Triangular Wave*/ void *rt_task_tri (void *arg) { RT_TASK *task; static float f=100, td, Vtri_t, s, t;/*frequency =100Hz*/ /*s = Step size*/ /* td = Time delay between two samples*/ static float SLOPE; static int i,j; task = rt_task_init(nam2num("rtl2"), 0, 4096, 0); SLOPE = 4*Vm_tri*f; td=1/(f*n); s=2*Vm_tri/Mag_Control_Var_tri; rt_make_hard_real_time(); while (!stop) { t=i*td; if (Vtri_k [j] = Mag_Control_Var_tri) { Vtri_t = 1 * SLOPE * t; Vtri_k [j] = (Vtri_t+Vm_tri)/s - Mag_Control_Var_tri/2; rt_sleep(nano2count(25000)); /*25us*/ i++; } else { Vtri_k [j]= 0.0; i=1; } j++; if(j==99) j=0; } rt_make_soft_real_time(); rt_task_delete (task); }