TI-S2

logo

DAC: digitaal naar analoog

Inhoud


v0.1.0 Start document voor digitaal naar analoog door HU IICT.


Een introductie

Digital-to-Analog Converters (DAC) hebben net als ADC’s een beperking met betrekking tot de resolutie van het signaal. Afhankelijk van hoeveel bits ze als input hebben kunnen ze een hoeveelheid verschillende analoge signalen maken.

Er zijn verschillende types van Digital-to-Analog Converters (DAC). We gaan hier in op Pulse Width Modulation (PWM), omdat dit een techniek is die je als Technische Informaticus nog wel eens zal implementeren. Naast PWM zijn er ook andere type DAC’s.

PWM

Bij PWM is de output niet direct een analoog signaal. (Sommige andere DACs kunnen dit direct produceren.) In plaats daarvan stuurt PWM pulsen van digitale signalen. Door deze in lengte te variëren staat er “gemiddeld” een bepaalde analoge waarde op een draad.

Kenmerken van een Puls-Width-Modulation (PWM) signaal generator

Als je PWM wil gebruiken en een microcontroller een PWM unit ingebouwd heeft is het belangrijk op te letten op deze eigenschappen:

Voorbeelden van PWM-gebruik

Titan Silent Fan TFD-8015HH12ZP/W1

Om voor koeling te zorgen maken we gebruik van de Titan Fan. Deze werkt op 12V maar dat kan een Arduino niet leveren. Een externe voeding is daarom nodig.

De schakeling

Four-pin connector

De Titan Silent Fan heeft een 4-pin Molex aansluiting met de volgende aansluitingen:

1) Blauw voor PWM signaal 5V, 25kHz 2) Geel voor Sense (het meten van het aantal RPM) 3) Rood voor 12V 4) Zwart voor GND

Draden kunnen van kleur verschillen!

Zo zijn er ook 4-pin aansluitingen met de kleuren

Titan Fan

Let op dat je alleen de GND van de Arduino met GND van de voeding en de Titan Silent Fan verbindt.
Anders kan je de Arduino beschadigen.

Arduino voorbeeld code

Een “4-pin PWM Fan” gebruikt vaak een PWM frequency van 25kHz.
Maar de Arduino kan geen zo snelle PWM-pulses leveren (zie analogWrite()).
De Titan PWM-Fan die we gebruiken werkt ook met deze (veel lagere) frequentie.

// PWM.ino - Pulse Width Modulation example (fan control)
// "Fading in and out" of maximum fan speed.
int delay_ms = 300;  // delay for the main loop
int fan_pin = 6;     // the PWM pin we use (make sure the pin supports PWM if you change this!)
int fan_speed = 0;   // current speed of the fan
int fan_delta = 5;   // amount to change the speed (pos/neg)

void built_in_self_test() {
  // flash built-in LED three times
  pinMode(LED_BUILTIN, OUTPUT);
  for (int i = 0; i < 3; i++) {
    digitalWrite(LED_BUILTIN, HIGH);
    delay(500);
    digitalWrite(LED_BUILTIN, LOW);
    delay(500);
  }
}

void setup() {
  built_in_self_test();
  pinMode(fan_pin, OUTPUT);  // declare PWM pin to be an output
}

void loop() {
  // set the speed of fan by generating a PWM signal
  analogWrite(fan_pin, fan_speed);
  // change the speed for next iteration
  fan_speed = fan_speed + fan_delta;
  // make sure fan_speed does not get lower than 0 or higher than 255
  if (fan_speed < 0) {
    fan_speed = 0;
  } else if (fan_speed > 255) {
    fan_speed = 255;
  }
  // reverse the direction of the fan_delta at the ends of the 'fade'
  if (fan_speed <= 0 || fan_speed >= 255) {
    fan_delta = -fan_delta;
  }
  // wait for 300 milliseconds to see the fade effect
  delay(300);
}

Arduino bestand

Referenties