From c46539a57bbffeb96f20f2ee8842a7be342f9846 Mon Sep 17 00:00:00 2001 From: helgie22 Date: Wed, 30 Sep 2026 11:49:51 +0000 Subject: [PATCH] =?UTF-8?q?Initialization=20b=C3=AD=C3=B0ur=202=20s,=20m?= =?UTF-8?q?=C3=B3tor=20st=C3=B6=C3=B0vast=20alveg,=20hreinsun?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - InitializationState: 2 s bið með millis() án þess að blokka, Boot-up sent í exit() - MotorDriver: PWM-pinnar aftengdir frá Timer2 þegar þeir eiga að vera LOW (OCR=0 í Fast PWM gaf samt stuttan púls) - Eytt útkommentuðum skrám: main_P2, temporary_main, rotary_encoder_driver_unused - .gitignore: plot-skriftan fer í git, vélarsértækar PlatformIO-skrár út --- .gitignore | 11 +- .vscode/c_cpp_properties.json | 56 -------- .vscode/launch.json | 44 ------ compile_commands.json | 200 --------------------------- docs/diagrams/src/motor_state.wsd | 10 +- include/initialization_state.h | 5 + scripts/plot_step_response.py | 91 ++++++++++++ src/initialization_state.cpp | 11 +- src/main.cpp | 6 +- src/main_P2.cpp | 88 ------------ src/motor_controller.cpp | 2 +- src/motor_driver.cpp | 98 +++++++------ src/rotary_encoder_driver_unused.cpp | 61 -------- src/temporary_main.cpp | 53 ------- 14 files changed, 177 insertions(+), 559 deletions(-) delete mode 100644 .vscode/c_cpp_properties.json delete mode 100644 .vscode/launch.json delete mode 100644 compile_commands.json create mode 100644 scripts/plot_step_response.py delete mode 100644 src/main_P2.cpp delete mode 100644 src/rotary_encoder_driver_unused.cpp delete mode 100644 src/temporary_main.cpp diff --git a/.gitignore b/.gitignore index a17f20c..83834db 100644 --- a/.gitignore +++ b/.gitignore @@ -1,6 +1,11 @@ .pio venv -*.py +__pycache__ *.csv -scripts -*.typ \ No newline at end of file +*.typ +*.pdf + +# Vélarsértækar skrár sem PlatformIO býr til sjálft +.vscode/c_cpp_properties.json +.vscode/launch.json +compile_commands.json diff --git a/.vscode/c_cpp_properties.json b/.vscode/c_cpp_properties.json deleted file mode 100644 index 24a5039..0000000 --- a/.vscode/c_cpp_properties.json +++ /dev/null @@ -1,56 +0,0 @@ -// -// !!! WARNING !!! AUTO-GENERATED FILE! -// PLEASE DO NOT MODIFY IT AND USE "platformio.ini": -// https://docs.platformio.org/page/projectconf/section_env_build.html#build-flags -// -{ - "configurations": [ - { - "name": "PlatformIO", - "includePath": [ - "C:/Users/isakt/Embedded/ESP_Project3_H26/include", - "C:/Users/isakt/Embedded/ESP_Project3_H26/src", - "C:/Users/isakt/.platformio/packages/framework-arduino-avr/cores/arduino", - "C:/Users/isakt/.platformio/packages/framework-arduino-avr/variants/eightanaloginputs", - "C:/Users/isakt/.platformio/packages/framework-arduino-avr/libraries/EEPROM/src", - "C:/Users/isakt/.platformio/packages/framework-arduino-avr/libraries/HID/src", - "C:/Users/isakt/.platformio/packages/framework-arduino-avr/libraries/SPI/src", - "C:/Users/isakt/.platformio/packages/framework-arduino-avr/libraries/SoftwareSerial/src", - "C:/Users/isakt/.platformio/packages/framework-arduino-avr/libraries/Wire/src", - "" - ], - "browse": { - "limitSymbolsToIncludedHeaders": true, - "path": [ - "C:/Users/isakt/Embedded/ESP_Project3_H26/include", - "C:/Users/isakt/Embedded/ESP_Project3_H26/src", - "C:/Users/isakt/.platformio/packages/framework-arduino-avr/cores/arduino", - "C:/Users/isakt/.platformio/packages/framework-arduino-avr/variants/eightanaloginputs", - "C:/Users/isakt/.platformio/packages/framework-arduino-avr/libraries/EEPROM/src", - "C:/Users/isakt/.platformio/packages/framework-arduino-avr/libraries/HID/src", - "C:/Users/isakt/.platformio/packages/framework-arduino-avr/libraries/SPI/src", - "C:/Users/isakt/.platformio/packages/framework-arduino-avr/libraries/SoftwareSerial/src", - "C:/Users/isakt/.platformio/packages/framework-arduino-avr/libraries/Wire/src", - "" - ] - }, - "defines": [ - "PLATFORMIO=60200", - "ARDUINO_AVR_NANO", - "F_CPU=16000000L", - "ARDUINO_ARCH_AVR", - "ARDUINO=10808", - "__AVR_ATmega328P__", - "" - ], - "cStandard": "gnu11", - "cppStandard": "gnu++11", - "compilerPath": "C:/Users/isakt/.platformio/packages/toolchain-atmelavr/bin/avr-gcc.exe", - "compilerArgs": [ - "-mmcu=atmega328p", - "" - ] - } - ], - "version": 4 -} diff --git a/.vscode/launch.json b/.vscode/launch.json deleted file mode 100644 index 3a6caba..0000000 --- a/.vscode/launch.json +++ /dev/null @@ -1,44 +0,0 @@ -// AUTOMATICALLY GENERATED FILE. PLEASE DO NOT MODIFY IT MANUALLY -// -// PlatformIO Debugging Solution -// -// Documentation: https://docs.platformio.org/en/latest/plus/debugging.html -// Configuration: https://docs.platformio.org/en/latest/projectconf/sections/env/options/debug/index.html - -{ - "version": "0.2.0", - "configurations": [ - { - "type": "platformio-debug", - "request": "launch", - "name": "PIO Debug", - "executable": "C:/Users/isakt/Embedded/ESP_Project3_H26/.pio/build/nanoatmega328new/firmware.elf", - "projectEnvName": "nanoatmega328new", - "toolchainBinDir": "C:/Users/isakt/.platformio/packages/toolchain-atmelavr/bin", - "internalConsoleOptions": "openOnSessionStart", - "preLaunchTask": { - "type": "PlatformIO", - "task": "Pre-Debug" - } - }, - { - "type": "platformio-debug", - "request": "launch", - "name": "PIO Debug (skip Pre-Debug)", - "executable": "C:/Users/isakt/Embedded/ESP_Project3_H26/.pio/build/nanoatmega328new/firmware.elf", - "projectEnvName": "nanoatmega328new", - "toolchainBinDir": "C:/Users/isakt/.platformio/packages/toolchain-atmelavr/bin", - "internalConsoleOptions": "openOnSessionStart" - }, - { - "type": "platformio-debug", - "request": "launch", - "name": "PIO Debug (without uploading)", - "executable": "C:/Users/isakt/Embedded/ESP_Project3_H26/.pio/build/nanoatmega328new/firmware.elf", - "projectEnvName": "nanoatmega328new", - "toolchainBinDir": "C:/Users/isakt/.platformio/packages/toolchain-atmelavr/bin", - "internalConsoleOptions": "openOnSessionStart", - "loadMode": "manual" - } - ] -} diff --git a/compile_commands.json b/compile_commands.json deleted file mode 100644 index 4c82cc5..0000000 --- a/compile_commands.json +++ /dev/null @@ -1,200 +0,0 @@ -[ - { - "command": "/Users/dadi/.platformio/packages/toolchain-atmelavr/bin/avr-g++ -o .pio/build/nanoatmega328new/FrameworkArduino/CDC.cpp.o -c -fno-exceptions -fno-threadsafe-statics -fpermissive -std=gnu++11 -mmcu=atmega328p -Os -Wall -ffunction-sections -fdata-sections -flto -DPLATFORMIO=60119 -DARDUINO_AVR_NANO -DF_CPU=16000000L -DARDUINO_ARCH_AVR -DARDUINO=10808 -I/Users/dadi/.platformio/packages/framework-arduino-avr/cores/arduino -I/Users/dadi/.platformio/packages/framework-arduino-avr/variants/eightanaloginputs /Users/dadi/.platformio/packages/framework-arduino-avr/cores/arduino/CDC.cpp", - "directory": "/Users/dadi/embedded/proj1", - "file": "/Users/dadi/.platformio/packages/framework-arduino-avr/cores/arduino/CDC.cpp", - "output": ".pio/build/nanoatmega328new/FrameworkArduino/CDC.cpp.o" - }, - { - "command": "/Users/dadi/.platformio/packages/toolchain-atmelavr/bin/avr-g++ -o .pio/build/nanoatmega328new/FrameworkArduino/HardwareSerial.cpp.o -c -fno-exceptions -fno-threadsafe-statics -fpermissive -std=gnu++11 -mmcu=atmega328p -Os -Wall -ffunction-sections -fdata-sections -flto -DPLATFORMIO=60119 -DARDUINO_AVR_NANO -DF_CPU=16000000L -DARDUINO_ARCH_AVR -DARDUINO=10808 -I/Users/dadi/.platformio/packages/framework-arduino-avr/cores/arduino -I/Users/dadi/.platformio/packages/framework-arduino-avr/variants/eightanaloginputs /Users/dadi/.platformio/packages/framework-arduino-avr/cores/arduino/HardwareSerial.cpp", - "directory": "/Users/dadi/embedded/proj1", - "file": "/Users/dadi/.platformio/packages/framework-arduino-avr/cores/arduino/HardwareSerial.cpp", - "output": ".pio/build/nanoatmega328new/FrameworkArduino/HardwareSerial.cpp.o" - }, - { - "command": "/Users/dadi/.platformio/packages/toolchain-atmelavr/bin/avr-g++ -o .pio/build/nanoatmega328new/FrameworkArduino/HardwareSerial0.cpp.o -c -fno-exceptions -fno-threadsafe-statics -fpermissive -std=gnu++11 -mmcu=atmega328p -Os -Wall -ffunction-sections -fdata-sections -flto -DPLATFORMIO=60119 -DARDUINO_AVR_NANO -DF_CPU=16000000L -DARDUINO_ARCH_AVR -DARDUINO=10808 -I/Users/dadi/.platformio/packages/framework-arduino-avr/cores/arduino -I/Users/dadi/.platformio/packages/framework-arduino-avr/variants/eightanaloginputs /Users/dadi/.platformio/packages/framework-arduino-avr/cores/arduino/HardwareSerial0.cpp", - "directory": "/Users/dadi/embedded/proj1", - "file": "/Users/dadi/.platformio/packages/framework-arduino-avr/cores/arduino/HardwareSerial0.cpp", - "output": ".pio/build/nanoatmega328new/FrameworkArduino/HardwareSerial0.cpp.o" - }, - { - "command": "/Users/dadi/.platformio/packages/toolchain-atmelavr/bin/avr-g++ -o .pio/build/nanoatmega328new/FrameworkArduino/HardwareSerial1.cpp.o -c -fno-exceptions -fno-threadsafe-statics -fpermissive -std=gnu++11 -mmcu=atmega328p -Os -Wall -ffunction-sections -fdata-sections -flto -DPLATFORMIO=60119 -DARDUINO_AVR_NANO -DF_CPU=16000000L -DARDUINO_ARCH_AVR -DARDUINO=10808 -I/Users/dadi/.platformio/packages/framework-arduino-avr/cores/arduino -I/Users/dadi/.platformio/packages/framework-arduino-avr/variants/eightanaloginputs /Users/dadi/.platformio/packages/framework-arduino-avr/cores/arduino/HardwareSerial1.cpp", - "directory": "/Users/dadi/embedded/proj1", - "file": "/Users/dadi/.platformio/packages/framework-arduino-avr/cores/arduino/HardwareSerial1.cpp", - "output": ".pio/build/nanoatmega328new/FrameworkArduino/HardwareSerial1.cpp.o" - }, - { - "command": "/Users/dadi/.platformio/packages/toolchain-atmelavr/bin/avr-g++ -o .pio/build/nanoatmega328new/FrameworkArduino/HardwareSerial2.cpp.o -c -fno-exceptions -fno-threadsafe-statics -fpermissive -std=gnu++11 -mmcu=atmega328p -Os -Wall -ffunction-sections -fdata-sections -flto -DPLATFORMIO=60119 -DARDUINO_AVR_NANO -DF_CPU=16000000L -DARDUINO_ARCH_AVR -DARDUINO=10808 -I/Users/dadi/.platformio/packages/framework-arduino-avr/cores/arduino -I/Users/dadi/.platformio/packages/framework-arduino-avr/variants/eightanaloginputs /Users/dadi/.platformio/packages/framework-arduino-avr/cores/arduino/HardwareSerial2.cpp", - "directory": "/Users/dadi/embedded/proj1", - "file": "/Users/dadi/.platformio/packages/framework-arduino-avr/cores/arduino/HardwareSerial2.cpp", - "output": ".pio/build/nanoatmega328new/FrameworkArduino/HardwareSerial2.cpp.o" - }, - { - "command": "/Users/dadi/.platformio/packages/toolchain-atmelavr/bin/avr-g++ -o .pio/build/nanoatmega328new/FrameworkArduino/HardwareSerial3.cpp.o -c -fno-exceptions -fno-threadsafe-statics -fpermissive -std=gnu++11 -mmcu=atmega328p -Os -Wall -ffunction-sections -fdata-sections -flto -DPLATFORMIO=60119 -DARDUINO_AVR_NANO -DF_CPU=16000000L -DARDUINO_ARCH_AVR -DARDUINO=10808 -I/Users/dadi/.platformio/packages/framework-arduino-avr/cores/arduino -I/Users/dadi/.platformio/packages/framework-arduino-avr/variants/eightanaloginputs /Users/dadi/.platformio/packages/framework-arduino-avr/cores/arduino/HardwareSerial3.cpp", - "directory": "/Users/dadi/embedded/proj1", - "file": "/Users/dadi/.platformio/packages/framework-arduino-avr/cores/arduino/HardwareSerial3.cpp", - "output": ".pio/build/nanoatmega328new/FrameworkArduino/HardwareSerial3.cpp.o" - }, - { - "command": "/Users/dadi/.platformio/packages/toolchain-atmelavr/bin/avr-g++ -o .pio/build/nanoatmega328new/FrameworkArduino/IPAddress.cpp.o -c -fno-exceptions -fno-threadsafe-statics -fpermissive -std=gnu++11 -mmcu=atmega328p -Os -Wall -ffunction-sections -fdata-sections -flto -DPLATFORMIO=60119 -DARDUINO_AVR_NANO -DF_CPU=16000000L -DARDUINO_ARCH_AVR -DARDUINO=10808 -I/Users/dadi/.platformio/packages/framework-arduino-avr/cores/arduino -I/Users/dadi/.platformio/packages/framework-arduino-avr/variants/eightanaloginputs /Users/dadi/.platformio/packages/framework-arduino-avr/cores/arduino/IPAddress.cpp", - "directory": "/Users/dadi/embedded/proj1", - "file": "/Users/dadi/.platformio/packages/framework-arduino-avr/cores/arduino/IPAddress.cpp", - "output": ".pio/build/nanoatmega328new/FrameworkArduino/IPAddress.cpp.o" - }, - { - "command": "/Users/dadi/.platformio/packages/toolchain-atmelavr/bin/avr-g++ -o .pio/build/nanoatmega328new/FrameworkArduino/PluggableUSB.cpp.o -c -fno-exceptions -fno-threadsafe-statics -fpermissive -std=gnu++11 -mmcu=atmega328p -Os -Wall -ffunction-sections -fdata-sections -flto -DPLATFORMIO=60119 -DARDUINO_AVR_NANO -DF_CPU=16000000L -DARDUINO_ARCH_AVR -DARDUINO=10808 -I/Users/dadi/.platformio/packages/framework-arduino-avr/cores/arduino -I/Users/dadi/.platformio/packages/framework-arduino-avr/variants/eightanaloginputs /Users/dadi/.platformio/packages/framework-arduino-avr/cores/arduino/PluggableUSB.cpp", - "directory": "/Users/dadi/embedded/proj1", - "file": "/Users/dadi/.platformio/packages/framework-arduino-avr/cores/arduino/PluggableUSB.cpp", - "output": ".pio/build/nanoatmega328new/FrameworkArduino/PluggableUSB.cpp.o" - }, - { - "command": "/Users/dadi/.platformio/packages/toolchain-atmelavr/bin/avr-g++ -o .pio/build/nanoatmega328new/FrameworkArduino/Print.cpp.o -c -fno-exceptions -fno-threadsafe-statics -fpermissive -std=gnu++11 -mmcu=atmega328p -Os -Wall -ffunction-sections -fdata-sections -flto -DPLATFORMIO=60119 -DARDUINO_AVR_NANO -DF_CPU=16000000L -DARDUINO_ARCH_AVR -DARDUINO=10808 -I/Users/dadi/.platformio/packages/framework-arduino-avr/cores/arduino -I/Users/dadi/.platformio/packages/framework-arduino-avr/variants/eightanaloginputs /Users/dadi/.platformio/packages/framework-arduino-avr/cores/arduino/Print.cpp", - "directory": "/Users/dadi/embedded/proj1", - "file": "/Users/dadi/.platformio/packages/framework-arduino-avr/cores/arduino/Print.cpp", - "output": ".pio/build/nanoatmega328new/FrameworkArduino/Print.cpp.o" - }, - { - "command": "/Users/dadi/.platformio/packages/toolchain-atmelavr/bin/avr-g++ -o .pio/build/nanoatmega328new/FrameworkArduino/Stream.cpp.o -c -fno-exceptions -fno-threadsafe-statics -fpermissive -std=gnu++11 -mmcu=atmega328p -Os -Wall -ffunction-sections -fdata-sections -flto -DPLATFORMIO=60119 -DARDUINO_AVR_NANO -DF_CPU=16000000L -DARDUINO_ARCH_AVR -DARDUINO=10808 -I/Users/dadi/.platformio/packages/framework-arduino-avr/cores/arduino -I/Users/dadi/.platformio/packages/framework-arduino-avr/variants/eightanaloginputs /Users/dadi/.platformio/packages/framework-arduino-avr/cores/arduino/Stream.cpp", - "directory": "/Users/dadi/embedded/proj1", - "file": "/Users/dadi/.platformio/packages/framework-arduino-avr/cores/arduino/Stream.cpp", - "output": ".pio/build/nanoatmega328new/FrameworkArduino/Stream.cpp.o" - }, - { - "command": "/Users/dadi/.platformio/packages/toolchain-atmelavr/bin/avr-g++ -o .pio/build/nanoatmega328new/FrameworkArduino/Tone.cpp.o -c -fno-exceptions -fno-threadsafe-statics -fpermissive -std=gnu++11 -mmcu=atmega328p -Os -Wall -ffunction-sections -fdata-sections -flto -DPLATFORMIO=60119 -DARDUINO_AVR_NANO -DF_CPU=16000000L -DARDUINO_ARCH_AVR -DARDUINO=10808 -I/Users/dadi/.platformio/packages/framework-arduino-avr/cores/arduino -I/Users/dadi/.platformio/packages/framework-arduino-avr/variants/eightanaloginputs /Users/dadi/.platformio/packages/framework-arduino-avr/cores/arduino/Tone.cpp", - "directory": "/Users/dadi/embedded/proj1", - "file": "/Users/dadi/.platformio/packages/framework-arduino-avr/cores/arduino/Tone.cpp", - "output": ".pio/build/nanoatmega328new/FrameworkArduino/Tone.cpp.o" - }, - { - "command": "/Users/dadi/.platformio/packages/toolchain-atmelavr/bin/avr-g++ -o .pio/build/nanoatmega328new/FrameworkArduino/USBCore.cpp.o -c -fno-exceptions -fno-threadsafe-statics -fpermissive -std=gnu++11 -mmcu=atmega328p -Os -Wall -ffunction-sections -fdata-sections -flto -DPLATFORMIO=60119 -DARDUINO_AVR_NANO -DF_CPU=16000000L -DARDUINO_ARCH_AVR -DARDUINO=10808 -I/Users/dadi/.platformio/packages/framework-arduino-avr/cores/arduino -I/Users/dadi/.platformio/packages/framework-arduino-avr/variants/eightanaloginputs /Users/dadi/.platformio/packages/framework-arduino-avr/cores/arduino/USBCore.cpp", - "directory": "/Users/dadi/embedded/proj1", - "file": "/Users/dadi/.platformio/packages/framework-arduino-avr/cores/arduino/USBCore.cpp", - "output": ".pio/build/nanoatmega328new/FrameworkArduino/USBCore.cpp.o" - }, - { - "command": "/Users/dadi/.platformio/packages/toolchain-atmelavr/bin/avr-gcc -o .pio/build/nanoatmega328new/FrameworkArduino/WInterrupts.c.o -c -std=gnu11 -fno-fat-lto-objects -mmcu=atmega328p -Os -Wall -ffunction-sections -fdata-sections -flto -DPLATFORMIO=60119 -DARDUINO_AVR_NANO -DF_CPU=16000000L -DARDUINO_ARCH_AVR -DARDUINO=10808 -I/Users/dadi/.platformio/packages/framework-arduino-avr/cores/arduino -I/Users/dadi/.platformio/packages/framework-arduino-avr/variants/eightanaloginputs /Users/dadi/.platformio/packages/framework-arduino-avr/cores/arduino/WInterrupts.c", - "directory": "/Users/dadi/embedded/proj1", - "file": "/Users/dadi/.platformio/packages/framework-arduino-avr/cores/arduino/WInterrupts.c", - "output": ".pio/build/nanoatmega328new/FrameworkArduino/WInterrupts.c.o" - }, - { - "command": "/Users/dadi/.platformio/packages/toolchain-atmelavr/bin/avr-g++ -o .pio/build/nanoatmega328new/FrameworkArduino/WMath.cpp.o -c -fno-exceptions -fno-threadsafe-statics -fpermissive -std=gnu++11 -mmcu=atmega328p -Os -Wall -ffunction-sections -fdata-sections -flto -DPLATFORMIO=60119 -DARDUINO_AVR_NANO -DF_CPU=16000000L -DARDUINO_ARCH_AVR -DARDUINO=10808 -I/Users/dadi/.platformio/packages/framework-arduino-avr/cores/arduino -I/Users/dadi/.platformio/packages/framework-arduino-avr/variants/eightanaloginputs /Users/dadi/.platformio/packages/framework-arduino-avr/cores/arduino/WMath.cpp", - "directory": "/Users/dadi/embedded/proj1", - "file": "/Users/dadi/.platformio/packages/framework-arduino-avr/cores/arduino/WMath.cpp", - "output": ".pio/build/nanoatmega328new/FrameworkArduino/WMath.cpp.o" - }, - { - "command": "/Users/dadi/.platformio/packages/toolchain-atmelavr/bin/avr-g++ -o .pio/build/nanoatmega328new/FrameworkArduino/WString.cpp.o -c -fno-exceptions -fno-threadsafe-statics -fpermissive -std=gnu++11 -mmcu=atmega328p -Os -Wall -ffunction-sections -fdata-sections -flto -DPLATFORMIO=60119 -DARDUINO_AVR_NANO -DF_CPU=16000000L -DARDUINO_ARCH_AVR -DARDUINO=10808 -I/Users/dadi/.platformio/packages/framework-arduino-avr/cores/arduino -I/Users/dadi/.platformio/packages/framework-arduino-avr/variants/eightanaloginputs /Users/dadi/.platformio/packages/framework-arduino-avr/cores/arduino/WString.cpp", - "directory": "/Users/dadi/embedded/proj1", - "file": "/Users/dadi/.platformio/packages/framework-arduino-avr/cores/arduino/WString.cpp", - "output": ".pio/build/nanoatmega328new/FrameworkArduino/WString.cpp.o" - }, - { - "command": "/Users/dadi/.platformio/packages/toolchain-atmelavr/bin/avr-g++ -o .pio/build/nanoatmega328new/FrameworkArduino/abi.cpp.o -c -fno-exceptions -fno-threadsafe-statics -fpermissive -std=gnu++11 -mmcu=atmega328p -Os -Wall -ffunction-sections -fdata-sections -flto -DPLATFORMIO=60119 -DARDUINO_AVR_NANO -DF_CPU=16000000L -DARDUINO_ARCH_AVR -DARDUINO=10808 -I/Users/dadi/.platformio/packages/framework-arduino-avr/cores/arduino -I/Users/dadi/.platformio/packages/framework-arduino-avr/variants/eightanaloginputs /Users/dadi/.platformio/packages/framework-arduino-avr/cores/arduino/abi.cpp", - "directory": "/Users/dadi/embedded/proj1", - "file": "/Users/dadi/.platformio/packages/framework-arduino-avr/cores/arduino/abi.cpp", - "output": ".pio/build/nanoatmega328new/FrameworkArduino/abi.cpp.o" - }, - { - "command": "/Users/dadi/.platformio/packages/toolchain-atmelavr/bin/avr-gcc -o .pio/build/nanoatmega328new/FrameworkArduino/hooks.c.o -c -std=gnu11 -fno-fat-lto-objects -mmcu=atmega328p -Os -Wall -ffunction-sections -fdata-sections -flto -DPLATFORMIO=60119 -DARDUINO_AVR_NANO -DF_CPU=16000000L -DARDUINO_ARCH_AVR -DARDUINO=10808 -I/Users/dadi/.platformio/packages/framework-arduino-avr/cores/arduino -I/Users/dadi/.platformio/packages/framework-arduino-avr/variants/eightanaloginputs /Users/dadi/.platformio/packages/framework-arduino-avr/cores/arduino/hooks.c", - "directory": "/Users/dadi/embedded/proj1", - "file": "/Users/dadi/.platformio/packages/framework-arduino-avr/cores/arduino/hooks.c", - "output": ".pio/build/nanoatmega328new/FrameworkArduino/hooks.c.o" - }, - { - "command": "/Users/dadi/.platformio/packages/toolchain-atmelavr/bin/avr-g++ -o .pio/build/nanoatmega328new/FrameworkArduino/main.cpp.o -c -fno-exceptions -fno-threadsafe-statics -fpermissive -std=gnu++11 -mmcu=atmega328p -Os -Wall -ffunction-sections -fdata-sections -flto -DPLATFORMIO=60119 -DARDUINO_AVR_NANO -DF_CPU=16000000L -DARDUINO_ARCH_AVR -DARDUINO=10808 -I/Users/dadi/.platformio/packages/framework-arduino-avr/cores/arduino -I/Users/dadi/.platformio/packages/framework-arduino-avr/variants/eightanaloginputs /Users/dadi/.platformio/packages/framework-arduino-avr/cores/arduino/main.cpp", - "directory": "/Users/dadi/embedded/proj1", - "file": "/Users/dadi/.platformio/packages/framework-arduino-avr/cores/arduino/main.cpp", - "output": ".pio/build/nanoatmega328new/FrameworkArduino/main.cpp.o" - }, - { - "command": "/Users/dadi/.platformio/packages/toolchain-atmelavr/bin/avr-g++ -o .pio/build/nanoatmega328new/FrameworkArduino/new.cpp.o -c -fno-exceptions -fno-threadsafe-statics -fpermissive -std=gnu++11 -mmcu=atmega328p -Os -Wall -ffunction-sections -fdata-sections -flto -DPLATFORMIO=60119 -DARDUINO_AVR_NANO -DF_CPU=16000000L -DARDUINO_ARCH_AVR -DARDUINO=10808 -I/Users/dadi/.platformio/packages/framework-arduino-avr/cores/arduino -I/Users/dadi/.platformio/packages/framework-arduino-avr/variants/eightanaloginputs /Users/dadi/.platformio/packages/framework-arduino-avr/cores/arduino/new.cpp", - "directory": "/Users/dadi/embedded/proj1", - "file": "/Users/dadi/.platformio/packages/framework-arduino-avr/cores/arduino/new.cpp", - "output": ".pio/build/nanoatmega328new/FrameworkArduino/new.cpp.o" - }, - { - "command": "/Users/dadi/.platformio/packages/toolchain-atmelavr/bin/avr-gcc -o .pio/build/nanoatmega328new/FrameworkArduino/wiring.c.o -c -std=gnu11 -fno-fat-lto-objects -mmcu=atmega328p -Os -Wall -ffunction-sections -fdata-sections -flto -DPLATFORMIO=60119 -DARDUINO_AVR_NANO -DF_CPU=16000000L -DARDUINO_ARCH_AVR -DARDUINO=10808 -I/Users/dadi/.platformio/packages/framework-arduino-avr/cores/arduino -I/Users/dadi/.platformio/packages/framework-arduino-avr/variants/eightanaloginputs /Users/dadi/.platformio/packages/framework-arduino-avr/cores/arduino/wiring.c", - "directory": "/Users/dadi/embedded/proj1", - "file": "/Users/dadi/.platformio/packages/framework-arduino-avr/cores/arduino/wiring.c", - "output": ".pio/build/nanoatmega328new/FrameworkArduino/wiring.c.o" - }, - { - "command": "/Users/dadi/.platformio/packages/toolchain-atmelavr/bin/avr-gcc -o .pio/build/nanoatmega328new/FrameworkArduino/wiring_analog.c.o -c -std=gnu11 -fno-fat-lto-objects -mmcu=atmega328p -Os -Wall -ffunction-sections -fdata-sections -flto -DPLATFORMIO=60119 -DARDUINO_AVR_NANO -DF_CPU=16000000L -DARDUINO_ARCH_AVR -DARDUINO=10808 -I/Users/dadi/.platformio/packages/framework-arduino-avr/cores/arduino -I/Users/dadi/.platformio/packages/framework-arduino-avr/variants/eightanaloginputs /Users/dadi/.platformio/packages/framework-arduino-avr/cores/arduino/wiring_analog.c", - "directory": "/Users/dadi/embedded/proj1", - "file": "/Users/dadi/.platformio/packages/framework-arduino-avr/cores/arduino/wiring_analog.c", - "output": ".pio/build/nanoatmega328new/FrameworkArduino/wiring_analog.c.o" - }, - { - "command": "/Users/dadi/.platformio/packages/toolchain-atmelavr/bin/avr-gcc -o .pio/build/nanoatmega328new/FrameworkArduino/wiring_digital.c.o -c -std=gnu11 -fno-fat-lto-objects -mmcu=atmega328p -Os -Wall -ffunction-sections -fdata-sections -flto -DPLATFORMIO=60119 -DARDUINO_AVR_NANO -DF_CPU=16000000L -DARDUINO_ARCH_AVR -DARDUINO=10808 -I/Users/dadi/.platformio/packages/framework-arduino-avr/cores/arduino -I/Users/dadi/.platformio/packages/framework-arduino-avr/variants/eightanaloginputs /Users/dadi/.platformio/packages/framework-arduino-avr/cores/arduino/wiring_digital.c", - "directory": "/Users/dadi/embedded/proj1", - "file": "/Users/dadi/.platformio/packages/framework-arduino-avr/cores/arduino/wiring_digital.c", - "output": ".pio/build/nanoatmega328new/FrameworkArduino/wiring_digital.c.o" - }, - { - "command": "/Users/dadi/.platformio/packages/toolchain-atmelavr/bin/avr-gcc -mmcu=atmega328p -x assembler-with-cpp -DPLATFORMIO=60119 -DARDUINO_AVR_NANO -DF_CPU=16000000L -DARDUINO_ARCH_AVR -DARDUINO=10808 -I/Users/dadi/.platformio/packages/framework-arduino-avr/cores/arduino -I/Users/dadi/.platformio/packages/framework-arduino-avr/variants/eightanaloginputs -c -o .pio/build/nanoatmega328new/FrameworkArduino/wiring_pulse.S.o /Users/dadi/.platformio/packages/framework-arduino-avr/cores/arduino/wiring_pulse.S", - "directory": "/Users/dadi/embedded/proj1", - "file": "/Users/dadi/.platformio/packages/framework-arduino-avr/cores/arduino/wiring_pulse.S", - "output": ".pio/build/nanoatmega328new/FrameworkArduino/wiring_pulse.S.o" - }, - { - "command": "/Users/dadi/.platformio/packages/toolchain-atmelavr/bin/avr-gcc -o .pio/build/nanoatmega328new/FrameworkArduino/wiring_pulse.c.o -c -std=gnu11 -fno-fat-lto-objects -mmcu=atmega328p -Os -Wall -ffunction-sections -fdata-sections -flto -DPLATFORMIO=60119 -DARDUINO_AVR_NANO -DF_CPU=16000000L -DARDUINO_ARCH_AVR -DARDUINO=10808 -I/Users/dadi/.platformio/packages/framework-arduino-avr/cores/arduino -I/Users/dadi/.platformio/packages/framework-arduino-avr/variants/eightanaloginputs /Users/dadi/.platformio/packages/framework-arduino-avr/cores/arduino/wiring_pulse.c", - "directory": "/Users/dadi/embedded/proj1", - "file": "/Users/dadi/.platformio/packages/framework-arduino-avr/cores/arduino/wiring_pulse.c", - "output": ".pio/build/nanoatmega328new/FrameworkArduino/wiring_pulse.c.o" - }, - { - "command": "/Users/dadi/.platformio/packages/toolchain-atmelavr/bin/avr-gcc -o .pio/build/nanoatmega328new/FrameworkArduino/wiring_shift.c.o -c -std=gnu11 -fno-fat-lto-objects -mmcu=atmega328p -Os -Wall -ffunction-sections -fdata-sections -flto -DPLATFORMIO=60119 -DARDUINO_AVR_NANO -DF_CPU=16000000L -DARDUINO_ARCH_AVR -DARDUINO=10808 -I/Users/dadi/.platformio/packages/framework-arduino-avr/cores/arduino -I/Users/dadi/.platformio/packages/framework-arduino-avr/variants/eightanaloginputs /Users/dadi/.platformio/packages/framework-arduino-avr/cores/arduino/wiring_shift.c", - "directory": "/Users/dadi/embedded/proj1", - "file": "/Users/dadi/.platformio/packages/framework-arduino-avr/cores/arduino/wiring_shift.c", - "output": ".pio/build/nanoatmega328new/FrameworkArduino/wiring_shift.c.o" - }, - { - "command": "/Users/dadi/.platformio/packages/toolchain-atmelavr/bin/avr-g++ -o .pio/build/nanoatmega328new/src/digital_in.cpp.o -c -fno-exceptions -fno-threadsafe-statics -fpermissive -std=gnu++11 -mmcu=atmega328p -Os -Wall -ffunction-sections -fdata-sections -flto -DPLATFORMIO=60119 -DARDUINO_AVR_NANO -DF_CPU=16000000L -DARDUINO_ARCH_AVR -DARDUINO=10808 -Iinclude -Isrc -I/Users/dadi/.platformio/packages/framework-arduino-avr/cores/arduino -I/Users/dadi/.platformio/packages/framework-arduino-avr/variants/eightanaloginputs src/digital_in.cpp", - "directory": "/Users/dadi/embedded/proj1", - "file": "src/digital_in.cpp", - "output": ".pio/build/nanoatmega328new/src/digital_in.cpp.o" - }, - { - "command": "/Users/dadi/.platformio/packages/toolchain-atmelavr/bin/avr-g++ -o .pio/build/nanoatmega328new/src/digital_out.cpp.o -c -fno-exceptions -fno-threadsafe-statics -fpermissive -std=gnu++11 -mmcu=atmega328p -Os -Wall -ffunction-sections -fdata-sections -flto -DPLATFORMIO=60119 -DARDUINO_AVR_NANO -DF_CPU=16000000L -DARDUINO_ARCH_AVR -DARDUINO=10808 -Iinclude -Isrc -I/Users/dadi/.platformio/packages/framework-arduino-avr/cores/arduino -I/Users/dadi/.platformio/packages/framework-arduino-avr/variants/eightanaloginputs src/digital_out.cpp", - "directory": "/Users/dadi/embedded/proj1", - "file": "src/digital_out.cpp", - "output": ".pio/build/nanoatmega328new/src/digital_out.cpp.o" - }, - { - "command": "/Users/dadi/.platformio/packages/toolchain-atmelavr/bin/avr-g++ -o .pio/build/nanoatmega328new/src/main.cpp.o -c -fno-exceptions -fno-threadsafe-statics -fpermissive -std=gnu++11 -mmcu=atmega328p -Os -Wall -ffunction-sections -fdata-sections -flto -DPLATFORMIO=60119 -DARDUINO_AVR_NANO -DF_CPU=16000000L -DARDUINO_ARCH_AVR -DARDUINO=10808 -Iinclude -Isrc -I/Users/dadi/.platformio/packages/framework-arduino-avr/cores/arduino -I/Users/dadi/.platformio/packages/framework-arduino-avr/variants/eightanaloginputs src/main.cpp", - "directory": "/Users/dadi/embedded/proj1", - "file": "src/main.cpp", - "output": ".pio/build/nanoatmega328new/src/main.cpp.o" - }, - { - "command": "/Users/dadi/.platformio/packages/toolchain-atmelavr/bin/avr-g++ -o .pio/build/nanoatmega328new/src/part1_first_working_main.cpp.o -c -fno-exceptions -fno-threadsafe-statics -fpermissive -std=gnu++11 -mmcu=atmega328p -Os -Wall -ffunction-sections -fdata-sections -flto -DPLATFORMIO=60119 -DARDUINO_AVR_NANO -DF_CPU=16000000L -DARDUINO_ARCH_AVR -DARDUINO=10808 -Iinclude -Isrc -I/Users/dadi/.platformio/packages/framework-arduino-avr/cores/arduino -I/Users/dadi/.platformio/packages/framework-arduino-avr/variants/eightanaloginputs src/part1_first_working_main.cpp", - "directory": "/Users/dadi/embedded/proj1", - "file": "src/part1_first_working_main.cpp", - "output": ".pio/build/nanoatmega328new/src/part1_first_working_main.cpp.o" - }, - { - "command": "/Users/dadi/.platformio/packages/toolchain-atmelavr/bin/avr-g++ -o .pio/build/nanoatmega328new/src/part1part2.cpp.o -c -fno-exceptions -fno-threadsafe-statics -fpermissive -std=gnu++11 -mmcu=atmega328p -Os -Wall -ffunction-sections -fdata-sections -flto -DPLATFORMIO=60119 -DARDUINO_AVR_NANO -DF_CPU=16000000L -DARDUINO_ARCH_AVR -DARDUINO=10808 -Iinclude -Isrc -I/Users/dadi/.platformio/packages/framework-arduino-avr/cores/arduino -I/Users/dadi/.platformio/packages/framework-arduino-avr/variants/eightanaloginputs src/part1part2.cpp", - "directory": "/Users/dadi/embedded/proj1", - "file": "src/part1part2.cpp", - "output": ".pio/build/nanoatmega328new/src/part1part2.cpp.o" - }, - { - "command": "/Users/dadi/.platformio/packages/toolchain-atmelavr/bin/avr-g++ -o .pio/build/nanoatmega328new/src/part3part1.cpp.o -c -fno-exceptions -fno-threadsafe-statics -fpermissive -std=gnu++11 -mmcu=atmega328p -Os -Wall -ffunction-sections -fdata-sections -flto -DPLATFORMIO=60119 -DARDUINO_AVR_NANO -DF_CPU=16000000L -DARDUINO_ARCH_AVR -DARDUINO=10808 -Iinclude -Isrc -I/Users/dadi/.platformio/packages/framework-arduino-avr/cores/arduino -I/Users/dadi/.platformio/packages/framework-arduino-avr/variants/eightanaloginputs src/part3part1.cpp", - "directory": "/Users/dadi/embedded/proj1", - "file": "src/part3part1.cpp", - "output": ".pio/build/nanoatmega328new/src/part3part1.cpp.o" - }, - { - "command": "/Users/dadi/.platformio/packages/toolchain-atmelavr/bin/avr-g++ -o .pio/build/nanoatmega328new/src/rotary_encoder_driver.cpp.o -c -fno-exceptions -fno-threadsafe-statics -fpermissive -std=gnu++11 -mmcu=atmega328p -Os -Wall -ffunction-sections -fdata-sections -flto -DPLATFORMIO=60119 -DARDUINO_AVR_NANO -DF_CPU=16000000L -DARDUINO_ARCH_AVR -DARDUINO=10808 -Iinclude -Isrc -I/Users/dadi/.platformio/packages/framework-arduino-avr/cores/arduino -I/Users/dadi/.platformio/packages/framework-arduino-avr/variants/eightanaloginputs src/rotary_encoder_driver.cpp", - "directory": "/Users/dadi/embedded/proj1", - "file": "src/rotary_encoder_driver.cpp", - "output": ".pio/build/nanoatmega328new/src/rotary_encoder_driver.cpp.o" - }, - { - "command": "/Users/dadi/.platformio/packages/toolchain-atmelavr/bin/avr-g++ -o .pio/build/nanoatmega328new/src/timer_usec.cpp.o -c -fno-exceptions -fno-threadsafe-statics -fpermissive -std=gnu++11 -mmcu=atmega328p -Os -Wall -ffunction-sections -fdata-sections -flto -DPLATFORMIO=60119 -DARDUINO_AVR_NANO -DF_CPU=16000000L -DARDUINO_ARCH_AVR -DARDUINO=10808 -Iinclude -Isrc -I/Users/dadi/.platformio/packages/framework-arduino-avr/cores/arduino -I/Users/dadi/.platformio/packages/framework-arduino-avr/variants/eightanaloginputs src/timer_usec.cpp", - "directory": "/Users/dadi/embedded/proj1", - "file": "src/timer_usec.cpp", - "output": ".pio/build/nanoatmega328new/src/timer_usec.cpp.o" - } -] diff --git a/docs/diagrams/src/motor_state.wsd b/docs/diagrams/src/motor_state.wsd index fea22e6..151c8cf 100644 --- a/docs/diagrams/src/motor_state.wsd +++ b/docs/diagrams/src/motor_state.wsd @@ -1,5 +1,7 @@ @startuml - +' skinparam linetype ortho +' skinparam nodesep 100 +skinparam ranksep 80 skinparam state { BackgroundColor LightBlue @@ -11,6 +13,7 @@ state Initialization Initialization : Entry / Stop motor Initialization : Do / Initialize internal parameters Initialization : Do / Reset speed measurement + Initialization : Do / Wait 2 seconds Initialization : Exit / Send Boot-up message @@ -18,11 +21,10 @@ state Initialization state Operational Operational : Entry / LED on Operational : Do / Run speed controller - Operational : Exit / Stop motor - Operational : Exit / LED off + Operational : Exit / Stop motor and LED off -Initialization --> Operational : initialization complete +Initialization --> Operational : initialization\n complete Operational --> Initialization : reset @enduml diff --git a/include/initialization_state.h b/include/initialization_state.h index edc53e7..01cc28c 100644 --- a/include/initialization_state.h +++ b/include/initialization_state.h @@ -6,6 +6,11 @@ class InitializationState : public State { +private: + static const unsigned long WAIT_MS = 2000; + + unsigned long enter_time_ms = 0; + public: void enter() override; diff --git a/scripts/plot_step_response.py b/scripts/plot_step_response.py new file mode 100644 index 0000000..cee95a2 --- /dev/null +++ b/scripts/plot_step_response.py @@ -0,0 +1,91 @@ +#!/usr/bin/env python3 +""" +Teiknar step response-plott ur CSV-gognum sem Arduino-verkefnid prentar ut +(dalkar: time_ms, ref_rpm, actual_rpm, pwm_requested, pwm_actual). + +pwm_requested = Kp * error * 2.55, oklippt (getur farid langt yfir +-255) +pwm_actual = sama gildi en klippt vid +-255, þ.e. þad sem raunverulega + var sent a motor.set() / vélbúnaðinn + +Notkun: + python plot_step_response.py [inntak.csv] [uttak.png] [titill] + +Sjalfgefid: data/step_response.csv -> data/step_response.png +""" +import sys +import csv +import matplotlib.pyplot as plt + + +def load_csv(path): + cols = {"time_ms": [], "ref_rpm": [], "actual_rpm": [], + "pwm_requested": [], "pwm_actual": []} + with open(path, newline="") as f: + reader = csv.DictReader(f) + for row in reader: + try: + for key in cols: + cols[key].append(float(row[key])) + except (ValueError, KeyError): + # sleppir linum sem eru ekki gild data (t.d. rusl fyrir/eftir) + for key in cols: + if len(cols[key]) > len(cols["time_ms"]): + cols[key].pop() + continue + return cols + + +def plot(cols, out_path, title_suffix=""): + time_s = [t / 1000.0 for t in cols["time_ms"]] + ref_rpm = cols["ref_rpm"] + actual_rpm = cols["actual_rpm"] + pwm_requested = cols["pwm_requested"] + pwm_actual = cols["pwm_actual"] + + fig, ax1 = plt.subplots(figsize=(10, 5)) + + ax1.plot(time_s, ref_rpm, label="Reference (ref_rpm)", color="#666666", + linestyle="--", linewidth=1.5) + ax1.plot(time_s, actual_rpm, label="Measured (actual_rpm)", color="#1f77b4", + linewidth=1.8) + ax1.set_xlabel("Time [s]") + ax1.set_ylabel("Angular velocity [RPM]") + ax1.grid(True, alpha=0.3) + + ax2 = ax1.twinx() + ax2.plot(time_s, pwm_requested, label="PWM requested (unclamped)", + color="#d62728", linewidth=1.0, alpha=0.5, linestyle=":") + ax2.plot(time_s, pwm_actual, label="PWM actual (clamped)", + color="#d62728", linewidth=1.4) + ax2.axhline(255, color="#d62728", linewidth=0.6, alpha=0.3) + ax2.axhline(-255, color="#d62728", linewidth=0.6, alpha=0.3) + ax2.set_ylabel("PWM [-255, 255]") + + # Merkjum stokkpunktinn (fyrsta stadin thar sem ref hoppar fra 0) + step_idx = next((i for i, r in enumerate(ref_rpm) if r > 0), None) + if step_idx is not None: + ax1.axvline(time_s[step_idx], color="black", linewidth=0.8, + linestyle=":") + ax1.text(time_s[step_idx], max(actual_rpm) * 1.02, " step", + fontsize=9, va="bottom") + + lines1, labels1 = ax1.get_legend_handles_labels() + lines2, labels2 = ax2.get_legend_handles_labels() + ax1.legend(lines1 + lines2, labels1 + labels2, loc="lower right", + fontsize=8) + + title = "Double step response: RPM and PWM over time" + if title_suffix: + title += f" ({title_suffix})" + fig.suptitle(title) + fig.tight_layout() + fig.savefig(out_path, dpi=150) + print(f"Vistad: {out_path}") + + +if __name__ == "__main__": + in_path = sys.argv[1] if len(sys.argv) > 1 else "data/twostep.csv" + out_path = sys.argv[2] if len(sys.argv) > 2 else "data/twostep.png" + title_suffix = sys.argv[3] if len(sys.argv) > 3 else "" + data = load_csv(in_path) + plot(data, out_path, title_suffix) diff --git a/src/initialization_state.cpp b/src/initialization_state.cpp index 9e2e8c0..f7db3bb 100644 --- a/src/initialization_state.cpp +++ b/src/initialization_state.cpp @@ -15,13 +15,17 @@ void InitializationState::enter() context->reset_speed_measurement(); - Serial.println("Boot-up"); + enter_time_ms = millis(); } void InitializationState::update() { - context->to_operational(); + // Non-blocking bið svo aðallykkjan haldi áfram að keyra + if (millis() - enter_time_ms >= WAIT_MS) + { + context->to_operational(); + } } @@ -32,4 +36,5 @@ void InitializationState::command(char c) void InitializationState::exit() { -} \ No newline at end of file + Serial.println("Boot-up"); +} diff --git a/src/main.cpp b/src/main.cpp index 20aad4c..6f59596 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -78,4 +78,8 @@ int main() return 0; -} \ No newline at end of file +} + +// int main(){ +// return 0; +// } \ No newline at end of file diff --git a/src/main_P2.cpp b/src/main_P2.cpp deleted file mode 100644 index dec3819..0000000 --- a/src/main_P2.cpp +++ /dev/null @@ -1,88 +0,0 @@ -/* #include -#include -#include - -#include "rotary_encoder_driver.h" -#include "motor_driver.h" -#include "p_controller.h" - -RotaryEncoderDriver encoder; -MotorDriver motor; - -P_controller controller(12.5); - -const double REF_RPM1 = 30.0; -const double REF_RPM2 = 50.0; - -const uint16_t STEP1_AT_SAMPLE = 50; -const uint16_t STEP2_AT_SAMPLE = 500; - -const uint16_t STOP_AT_SAMPLE = 1000; - -int main() { - init(); - Serial.begin(115200); - - cli(); - encoder.begin(); - motor.begin(); - sei(); - - // Mótor stopp og smá bið svo kerfið sé í kyrrstöðu áður en mælingin hefst - motor.stop(); - _delay_ms(2000); - - Serial.println("time_ms,ref_rpm,actual_rpm,pwm_requested,pwm_actual"); - Serial.println("0.0,0.0,0.0,0.0,0.0"); - - encoder.reset_speed_measurement(); - - uint16_t sample = 0; - double ref = 0.0; - - while (true) { - if (encoder.new_speed_available()) { - sample++; - - float time_ms = sample * 4.0f; - - // Step-inntak: viðmiðið hoppar úr 0 í REF_RPM á STEP_AT_SAMPLE - if (sample == STEP1_AT_SAMPLE) { - ref = REF_RPM1; - } - - if (sample == STEP2_AT_SAMPLE) { - ref = REF_RPM2; - } - - double actual = encoder.rpm(); - - double pwm_percent = controller.update(ref, actual); - double pwm_requested = pwm_percent * 2.55; - - double pwm_actual = pwm_requested; - if (pwm_actual > 255.0) pwm_actual = 255.0; - if (pwm_actual < -255.0) pwm_actual = -255.0; - - motor.set(pwm_actual); - - Serial.print(time_ms, 1); - Serial.print(","); - Serial.print(ref, 1); - Serial.print(","); - Serial.print(actual, 2); - Serial.print(","); - Serial.print(pwm_requested, 1); - Serial.print(","); - Serial.println(pwm_actual, 1); - - if (sample >= STOP_AT_SAMPLE) { - motor.stop(); - while (true) { - } - } - } - } - return 0; -} - */ \ No newline at end of file diff --git a/src/motor_controller.cpp b/src/motor_controller.cpp index c5358cc..23cd265 100644 --- a/src/motor_controller.cpp +++ b/src/motor_controller.cpp @@ -15,7 +15,7 @@ MotorController::MotorController( encoder(encoder), motor(motor), controller(controller), - reference_rpm(30.0) + reference_rpm(40.0) { } diff --git a/src/motor_driver.cpp b/src/motor_driver.cpp index 8dae91a..e15b6e0 100644 --- a/src/motor_driver.cpp +++ b/src/motor_driver.cpp @@ -3,6 +3,37 @@ #include +// Í Fast PWM gefur OCR = 0 samt einn stuttan púls í hverri lotu. +// Til að pinni sé alveg LOW er hann aftengdur frá timernum (COM-bitar) +// og keyrður LOW gegnum PORT-registerið. + +static void ain1_off() // D3 = PD3 = OC2B +{ + TCCR2A &= ~(1 << COM2B1); + PORTD &= ~(1 << PORTD3); + OCR2B = 0; +} + +static void ain2_off() // D11 = PB3 = OC2A +{ + TCCR2A &= ~(1 << COM2A1); + PORTB &= ~(1 << PORTB3); + OCR2A = 0; +} + +static void ain1_pwm(uint8_t duty) +{ + OCR2B = duty; + TCCR2A |= (1 << COM2B1); +} + +static void ain2_pwm(uint8_t duty) +{ + OCR2A = duty; + TCCR2A |= (1 << COM2A1); +} + + MotorDriver::MotorDriver() { } @@ -24,57 +55,32 @@ void MotorDriver::begin() TCCR2A |= (1 << WGM20); TCCR2A |= (1 << WGM21); - // Non-inverting PWM on OC2A and OC2B - TCCR2A |= (1 << COM2A1); - TCCR2A |= (1 << COM2B1); - - // Timer2 prescaler = 32 TCCR2B |= (1 << CS21); TCCR2B |= (1 << CS20); - OCR2A = 0; - OCR2B = 0; - - //stop(); + // PWM-úttök eru tengd í set() eftir þörfum + stop(); } void MotorDriver::forward() { - // AIN1 / D3 = HIGH - // AIN2 / D11 = LOW - - //PORTD |= (1 << PORTD3); - //PORTB &= ~(1 << PORTB3); - - OCR2A = 0; - OCR2B = 255; + set(255.0); } void MotorDriver::reverse() { - // AIN1 / D3 = LOW - // AIN2 / D11 = HIGH - - //PORTD &= ~(1 << PORTD3); - //PORTB |= (1 << PORTB3); - - OCR2B = 0; - OCR2A = 255; + set(-255.0); } void MotorDriver::stop() { // Both LOW - - //PORTD &= ~(1 << PORTD3); - //PORTB &= ~(1 << PORTB3); - - OCR2A = 0; - OCR2B = 0; + ain1_off(); + ain2_off(); } void MotorDriver::set(double pwm) @@ -91,20 +97,22 @@ void MotorDriver::set(double pwm) } - if (pwm > 0) - { - // Forward - OCR2A = 0; - OCR2B = (uint8_t)pwm; - } - else if (pwm < 0) - { - // Reverse - OCR2B = 0; - OCR2A = (uint8_t)(-pwm); - } - else + uint8_t duty = (uint8_t)(pwm > 0 ? pwm : -pwm); + + if (duty == 0) { stop(); } -} \ No newline at end of file + else if (pwm > 0) + { + // Forward + ain2_off(); + ain1_pwm(duty); + } + else + { + // Reverse + ain1_off(); + ain2_pwm(duty); + } +} diff --git a/src/rotary_encoder_driver_unused.cpp b/src/rotary_encoder_driver_unused.cpp deleted file mode 100644 index 9459537..0000000 --- a/src/rotary_encoder_driver_unused.cpp +++ /dev/null @@ -1,61 +0,0 @@ -/* #include "rotary_encoder_driver.h" -#include - -RotaryEncoderDriver* driver = nullptr; - -RotaryEncoderDriver::RotaryEncoderDriver() - : cycle(0) - , count(0) - , prev_count(0) - , led(5) - , eA(2) - , eB(5) {} - -void RotaryEncoderDriver::begin() { - driver = this; - - led.init(); - eA.init(); - eB.init(); - - EICRA |= (1<update(); -} -ISR(TIMER1_COMPA_vect) { - driver->update_delta(); -} - - */ \ No newline at end of file diff --git a/src/temporary_main.cpp b/src/temporary_main.cpp deleted file mode 100644 index b51b730..0000000 --- a/src/temporary_main.cpp +++ /dev/null @@ -1,53 +0,0 @@ -/* Óvirkt núna, "alvöru" main() er í main.cpp. Þessi skrá var notuð í undirbúning/prófun - -#include - -#include "p_controller.h" - -P_controller controller(2.0); - -int main() -{ - init(); - - Serial.begin(115200); - - double result = controller.update(100.0, 70.0); - - Serial.print("PWM = "); - Serial.println(result); - - while (true) - { - } - - return 0; -} - - -#include -#include - -#include "motor_driver.h" - -MotorDriver motor; - -int main() -{ - init(); - - motor.begin(); - - while (true) - { - motor.set(60); - _delay_ms(3000); - - motor.set(120); - _delay_ms(3000); - - motor.set(240); - _delay_ms(3000); - } -} -*/