Пофторяю проект с сайта http://www.kerrywong.com/2013/10/24/building-a-constant-currentconstant-power-electronic-load/
У мене проблема з кодом елеткронной навантаження
/ **
* Електронне навантаження
* 10/2013
* /
#include <Encoder.h>
#include <SPI.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd (0x27, 16, 2);
// аналоговий штифт 6
const int pinLoadVoltage = 6;
// MCP4921 SPI
const int PIN_CS = 10;
const int BTN_RESET = 14;
const int BTN_RANGE_X2 = 15;
const int BTN_MODE = 16;
const int BTN_ENC = 17;
const int IDX_BTN_RESET = 0;
const int IDX_BTN_RANGE_X2 = 1;
const int IDX_BTN_MODE = 2;
const int IDX_BTN_ENC = 3;
const int LOOP_MAX_COUNT = 2000;
int DACGain = 1; // посилення за замовчуванням 1xVref.
int loadMode = 0; // 0: Постійний струм, 1: Постійна потужність
const float EXT_REF_VOLTAGE = 0.333;
Кодер currentAdjEnc (5, 6);
int кнопки [] = {BTN_RESET, BTN_RANGE_X2, BTN_MODE, BTN_ENC};
int кнопка Читання [3];
int lastButtonStates [] = {HIGH, HIGH, HIGH, HIGH};
int currentButtonStates [] = {HIGH, HIGH, HIGH, HIGH};
довгий останнійDebounceTime [3];
long oldEncPosition = -999;
long curEncPosition = 0;
int DACSetStep = 1;
int encoderValue = 0;
int loopCounter = 0;
int DACSetValue = 0;
довгий ADSum = 0;
float vLoad = 0.0;
float setPower = 0.0;
float setCurrent = 0.0;
void setup ()
{
для (int i = 0; i <4; i ++) {
pinMode (кнопки [i], INPUT);
digitalWrite (кнопки [i], HIGH);
}
pinMode (PIN_CS, OUTPUT);
SPI.begin ();
SPI.setClockDivider (SPI_CLOCK_DIV2);
}
недійсний getCurrentEncPosition ()
{
curEncPosition = currentAdjEnc.read () / 4;
if (curEncPosition! = oldEncPosition) {
if (curEncPosition> oldEncPosition) {
encoderValue + = DACSetStep;
if (encoderValue> 4095) encoderValue = 4095;
} else {
encoderValue - = DACSetStep;
if (encoderValue <0) encoderValue = 0;
}
oldEncPosition = curEncPosition;
if (loadMode == 0) // Режим постійного струму
{
setDACOutput (encoderValue);
} else {// Режим постійної потужності
setDACOutput(DACSetValue);
}
}
}
//Buffered DAC output
void setDACOutput(unsigned int val)
{
byte lByte = val & 0xff;
// SHDN GA BUF
byte hByte = val >> 8 | 0x10 | DACGain << 5 | 1 << 6;
PORTB &= 0xfb;
SPI.transfer(hByte);
SPI.transfer(lByte);
PORTB |= 0x4;
}
void displayStatus()
{
lcd.clear();
//average load voltage
vLoad = ADSum * 1.0 / (float) LOOP_MAX_COUNT / 1024.0 * 5.0 * (0.974 + 21.91) / 0.974;
if (loadMode == 0) //Constant Current
{
float vSense = 1.0 * encoderValue / 4096.0 * EXT_REF_VOLTAGE;
float i = 3 * 10 * vSense; // 3 sets of MOSFET in parallel, 0.1 ohm
if (DACGain == 0) i *=2; // x2
lcd.print("CI,I Set=");
if (i < 1.0) {
lcd.print(i * 1000,0);
lcd.print(" mA");
} else {
lcd.print(i ,2);
lcd.print(" A");
}
} else { //Constant Power
setPower = (float) encoderValue / 20.0; //approximately 0-200W
lcd.print("CP, P Set=");
if (vLoad > 0.5) {//minimum 0.5V
setCurrent = setPower / (float) vLoad;
//desired sense voltage. Since we have 3
//sets of MOSFETS, the results are devided
//by 3 and multipled by the value of the sense
//resistor
float vSense = setCurrent / 3.0 * 0.1;
DACSetValue = (int) (vSense/EXT_REF_VOLTAGE * 4096.0 + 0.5);
if (setCurrent < 10.0) {
DACGain = 1;
} else {
DACGain = 0;
DACSetValue = (int) ((float) DACSetValue / 2.0 + 0.5);
}
if (setPower >= 100.0) {
lcd.print(setPower, 1);
}
else {
lcd.print(setPower, 2);
}
} else {
setPower = 0;
lcd.print(setPower, 2);
}
setDACOutput(DACSetValue);
lcd.print("W");
}
lcd.setCursor(0, 1);
lcd.print("LOAD V=");
lcd.print(vLoad, 2);
lcd.print(" V");
}
void loop()
{
int idx = 0;
for (int i = 0 ; i < 4; i++) {
buttonReadings[i] = digitalRead(buttons[i]);
if (buttonReadings[i] != lastButtonStates[i]) lastDebounceTime[i] = millis();
if (millis() - lastDebounceTime[i] > 50) { //debouncing the buttons
if (currentButtonStates[i] != buttonReadings[i]) {
currentButtonStates[i] = buttonReadings[i];
//actions
if (currentButtonStates[i] == LOW) {
switch (i) {
case IDX_BTN_RESET:
//reset output current to 0
encoderValue = 0;
DACSetValue = 0;
break;
case IDX_BTN_RANGE_X2:
//switch between 100W/200W maximum power mode
DACGain = DACGain == 1? 0 : 1;
if (loadMode == 0) {
setDACOutput(encoderValue);
}
break;
case IDX_BTN_MODE:
//switch between constant current and constant power
loadMode = loadMode == 1? 0 : 1;
break;
case IDX_BTN_ENC:
//cycle through different encoder steps: 1/10/100
DACSetStep *= 10;
if (DACSetStep > 100) DACSetStep = 1;
break;
}
}
}
}
lastButtonStates[i] = buttonReadings[i];
}
getCurrentEncPosition();
loopCounter++;
// used to smooth out the analogRead results
ADSum += analogRead(pinLoadVoltage);
if (loopCounter == LOOP_MAX_COUNT) {
displayStatus();
loopCounter = 0;
ADSum = 0;
}
}
В ардуино заливается есть изображение на екране (фото1) потом после выключения питания подаю питания на екране в верхней строке непонятные символы (фото 2) перепрошивка етим кодом елеткронной нагрузки не помогает то самое.
для проверки залил код пример Blink ардуино работает норм изображение с екрана не пропадает(фото 2). Потом код проверки екрана с сайта https://geekelectronics.org/arduino/podklyuchenie-i2c-ekrana-k-arduino.html все работает нормально и не пропалает при отключении.
после проверочного кода заливаю код елеткронной нагрузки все работает до первого отключения питания.
Помогите пожайлуста исправить код. Я паять умею програмировать еще нет. Повторил проект http://arduino.ru/forum/proekty/ocherednaya-payalnaya-stantsiya?page=53#comment-383175 все супер спасибо автору
Этот раздел для готовых проектов. Перемещаю в песочницу. Почитайте как правильно вставлять код. без этого обсуждения не будет.
Этот раздел для готовых проектов. Перемещаю в песочницу. Почитайте как правильно вставлять код. без этого обсуждения не будет.
Спасибо я переделаю изменить первое сообщение я не могу потому оформлю код соглано правил в следующем сообщении
Да не правило это и не капризы. Пока он не нумерованный и не форматированный, его обсуждать невозможно.
Пофторяю проект с сайта http://www.kerrywong.com/2013/10/24/building-a-constant-currentconstant-power-electronic-load/
У мене проблема з кодом еткронной нагрузки
В ардуино заливается есть изображение на екране (фото1) потом после выключения питания подаю питания на екране в верхней строке непонятные символы (фото 2) перепрошивка етим кодом елеткронной нагрузки не помогает то самое.
для проверки залил код пример Blink ардуино работает норм изображение с екрана не пропадает(фото 2). Потом код проверки екрана с сайта https://geekelectronics.org/arduino/podklyuchenie-i2c-ekrana-k-arduino.html
все работает нормально и не пропалает при отключении.
после проверочного кода заливаю код елеткронной нагрузки все работает до первого отключения питания.
Помогите пожайлуста исправить код.
Прошу Вас администраторы удалите мое первое не правильно оформленое сообщение я не могу ето сделать
Код оригинальный или что-то правили. В первой версии вижу украинские комментарии.
ЗЫ. Если вам повезет и дождь начнется, залью, попробую, сейчас себе по мотивам этой схемы ваяю.
в строке 55 добавить -
не поможет то после инициализации еще и
lcd.clear();
Alchimy91, вижу lcd.begin в скетче проверки экрана, но не вижу в вашем.
опередили:)
Нет не оригинальный я подключил екран с I2C ( 4 провода)в орынинальном коде екран подклюсаеться без платы I2C (11 проводов)
Орыгинальный код
Я добавил быблиотеку
const int pinLoadVoltage = 6;
удалил в орыгинале строки
007
011-017
И особенно строку 074
lcd.begin(16, 2);
она вызывала ошибку помпиляции
цифирки там не должны быть (строка 74), просто скобки
в строке 55 добавить -
не поможет то после инициализации еще и
lcd.clear();
Спасибо Вам большое за помощь все заработало я исправил код как вы сказали все ок вот испавленый код рабочий
немае за что )))
Автор етого кода говорит что можно дописать функцию "постоянное сопротевление нагрузки" сопротивление перехода будет заданым.
Ета функция похожа с функцией CI и CW
И функцию откючение по нижнему значению напряжения( для разряда акб)
я бы хотел такие функции прописать
Прозьба к тем кто делал подобние проекты если ето не очень сложно дописать даные функции
Я изучаю програмирование ардуино и помере доработки буду обновлять код
Спасибо всем кто откликнулся.