PWM generátor signálu je samostatný modul pro generování signálů. Tento modul dokáže generovat na svém výstupu obdélníkový signál. Pro ovládání generátoru můžeme použít ovládání pomocí čtyř tlačítek na modulu, ale také sériovou linku pro nastavení údajů z počítače či Arduina.
Co se týká parametrů, tak výstupní signál lze nastavit ve frekvenčním rozsahu 1 Hz až 150 kHz společně se střídou signálu od 0 do 100 %. Pro napájení generátoru můžeme připojit napětí v rozsahu 3,3-30 Voltů na piny označené jako VIN.

PWM generátor s LCD displejem

Pokud se rozhodnete pro ovládání generátoru pomocí vestavěných tlačítek a displeje, ovládání je následující. První pár tlačítek označený jako FREQ nám umožňuje měnit frekvenci a druhý pár tlačítek DUTY mění střídu výstupního signálu. Rozsahy frekvencí jsou rozděleny na čtyři rozsahy, přičemž přechod mezi nimi je automatický:
1) XXX (bez desetinné tečky): nejmenší jednotka je 1 Hz, rozsah hodnot 1 Hz – 999 Hz;
2) X.XX (desetinná čárka za stovkou) nejmenší jednotka je 0,01 kHz, rozsah 1,00 kHz - 9,99 kHz;
3) XX.X (desetinná čárka za desítkou): nejmenší jednotka je 0,1 kHz; rozsah hodnot 10,0 kHz – 99,9 kHz
4) X.X.X (desetinná čárka za desítkou a stovkou): nejmenší jednotka je 1Khz; rozsah hodnot 100 kHz – 150 kHz

Druhou zajímavou možností řízení je již zmíněné ovládání skrze sériovou linku. Pro toto řízení stačí připojit počítač či Arduino skrze tři piny RX, TX a GND. Já jsem pro tento návod připojil Arduino UNO, přičemž pro komunikaci používám Softwarovou sériovou linku. Pro propojení tedy připojte pin GND na zem Arduina, RXD na pin D11 a TXD na pin D10.

PWM generátor s LCD displejem

První ukázkový program slouží pouze jako opakovač komunikace. Pokud tedy cokoliv napíšeme do Sériového monitoru, Arduino tuto zprávu přepošle do PWM generátoru. A obdobně nám přepošle do počítače zprávy od PWM generátoru. Jen je nutné si dát pozor, abyste měli v Sériovém monitoru nastavený prázdný ukončovací znak (v českém IDE „Chybný konec řádky“).

// Testování komunikace s PWM generátorem
// pomocí softwarové sériové linky
// navody.dratek.cz

// připojení potřebné knihovny
#include <SoftwareSerial.h>

// nastavení projojovacích pinů
#define TX 11
#define RX 10

// inicializace softwarové sériové linky z knihovny
SoftwareSerial swSerial(RX, TX);

void setup() {
  // zahájení komunikace po sériové lince rychlostí 9600 baud
  Serial.begin(9600);
  // zahájení komunikace po softwarové sériové lince rychlostí 9600 baud
  swSerial.begin(9600);
}

void loop() {
  // když dostaneme nějaké znaky na softwarové sériové lince,
  // odešleme je do počítače
  if (swSerial.available()) {
    Serial.write(swSerial.read());
  }
  // když dostaneme nějaké znaky na počítačové sériové lince,
  // odešleme je do swSerial
  if (Serial.available()) {
    swSerial.write(Serial.read());
  }
}

Po nahrání uvedeného programu si můžeme vyzkoušet funkčnost. Ovládání skrze sériovou linku má následující syntaxi:

Nastavení frekvence:
Pro nastavení frekvence v rozsahu 001-999 Hz:
  F500 nastaví 500 Hz na výstup
Pro nastavení frekvence v rozsahu 1.00-9.99 kHz:
  F1.50 nastaví 1.5 kHz na výstup
Pro nastavení frekvence v rozsahu 10.0-99.9 kHz:
  F15.0 nastaví 15 kHz na výstup
Pro nastavení frekvence v rozsahu 100-150 kHz:
  F1.0.1 nastaví 101 kHz na výstup

Nastavení střídy v rozsahu 001-100 %:
  D050 nastaví 50% střídu na výstup

Při správném nastavení dostaneme odpověď DOWN, při špatném zadání dostaneme odpověď FAIL.

A na základě prvního programu jsem připravil také ukázku ovládání střídy ve for smyčkách, kdy program projde vždy generování z 0 na 100 % a zpět na 0 %. Na připojeném osciloskopu tedy pak můžete pozorovat postupné zvětšování a zmenšování střídy signálu stále dokola.
Při testování jsem narazil na to, že mezi dvěma nastaveními frekvence či střídy je nutné udělat pauzu minimálně 100 milisekund.

// Řízení střídy PWM generátoru
// pomocí softwarové sériové linky
// navody.dratek.cz

// připojení potřebné knihovny
#include <SoftwareSerial.h>

// nastavení projojovacích pinů
#define TX 11
#define RX 10

// inicializace softwarové sériové linky z knihovny
SoftwareSerial swSerial(RX, TX);

void setup() {
  // zahájení komunikace po sériové lince rychlostí 9600 baud
  Serial.begin(9600);
  // zahájení komunikace po softwarové sériové lince rychlostí 9600 baud
  swSerial.begin(9600);
  // nastavení frekvence 1kHz na výstup
  swSerial.print("F1.00");
  delay(500);
  // nastavení počáteční střídy 0% na výstup
  swSerial.print("D000");
  delay(500);
}

void loop() {
  // for cyklus, který postupně nastaví střídu 0 až 100,
  // při každém průběhu přičte hodnotu 5
  for (int i = 0; i <= 100; i += 5) {
    // lokální proměnná pro uložení zprávy
    char zprava[7];
    // do proměnné zprava se uloží řetězec, v kterém se objeví
    // hodnota proměnné i vypsaná na 3 číslice (%03d)
    sprintf(zprava, "D%03d", i);
    // vytištění zprávy po sériové lince do počítače
    Serial.println(zprava);
    // vytištění zprávy po sériové lince do PWM generátoru
    swSerial.print(zprava);
    // krátká pauza mezi kroky, 100ms je nejkratší možná pauza
    delay(100);
  }
  // podobný for cyklus, jen s rozdílem, že začneme na střídě 100
  // a budeme odečítat číslo 5 až do dosažení hodnoty 0
  for (int i = 100; i != 0; i -= 5) {
    char zprava[7];
    sprintf(zprava, "D%03d", i);
    Serial.println(zprava);
    swSerial.print(zprava);
    delay(100);
  }
}

PWM generátor s LCD displejem je zajímavým doplňkem pro každého vývojáře. Může se hodit ať už pro generování signálu při testování různých zařízení či ho můžeme využít například pro řízení svitu LED diod, řízení motorů, ventilátorů a podobně. Výhodou tohoto modulu je taktéž vestavěná paměť generátoru. Pokud totiž odpojíme napájení od generátoru, pomatuje si vždy poslední nastavení.

Seznam použitých komponent:
https://dratek.cz/arduino/3169-pwm-generator-signalu-s-lcd-displejem-nastavitelny.html
https://dratek.cz/arduino/1258-klon-arduino-uno-r3-atmega328p-ch340g-usb-typ-b-kabel-1459967190.html

FB tw

Další podobné články