je suis un etudiant , je suis entrain de preparer monj projet de fin d'etude (onduleur monophas¨¦ ), le probleme c'est que je suis debutant pour la programmation des pics et je me demande l'aide pour cr¨¦es se programme .
le probleme c : avoir un signal MLI(PWM) en eleminat certain angles harmoniques a partir du developpemnt de fourier pour un pic 16f877 ou 16f876.
par exeple dans ce cas-ci on dispose de quatre angles (et dans ce cas on ne cherche plus ¨¤ construire la MLI par voie analogique ). on peut choisir la desparition des de la serie de fourier par resolution de:
1+2cos3¦Á2+2cos3¦Á4-2cos3¦Á1 -2cos3¦Á5 =0
1+2cos5¦Á2+2cos5¦Á4-2cos5¦Á1 -2cos5¦Á5=0
1+2cos7¦Á2+2cos7¦Á4-2cos7¦Á1 -2cos7¦Á5=0
1+2cos11¦Á2+2cos11¦Á4-2cos11¦Á1 -2cos11¦Á5=0
Cette r¨¦solution ne peut ¨ºtre men¨¦e que par voie num¨¦rique ¨¤ l¡¯aide de cale ¨¦limine les harmoniques 3, 5, 7,11.
comment je peut introduire l'elimination de c'est angle dans ce programme est l'affich¨¦ sur un afficheur LCD.
le cercuit utiliser est un pic 16f877 ou bien 16f876 .
voici le programme:*********************************************************************
#include "f:\program.h"
#include <LCD.C>
#define Bouton1 PIN_C3
#define BOUTON2 PIN_C4
void convert_to_pourcent( long int data, char volts[6])
{
BYTE i;
long int temp,div;
div=1000;
for(i=0;i<=2;i++) {
temp=data/div;
volts[i]=(BYTE)temp+'0';
temp=div*(BYTE)temp;
data=data-temp;
div=div/10;
}
}
void display_data( long int data ) {
char volt_string[6];
convert_to_pourcent( data, volt_string );
printf(lcd_putc,volt_string);
lcd_putc(" % ");
}
void main()
{byte s,a;
long int r;
r=500;a=1;
output_c(0xF8);
set_tris_c(0xF8);
setup_adc_ports(NO_ANALOGS);
setup_adc(ADC_OFF);
// setup_spi(FALSE);
// setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
setup_timer_2(T2_DIV_BY_1, 250, 1);
lcd_init();
lcd_gotoxy(1,1);
printf(lcd_putc,"demarrage");
s=1; lcd_gotoxy(7,2);a=0;
printf(lcd_putc,"sens avant");delay_ms(500);
do{
{setup_ccp1(CCP_PWM);set_pwm1_duty(r);lcd_gotoxy(1,2);display_data(r);}
if (input(bouton1) ==0) { r=r+10;lcd_gotoxy(1,2);display_data(r);delay_ms(50);}
if (input(bouton2) ==0) { r=r-10;lcd_gotoxy(1,2);display_data(r);delay_ms(50);}
if (r> 1000) {r=0;}
}
while (true);
**************************************************************
et je vous remerciez infeniment pour votre aide.