From 8be0cb4a13eda4beb24e3d3e4cf75bfc9bdc7ab7 Mon Sep 17 00:00:00 2001 From: Sam Hos Date: Tue, 6 May 2025 13:48:44 +0200 Subject: [PATCH] unfinished docs --- docs/final_project/final_project.md | 88 ++++++++++++++++++++++++++++- 1 file changed, 85 insertions(+), 3 deletions(-) diff --git a/docs/final_project/final_project.md b/docs/final_project/final_project.md index ae2f9d4..02c0495 100644 --- a/docs/final_project/final_project.md +++ b/docs/final_project/final_project.md @@ -168,11 +168,92 @@ ESPC3 --> ESPC6 Thread 1 : Send data to flight controller using ESPNOW ``` I've already gotten the motors to spin in [week 10](../Assignments/week_10_output_devices/output_devices.md) using the script in there. Now I also need to modify the original VTOL driver so my ESC's can properly understand it's instructions. -//TODO: Continue this +There's one specific function I need to change. +??? Old code + ```cpp + void commandMotors() + { + // DESCRIPTION: Send pulses to motor pins, oneshot125 protocol + /* + * My crude implimentation of OneShot125 protocol which sends 125 - 250us pulses to the ESCs (mXPin). The pulselengths being + * sent are mX_command_PWM, computed in scaleCommands(). This may be replaced by something more efficient in the future. + */ + int wentLow = 0; + int pulseStart, timer; + int flagM1 = 0; + int flagM2 = 0; + int flagM3 = 0; + int flagM4 = 0; + int flagM5 = 0; + int flagM6 = 0; -https://grabcad.com/library/readytosky-rs2205-1 + // Write all motor pins high + digitalWrite(m1Pin, HIGH); + digitalWrite(m2Pin, HIGH); + digitalWrite(m3Pin, HIGH); + digitalWrite(m4Pin, HIGH); + digitalWrite(m5Pin, HIGH); + digitalWrite(m6Pin, HIGH); + pulseStart = micros(); + // Write each motor pin low as correct pulse length is reached + while (wentLow < 6) + { // Keep going until final (6th) pulse is finished, then done + timer = micros(); + if ((m1_command_PWM <= timer - pulseStart) && (flagM1 == 0)) + { + digitalWrite(m1Pin, LOW); + wentLow = wentLow + 1; + flagM1 = 1; + } + if ((m2_command_PWM <= timer - pulseStart) && (flagM2 == 0)) + { + digitalWrite(m2Pin, LOW); + wentLow = wentLow + 1; + flagM2 = 1; + } + if ((m3_command_PWM <= timer - pulseStart) && (flagM3 == 0)) + { + digitalWrite(m3Pin, LOW); + wentLow = wentLow + 1; + flagM3 = 1; + } + if ((m4_command_PWM <= timer - pulseStart) && (flagM4 == 0)) + { + digitalWrite(m4Pin, LOW); + wentLow = wentLow + 1; + flagM4 = 1; + } + if ((m5_command_PWM <= timer - pulseStart) && (flagM5 == 0)) + { + digitalWrite(m5Pin, LOW); + wentLow = wentLow + 1; + flagM5 = 1; + } + if ((m6_command_PWM <= timer - pulseStart) && (flagM6 == 0)) + { + digitalWrite(m6Pin, LOW); + wentLow = wentLow + 1; + flagM6 = 1; + } + } + } + ``` +What this function does is generate PWM values in software which is super inefficient. The esp32C6 according to it's datasheet supports 6 seperate PWM clocks in hardware. +![alt text](image-24.png) +So I wanna use these to reduce the overhead and so the loop doesn't have to run 20 times a second but faster making the drone respond faster. To use these I need to use this library. +Right link: [https://docs.espressif.com/projects/arduino-esp32/en/latest/api/ledc.html](https://docs.espressif.com/projects/arduino-esp32/en/latest/api/ledc.html) + +When first looking at the documentation I got super confused why nothing was working but that was because I was looking at the documentation for the wrong framework. I was looking at the ESP-IDF framework instead of the Arduino framework. +Wrong link: [https://docs.espressif.com/projects/esp-idf/en/stable/esp32/api-reference/peripherals/ledc.html](https://docs.espressif.com/projects/esp-idf/en/stable/esp32/api-reference/peripherals/ledc.html) + +So I really needed 2 functions of the library. +* To set pwm channel, pin and resolution (ledcAttach) +* To set the PWM frequency (ledcWrite) + +![alt text](image-25.png) +![alt text](image-26.png) ## Generative design Online I saw a lot of organic designs that where created by generative design. @@ -248,4 +329,5 @@ Once it starts generating this will pop up. These are the finished results. The ## Files -* [Handheld controller pcb](Drone%20controller.zip) \ No newline at end of file +* [Handheld controller pcb](Drone%20controller.zip) +* [Drone motor 3D file](https://grabcad.com/library/readytosky-rs2205-1) \ No newline at end of file