Autor Tema: Inicio Motor trifasico con pic  (Leído 2397 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado Abner_emanuel

  • PIC16
  • ***
  • Mensajes: 160
Inicio Motor trifasico con pic
« en: 24 de Noviembre de 2017, 02:24:52 »
Un saludo.

Alguien tiene experiencia en como hacer un control de motor trifasico o variador de velocidad?. Bueno para empezar quiero generar los pulsos modulados de las tres fases pero no se que tiempo llevan entre pulsos de las fases.

Cualquier ayudas es bienvenida.
« Última modificación: 24 de Noviembre de 2017, 02:27:43 por Abner_emanuel »
El señor es mi pastor,  nada me faltará.

Desconectado Abner_emanuel

  • PIC16
  • ***
  • Mensajes: 160
Re:Inicio Motor trifasico con pic
« Respuesta #1 en: 27 de Noviembre de 2017, 13:52:02 »

Que opinan de este code que me encontré en la red.

Código: C++
  1. ////////////////////////////////////////////////////////////////////////////////
  2. ///           Three Phase PWM Control for AC Induction Motor                 ///
  3. ///                                 by                                       ///
  4. ///                           Larry E Himes Jr                               ///
  5. ///                            April 30, 2012                                ///
  6. ///                                                                          ///
  7. ///                  ECET 581 Applied Electronic Drives                      ///
  8. ///                                                                          ///
  9. ///          PIN A0 - AN0 is used for the Closed Loop Feedback               ///
  10. ///          PIN A1 - AN1 is used for User Speed Control Input               ///
  11. ///             PIN C3 - User Direction Control Switch Input                 ///
  12. ///                                                                          ///
  13. ///              Frequency Range Control from 20Hz to 120Hz                  ///
  14. ///                                                                          ///
  15. ///               Thirteen Samples per PWM Sine Wave Output                  ///
  16. ///                                                                          ///
  17. ////////////////////////////////////////////////////////////////////////////////
  18.  
  19. #include <18f4431.h>
  20. #device adc=10
  21. #fuses  INTRC_IO,NOWDT,NOPROTECT,NOMCLR
  22. #use delay(clock=8000000)
  23.  
  24. void main()
  25.    {
  26.    int16 adc_val;                                   // ADC Variable
  27.    int16 period;                                    // PWM Time Period Variable
  28.    int16 feedbackI;                                 // Feedback Varaiable
  29.    int16 feedbackL;                                 // Feedback Variable
  30.    int16 adjust;                                    // Speed Adjust Variable
  31.    int16 speed;                                     // Speed Control Variable
  32.    int16 i;                                         // Counter Variable
  33.    int8  x;                                         // Soft Start Variable
  34.  
  35.    //PPWM channels 0 and 1 are both on and always opposite values
  36.    setup_power_pwm_pins(PWM_COMPLEMENTARY,PWM_COMPLEMENTARY,PWM_COMPLEMENTARY,
  37.                         PWM_OFF);
  38.  
  39.    // Continuously Sample ADC Channels
  40.    setup_adc_ports(ADC_CONT_A | ADC_WHEN_PPWM | VSS_VDD);
  41.    setup_adc(ADC_CLOCK_INTERNAL);
  42.  
  43.    x=0;                                             // Initial Startup
  44.  
  45.    while(TRUE)
  46.       {
  47.       set_adc_channel(1);                           // Select ADC Channel 1
  48.       adc_val = read_adc();                         // Read Current ADC Value
  49.       feedbackL=0;                                  // Clear ADC Variable
  50.       feedbackI=0;                                  // Clear ADC Variable
  51.       // Prepare Variables for Startup
  52.       if (x==0)
  53.          {
  54.          feedbackL=adc_val;                         // Initial Speed Setting
  55.          adc_val=0;                                 // Clear ADC Variable
  56.          }
  57.       // Ramp Up Speed in Forward Direction
  58.       while(adc_val<<feedbackL && x==0 && !input(PIN_C3))
  59.          {
  60.          period = ( adc_val / 20 ) + 9;             // Set PR2 for Frequency
  61.          speed = 511 - ( ( 1023 - adc_val ) / 2 );  // Set User Specified Speed
  62.          adjust=0;                                  // Clear Adjust Variable
  63.          //add dead time for reactive loads
  64.          setup_power_pwm(PWM_CLOCK_DIV_128 | PWM_FREE_RUN,1,0,period,0,1,0);
  65.          // Phase Segment #1
  66.          set_power_pwm0_duty(adjust+57+speed);      // Phase U PWM Duty Setting
  67.          set_power_pwm2_duty(adjust+29+speed/4);    // Phase V PWM Duty Setting
  68.          set_power_pwm4_duty(adjust+1);             // Phase W PWM Duty Setting
  69.          // Phase Segment #2
  70.          set_power_pwm0_duty(adjust+57+speed);      // Phase U PWM Duty Setting
  71.          set_power_pwm2_duty(adjust+43+speed/2);    // Phase V PWM Duty Setting
  72.          set_power_pwm4_duty(adjust+1);             // Phase W PWM Duty Setting
  73.          // Phase Segment #3
  74.          set_power_pwm0_duty(adjust+43+speed/2);    // Phase U PWM Duty Setting
  75.          set_power_pwm2_duty(adjust+57+speed);      // Phase V PWM Duty Setting
  76.          set_power_pwm4_duty(adjust+1);             // Phase W PWM Duty Setting
  77.          // Phase Segment #4
  78.          set_power_pwm0_duty(adjust+29+speed/4);    // Phase U PWM Duty Setting
  79.          set_power_pwm2_duty(adjust+57+speed);      // Phase V PWM Duty Setting
  80.          set_power_pwm4_duty(adjust+14+speed/6);    // Phase W PWM Duty Setting
  81.          // Phase Segment #5
  82.          set_power_pwm0_duty(adjust+14+speed/6);    // Phase U PWM Duty Setting
  83.          set_power_pwm2_duty(adjust+57+speed);      // Phase V PWM Duty Setting
  84.          set_power_pwm4_duty(adjust+29+speed/4);    // Phase W PWM Duty Setting
  85.          // Phase Segment #6
  86.          set_power_pwm0_duty(adjust+1);             // Phase U PWM Duty Setting
  87.          set_power_pwm2_duty(adjust+57+speed);      // Phase V PWM Duty Setting
  88.          set_power_pwm4_duty(adjust+43+speed/2);    // Phase W PWM Duty Setting
  89.          // Phase Segment #7
  90.          set_power_pwm0_duty(adjust+1);             // Phase U PWM Duty Setting
  91.          set_power_pwm2_duty(adjust+43+speed/2);    // Phase V PWM Duty Setting
  92.          set_power_pwm4_duty(adjust+57+speed);      // Phase W PWM Duty Setting
  93.          // Phase Segment #8
  94.          set_power_pwm0_duty(adjust+1);             // Phase U PWM Duty Setting
  95.          set_power_pwm2_duty(adjust+29+speed/4);    // Phase V PWM Duty Setting
  96.          set_power_pwm4_duty(adjust+57+speed);      // Phase W PWM Duty Setting
  97.          // Phase Segment #9
  98.          set_power_pwm0_duty(adjust+14+speed/6);    // Phase U PWM Duty Setting
  99.          set_power_pwm2_duty(adjust+14+speed/6);    // Phase V PWM Duty Setting
  100.          set_power_pwm4_duty(adjust+57+speed);      // Phase W PWM Duty Setting
  101.          // Phase Segment #10
  102.          set_power_pwm0_duty(adjust+29+speed/4);    // Phase U PWM Duty Setting
  103.          set_power_pwm2_duty(adjust+1);             // Phase V PWM Duty Setting
  104.          set_power_pwm4_duty(adjust+57+speed);      // Phase W PWM Duty Setting
  105.          // Phase Segment #11
  106.          set_power_pwm0_duty(adjust+43+speed/2);    // Phase U PWM Duty Setting
  107.          set_power_pwm2_duty(adjust+1);             // Phase V PWM Duty Setting
  108.          set_power_pwm4_duty(adjust+43+speed/2);    // Phase W PWM Duty Setting
  109.          // Phase Segment #12
  110.          set_power_pwm0_duty(adjust+57+speed);      // Phase U PWM Duty Setting
  111.          set_power_pwm2_duty(adjust+1);             // Phase V PWM Duty Setting
  112.          set_power_pwm4_duty(adjust+29+speed/4);    // Phase W PWM Duty Setting
  113.          // Phase Segment #13
  114.          set_power_pwm0_duty(adjust+57+speed);      // Phase U PWM Duty Setting
  115.          set_power_pwm2_duty(adjust+14+speed/6);    // Phase V PWM Duty Setting
  116.          set_power_pwm4_duty(adjust+14+speed/6);    // Phase W PWM Duty Setting
  117.          x=1;                                       // Ramp Up Cycle Completed
  118.          adc_val=adc_val+3;                         // Increment ADC Value
  119.          }
  120.       i=0;                                          // Clear Counter Variable
  121.       feedbackL=0;                                  // Clear ADC Variable
  122.       // Rotate Motor in Forward Direction
  123.       while(!input(PIN_C3))
  124.          {
  125.          // Read Initial ADC Values
  126.          set_adc_channel(0);                        // Select ADC Channel 0
  127.          feedbackI = read_adc();                    // Read Initial Feedback
  128.          set_adc_channel(1);                        // Select ADC Channel 1
  129.          adc_val = read_adc();                      // Read Current ADC Value
  130.          period = ( adc_val / 20 ) + 9;             // Set PR2 for Frequency
  131.          speed = 511 - ( ( 1023 - adc_val ) / 2 );  // Set User Specified Speed
  132.          //add dead time for reactive loads
  133.          setup_power_pwm(PWM_CLOCK_DIV_128 | PWM_FREE_RUN,1,0,period,0,1,0);
  134.          // Phase Segment #1
  135.          set_power_pwm0_duty(adjust+57+speed);      // Phase U PWM Duty Setting
  136.          set_power_pwm2_duty(adjust+29+speed/4);    // Phase V PWM Duty Setting
  137.          set_power_pwm4_duty(adjust+1);             // Phase W PWM Duty Setting
  138.          // Phase Segment #2
  139.          set_power_pwm0_duty(adjust+57+speed);      // Phase U PWM Duty Setting
  140.          set_power_pwm2_duty(adjust+43+speed/2);    // Phase V PWM Duty Setting
  141.          set_power_pwm4_duty(adjust+1);             // Phase W PWM Duty Setting
  142.          // Phase Segment #3
  143.          set_power_pwm0_duty(adjust+43+speed/2);    // Phase U PWM Duty Setting
  144.          set_power_pwm2_duty(adjust+57+speed);      // Phase V PWM Duty Setting
  145.          set_power_pwm4_duty(adjust+1);             // Phase W PWM Duty Setting
  146.          // Phase Segment #4
  147.          set_power_pwm0_duty(adjust+29+speed/4);    // Phase U PWM Duty Setting
  148.          set_power_pwm2_duty(adjust+57+speed);      // Phase V PWM Duty Setting
  149.          set_power_pwm4_duty(adjust+14+speed/6);    // Phase W PWM Duty Setting
  150.          // Phase Segment #5
  151.          set_power_pwm0_duty(adjust+14+speed/6);    // Phase U PWM Duty Setting
  152.          set_power_pwm2_duty(adjust+57+speed);      // Phase V PWM Duty Setting
  153.          set_power_pwm4_duty(adjust+29+speed/4);    // Phase W PWM Duty Setting
  154.          // Phase Segment #6
  155.          set_power_pwm0_duty(adjust+1);             // Phase U PWM Duty Setting
  156.          set_power_pwm2_duty(adjust+57+speed);      // Phase V PWM Duty Setting
  157.          set_power_pwm4_duty(adjust+43+speed/2);    // Phase W PWM Duty Setting
  158.          // Phase Segment #7
  159.          set_power_pwm0_duty(adjust+1);             // Phase U PWM Duty Setting
  160.          set_power_pwm2_duty(adjust+43+speed/2);    // Phase V PWM Duty Setting
  161.          set_power_pwm4_duty(adjust+57+speed);      // Phase W PWM Duty Setting
  162.          // Phase Segment #8
  163.          set_power_pwm0_duty(adjust+1);             // Phase U PWM Duty Setting
  164.          set_power_pwm2_duty(adjust+29+speed/4);    // Phase V PWM Duty Setting
  165.          set_power_pwm4_duty(adjust+57+speed);      // Phase W PWM Duty Setting
  166.          // Phase Segment #9
  167.          set_power_pwm0_duty(adjust+14+speed/6);    // Phase U PWM Duty Setting
  168.          set_power_pwm2_duty(adjust+14+speed/6);    // Phase V PWM Duty Setting
  169.          set_power_pwm4_duty(adjust+speed);         // Phase W PWM Duty Setting
  170.          // Phase Segment #10
  171.          set_power_pwm0_duty(adjust+29+speed/4);    // Phase U PWM Duty Setting
  172.          set_power_pwm2_duty(adjust+1);             // Phase V PWM Duty Setting
  173.          set_power_pwm4_duty(adjust+57+speed);      // Phase W PWM Duty Setting
  174.          // Phase Segment #11
  175.          set_power_pwm0_duty(adjust+43+speed/2);    // Phase U PWM Duty Setting
  176.          set_power_pwm2_duty(adjust+1);             // Phase V PWM Duty Setting
  177.          set_power_pwm4_duty(adjust+43+speed/2);    // Phase W PWM Duty Setting
  178.          // Phase Segment #12
  179.          set_power_pwm0_duty(adjust+57+speed);      // Phase U PWM Duty Setting
  180.          set_power_pwm2_duty(adjust+1);             // Phase V PWM Duty Setting
  181.          set_power_pwm4_duty(adjust+29+speed/4);    // Phase W PWM Duty Setting
  182.          // Phase Segment #13
  183.          set_power_pwm0_duty(adjust+57+speed);      // Phase U PWM Duty Setting
  184.          set_power_pwm2_duty(adjust+14+speed/6);    // Phase V PWM Duty Setting
  185.          set_power_pwm4_duty(adjust+14+speed/6);    // Phase W PWM Duty Setting
  186.          i++;                                       // Increment Counter
  187.          if (i>>1799)                               // Check Counter
  188.             {
  189.             set_adc_channel(0);                     // Select ADC Channel 0
  190.             feedbackL = read_adc();                 // Read Feedback from ADC
  191.             adjust = feedbackI - feedbackL;         // Calculate Speed Adjust
  192.             i=0;                                    // Clear Counter Variable
  193.             }
  194.          }
  195.          i=0;                                       // Clear Counter Variable
  196.       // Ramp Down Motor Speed for Direction Change
  197.       while(adc_val>>0 && input(PIN_C3))
  198.          {
  199.          period = ( adc_val / 20 ) + 9;             // Set PR2 for Frequency
  200.          speed = 511 - ( ( 1023 - adc_val ) / 2 );  // Set User Specified Speed
  201.          adjust=0;                                  // Clear Adjust Variable
  202.          //add dead time for reactive loads
  203.          setup_power_pwm(PWM_CLOCK_DIV_128 | PWM_FREE_RUN,1,0,period,0,1,0);
  204.          // Phase Segment #1
  205.          set_power_pwm0_duty(adjust+57+speed);      // Phase U PWM Duty Setting
  206.          set_power_pwm2_duty(adjust+29+speed/4);    // Phase V PWM Duty Setting
  207.          set_power_pwm4_duty(adjust+1);             // Phase W PWM Duty Setting
  208.          // Phase Segment #2
  209.          set_power_pwm0_duty(adjust+57+speed);      // Phase U PWM Duty Setting
  210.          set_power_pwm2_duty(adjust+43+speed/2);    // Phase V PWM Duty Setting
  211.          set_power_pwm4_duty(adjust+1);             // Phase W PWM Duty Setting
  212.          // Phase Segment #3
  213.          set_power_pwm0_duty(adjust+43+speed/2);    // Phase U PWM Duty Setting
  214.          set_power_pwm2_duty(adjust+57+speed);      // Phase V PWM Duty Setting
  215.          set_power_pwm4_duty(adjust+1);             // Phase W PWM Duty Setting
  216.          // Phase Segment #4
  217.          set_power_pwm0_duty(adjust+29+speed/4);    // Phase U PWM Duty Setting
  218.          set_power_pwm2_duty(adjust+57+speed);      // Phase V PWM Duty Setting
  219.          set_power_pwm4_duty(adjust+14+speed/6);    // Phase W PWM Duty Setting
  220.          // Phase Segment #5
  221.          set_power_pwm0_duty(adjust+14+speed/6);    // Phase U PWM Duty Setting
  222.          set_power_pwm2_duty(adjust+57+speed);      // Phase V PWM Duty Setting
  223.          set_power_pwm4_duty(adjust+29+speed/4);    // Phase W PWM Duty Setting
  224.          // Phase Segment #6
  225.          set_power_pwm0_duty(adjust+1);             // Phase U PWM Duty Setting
  226.          set_power_pwm2_duty(adjust+57+speed);      // Phase V PWM Duty Setting
  227.          set_power_pwm4_duty(adjust+43+speed/2);    // Phase W PWM Duty Setting
  228.          // Phase Segment #7
  229.          set_power_pwm0_duty(adjust+1);             // Phase U PWM Duty Setting
  230.          set_power_pwm2_duty(adjust+43+speed/2);    // Phase V PWM Duty Setting
  231.          set_power_pwm4_duty(adjust+57+speed);      // Phase W PWM Duty Setting
  232.          // Phase Segment #8
  233.          set_power_pwm0_duty(adjust+1);             // Phase U PWM Duty Setting
  234.          set_power_pwm2_duty(adjust+29+speed/4);    // Phase V PWM Duty Setting
  235.          set_power_pwm4_duty(adjust+57+speed);      // Phase W PWM Duty Setting
  236.          // Phase Segment #9
  237.          set_power_pwm0_duty(adjust+14+speed/6);    // Phase U PWM Duty Setting
  238.          set_power_pwm2_duty(adjust+14+speed/6);    // Phase V PWM Duty Setting
  239.          set_power_pwm4_duty(adjust+57+speed);      // Phase W PWM Duty Setting
  240.          // Phase Segment #10
  241.          set_power_pwm0_duty(adjust+29+speed/4);    // Phase U PWM Duty Setting
  242.          set_power_pwm2_duty(adjust+1);             // Phase V PWM Duty Setting
  243.          set_power_pwm4_duty(adjust+57+speed);      // Phase W PWM Duty Setting
  244.          // Phase Segment #11
  245.          set_power_pwm0_duty(adjust+43+speed/2);    // Phase U PWM Duty Setting
  246.          set_power_pwm2_duty(adjust+1);             // Phase V PWM Duty Setting
  247.          set_power_pwm4_duty(adjust+43+speed/2);    // Phase W PWM Duty Setting
  248.          // Phase Segment #12
  249.          set_power_pwm0_duty(adjust+57+speed);      // Phase U PWM Duty Setting
  250.          set_power_pwm2_duty(adjust+1);             // Phase V PWM Duty Setting
  251.          set_power_pwm4_duty(adjust+29+speed/4);    // Phase W PWM Duty Setting
  252.          // Phase Segment #13
  253.          set_power_pwm0_duty(adjust+57+speed);      // Phase U PWM Duty Setting
  254.          set_power_pwm2_duty(adjust+14+speed/6);    // Phase V PWM Duty Setting
  255.          set_power_pwm4_duty(adjust+14+speed/6);    // Phase W PWM Duty Setting
  256.          adc_val=adc_val-3;                         // Decrement ADC Value
  257.          x=0;                                       // Direction Change Complete
  258.          }
  259.       i=0;                                          // Clear Counter Variable
  260.       // Ramp Up Speed in Reverse Direction
  261.       while(adc_val<<feedbackL && x==0 && !input(PIN_C3))
  262.          {
  263.          period = ( adc_val / 20 ) + 9;             // Set PR2 for Frequency
  264.          speed = 511 - ( ( 1023 - adc_val ) / 2 );  // Set User Specified Speed
  265.          adjust=0;                                  // Clear Adjust Variable
  266.          //add dead time for reactive loads
  267.          setup_power_pwm(PWM_CLOCK_DIV_128 | PWM_FREE_RUN,1,0,period,0,1,0);
  268.          // Phase Segment #1
  269.          set_power_pwm0_duty(adjust+57+speed);      // Phase U PWM Duty Setting
  270.          set_power_pwm2_duty(adjust+29+speed/4);    // Phase V PWM Duty Setting
  271.          set_power_pwm4_duty(adjust+1);             // Phase W PWM Duty Setting
  272.          // Phase Segment #2
  273.          set_power_pwm0_duty(adjust+57+speed);      // Phase U PWM Duty Setting
  274.          set_power_pwm2_duty(adjust+43+speed/2);    // Phase V PWM Duty Setting
  275.          set_power_pwm4_duty(adjust+1);             // Phase W PWM Duty Setting
  276.          // Phase Segment #3
  277.          set_power_pwm0_duty(adjust+43+speed/2);    // Phase U PWM Duty Setting
  278.          set_power_pwm2_duty(adjust+57+speed);      // Phase V PWM Duty Setting
  279.          set_power_pwm4_duty(adjust+1);             // Phase W PWM Duty Setting
  280.          // Phase Segment #4
  281.          set_power_pwm0_duty(adjust+29+speed/4);    // Phase U PWM Duty Setting
  282.          set_power_pwm2_duty(adjust+57+speed);      // Phase V PWM Duty Setting
  283.          set_power_pwm4_duty(adjust+14+speed/6);    // Phase W PWM Duty Setting
  284.          // Phase Segment #5
  285.          set_power_pwm0_duty(adjust+14+speed/6);    // Phase U PWM Duty Setting
  286.          set_power_pwm2_duty(adjust+57+speed);      // Phase V PWM Duty Setting
  287.          set_power_pwm4_duty(adjust+29+speed/4);    // Phase W PWM Duty Setting
  288.          // Phase Segment #6
  289.          set_power_pwm0_duty(adjust+1);             // Phase U PWM Duty Setting
  290.          set_power_pwm2_duty(adjust+57+speed);      // Phase V PWM Duty Setting
  291.          set_power_pwm4_duty(adjust+43+speed/2);    // Phase W PWM Duty Setting
  292.          // Phase Segment #7
  293.          set_power_pwm0_duty(adjust+1);             // Phase U PWM Duty Setting
  294.          set_power_pwm2_duty(adjust+43+speed/2);    // Phase V PWM Duty Setting
  295.          set_power_pwm4_duty(adjust+57+speed);      // Phase W PWM Duty Setting
  296.          // Phase Segment #8
  297.          set_power_pwm0_duty(adjust+1);             // Phase U PWM Duty Setting
  298.          set_power_pwm2_duty(adjust+29+speed/4);    // Phase V PWM Duty Setting
  299.          set_power_pwm4_duty(adjust+57+speed);      // Phase W PWM Duty Setting
  300.          // Phase Segment #9
  301.          set_power_pwm0_duty(adjust+14+speed/6);    // Phase U PWM Duty Setting
  302.          set_power_pwm2_duty(adjust+14+speed/6);    // Phase V PWM Duty Setting
  303.          set_power_pwm4_duty(adjust+57+speed);      // Phase W PWM Duty Setting
  304.          // Phase Segment #10
  305.          set_power_pwm0_duty(adjust+29+speed/4);    // Phase U PWM Duty Setting
  306.          set_power_pwm2_duty(adjust+1);             // Phase V PWM Duty Setting
  307.          set_power_pwm4_duty(adjust+57+speed);      // Phase W PWM Duty Setting
  308.          // Phase Segment #11
  309.          set_power_pwm0_duty(adjust+43+speed/2);    // Phase U PWM Duty Setting
  310.          set_power_pwm2_duty(adjust+1);             // Phase V PWM Duty Setting
  311.          set_power_pwm4_duty(adjust+43+speed/2);    // Phase W PWM Duty Setting
  312.          // Phase Segment #12
  313.          set_power_pwm0_duty(adjust+57+speed);      // Phase U PWM Duty Setting
  314.          set_power_pwm2_duty(adjust+1);             // Phase V PWM Duty Setting
  315.          set_power_pwm4_duty(adjust+29+speed/4);    // Phase W PWM Duty Setting
  316.          // Phase Segment #13
  317.          set_power_pwm0_duty(adjust+57+speed);      // Phase U PWM Duty Setting
  318.          set_power_pwm2_duty(adjust+14+speed/6);    // Phase V PWM Duty Setting
  319.          set_power_pwm4_duty(adjust+14+speed/6);    // Phase W PWM Duty Setting
  320.          adc_val=adc_val+3;                         // Increment ADC Value
  321.          x=-1;                                      // Ramp Up Cycle Complete
  322.          }
  323.       feedbackL=0;                                  // Clear Feedback Variable
  324.       // Rotate Motor in Reverse Direction
  325.       while(input(PIN_C3) && x<<0)
  326.          {
  327.          // Read Initial ADC Values
  328.          set_adc_channel(0);                        // Select ADC Channel 0
  329.          feedbackI=read_adc();                      // Read Initial Feedback
  330.          set_adc_channel(1);                        // Select ADC Channel 1
  331.          adc_val=read_adc();                        // Read Current ADC Value
  332.          period = ( adc_val / 20 ) + 9;             // Set PR2 for Frequency
  333.          speed = 568 - ( adc_val / 2 );             // Set User Specified Speed
  334.          //add dead time for reactive loads
  335.          setup_power_pwm(PWM_CLOCK_DIV_128 | PWM_FREE_RUN,1,0,period,0,1,0);
  336.          // Phase Segment #1
  337.          set_power_pwm0_duty(adjust+57+speed);      // Phase U PWM Duty Setting
  338.          set_power_pwm2_duty(adjust+1);             // Phase V PWM Duty Setting
  339.          set_power_pwm4_duty(adjust+29+speed/4);    // Phase W PWM Duty Setting
  340.          // Phase Segment #2
  341.          set_power_pwm0_duty(adjust+57+speed);      // Phase U PWM Duty Setting
  342.          set_power_pwm2_duty(adjust+1);             // Phase V PWM Duty Setting
  343.          set_power_pwm4_duty(adjust+29+speed/2);    // Phase W PWM Duty Setting
  344.          // Phase Segment #3
  345.          set_power_pwm0_duty(adjust+29+speed/2);    // Phase U PWM Duty Setting
  346.          set_power_pwm2_duty(adjust+1);             // Phase V PWM Duty Setting
  347.          set_power_pwm4_duty(adjust+57+speed);      // Phase W PWM Duty Setting
  348.          // Phase Segment #4
  349.          set_power_pwm0_duty(adjust+29+speed/4);    // Phase U PWM Duty Setting
  350.          set_power_pwm2_duty(adjust+14+speed/6);    // Phase V PWM Duty Setting
  351.          set_power_pwm4_duty(adjust+57+speed);      // Phase W PWM Duty Setting
  352.          // Phase Segment #5
  353.          set_power_pwm0_duty(adjust+14+speed/6);    // Phase U PWM Duty Setting
  354.          set_power_pwm2_duty(adjust+29+speed/4);    // Phase V PWM Duty Setting
  355.          set_power_pwm4_duty(adjust+57+speed);      // Phase W PWM Duty Setting
  356.          // Phase Segment #6
  357.          set_power_pwm0_duty(adjust+1);             // Phase U PWM Duty Setting
  358.          set_power_pwm2_duty(adjust+43+speed/2);    // Phase V PWM Duty Setting
  359.          set_power_pwm4_duty(adjust+57+speed);      // Phase W PWM Duty Setting
  360.          // Phase Segment #7
  361.          set_power_pwm0_duty(adjust+1);             // Phase U PWM Duty Setting
  362.          set_power_pwm2_duty(adjust+57+speed);      // Phase V PWM Duty Setting
  363.          set_power_pwm4_duty(adjust+43+speed/2);    // Phase W PWM Duty Setting
  364.          // Phase Segment #8
  365.          set_power_pwm0_duty(adjust+1);             // Phase U PWM Duty Setting
  366.          set_power_pwm2_duty(adjust+57+speed);      // Phase V PWM Duty Setting
  367.          set_power_pwm4_duty(adjust+29+speed/4);    // Phase W PWM Duty Setting
  368.          // Phase Segment #9
  369.          set_power_pwm0_duty(adjust+14+speed/6);    // Phase U PWM Duty Setting
  370.          set_power_pwm2_duty(adjust+57+speed);      // Phase V PWM Duty Setting
  371.          set_power_pwm4_duty(adjust+14+speed/6);    // Phase W PWM Duty Setting
  372.          // Phase Segment #10
  373.          set_power_pwm0_duty(adjust+29+speed/4);    // Phase U PWM Duty Setting
  374.          set_power_pwm2_duty(adjust+57+speed);      // Phase V PWM Duty Setting
  375.          set_power_pwm4_duty(adjust+1);             // Phase W PWM Duty Setting
  376.          // Phase Segment #11
  377.          set_power_pwm0_duty(adjust+43+speed/2);    // Phase U PWM Duty Setting
  378.          set_power_pwm2_duty(adjust+43+speed/2);    // Phase V PWM Duty Setting
  379.          set_power_pwm4_duty(adjust+1);             // Phase W PWM Duty Setting
  380.          // Phase Segment #12
  381.          set_power_pwm0_duty(adjust+57+speed);      // Phase U PWM Duty Setting
  382.          set_power_pwm2_duty(adjust+29+speed/4);    // Phase V PWM Duty Setting
  383.          set_power_pwm4_duty(adjust+1);             // Phase W PWM Duty Setting
  384.          // Phase Segment #13
  385.          set_power_pwm0_duty(adjust+57+speed);      // Phase U PWM Duty Setting
  386.          set_power_pwm2_duty(adjust+14+speed/6);    // Phase V PWM Duty Setting
  387.          set_power_pwm4_duty(adjust+14+speed/6);    // Phase W PWM Duty Setting
  388.          if (i>>1799)                               // Check Counter
  389.             {
  390.             set_adc_channel(0);                     // Select ADC Channel 0
  391.             feedbackL = read_adc();                 // Read Feedback from ADC
  392.             adjust = feedbackI - feedbackL;         // Calculate Speed Adjust
  393.             i=0;                                    // Clear Counter Variable
  394.             }      
  395.          }
  396.          i=0;                                       // Clear Counter Variable
  397.       // Ramp Down Motor Speed for Direction Change
  398.       while(adc_val>>0 && input(PIN_C3))
  399.          {
  400.          period = ( adc_val / 20 ) + 9;             // Set PR2 for Frequency
  401.          speed = 511 - ( ( 1023 - adc_val ) / 2 );  // Set User Specified Speed
  402.          adjust=0;                                  // Clear Adjust Variable
  403.          //add dead time for reactive loads
  404.          setup_power_pwm(PWM_CLOCK_DIV_128 | PWM_FREE_RUN,1,0,period,0,1,0);
  405.          // Phase Segment #1
  406.          set_power_pwm0_duty(adjust+57+speed);      // Phase U PWM Duty Setting
  407.          set_power_pwm2_duty(adjust+29+speed/4);    // Phase V PWM Duty Setting
  408.          set_power_pwm4_duty(adjust+1);             // Phase W PWM Duty Setting
  409.          // Phase Segment #2
  410.          set_power_pwm0_duty(adjust+57+speed);      // Phase U PWM Duty Setting
  411.          set_power_pwm2_duty(adjust+43+speed/2);    // Phase V PWM Duty Setting
  412.          set_power_pwm4_duty(adjust+1);             // Phase W PWM Duty Setting
  413.          // Phase Segment #3
  414.          set_power_pwm0_duty(adjust+43+speed/2);    // Phase U PWM Duty Setting
  415.          set_power_pwm2_duty(adjust+57+speed);      // Phase V PWM Duty Setting
  416.          set_power_pwm4_duty(adjust+1);             // Phase W PWM Duty Setting
  417.          // Phase Segment #4
  418.          set_power_pwm0_duty(adjust+29+speed/4);    // Phase U PWM Duty Setting
  419.          set_power_pwm2_duty(adjust+57+speed);      // Phase V PWM Duty Setting
  420.          set_power_pwm4_duty(adjust+14+speed/6);    // Phase W PWM Duty Setting
  421.          // Phase Segment #5
  422.          set_power_pwm0_duty(adjust+14+speed/6);    // Phase U PWM Duty Setting
  423.          set_power_pwm2_duty(adjust+57+speed);      // Phase V PWM Duty Setting
  424.          set_power_pwm4_duty(adjust+29+speed/4);    // Phase W PWM Duty Setting
  425.          // Phase Segment #6
  426.          set_power_pwm0_duty(adjust+1);             // Phase U PWM Duty Setting
  427.          set_power_pwm2_duty(adjust+57+speed);      // Phase V PWM Duty Setting
  428.          set_power_pwm4_duty(adjust+43+speed/2);    // Phase W PWM Duty Setting
  429.          // Phase Segment #7
  430.          set_power_pwm0_duty(adjust+1);             // Phase U PWM Duty Setting
  431.          set_power_pwm2_duty(adjust+43+speed/2);    // Phase V PWM Duty Setting
  432.          set_power_pwm4_duty(adjust+57+speed);      // Phase W PWM Duty Setting
  433.          // Phase Segment #8
  434.          set_power_pwm0_duty(adjust+1);             // Phase U PWM Duty Setting
  435.          set_power_pwm2_duty(adjust+29+speed/4);    // Phase V PWM Duty Setting
  436.          set_power_pwm4_duty(adjust+57+speed);      // Phase W PWM Duty Setting
  437.          // Phase Segment #9
  438.          set_power_pwm0_duty(adjust+14+speed/6);    // Phase U PWM Duty Setting
  439.          set_power_pwm2_duty(adjust+14+speed/6);    // Phase V PWM Duty Setting
  440.          set_power_pwm4_duty(adjust+57+speed);      // Phase W PWM Duty Setting
  441.          // Phase Segment #10
  442.          set_power_pwm0_duty(adjust+29+speed/4);    // Phase U PWM Duty Setting
  443.          set_power_pwm2_duty(adjust+1);             // Phase V PWM Duty Setting
  444.          set_power_pwm4_duty(adjust+57+speed);      // Phase W PWM Duty Setting
  445.          // Phase Segment #11
  446.          set_power_pwm0_duty(adjust+43+speed/2);    // Phase U PWM Duty Setting
  447.          set_power_pwm2_duty(adjust+1);             // Phase V PWM Duty Setting
  448.          set_power_pwm4_duty(adjust+43+speed/2);    // Phase W PWM Duty Setting
  449.          // Phase Segment #12
  450.          set_power_pwm0_duty(adjust+57+speed);      // Phase U PWM Duty Setting
  451.          set_power_pwm2_duty(adjust+1);             // Phase V PWM Duty Setting
  452.          set_power_pwm4_duty(adjust+29+speed/4);    // Phase W PWM Duty Setting
  453.          // Phase Segment #13
  454.          set_power_pwm0_duty(adjust+57+speed);      // Phase U PWM Duty Setting
  455.          set_power_pwm2_duty(adjust+14+speed/6);    // Phase V PWM Duty Setting
  456.          set_power_pwm4_duty(adjust+14+speed/6);    // Phase W PWM Duty Setting
  457.          adc_val=adc_val-3;                         // Decrement ADC Value
  458.          x=0;                                       // Direction Change Complete
  459.          }
  460.          i=0;                                       // Clear Counter Variable
  461.       }
  462.    }

El señor es mi pastor,  nada me faltará.


 

anything