Testowanie driverów PWM

Na rynku dostępnych jest kilku producentów driverów ze złączami PWM. Zanim przystąpimy więc do pisania programu warto sprawdzić jak zachowuje się nasz driver w przypadku testowego programu napisanego specjalnie do tego celu.

Aby podłączyć drivery do arduino można to zrobić za pomocą kilku kabli lub też użyć płytki na której przygotowane są odpowiednie 4 wyjścia. Można podłączyć drivery PWM metodą „na pajączka” ale trzeba pamiętać, żeby dokładnie wszystko sprawdzić.

Program oraz biblioteki dostępne są tutaj. Warto też (oczywiście jeśli chcemy używać wyświetlacza) upewnić się jaki ma adres. Do tego służy skrypt odczytujący adres urządzeń podłączonych na magistrali I2C.

Poniższy program pozwala na przetestowanie za pomocą klawiatury do 4 kanałów:

#include <Wire.h>
#include <LiquidCrystal_I2C.h> 
#define BACKLIGHT_PIN 3 
LiquidCrystal_I2C lcd(0x3F, 2,1,0,4,5,6,7); //(3F 38 27 20 50 68)

int Led1 = 5; 
int Led2 = 6; 
int Led3 = 10; 
int Led4 = 11;

int Moc1;
int Moc2;
int Moc3;
int Moc4;

void setup() 
   {
      pinMode(Led1, OUTPUT);
      pinMode(Led2, OUTPUT); 
      pinMode(Led3, OUTPUT); 
      pinMode(Led4, OUTPUT); 
 
      lcd.begin(16,2); 
      lcd.setBacklightPin(BACKLIGHT_PIN, NEGATIVE); 
      lcd.setCursor(0,0);
      lcd.print(" MN-Tech.pl ");
      lcd.setCursor(0,1); 
      lcd.print(" Tester PWM "); 
      delay(6000); 
      lcd.setCursor(0,0);
      lcd.print(" ");
      lcd.setCursor(0,1); 
      lcd.print(" "); 
   }

void loop() 
   {
      int analog0 = analogRead(A0); //led 1 + 
      int analog1 = analogRead(A1); //led 1 - 
      int analog2 = analogRead(A2); //led 2 +
      int analog3 = analogRead(A3); //led 2 -

      static int D1; 
      static int D2; 
      static int D3; 
      static int D4;
 
      D1=Moc1;
      D2=Moc2; 
      D3=Moc3;
      D4=Moc4; 
 
      if (analog0 >500)
         {
            if((0 <= Moc1)&&(Moc1 <= 254)) 
               {
                  Moc1++;
               }
            else
               {
                  Moc1 = 0;
               } 
         }
      if (analog1 >500)
         {
            if((1 <= Moc1)&&(Moc1 <= 255)) 
               {
                  Moc1--;
               }
            else
               {
                  Moc1 = 255;
               } 
         }
      if (analog2 >500)
         {
            if((0 <= Moc2)&&(Moc2 <= 254)) 
               {
                  Moc2++;
               }
            else
               {
                  Moc2 = 0;
               } 
         } 
      if (analog3 >500)
         { 
            if((1 <= Moc2)&&(Moc2 <= 255)) 
               {
                  Moc2--;
               }
            else
               {
                  Moc2 = 255;
               } 
         }
      if((0 <= Moc3)&&(Moc3 <= 254)) 
         {
            Moc3++;
         }
      else
         {
            Moc3 = 0;
         } 
      if((1 <= Moc4)&&(Moc4 <= 255)) 
         {
            Moc4--;
         }
      else
         {
            Moc4 = 255;
         } 
      analogWrite(Led1, D1); 
      analogWrite(Led2, D2); 
      analogWrite(Led3, D3); 
      analogWrite(Led4, D4);

      lcd.setCursor(0,0);
      lcd.print("L1:"); 
      if((10<=D1)&&(D1<100)) 
         {
            lcd.print(" ");
         }
      else if(D1<10) 
         {
            lcd.print(" ");
         }
      else
         {
         } 
      lcd.print(D1);

      lcd.print(" L2:"); 
      if((10<=D2)&&(D2<100)) 
         {
            lcd.print(" ");
         }
      else if(D2<10) 
         {
            lcd.print(" ");
         }
      else
         {
         } 
      lcd.print(D2);

      lcd.setCursor(0,1); 
      lcd.print("L3:"); 
      if((10<=D3)&&(D3<100)) 
         {
            lcd.print(" ");
         }
      else if(D3<10) 
         {
            lcd.print(" ");
         }
      else
         {
         }
      lcd.print(D3);

      lcd.print(" L4:"); 
      if((10<=D4)&&(D4<100)) 
         {
            lcd.print(" ");
         }
      else if(D4<10) 
         {
            lcd.print(" ");
         }
      else
         {
         } 
      lcd.print(D4); 
      delay(100); 
      //site        http://www.mn-tech.pl 
     //youtube      https://www.youtube.com/user/mntechpl 
     //facebook     https://www.facebook.com/mntechpl
   }

Zasadza działania programu jest następująca:

Za pomocą 4 przyciskowej klawiatury zamontowanej jak na schemacie mamy możliwość sterowania pinami D5 oraz D6 (w zakresie 0d 0 do 255).