Skip to content

Commit 9cc5ab8

Browse files
committed
add atmega example for simplefocnano shield
1 parent 6468e52 commit 9cc5ab8

File tree

2 files changed

+76
-8
lines changed

2 files changed

+76
-8
lines changed

.github/workflows/ccpp.yml

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -26,41 +26,41 @@ jobs:
2626
- arduino:mbed_rp2040:pico # rpi pico
2727
include:
2828
- arduino-boards-fqbn: arduino:avr:nano
29-
sketches-exclude: calibrated mt6816_spi smoothing
29+
sketches-exclude: calibrated mt6816_spi smoothing simplefocnano_torque_voltage
3030
required-libraries: Simple FOC
3131
- arduino-boards-fqbn: arduino:sam:arduino_due_x
3232
required-libraries: Simple FOC
33-
sketches-exclude: calibrated smoothing simplefocnano_torque_voltage
33+
sketches-exclude: calibrated smoothing simplefocnano_torque_voltage simplefocnano_atmega
3434
- arduino-boards-fqbn: arduino:samd:nano_33_iot
3535
required-libraries: Simple FOC
3636
sketches-exclude: calibrated smoothing
3737
- arduino-boards-fqbn: arduino:mbed_rp2040:pico
3838
required-libraries: Simple FOC
39-
sketches-exclude: calibrated smoothing simplefocnano_torque_voltage
39+
sketches-exclude: calibrated smoothing simplefocnano_torque_voltage simplefocnano_atmega
4040
- arduino-boards-fqbn: adafruit:samd:adafruit_metro_m4
4141
platform-url: https://adafruit.github.io/arduino-board-index/package_adafruit_index.json
4242
required-libraries: Simple FOC
43-
sketches-exclude: calibrated smoothing simplefocnano_torque_voltage
43+
sketches-exclude: calibrated smoothing simplefocnano_torque_voltage simplefocnano_atmega
4444
# - arduino-boards-fqbn: esp32:esp32:esp32doit-devkit-v1
4545
# platform-url: https://dl.espressif.com/dl/package_esp32_index.json
4646
# required-libraries: Simple FOC
4747
# sketch-names: '**.ino'
4848
- arduino-boards-fqbn: esp32:esp32:esp32 # esp32
4949
platform-url: https://espressif.github.io/arduino-esp32/package_esp32_index.json
5050
required-libraries: Simple FOC
51-
sketches-exclude: calibrated smoothing simplefocnano_torque_voltage
51+
sketches-exclude: calibrated smoothing simplefocnano_torque_voltage simplefocnano_atmega
5252
- arduino-boards-fqbn: esp32:esp32:esp32s2 # esp32s2
5353
platform-url: https://espressif.github.io/arduino-esp32/package_esp32_index.json
5454
required-libraries: Simple FOC
55-
sketches-exclude: calibrated smoothing simplefocnano_torque_voltage
55+
sketches-exclude: calibrated smoothing simplefocnano_torque_voltage simplefocnano_atmega
5656
- arduino-boards-fqbn: STMicroelectronics:stm32:GenF1:pnum=BLUEPILL_F103C8
5757
platform-url: https://github.com/stm32duino/BoardManagerFiles/raw/main/package_stmicroelectronics_index.json
5858
required-libraries: Simple FOC
59-
sketches-exclude: calibrated mt6816_spi smoothing simplefocnano_torque_voltage
59+
sketches-exclude: calibrated mt6816_spi smoothing simplefocnano_torque_voltage simplefocnano_atmega
6060
- arduino-boards-fqbn: STMicroelectronics:stm32:Nucleo_64:pnum=NUCLEO_F411RE
6161
platform-url: https://github.com/stm32duino/BoardManagerFiles/raw/main/package_stmicroelectronics_index.json
6262
required-libraries: Simple FOC
63-
sketches-exclude: smoothing simplefocnano_torque_voltage
63+
sketches-exclude: smoothing simplefocnano_torque_voltage simplefocnano_atmega
6464
# Do not cancel all jobs / architectures if one job fails
6565
fail-fast: false
6666
steps:
Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
#include <Arduino.h>
2+
#include <SPI.h>
3+
#include "SimpleFOC.h"
4+
#include "SimpleFOCDrivers.h"
5+
#include "drivers/simplefocnano/SimpleFOCNanoDriver.h"
6+
#include "encoders/as5048a/MagneticSensorAS5048A.h"
7+
8+
9+
MagneticSensorAS5048A sensor = MagneticSensorAS5048A(PIN_nCS);
10+
SimpleFOCNanoDriver driver = SimpleFOCNanoDriver();
11+
BLDCMotor motor = BLDCMotor(11); // 11 pole pairs
12+
13+
long loopts = 0;
14+
int iterations = 0;
15+
float volts = 0.0f;
16+
17+
void setup() {
18+
Serial.begin(115200); // enable serial port
19+
delay(5000);
20+
SimpleFOCDebug::enable(); // enable debug messages to Serial
21+
22+
sensor.init(); // init sensor on default SPI pins
23+
24+
// read voltage
25+
SimpleFOCDebug::print("Bus voltage: ");
26+
volts = driver.getBusVoltage(5.0f, 1024); // 5V reference, 10-bit ADC
27+
SimpleFOCDebug::println(volts);
28+
driver.voltage_power_supply = volts; // set driver voltage to measured value
29+
driver.voltage_limit = 10.0f; // limit voltage to 10V
30+
driver.pwm_frequency = 30000; // set pwm frequency to 30kHz
31+
driver.init(); // init driver
32+
33+
motor.linkSensor(&sensor); // link the motor to the sensor
34+
motor.linkDriver(&driver); // link the motor to the driver
35+
36+
motor.controller = MotionControlType::torque; // torque control
37+
motor.torque_controller = TorqueControlType::voltage; // use voltage torque control
38+
motor.voltage_limit = driver.voltage_limit / 2.0f; // limit voltage to 1/2 of driver limit
39+
motor.voltage_sensor_align = 4.0f; // align voltage sensor to 4V
40+
41+
motor.init(); // init motor
42+
delay(100); // wait for driver to power up
43+
motor.initFOC(); // init FOC and calibrate motor
44+
45+
Serial.println("Motor ready.");
46+
loopts = millis();
47+
48+
// Set the motor target to 2 volts
49+
motor.target = 2.0f;
50+
}
51+
52+
53+
void loop() {
54+
motor.move();
55+
motor.loopFOC();
56+
long now = millis();
57+
iterations++;
58+
if (now - loopts > 1000) {
59+
Serial.print("Iterations/s: ");
60+
Serial.println(iterations);
61+
Serial.print("Angle: ");
62+
Serial.println(sensor.getAngle());
63+
loopts = now;
64+
iterations = 0;
65+
}
66+
if (now - loopts < 0)
67+
loopts = 0;
68+
}

0 commit comments

Comments
 (0)