Система автоматического тестирования ВМГ (народный проект)

sulaex

Предисловие
Не хочу заниматься плагиатом, хотя повторение колеса не является оным, но все же…
Хотел бы поделиться идеями с дальнейшим воплощением их в жизнь.
Не имею навыков программирования на определенных платформах.
Как вы понимаете, не имея навыков, но имея идею большинство проектов невозможно воплотить в реальность, по этому я и создаю данную тему и проект.
Надеюсь на вашу помощь в развитии и продвижении проекта.

Что имеем? Что требуется?
Нам нужно, как минимум получать три показания с датчиков, это ток, напряжение, тяга. Этого минимума будет достаточно для получения результатов и последующего подбора эффективной ВМГ. В дальнейшем можно будет добавить например датчики для снятия показаний КВ, вибрации и т. д.
Не плохо бы использовать для этого ардуину, большинство ею пользуется и имеет в наличии. Но имеется небольшое ограничения при использовании данной платформы, а точнее огромный недостаток, это 10 биттный АЦП, проще говоря вес мы сможем измерять в пределах килограмма. Для измерения тока и напряжения ардуины будет нам вполне достаточно, а вот для измерения тяги придется использовать внешний АЦП. В качестве такого внешнего АЦП предлагаю использовать микросхему ADS1232. Данная микросхема уже имеет усилитель и стоимость у нее не большая, пару баксов всего.

Решение
В даташите АЦП имеется схема подключения к нему тензо-датчика.

На просторах интернета были найдены кусочки кода для чтения данных ардуиной для подобной АЦП.
forum.arduino.cc/index.php/topic,128823.0.html
forum.arduino.cc/index.php?topic=196110.0
Читая ломанный гугло-перевод даташита, добился определенных результатов в чтении данных АЦП с помощью ардуины.

/*
ADS1244

*/

int DATA = 4;
int SCLK = 5;
int PWDN = 3;

void setup() {

pinMode(DATA, INPUT);
pinMode(SCLK, OUTPUT);

Serial.begin(115200);

// generate a 2.4MHz clock signal on pin 3
pinMode(PWDN, OUTPUT); //CLK

// 17.11 Register Description
TCCR2A = 0x33; // 0011 0011
TCCR2B = 0x09; // 0000 1001
OCR2A = 0x06; // 0000 0110
OCR2B = 0x05; // 0000 0011

Serial.print(“ADS1244\n”); // output ‘AADS1244’ (?) additional ‘A’ in front
delay(100);
}

void loop() {

// Code for reading the data:

int32_t value = 0;

digitalWrite(PWDN, HIGH);

//digitalWrite(SCLK, HIGH); //enter slleep mode
delay(300);
digitalWrite(SCLK, LOW); // wake up ADC

// wait for data ready, stay in while-loop until LOW
while (digitalRead(DATA) == HIGH);

value = shiftIn(DATA, SCLK, MSBFIRST);
value <<= 8;
value |= shiftIn(DATA, SCLK, MSBFIRST);
value <<= 8;
value |= shiftIn(DATA, SCLK, MSBFIRST);

digitalWrite(SCLK, HIGH); // enter sleep mode
//digitalWrite(SCLK, LOW); // 25th pulse to keep DATA high till next data ready

// process as int24_t (two’s compliment 24bit)
value = ((signed long) (value << 8)) >> 8;

Serial.println(value, DEC);
Serial.flush();

}

Правильно ли я организовал чтение данных, возможно ли оптимизировать код?
Как я понял, из кода можно выбросить часть с “// generate a 2.4MHz clock signal on pin 3
Завести данный код удалось добавлением “digitalWrite(PWDN, HIGH);
Правильно ли так оставлять его или следует все таки сбрасывать и в какой момент?

Набросал на макетной платке предварительную сборочку стенда.

в качестве датчика тока использую ACS758

для снятия показаний напряжения буду использовать делитель напряжения на резисторах

Rabbit_Fly

какой тензодатчик планируете использовать?

delfin000

