www.mikrocontroller.net

Forum: Projekte & Code hardware-pwm mit variabler auflösung in xilinx cpld


Autor: G. O. (aminox86)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Anbei der VHDL-Code für einen PWM-Generator, den ich in einem XC9572 
untergebracht habe. Der Code beruht zum größten Teil auf der Atmel 
AppNote 2324.pdf 
http://www.atmel.com/dyn/resources/prod_documents/...
Hintergrund:
Als hartgesottener 8051-Fan will ich eine PWM_Motoransteuerung mit einem 
8051-Derivat aufbauen. Da der einfache 8051 bekanntermaßen über keine 
PWM-Eiheit verfügt und auch sonst nicht gerade der schnellste ist, habe 
ich mich nach einer Hardwarelösung sowohl im Netz als auch hier im Forum 
umgeschaut und bin auf besagtes Papier von Atmel gestossen. Dort ist der 
VHDL-Code für einen PWM-Generator beschrieben, dessen Auflösung durch 
einige marginale Änderungen am Quelltext offensichtlich beliebig 
angepasst werden kann.
Folgendes ist am originalen Quelltext geändert( das zugehörige 
User-Package bleibt !!unverändert!! und muß für die Entwicklungsumgebung 
erreichbar sein):
- Erweiterung der Auflösung auf 16 Bit, wovon zZt 11 Bit genutzt werden
- PWM-Daten werden seriell statt parallel eingelesen
- Chip-Select zur Bausteinauswahl eingeführt
- einige Konstanten wegen besserer Übersicht eingeführt
Den Code habe ich mit der ISE, Version 8 Servicepack 3, compiliert. Das 
JED-File passt geradeso in einen XC9536, in einem XC9572 könnte man 
vermutlich 2 PWM-Module unterbringen.
Wie bereits erwähnt wird der CPLD von einem 8051, in diesem speziellen 
Fall von einem DS89C450, angesteuert. Der Baustein ist mit der zweiten 
seriellen Schnittstelle des Prozessors verbunden, die im Modus 
0(=sysnchrone 8 Bit Datenübertragung, Standartkonfiguration nach Reset), 
arbeitet.
Um die Arbeit mit dem PWM-Generator zu verdeutlichen, hier noch ein 
Code-Schipsel(Flag- und Registerbezeichnungen aus Prozessordatenblatt):
#define LSB             0
#define MSB             1
#define AKTIV           0
#define NICHT_AKTIV     1
#define PWM_SELECT(x)   P.n=x

union u{ unsigned      pwm;        
         unsigned char p[2];}pwm; /*wg 8 bit senderegisterbreite*/

void pwm_out(void);

void main(void)
{ .
  .
 pwm.pwm=2048;                    /*maximalwert bei bei 11 bit auflösung*/
 pwm_out();
 while(1);
}

void pwm_out(void)
{ PWM_SELECT(AKTIV);              
  TI_1=0;                          /*tx-flag immer löschen*/
  SBUF1=pwm.p[LSB];                /*lsb senden*/
  while(!TI_1);                    /*auf tx warten*/
  TI_1=0;
  SBUF1=pwm.p[MSB];                /*msb senden*/
  while(!TI_1);                    /*wieder auf tx warten*/
  PWM_SELECT(NICHT_AKTIV);         /*16 bit gesendet-> fertig*/
}

mfg

Autor: Chris B. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Und damit kann man jetzt genau was machen?

Du hast nur den Code modifiziert, ist das richtig?

Autor: G. O. (aminox86)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Chris B. schrieb:
> Und damit kann man jetzt genau was machen?
Erstaunliche Frage. Wenn ich 'PWM' lese, dann fällt mir sofort H-Brücke, 
Schaltnetzteil, Led dimmen usw. ein. In meinem speziellen Fall ist das 
CPLD mit zwei Halbbrückentreibern verbunden, die eine H-Brücke 
ansteuern.
> Du hast nur den Code modifiziert, ist das richtig?
Ja, das ist richtig. Danach habe ich den Code compiliert, in das CPLD 
übertragen und in die Schaltung eingesetzt. Dort verhält sich das CPLD 
wie erwartet.
mfg

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.