Ребята привет. Я в программировании 0. Подскажите пожалуйста этот код который сгенерировала ии будет работать на реальном железе?
// Пины
const int voltagePin = A0; // порт для установки напряжения
const int currentPin = A1; // порт для установки тока
const int dividerPin = A2; // порт для подключения делителя напряжения
const int mosfetPin = 9; // порт для подключения полевого транзистора
const int vrefPin = A3; // порт Vref
const int shuntPin = A4; // порт для измерения тока через шунт
// Константы
const float shuntResistance = 0.1; // сопротивление шунта в Омах
const float voltageDividerRatio = 20.0; // коэффициент делителя напряжения
const float maxVoltage = 100.0; // максимальное устанавливаемое напряжение
const float maxCurrent = 10.0; // максимальный устанавливаемый ток
const float voltageStep = 0.1; // шаг установки напряжения
const float currentStep = 0.1; // шаг установки тока
const int pwmFrequency = 60000; // частота ШИМ сигнала
const float vRef = 5.0; // опорное напряжение
// Объекты
LiquidCrystal_I2C lcd(0x3F, 16, 2); // инициализация LCD дисплея
void setup() {
// Настройка портов
pinMode(mosfetPin, OUTPUT);
pinMode(dividerPin, INPUT);
pinMode(shuntPin, INPUT);
// Настройка LCD дисплея
lcd.init();
lcd.backlight();
// Настройка ШИМ сигнала
TCCR1A = _BV(COM1A1) | _BV(WGM11);
TCCR1B = _BV(WGM13) | _BV(WGM12) | _BV(CS10);
ICR1 = F_CPU / pwmFrequency;
}
void loop() {
// Считывание установленных значений напряжения и тока
float voltage = analogRead(voltagePin) * vRef / 1023.0 * maxVoltage;
float current = analogRead(currentPin) * vRef / 1023.0 * maxCurrent;
// Установка напряжения
if (abs(voltage - analogRead(voltagePin) * vRef / 1023.0 * maxVoltage) >= voltageStep / 2.0) {
voltage = round(voltage / voltageStep) * voltageStep;
if (voltage > maxVoltage) {
voltage = maxVoltage;
}
analogWrite(mosfetPin, voltage * ICR1 / maxVoltage);
}
// Установка тока
if (abs(current - analogRead(currentPin) * vRef / 1023.0 * maxCurrent) >= currentStep / 2.0) {
current = round(current / currentStep) * currentStep;
if (current > maxCurrent) {
current = maxCurrent;
}
float shuntVoltage = current * shuntResistance;
float voltageSetpoint = shuntVoltage * voltageDividerRatio;
analogWrite(mosfetPin, voltageSetpoint * ICR1 / maxVoltage);
}
// Измерение напряжения и тока
float voltageMeasured = analogRead(dividerPin) * vRef / 1023.0 * maxVoltage / voltageDividerRatio;
float currentMeasured = analogRead(shuntPin) * vRef / 1023.0 / shuntResistance;
// Отображение установленных и измеренных значений на LCD дисплее
lcd.setCursor(0, 0);
lcd.print("U:");
lcd.print(voltage, 1);
lcd.print("/");
lcd.print(voltageMeasured, 1);
lcd.print("V");
lcd.setCursor(0, 1);
lcd.print("I:");
lcd.print(current, 1);
lcd.print("/");
lcd.print(currentMeasured, 1);
lcd.print("A");
}
Для подключения всего оборудования нужно использовать следующие порты Arduino:
1. Порт для установки напряжения - A0
2. Порт для установки тока - A1
3. Порт для подключения делителя напряжения - A2
4. Порт для подключения полевого транзистора - D9
5. Порт Vref - A3
6. Порт SDA для подключения модуля I2C - A4
7. Порт SCL для подключения модуля I2C - A5
Комментарии: 7
Vga
вот халявщик! сам нагенерил - сам проверяй!
Ll2
Коллеги, чем заменить Блютус HC05 ? Из особенностей, нужна индикация работы , как в оригинале, что светодиод моргал когда модуль
Dmitriy
Я же указал что 0 в этом
Ll2
А можно подробней, куда uart хотели подключать ? Отдай другому ИИ пусть проверит ,пока ИИ не захватил мир
Jirafivanich
Randomnerdtutоriails загугли. Прекрасный сайт для вэтомноля У чпухи cnc3018 есть гребёнка для подключения оффлайн пульта. Там есть пины тхрх, к ним подключал есп, но с ней связь обратная тугая
Dmitriy
Скармливал везде по разному пишет. В одном вообще увидел ошибку которой нету в коде. Точное сказал что нет точки в определённом месте а там она на самом деле есть. Это кто или что?
Jirafivanich
Не гуглил значит