Já desenvolvi um projeto de inversor de frequência trifasico 10A para uso comercial.
Usei um modulo IGBT usei o STK551U3A2A-E ligado diretamente a um PIC DSPIC30F com resistrores de 1K. Também foram usados muitos outros periféricos.
Não é algo simples, gastei muito tempo e dinheiro. Mas com pesquisa e estudo você consegui, apenas avalie qual é seu objetivo nessa empreitada.
Se você for a fundo nesse desenvolvimento, isso pode te ajudar muito na programação:
para uma meia senoide crie uma tabela de Seno, de 3 em 3 graus.
float32 const seno_tab[61]={0, 0.052, 0.105, 0.156, 0.208, 0.259, 0.309, 0.358, 0.407, 0.454, 0.5, 0.545, 0.588, 0.629, 0.669, 0.707, 0.743, 0.777, 0.809, 0.839, 0.866, 0.891, 0.914, 0.934, 0.951, 0.966, 0.978, 0.988, 0.995, 0.999, 1, 0.999, 0.995, 0.988, 0.978, 0.966, 0.951, 0.934, 0.914, 0.891, 0.866, 0.839, 0.809, 0.777, 0.743, 0.707, 0.669, 0.629, 0.588, 0.545, 0.5, 0.454, 0.407, 0.358, 0.309, 0.259, 0.208, 0.156, 0.105, 0.052, 0};
Cria uma um algorítimo, como o abaixo, chame-o com o auxilio de um timer, exemplo. quando o motor estiver rodando em 10hz, uma senoide terá 100ms meia senoide terá 50ms. Como 1/2 senoide foi dividida em 60 pedaços de 3 graus. 50ms/60=0,833ms. faça o timer chamar a função a cada 0,833ms
//////////INTERRUPÇÃO USADA PARA PWM///////////////////////////////////////
#int_timer3
void trata_t3()
{
set_timer23(set_tempo23); ////// seta timer 2-3
/////////incrementa numero de graus da senoide
graus1++;
if (graus1>60) {graus1=1;} //180 graus dividido por 18 (180/60=3) estamos pulando de 3 em 3 graus
graus2= graus1+40; if(graus2>60) {graus2-=60;} //graus esta adiantado 120 graus (defazamento trifasico)
graus3= graus2+40; if(graus3>60) {graus3-=60;} //cada posição da tabela tem 3 graus devemos pular 40 posições(40x3=120graus)
////////tensão instantanea
v_inst1 = v_pico*seno_tab[graus1];
v_inst2 = v_pico*seno_tab[graus2];
v_inst3 = v_pico*seno_tab[graus3];
////////Seta PWM////////////////////////////////////////
set_motor_pwm_duty(1,1,v_inst1);
set_motor_pwm_duty(1,2,v_inst2);
set_motor_pwm_duty(1,3,v_inst3);
}
00900a.pdf