Dvojitý PWM generátor je samostatný modul pro generování signálů. Tento modul dokáže generovat na svých výstupech obdélníkový signál, přičemž můžeme oba výstupy nastavit individuálně. Pro ovládání generátoru můžeme použít ovládání pomocí tří 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 buď připojit napětí 5V skrze microUSB konektor nebo využít piny VIN, na které lze připojit napětí v rozsahu 5-30 Voltů.

Dvojitý PWM generátor obdélníkového signálu

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í tlačítko označené jako SET slouží pro změnu čtyř různých parametrů. Těmi jsou FA1 (frekvence výstupu PWM1), dU1 (střída výstupu PWM1), FA2 (frekvence výstupu PWM2) a dU2 (střída výstupu PWM2). A pokud chcete nastavovat frekvenci, tato volba je ještě rozdělena do tří rozsahů, mezi kterými se lze přepnout delším podržením tlačítka SET. Rozsahy jsou:
1. XXX (žádná desetinná tečka): nejmenší jednotka je 1 Hz, rozsah 1 Hz – 999 Hz
2. XX.X (desetinná tečka v desítkách): nejmenší jednotka je 0,1 kHz, rozsah 0,1 kHz - 99,9kHz
3. X.X.X. (tři desetinné tečky): nejmenší jednotka je 1 kHz, rozsah 1 kHz - 150 kHz

Další dvě tlačítka UP(ADD) and DOWN(DEC) pak slouží pro nastavení hodnoty daného nastavení, tedy UP pro inkrementaci a DOWN pro dekrementaci.

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 GND Arduina, RXD na pin D11 a TXD na pin D10.

Dvojitý PWM generátor obdélníkového signálu schéma

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.

// 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:
Výběr výstupu záleží na číslovce za písmenem S:
  S1 = výstup PWM1, S2 = výstup PWM2
Každá zpráva je vždy zakončena znakem T.

Nastavení frekvence:
Pro nastavení frekvence v rozsahu 001-999 Hz:
  S1F500T nastaví 500 Hz na výstup PWM1
Pro nastavení frekvence v rozsahu 00.1-99.9 kHz:
  S1F01.5T nastaví 1.5 kHz na výstup PWM1
Pro nastavení frekvence v rozsahu 001-150 kHz:
  S2F0.2.0.T nastaví 20 kHz na výstup PWM2

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

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

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 stejného parametru je nutné udělat pauzu minimálně 200 milisekund. A mezi dvěma různými parametry je to pak minimálně 5 sekund.

// Ří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 PWM1
  swSerial.println("S1F01.0T");
  delay(5000);
  // nastavení počáteční střídy 0% na výstup PWM1
  swSerial.println("S1D000T");
  delay(5000);
}

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, "S1D%03dT", 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.println(zprava);
    // krátká pauza mezi kroky, 200ms je nejkratší možná pauza
    // při kratších časech se zasekne generátor
    delay(200);
  }
  // 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, "S1D%03dT", i);
    Serial.println(zprava);
    swSerial.println(zprava);
    delay(200);
  }
}

Dvojitý PWM generátor 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éž přítomnost dvou nezávislých výstupů a vestavěná paměť generátoru. Pokud odpojíme napájení od generátoru, pomatuje si vždy poslední nastavení.

 

Seznam použitých komponent:
https://dratek.cz/arduino/1915-dvojity-pwm-generator-impulzni-frekvencni-modul-2ch.html
https://dratek.cz/arduino/1258-klon-arduino-uno-r3-atmega328p-ch340g-usb-typ-b-kabel-1459967190.html

FB tw

Další podobné články