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

  1. timer modules
    1. Quadratur Encoder (Version 1.2 - C. Hoyer 12.8.2015)
  2. SPI modules
    1. AD5664 (Version 1.1 - C. Hoyer 23.7.2015)
  3. software modules
    1. Ringbuffer (Version 0.9 - C. Hoyer 18.8.2015)
    2. PID-Regler (Version 1.0 - C. Hoyer 17.9.2015)
Committer:
ChrisselH
Date:
Mon Nov 28 17:27:43 2016 +0000
Revision:
0:1acdcc576936
port from priv lib

Who changed what in which revision?

UserRevisionLine numberNew contents of line
ChrisselH 0:1acdcc576936 1 #include "mbed.h"
ChrisselH 0:1acdcc576936 2 #include "AD5664.h"
ChrisselH 0:1acdcc576936 3
ChrisselH 0:1acdcc576936 4 //====================================================================================================================================
ChrisselH 0:1acdcc576936 5 // Grundlagen, DAC Schreiben und Initialisieren
ChrisselH 0:1acdcc576936 6 //====================================================================================================================================
ChrisselH 0:1acdcc576936 7
ChrisselH 0:1acdcc576936 8 AD5664::AD5664(SPI _spi, PinName _daccs): spi(_spi), daccs(_daccs)
ChrisselH 0:1acdcc576936 9 {
ChrisselH 0:1acdcc576936 10 sendDAC(0x2F, 0x00, 0x00); //Software Reset, alle Ausgänge auf 0
ChrisselH 0:1acdcc576936 11 }
ChrisselH 0:1acdcc576936 12
ChrisselH 0:1acdcc576936 13
ChrisselH 0:1acdcc576936 14 void AD5664::sendDAC(int instruction = 0x00, int data1 = 0x00, int data2 = 0x00)
ChrisselH 0:1acdcc576936 15 {
ChrisselH 0:1acdcc576936 16 daccs = 0; // Select Device
ChrisselH 0:1acdcc576936 17
ChrisselH 0:1acdcc576936 18 spi.write(instruction); // Schreibt entsprechend die Anweisung und die Adresse
ChrisselH 0:1acdcc576936 19 spi.write(data1); // Schreibt den ersten Byte an Daten
ChrisselH 0:1acdcc576936 20 spi.write(data2); // Schreibt den zweiten Byte an Daten
ChrisselH 0:1acdcc576936 21
ChrisselH 0:1acdcc576936 22 daccs = 1; // Deselect
ChrisselH 0:1acdcc576936 23 }
ChrisselH 0:1acdcc576936 24
ChrisselH 0:1acdcc576936 25 //====================================================================================================================================
ChrisselH 0:1acdcc576936 26 // Setter-Funktionen
ChrisselH 0:1acdcc576936 27 //====================================================================================================================================
ChrisselH 0:1acdcc576936 28
ChrisselH 0:1acdcc576936 29 void AD5664::SelectCS()
ChrisselH 0:1acdcc576936 30 { daccs = 0; // Select Device
ChrisselH 0:1acdcc576936 31 }
ChrisselH 0:1acdcc576936 32
ChrisselH 0:1acdcc576936 33 void AD5664::DeselectCS()
ChrisselH 0:1acdcc576936 34 { daccs = 1; // Deselect
ChrisselH 0:1acdcc576936 35 }
ChrisselH 0:1acdcc576936 36
ChrisselH 0:1acdcc576936 37 void AD5664::writeDAC(char channel, int value)
ChrisselH 0:1acdcc576936 38 {
ChrisselH 0:1acdcc576936 39 int choch = 0x00; //Temporäre Variable um die Instructions zu übernehmen
ChrisselH 0:1acdcc576936 40
ChrisselH 0:1acdcc576936 41 switch(channel){
ChrisselH 0:1acdcc576936 42 case 'A': // DAC A
ChrisselH 0:1acdcc576936 43 choch = 0x18;
ChrisselH 0:1acdcc576936 44 break;
ChrisselH 0:1acdcc576936 45
ChrisselH 0:1acdcc576936 46 case 'B': // DAC B
ChrisselH 0:1acdcc576936 47 choch = 0x19;
ChrisselH 0:1acdcc576936 48 break;
ChrisselH 0:1acdcc576936 49
ChrisselH 0:1acdcc576936 50 case 'C': // DAC C
ChrisselH 0:1acdcc576936 51 choch = 0x1A;
ChrisselH 0:1acdcc576936 52 break;
ChrisselH 0:1acdcc576936 53
ChrisselH 0:1acdcc576936 54 case 'D': // DAC D
ChrisselH 0:1acdcc576936 55 choch = 0x1B;
ChrisselH 0:1acdcc576936 56 break;
ChrisselH 0:1acdcc576936 57
ChrisselH 0:1acdcc576936 58 case 'F': // Alle Dacs
ChrisselH 0:1acdcc576936 59 choch = 0x1F;
ChrisselH 0:1acdcc576936 60 break;
ChrisselH 0:1acdcc576936 61
ChrisselH 0:1acdcc576936 62 default:
ChrisselH 0:1acdcc576936 63 choch = 0x1F; // Alle Dacs
ChrisselH 0:1acdcc576936 64 }
ChrisselH 0:1acdcc576936 65
ChrisselH 0:1acdcc576936 66 sendDAC(choch, *((uint8_t*)&(value)+1), *((uint8_t*)&(value)+0)); //Schreibe via SPI: Anweisung mit Adresse, oberes Byte, unteres Byte)
ChrisselH 0:1acdcc576936 67
ChrisselH 0:1acdcc576936 68 }
ChrisselH 0:1acdcc576936 69
ChrisselH 0:1acdcc576936 70
ChrisselH 0:1acdcc576936 71
ChrisselH 0:1acdcc576936 72 void AD5664::loadDAC(char channel, int value)
ChrisselH 0:1acdcc576936 73 {
ChrisselH 0:1acdcc576936 74 int choch = 0x00; //Temporäre Variable um die Instructions zu übernehmen
ChrisselH 0:1acdcc576936 75
ChrisselH 0:1acdcc576936 76 switch(channel){
ChrisselH 0:1acdcc576936 77 case 'A': // DAC A
ChrisselH 0:1acdcc576936 78 choch = 0x00;
ChrisselH 0:1acdcc576936 79 break;
ChrisselH 0:1acdcc576936 80
ChrisselH 0:1acdcc576936 81 case 'B': // DAC B
ChrisselH 0:1acdcc576936 82 choch = 0x01;
ChrisselH 0:1acdcc576936 83 break;
ChrisselH 0:1acdcc576936 84
ChrisselH 0:1acdcc576936 85 case 'C': // DAC C
ChrisselH 0:1acdcc576936 86 choch = 0x02;
ChrisselH 0:1acdcc576936 87 break;
ChrisselH 0:1acdcc576936 88
ChrisselH 0:1acdcc576936 89 case 'D': // DAC D
ChrisselH 0:1acdcc576936 90 choch = 0x03;
ChrisselH 0:1acdcc576936 91 break;
ChrisselH 0:1acdcc576936 92
ChrisselH 0:1acdcc576936 93 case 'F': // Alle Dacs
ChrisselH 0:1acdcc576936 94 choch = 0x07;
ChrisselH 0:1acdcc576936 95 break;
ChrisselH 0:1acdcc576936 96
ChrisselH 0:1acdcc576936 97 default:
ChrisselH 0:1acdcc576936 98 choch = 0x07; // Alle Dacs
ChrisselH 0:1acdcc576936 99 }
ChrisselH 0:1acdcc576936 100
ChrisselH 0:1acdcc576936 101 sendDAC(choch, *((uint8_t*)&(value)+1), *((uint8_t*)&(value)+0)); //Schreibe via SPI: Anweisung mit Adresse, oberes Byte, unteres Byte)
ChrisselH 0:1acdcc576936 102
ChrisselH 0:1acdcc576936 103 }
ChrisselH 0:1acdcc576936 104
ChrisselH 0:1acdcc576936 105
ChrisselH 0:1acdcc576936 106 void AD5664::updateDAC(char channel)
ChrisselH 0:1acdcc576936 107 {
ChrisselH 0:1acdcc576936 108 int choch = 0x00; //Temporäre Variable um die Instructions zu übernehmen
ChrisselH 0:1acdcc576936 109
ChrisselH 0:1acdcc576936 110 switch(channel){
ChrisselH 0:1acdcc576936 111 case 'A': // DAC A
ChrisselH 0:1acdcc576936 112 choch = 0x08;
ChrisselH 0:1acdcc576936 113 break;
ChrisselH 0:1acdcc576936 114
ChrisselH 0:1acdcc576936 115 case 'B': // DAC B
ChrisselH 0:1acdcc576936 116 choch = 0x09;
ChrisselH 0:1acdcc576936 117 break;
ChrisselH 0:1acdcc576936 118
ChrisselH 0:1acdcc576936 119 case 'C': // DAC C
ChrisselH 0:1acdcc576936 120 choch = 0x0A;
ChrisselH 0:1acdcc576936 121 break;
ChrisselH 0:1acdcc576936 122
ChrisselH 0:1acdcc576936 123 case 'D': // DAC D
ChrisselH 0:1acdcc576936 124 choch = 0x0B;
ChrisselH 0:1acdcc576936 125 break;
ChrisselH 0:1acdcc576936 126
ChrisselH 0:1acdcc576936 127 case 'F': // Alle Dacs
ChrisselH 0:1acdcc576936 128 choch = 0x0F;
ChrisselH 0:1acdcc576936 129 break;
ChrisselH 0:1acdcc576936 130
ChrisselH 0:1acdcc576936 131 default:
ChrisselH 0:1acdcc576936 132 choch = 0x0F; // Alle Dacs
ChrisselH 0:1acdcc576936 133 }
ChrisselH 0:1acdcc576936 134
ChrisselH 0:1acdcc576936 135 sendDAC(choch, 0x00 , 0x00); //Schreibe via SPI: Anweisung mit Adresse, oberes Byte, unteres Byte)
ChrisselH 0:1acdcc576936 136
ChrisselH 0:1acdcc576936 137 }