Александр, штука эта классная. Без нее долго не полетаешь, если на обум все делать. Но вроде кто-то уже делали подобное. Ну и на всякий случай вот уже готовый вариант hobbyking.com/…/__10487__EagleTree_MicroPower_E_Lo…, правда к электронным весам ее сложно прикрутить, но меряет и обороты, ток, напругу, мощность и еще много чего. Все лагирует с нужным интервалом, далее в своей программе рисует графики… считает сразу мини, макси, среднее и т.д. Любой интервал можно масштабировать, анализировать, обрабатывать отдельно, и также сам интревал записи данных настраиваемый.

sulaex

это не то, похожее устройство имеется в наличии у меня

требуется специализированный стенд
установил ВМГ, крутанул, данные залил в базу

затем данные сравниваешь, используешь для подбора конфига и т. д.

ЗЫ в общем то куски кода имеются, все работает
идут данные тяги с внешнего АЦП на ардуину, напряжение и ток меряются
осталось все собрать в кучу, организовать сбор данных, придумать ГУИ
как выше писал, в программировании не в зуб ногой, буду очень благодарен за помощь в дальнейшей разработке ГУИ
собственно я могу данные собирать и через терминал, но было бы лучше организовать интерфейс
если разберусь, возможно и сам, что нить организую, но очень надеюсь на помощь

ЗЫЗЫ по сравнению с STM32 (делал подобный стенд), на много меньше помех по АЦП у ардуины, как я понимаю это связанно с разрядностью?
думаю можно будет использовать данные без цифрового фильтра, это огромный плюс, да и 24 биттный внешний АЦП так же приятно работает без особых помех
очень упрощается программная часть и повышается точность измерений, но это пока догадки, надо собрать все данные в кучу и тогда будет известен результат

delfin000

Но там ведь данные из E-Logger просто ипортируются в Excel (без проблем) и он уже быстро анализирует. Программа в Excel состовляется за час-два во время просмотра телевизора ( анализ маломерных числовых массивов)

Rabbit_Fly
delfin000:

Но там ведь данные из E-Logger просто ипортируются в Excel (без проблем) и он уже быстро анализирует. Программа в Excel состовляется за час-два во время просмотра телевизора ( анализ маломерных числовых массивов)

там нет датчика массы а на нем все и завязанно

delfin000
delfin000:

правда к электронным весам ее сложно прикрутить

но все же возможно по той же I2C 😃 есть еще и аналоговые

sulaex

Для сбора и анализа данных предложенное вами устройство не годится, тем более нет данных тяги.
Да, его можно использовать для создания подобного описываемому проекту стенда, но потребуются дополнительные затраты, лишние устройства, программы, возня с совмещением данных и многое другое.

Стоимость собираемого мною стенда будет примерно:
тензодатчик - 10$
АЦП - 3$
ардуина с ФТДИ - 7$ (у большинства она валяется в загашнике)
датчик тока - 5$
обвязка и монтажка ну - 10$
_____________________________
всего 30 баксов относительно легко повторяемый стенд 😃

TeHoTaMy
sulaex:

… имеется небольшое ограничения при использовании данной платформы, а точнее огромный недостаток, это 10 биттный АЦП, проще говоря вес мы сможем измерять в пределах килограмма.

Никакой проблемы на самом деле нет. 10 бит в нашем случае более чем достаточно. Точность измерения составляет 0,1%. Скажем, в диапазоне 0…5кг точность будет плюс-минус 5 грамм. Причем, скорость измерения высокая не требуется, поэтому точность можно повысить многократными измерениями.

sulaex
TeHoTaMy:

Никакой проблемы на самом деле нет. 10 бит в нашем случае более чем достаточно. Точность измерения составляет 0,1%. Скажем, в диапазоне 0…5кг точность будет плюс-минус 5 грамм. Причем, скорость измерения высокая не требуется, поэтому точность можно повысить многократными измерениями.

вы не учли шумы внутреннего АЦП, а при использовании фильтра уменьшается точность, если делать несколько замеров, падает скорость теста
к тому же микросхема внешнего АЦП стоит столько же, сколько и усилитель для тензодатчика, но при этом точность замера с тензодатчика возрастает на много больше

TeHoTaMy
sulaex:

вы не учли шумы внутреннего АЦП, а при использовании фильтра уменьшается точность, если делать несколько замеров, падает скорость теста

Шумы легко фильтруются программным фильтром, а скорость работы внутреннего АЦП на несколько порядков выше, чем требуется для данной задачи.

