Skapa en smart-kontrollerade skivspelare drivrutin (5 / 9 steg)
Steg 5: Grundläggande programvara aka första försöken
Eftersom vi nu har en sensor för att mäta en spänning med en linjär beteende till rotationspeed och en motor, båda anslutna till en MCU (microcontroller unit), kan vi genomföra en enkel kontroll slinga i C-språket.
Först filtreras de uppmätta hastighet värdena med en tio punkt flytta genomsnittliga filter (dessutom till de analoga filter).
LED-indikator för alltför hög hastighet ges av:
om (sensorValue < = 20) {digitalWrite (ledde, högt);} //turn ledde, om hastigheten är för hög
annat {digitalWrite (ledde, låg);}
Motorisk kontroll koden ges av:
Controller för motor linearitet
om (sensorValue > speedValue) {fadeValue = fadeValue-1;}
fadeValue är det värde, blekning LED och därför varierande motor styrspänningen
annars om (sensorValue < speedValue) {fadeValue = fadeValue + 1;}
om (fadeValue < = 20) {fadeValue = 20;}
annars om (fadeValue > 255) {fadeValue = 255;}}
Detta är en underlig slags p-regulator (med ingen proportionalitet till obalans värde), som fungerar, men inte mycket ordentligt. En största nackdel är, att det inte är riktigt snabb och börjar att svänga, som visas i data tomt. En annan punkt är, som jag inte vet de exakt uppmätta speed_value, som jag har att nå, att sluta med exakt 33 1/3 rpm. Jag approximerade värden i det här steget som inte är korrekta. Vad du annars kan se, är att filtret inte bort bullret. Thats varför jag har redesign filtren också.
Den tredje bilden visar generator hastigheten på toppen och styrspänningen längst ned.
Detta problem måste lösas från nu på i följande steg, genom:
- ny beräkning av filter
- mäta system viktiga data
- använda den som en bas för beräkning av en PID-regulator
att lägga till ytterligare sensorer som mäter rusade rotationen genom att mäta tiden mellan markerade punkterna på skivtallriken
Till min favör genomfört jag en MCU, som jag kan hantera hela kontrollera och förändringar i en digital väg.