Libs for using Nucleo STM32F411 periphery
Introduction
Descruption: This lib uses the hardware peripherie from STM32F411 under serveral conditions. So you can use an quadraturencoder with different timers.
Requirement: Only tested with the nucleo F411. Include the mbed lib! Interfacing details are explained in the documentary of each class.
Overview
- timer modules
- Quadratur Encoder (Version 1.2 - C. Hoyer 12.8.2015)
- SPI modules
- AD5664 (Version 1.1 - C. Hoyer 23.7.2015)
- software modules
- Ringbuffer (Version 0.9 - C. Hoyer 18.8.2015)
- PID-Regler (Version 1.0 - C. Hoyer 17.9.2015)
SPI/AD5664.h@0:1acdcc576936, 2016-11-28 (annotated)
- Committer:
- ChrisselH
- Date:
- Mon Nov 28 17:27:43 2016 +0000
- Revision:
- 0:1acdcc576936
port from priv lib
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
ChrisselH | 0:1acdcc576936 | 1 | #include "mbed.h" |
ChrisselH | 0:1acdcc576936 | 2 | |
ChrisselH | 0:1acdcc576936 | 3 | #ifndef AD5664_h |
ChrisselH | 0:1acdcc576936 | 4 | #define AD5664_h |
ChrisselH | 0:1acdcc576936 | 5 | |
ChrisselH | 0:1acdcc576936 | 6 | /*! Diese Klasse dient zur Ansteuerung des Digital-Analog-Wandlers AD5664 der Firma Analog Devices. Der DAC ist ein 16-Bit Wandler mit 4 Kanälen, Versorgungsspannung von 2,7V bis 5,5V. |
ChrisselH | 0:1acdcc576936 | 7 | Die Maximale Settling Time beträgt 7µs (AD5664), und die Genauigkeit liegt bei +-12 LSBs maximum. Angesteuert wird er mittels SCLK, CS und MOSI mit maximal 50 MHz. Zuvor muss die SPI-Schnittstelle definiert werden. Die |
ChrisselH | 0:1acdcc576936 | 8 | Chip Select Schnittstelle kann durch die Initialisierung mit Übergeben werden. Es ist darauf zu achten das der Chip bzw die Library nur den SPI-Modus "1" (CLK Standart auf 0 und übernahme mit fallender Flanke) mit einer Datenbreite von 8-Bit unterstützt. |
ChrisselH | 0:1acdcc576936 | 9 | |
ChrisselH | 0:1acdcc576936 | 10 | * @code |
ChrisselH | 0:1acdcc576936 | 11 | * #include "mbed.h" |
ChrisselH | 0:1acdcc576936 | 12 | * #include "AD5664.h" |
ChrisselH | 0:1acdcc576936 | 13 | * |
ChrisselH | 0:1acdcc576936 | 14 | * SPI interface(PB_5, PB_4, PB_3); // SPI Interface und Pins (MISO PB.5 , MOSI PB.4, SCLK PB.3) festlegen |
ChrisselH | 0:1acdcc576936 | 15 | * |
ChrisselH | 0:1acdcc576936 | 16 | * int main() { |
ChrisselH | 0:1acdcc576936 | 17 | * |
ChrisselH | 0:1acdcc576936 | 18 | * interface.format(8,1); // Interface Format festlegen: 8-Bit, SPI-Modus 1 |
ChrisselH | 0:1acdcc576936 | 19 | * interface.frequency(1000000); // Übertragungsgeschwindigkeit 1MHz |
ChrisselH | 0:1acdcc576936 | 20 | * |
ChrisselH | 0:1acdcc576936 | 21 | * AD5664 device(interface, PB_2); // Eine Instanz des DACs erzeugen, Chipselect ist PB.2 |
ChrisselH | 0:1acdcc576936 | 22 | * |
ChrisselH | 0:1acdcc576936 | 23 | * device.loadDAC('D', 0x11FF); // Den Wert 0x11FF in den Kanal D laden |
ChrisselH | 0:1acdcc576936 | 24 | * |
ChrisselH | 0:1acdcc576936 | 25 | * device.updateDAC('D'); // Den geladenen Wert am Kanal D ausgeben |
ChrisselH | 0:1acdcc576936 | 26 | * |
ChrisselH | 0:1acdcc576936 | 27 | * device.writeDAC('A', 0x89BD); // Den Wert 0x89BD an dem Kanal A direkt ausgeben |
ChrisselH | 0:1acdcc576936 | 28 | * |
ChrisselH | 0:1acdcc576936 | 29 | * } |
ChrisselH | 0:1acdcc576936 | 30 | * |
ChrisselH | 0:1acdcc576936 | 31 | * @endcode |
ChrisselH | 0:1acdcc576936 | 32 | */ |
ChrisselH | 0:1acdcc576936 | 33 | |
ChrisselH | 0:1acdcc576936 | 34 | class AD5664 |
ChrisselH | 0:1acdcc576936 | 35 | { |
ChrisselH | 0:1acdcc576936 | 36 | public: |
ChrisselH | 0:1acdcc576936 | 37 | |
ChrisselH | 0:1acdcc576936 | 38 | /*! Konstruktor zum Erstellen einer Instanz für einen vorher spezifizierten SPI-Port und Chip Select-Pin. Nach dem Erstellen dieser Instanz werden alle Ausgänge des DACs auf 0 gesetzt. */ |
ChrisselH | 0:1acdcc576936 | 39 | /*! |
ChrisselH | 0:1acdcc576936 | 40 | \param spi Entsprechner SPI-Port (Datenbreite 8 Bit, SPI Modus 1) |
ChrisselH | 0:1acdcc576936 | 41 | \param daccs Pin für Chipselect |
ChrisselH | 0:1acdcc576936 | 42 | */ |
ChrisselH | 0:1acdcc576936 | 43 | AD5664(SPI _spi, PinName _daccs); |
ChrisselH | 0:1acdcc576936 | 44 | |
ChrisselH | 0:1acdcc576936 | 45 | |
ChrisselH | 0:1acdcc576936 | 46 | |
ChrisselH | 0:1acdcc576936 | 47 | /*! Funktion zum Beschreiben des Chips mit je 8-Bit. Für genauere Details bitte das Datenblatt lesen*/ |
ChrisselH | 0:1acdcc576936 | 48 | /*! |
ChrisselH | 0:1acdcc576936 | 49 | \param instruction <b>Direkte Anweisungen für den AD5664</b><br> |
ChrisselH | 0:1acdcc576936 | 50 | Die 8 Instruction-Bits sind wie folgt aufgebaut:<br> <br> |
ChrisselH | 0:1acdcc576936 | 51 | <CENTER> X X C C C A A A </CENTER><br> |
ChrisselH | 0:1acdcc576936 | 52 | - Die ersten zwei Bits sind don't cares<br> |
ChrisselH | 0:1acdcc576936 | 53 | - Die <EM>Befehle C</EM> sind wie fogt aufgebaut<br> |
ChrisselH | 0:1acdcc576936 | 54 | <ul> |
ChrisselH | 0:1acdcc576936 | 55 | <li> 000 Schreibe Input register N</li> |
ChrisselH | 0:1acdcc576936 | 56 | <li> 001 Update DAC Register N</li> |
ChrisselH | 0:1acdcc576936 | 57 | <li> 010 Schreibe Inputregister N und Update alle DAC Register</li> |
ChrisselH | 0:1acdcc576936 | 58 | <li> 011 Schreibe Inputregister N und Update DAC Register N</li> |
ChrisselH | 0:1acdcc576936 | 59 | <li> 100 Power Down DAC (siehe Datenblatt)</li> |
ChrisselH | 0:1acdcc576936 | 60 | <li> 101 Reset (siehe Datenblatt)</li> |
ChrisselH | 0:1acdcc576936 | 61 | <li> 110 Funktionsregister LDAC (siehe Datenblatt)</li> |
ChrisselH | 0:1acdcc576936 | 62 | </ul> |
ChrisselH | 0:1acdcc576936 | 63 | - Die <EM>Adresse A</EM> zum Register N sind wie fogt aufgebaut<br> |
ChrisselH | 0:1acdcc576936 | 64 | <ul> |
ChrisselH | 0:1acdcc576936 | 65 | <li> 000 DAC A</li> |
ChrisselH | 0:1acdcc576936 | 66 | <li> 001 DAC B</li> |
ChrisselH | 0:1acdcc576936 | 67 | <li> 010 DAC C</li> |
ChrisselH | 0:1acdcc576936 | 68 | <li> 011 DAC B</li> |
ChrisselH | 0:1acdcc576936 | 69 | <li> 111 All DACs</li> |
ChrisselH | 0:1acdcc576936 | 70 | </ul> |
ChrisselH | 0:1acdcc576936 | 71 | |
ChrisselH | 0:1acdcc576936 | 72 | \param data1 <b>Datenbits</b><br> |
ChrisselH | 0:1acdcc576936 | 73 | ersten 8 Datenbits, bzw. oberen zwei Nibble |
ChrisselH | 0:1acdcc576936 | 74 | \param data2 <b>Datenbits</b><br> |
ChrisselH | 0:1acdcc576936 | 75 | zweiten 8 Datenbits, bzw. unteren zwei Nibble |
ChrisselH | 0:1acdcc576936 | 76 | */ |
ChrisselH | 0:1acdcc576936 | 77 | void sendDAC(int instruction, int data1, int data2); |
ChrisselH | 0:1acdcc576936 | 78 | |
ChrisselH | 0:1acdcc576936 | 79 | /*! Destruktor der Klasse */ |
ChrisselH | 0:1acdcc576936 | 80 | virtual ~AD5664(){}; |
ChrisselH | 0:1acdcc576936 | 81 | |
ChrisselH | 0:1acdcc576936 | 82 | /*! Setzt den Chipselect-Pin des Wandlers auf "select" bzw. wählt diesen aus. */ |
ChrisselH | 0:1acdcc576936 | 83 | void SelectCS(); |
ChrisselH | 0:1acdcc576936 | 84 | |
ChrisselH | 0:1acdcc576936 | 85 | /*! Setzt den Chipselect-Pin des Wandlers auf "deselect" bzw. wählt diesen ab. */ |
ChrisselH | 0:1acdcc576936 | 86 | void DeselectCS(); |
ChrisselH | 0:1acdcc576936 | 87 | |
ChrisselH | 0:1acdcc576936 | 88 | |
ChrisselH | 0:1acdcc576936 | 89 | |
ChrisselH | 0:1acdcc576936 | 90 | /*! Schreibt ein 16-Bit Wert in den eingestellten Kanal. Der Wert wird direkt in das DAC Register geschrieben und der Wert wird direkt ausgegen. */ |
ChrisselH | 0:1acdcc576936 | 91 | /*! |
ChrisselH | 0:1acdcc576936 | 92 | \param channel <b>Einstellung des Ausgewählten Kanals</b><br> |
ChrisselH | 0:1acdcc576936 | 93 | <ul> |
ChrisselH | 0:1acdcc576936 | 94 | <li> A Beschreibt Kanal A</li> |
ChrisselH | 0:1acdcc576936 | 95 | <li> B Beschreibt Kanal B</li> |
ChrisselH | 0:1acdcc576936 | 96 | <li> C Beschreibt Kanal C</li> |
ChrisselH | 0:1acdcc576936 | 97 | <li> D Beschreibt Kanal D</li> |
ChrisselH | 0:1acdcc576936 | 98 | <li> F Beschreibt alle DACs </li> |
ChrisselH | 0:1acdcc576936 | 99 | </ul> |
ChrisselH | 0:1acdcc576936 | 100 | Standartwert, falls ein falscher Kanal angegeben wird ist "F" |
ChrisselH | 0:1acdcc576936 | 101 | \param value <b>16-Bit Wert</b><br> Wird Automatisch in zwei 8 Bit Werte angepasst. |
ChrisselH | 0:1acdcc576936 | 102 | */ |
ChrisselH | 0:1acdcc576936 | 103 | void writeDAC(char channel, int value); |
ChrisselH | 0:1acdcc576936 | 104 | |
ChrisselH | 0:1acdcc576936 | 105 | |
ChrisselH | 0:1acdcc576936 | 106 | |
ChrisselH | 0:1acdcc576936 | 107 | /*! Lädt ein 16-Bit Wert in den eingestellten Kanal. Der Wert wird direkt in das Inputregister geschrieben und kann mit der updateDAC-Funktion in das DAC-Register geschrieben werden */ |
ChrisselH | 0:1acdcc576936 | 108 | /*! |
ChrisselH | 0:1acdcc576936 | 109 | \param channel <b>Einstellung des Ausgewählten Kanals</b><br> |
ChrisselH | 0:1acdcc576936 | 110 | <ul> |
ChrisselH | 0:1acdcc576936 | 111 | <li> A Lädt Kanal A</li> |
ChrisselH | 0:1acdcc576936 | 112 | <li> B Lädt Kanal B</li> |
ChrisselH | 0:1acdcc576936 | 113 | <li> C Lädt Kanal C</li> |
ChrisselH | 0:1acdcc576936 | 114 | <li> D Lädt Kanal D</li> |
ChrisselH | 0:1acdcc576936 | 115 | <li> F Lädt alle DACs </li> |
ChrisselH | 0:1acdcc576936 | 116 | </ul> |
ChrisselH | 0:1acdcc576936 | 117 | Standartwert, falls ein falscher Kanal angegeben wird ist "F" |
ChrisselH | 0:1acdcc576936 | 118 | \param value <b>16-Bit Wert</b><br> Wird Automatisch in zwei 8 Bit Werte angepasst. |
ChrisselH | 0:1acdcc576936 | 119 | */ |
ChrisselH | 0:1acdcc576936 | 120 | void loadDAC(char channel, int value); |
ChrisselH | 0:1acdcc576936 | 121 | |
ChrisselH | 0:1acdcc576936 | 122 | |
ChrisselH | 0:1acdcc576936 | 123 | /*! Schreibt zuvor eingestellten Wert in das DAC Register (Laden mittels loadDAC-Funktion). Dieser Wert ist dann am Ausgang des entsprechenden DAC-Kanals zu messen. */ |
ChrisselH | 0:1acdcc576936 | 124 | /*! |
ChrisselH | 0:1acdcc576936 | 125 | \param channel <b>Einstellung des Ausgewählten Kanals</b><br> |
ChrisselH | 0:1acdcc576936 | 126 | <ul> |
ChrisselH | 0:1acdcc576936 | 127 | <li> A Beschreibt Kanal A</li> |
ChrisselH | 0:1acdcc576936 | 128 | <li> B Beschreibt Kanal B</li> |
ChrisselH | 0:1acdcc576936 | 129 | <li> C Beschreibt Kanal C</li> |
ChrisselH | 0:1acdcc576936 | 130 | <li> D Beschreibt Kanal D</li> |
ChrisselH | 0:1acdcc576936 | 131 | <li> F Beschreibt alle DACs </li> |
ChrisselH | 0:1acdcc576936 | 132 | </ul> |
ChrisselH | 0:1acdcc576936 | 133 | Standartwert, falls ein falscher Kanal angegeben wird ist "F" |
ChrisselH | 0:1acdcc576936 | 134 | */ |
ChrisselH | 0:1acdcc576936 | 135 | void updateDAC(char channel); |
ChrisselH | 0:1acdcc576936 | 136 | |
ChrisselH | 0:1acdcc576936 | 137 | protected: |
ChrisselH | 0:1acdcc576936 | 138 | //! SPI Schnittstelle |
ChrisselH | 0:1acdcc576936 | 139 | SPI spi; |
ChrisselH | 0:1acdcc576936 | 140 | //! Chipselect Pin |
ChrisselH | 0:1acdcc576936 | 141 | DigitalOut daccs; |
ChrisselH | 0:1acdcc576936 | 142 | |
ChrisselH | 0:1acdcc576936 | 143 | }; |
ChrisselH | 0:1acdcc576936 | 144 | |
ChrisselH | 0:1acdcc576936 | 145 | #endif |