Bonjour Madame, Monsieur,
Je développe actuellement une application sous Labwindows CVI permettant de faire varier en fréquence 3 signaux déphasés de 120° entre eux . Pour cela je dispose de 3 cartes PXI 5411.
Cependant, le rapport cyclique est fixé à 50% par défaut. Mes signaux doivent avoir un rapport cyclique Th=75%.
Je ne sais pas comment programmer cela sous CVI.
Voici mon bout de code (dans moin exemple j'ai fixé la fréquence à 500Hz) :
int CVICALLBACK COMMANDBUTTON (int panel, int control, int event, void *callbackData, int eventData1, int eventData2)
{
ViReal64 DC=75.00;
ViReal64 frequence=500.00;
ViChar GBF1[256]="DAQ::3";
ViChar ChannelGBF1[256]="0";
ViReal64 Amplitude1=5;
ViReal64 DCOffset1=2.5;
ViInt32 Waveform1=NIFGEN_VAL_WFM_SQUARE;
ViChar GBF2[256]="DAQ::5";
ViChar ChannelGBF2[256]="0";
ViReal64 Amplitude2=5;
ViReal64 DCOffset2=2.5;
ViInt32 Waveform2=NIFGEN_VAL_WFM_SQUARE;
ViChar GBF3[256]="DAQ::7";
ViChar ChannelGBF3[256]="0";
ViReal64 Amplitude3=5;
ViReal64 DCOffset3=2.5;
ViInt32 Waveform3=NIFGEN_VAL_WFM_SQUARE;
switch (event)
{
case EVENT_COMMIT:
/* Ressource 1 maître, ressource 2 et 3 esclaves*/
if(vi1 != VI_NULL) { niFgen_close(vi1);}
if(vi2 != VI_NULL) { niFgen_close(vi2);}
if(vi3 != VI_NULL) { niFgen_close(vi3);}
niFgen_init(GBF1, VI_TRUE,1, &vi1);
niFgen_init(GBF2, VI_TRUE, 1, &vi2);
niFgen_init(GBF3, VI_TRUE,1, &vi3);
/* Configuration du maître*/
niFgen_ConfigureRefClockSource(vi1, NIFGEN_VAL_RTSI_CLOCK);
niFgen_RouteSignalOut(vi1, "0", NIFGEN_VAL_OUT_START_TRIGGER,NIFGEN_VAL_RTSI_1);
niFgen_RouteSignalOut(vi1, "0", NIFGEN_VAL_SYNCHRONIZATION,NIFGEN_VAL_RTSI_0);
/* Configuration esclave 1*/
niFgen_ConfigureRefClockSource(vi2, NIFGEN_VAL_RTSI_CLOCK);
niFgen_ConfigureTriggerSource(vi2, "0", NIFGEN_VAL_RTSI_1);
niFgen_ConfigureSynchronization (vi2, "0", NIFGEN_VAL_RTSI_0);
/* Configuration esclave 2*/
niFgen_ConfigureRefClockSource(vi3, NIFGEN_VAL_RTSI_CLOCK);
niFgen_ConfigureTriggerSource(vi3, "0", NIFGEN_VAL_RTSI_1);
niFgen_ConfigureSynchronization(vi3, "0", NIFGEN_VAL_RTSI_0);
/* Configuration et generation forme d'onde esclave 1*/
niFgen_ConfigureOutputMode(vi2, NIFGEN_VAL_OUTPUT_FUNC);
niFgen_ConfigureStandardWaveform(vi2, ChannelGBF2, Waveform2, Amplitude2, DCOffset2, frequence,120);
niFgen_InitiateGeneration(vi2);
niFgen_ConfigureOutputEnabled(vi2, "0", VI_TRUE);
niFgen_SetAttributeViReal64 (vi2, ChannelGBF2, NIFGEN_ATTR_FUNC_DUTY_CYCLE_HIGH, DC);
/* Configuration et generation forme d'onde esclave 2*/
niFgen_ConfigureOutputMode(vi3, NIFGEN_VAL_OUTPUT_FUNC);
niFgen_ConfigureStandardWaveform(vi3, ChannelGBF3, Waveform3, Amplitude3, DCOffset3, frequence,-120);
niFgen_InitiateGeneration(vi3);
niFgen_ConfigureOutputEnabled(vi3, "0", VI_TRUE);
niFgen_SetAttributeViReal64 (vi2, ChannelGBF2, NIFGEN_ATTR_FUNC_DUTY_CYCLE_HIGH, DC);
/* Configuration et generation forme d'onde maître*/
niFgen_ConfigureOutputMode(vi1, NIFGEN_VAL_OUTPUT_FUNC);
niFgen_ConfigureStandardWaveform(vi1, ChannelGBF1, Waveform1, Amplitude1, DCOffset1, frequence,0);
niFgen_InitiateGeneration(vi1);
niFgen_ConfigureOutputEnabled(vi1, "0", VI_TRUE);
niFgen_SetAttributeViReal64 (vi2, ChannelGBF2, NIFGEN_ATTR_FUNC_DUTY_CYCLE_HIGH, DC);
break;
}
return 0;
}
Naturellement, je me connecte sur la sortie SYNC OUT des cartes PXI. Aussi, j'ai essayé à l'aide du Front Panel NiFgen et là j'arrive à faire varier le rapport cyclique (quelque soit le signal généré sur la sortie ARB OUT).
Pourriez-vous m'aider??
La fonction ; niFgen_SetAttributeViReal64(vi2,ChannelGBF2,NIFGEN_ATTR_FUNC_DUTY_CYCLE_HIGH, DC);
ne fonctionne pas.
Cordialement,
Eric