к тому же микросхема внешнего АЦП стоит столько же, сколько и усилитель для тензодатчика

Подходящий усилитель можно сделать из того, что есть под рукой, а микросхему АЦП в ближайшем магазине можно и не найти.

sulaex
vatanuki:

а что с этой установкой? RThrust - система автоматического тестирования ВМГ вроде тожесамое - единственное что она “закрытая”, а тут будет открытая?

то же самое, только на чипе smt32, но уж слишком затянут проект под предлогом доведения до ума
данный проект будет открытым, не вижу смысла в закрытии подобных разработок, ведь чем больше народу повторит его, тем больше пользы будет получено в конечном результате

TeHoTaMy:

Шумы легко фильтруются программным фильтром, а скорость работы внутреннего АЦП на несколько порядков выше, чем требуется для данной задачи.

Подходящий усилитель можно сделать из того, что есть под рукой, а микросхему АЦП в ближайшем магазине можно и не найти.

на практике знаю возникающие сложности в процессе разработки в данном направлении
имеете реальное предложение, схемы, коды, решения, милости просим, иначе, проходите мимо

по поводу шумов и легкости фильтрации, хотелось бы взглянуть пример вашей легкости решения проблемы
про скорость АЦП, полагаю вы ошиблись в термине, да и не в теме того, что имелось в виду в моем сообщении
ну и на по следок, усилитель, который с легкостью собирается из подручного хлама глянуть бы

sulaex

подбор делителя на шесть банок с запасом

sulaex

пример подбора датчик тока для наших целей

в моем распоряжении имеется датчик ACS758ECB-200B
если мы откроем даташит к этому датчику и посмотрим его данные,
то увидим крайнюю не пригодность данного датчика для наших потребностей,
но на данный момент делать нечего, я буду использовать его.

для правильного подбора датчика требуется воспользоваться таблицей с даташита, посмотрим ее

предположим, что замер тока нашего стенда не будет превышать 50А
датчик тока в моем распоряжении в нулевом состоянии выдает половину опорного напряжения
то есть при нулевом значении АЦП будет выдавать значение 512
причем точность показаний будет 10мВ на 1А - это самое не подходящее значение
для наших целей лучшим датчиком будет ACS758LCB-050U
этот датчик измеряет до 50А с точностью 60мВ/1А, самый точный из ACS758 для наших целей
точность в 6 раз выше используемого мною

обращайте внимание на буковку U в маркировке датчика, этот датчик меряет ток в одном направлении
тем самым точность повышается в два раза

ЗЫ выше описанное является моим пониманием прочтенного, на достоверность не претендую
если есть замечания или исправления, прошу поправить

Gapey

сейчас полез на Али смотреть тензодатчики … первое что бросилосЪ в глаза - куча недорогих готовых модулей АЦП изначально заточеных под тензодатчик - hx711 … ИМХО поддержка таких модулей сильно облегчит повторение конструкции …
датчик имеет смысл брать именно на 10 кг или лучне на 5 ???
еще едут регули , китайская подделка ESC32 … если разобраться с протоколом то с них можно получать напряжение , ток и обороты … только нужен будет свободный компорт (проблему решает ардуина мега или леонардо ) …
тогда получается для стенда нужны будут только ардуина , регуль ESC32 , плата на hx711 и тензодатчик …

sulaex

Спасибо Юрий за полезную информацию по модулю.
Отличное готовое решение для модульной сборки и дешевой комплектухи.
Именно то, что требуется для данного проекта и легкого повторения.
Имеется библиотека и пример чтения данных с этого модуля.
Обязательно закажу его и включу в качестве основного модуля в проект.

Gapey:

датчик имеет смысл брать именно на 10 кг или лучне на 5 ???

Зависит от ваших потребностей, если вы не собираетесь измерять ВМГ с тягой не превышающей пару килограмм, думаю достаточно тензодатчика и в 3 килограмма, точность измерений будет больше.
Чем больше будет значение, тем меньше будет точность, хотя для АЦП в 24 битта это не особо критично.

Gapey:

тогда получается для стенда нужны будут только ардуина , регуль ESC32 , плата на hx711 и тензодатчик …

пошел искать инфу по этим регулям

ЗЫ добавлено апосля
не, думаю нет смысла включать в проект данный регуль, слишком он дорогой