A seguir, será apresentado o projeto de um inversor senoidal desenvolvido originalmente como um No-break, entretanto com as funcionalidades relacionadas ao sincronismo da comutação rede-inversor ainda não estão operacionais no firmware, o projeto será apresentado compativel como inversor.
Para geração da senoide foi utilizado o seguinte arquivo em EXCEL, que gera os valores da tabela em função dos valores inseridos:
Download: http://teprom.eng.br/arquivos/Inversor/seno.zip
A cada interrupção do Timer, é recarregado o valor do Duty-cycle ( calculado na tabela acima ). No total, foram 32 amostras por ¼ de ciclo da senoide. Sempre que atingir os limites de 0o e 90o da senoide, as funções NivelMinimo()
e NivelMaximo()
respectivamente farão a variavel direcao mudar o sentido da contagem, conforme abaixo:
cpp code
////////////////////////////////////////////////////////////////////////
void NivelMinimo ( void )
{
direcao = CRESCENTE ;
////////////////////////////////////////////////////////////////////////
void NivelMaximo ( void )
{
direcao = DECRESCENTE ;
void CarregaPWM ( void )
{
if ( direcao == CRESCENTE ) PWM_counter++ ;
else PWM_counter-- ;
switch ( PWM_counter )
{
case 0 : NivelMinimo() ; set_pwm1_duty ( 0 ) ; break ;
case 1 : set_pwm1_duty ( Duty[PWM_counter] ) ; break ;
case 2 : set_pwm1_duty ( Duty[PWM_counter] ) ; break ;
case 3 : set_pwm1_duty ( Duty[PWM_counter] ) ; break ;
case 4 : set_pwm1_duty ( Duty[PWM_counter] ) ; break ;
case 5 : set_pwm1_duty ( Duty[PWM_counter] ) ; break ;
case 6 : set_pwm1_duty ( Duty[PWM_counter] ) ; break ;
case 7 : set_pwm1_duty ( Duty[PWM_counter] ) ; break ;
case 8 : set_pwm1_duty ( Duty[PWM_counter] ) ; break ;
case 9 : set_pwm1_duty ( Duty[PWM_counter] ) ; break ;
case 10 : set_pwm1_duty ( Duty[PWM_counter] ) ; break ;
case 11 : set_pwm1_duty ( Duty[PWM_counter] ) ; break ;
case 12 : set_pwm1_duty ( Duty[PWM_counter] ) ; break ;
case 13 : set_pwm1_duty ( Duty[PWM_counter] ) ; break ;
case 14 : set_pwm1_duty ( Duty[PWM_counter] ) ; break ;
case 15 : set_pwm1_duty ( Duty[PWM_counter] ) ; break ;
case 16 : set_pwm1_duty ( Duty[PWM_counter] ) ; break ;
case 17 : set_pwm1_duty ( Duty[PWM_counter] ) ; break ;
case 18 : set_pwm1_duty ( Duty[PWM_counter] ) ; break ;
case 19 : set_pwm1_duty ( Duty[PWM_counter] ) ; break ;
case 20 : set_pwm1_duty ( Duty[PWM_counter] ) ; break ;
case 21 : set_pwm1_duty ( Duty[PWM_counter] ) ; break ;
case 22 : set_pwm1_duty ( Duty[PWM_counter] ) ; break ;
case 23 : set_pwm1_duty ( Duty[PWM_counter] ) ; break ;
case 24 : set_pwm1_duty ( Duty[PWM_counter] ) ; break ;
case 25 : set_pwm1_duty ( Duty[PWM_counter] ) ; break ;
case 26 : set_pwm1_duty ( Duty[PWM_counter] ) ; break ;
case 27 : set_pwm1_duty ( Duty[PWM_counter] ) ; break ;
case 28 : set_pwm1_duty ( Duty[PWM_counter] ) ; break ;
case 29 : set_pwm1_duty ( Duty[PWM_counter] ) ; break ;
case 30 : set_pwm1_duty ( Duty[PWM_counter] ) ; break ;
case 31 : NivelMaximo() ; set_pwm1_duty ( Duty[PWM_counter] ) ; break ;
}
}
Registrar or Efetue login para comentar