может и забьет, только разбираться в этом хламе без визуализации - жесть.
я бы сократил кол-во точек раз в сто, и дальше апроксимация на выбор
а пиво одно мне :)))
да хоть все десять, я пиво не пью )))
у тебя жеж всё по взрослому, с апи, с приложением, а тут "ты помнишь как всё начиналось" - те года когда программировали свою первую ПЗУ РТ5 ручным программатором на тумблерах с кнопкой )))
там всё есть, ОБЯЗАНО работать из коробки, и никаких аппроксимаций чистый хард!!!
PS а уменьшить число значений - не вопрос, говори сколько надо точек измерений (только пропорционально)
Скетч использует 4714 байт (14%) памяти устройства. Всего доступно 32256 байт.
Глобальные переменные используют 364 байт (17%) динамической памяти, оставляя 1684 байт для локальных переменных. Максимум: 2048 байт.
PS войдёт даже в attiny85
там всё есть, ОБЯЗАНО работать из коробки, и никаких аппроксимаций чистый хард!!!
PS а уменьшить число значений - не вопрос, говори сколько надо точек измерений (только пропорционально)
Скетч использует 4714 байт (14%) памяти устройства. Всего доступно 32256 байт.
Глобальные переменные используют 364 байт (17%) динамической памяти, оставляя 1684 байт для локальных переменных. Максимум: 2048 байт.
PS войдёт даже в attiny85
я думаю потребуется какая-то функция, а не просто значения.
а девайс то в итоге какой заказывать? нано 3? или вообще думаю такое взять https://ampero.ru/arduino-pro-mini.html + ЦАП на 4 канала. Вопрос только по питанию, в авто есть линия 5В, но может там и 4.5 присутствует... Повлияет ли это на выход напруги из ЦАП? Или подать на один канал ещё сигнал типа вольтметра сделать, и компенсировать разницу на выход?
return-14.549464 + 1.61280719 * x + 0.12322994 * x**2
3
}
Коэффициент корреляции с таблицей 0.9998653436
да нет, это абстрактные данные были. ТС в полной уверенности, что может вывести кривые по 4-рём каналам сам, как он это сделает ума не приложу, вопрос был о разумной достаточности разрешающей способности по числу элементов массива
да формула там нужна будет скорее всего. никаких точек. Что на что свапали ?
формула и нужна, будут какие-то промежуточные опорные точки, но все в пределах.
с тех пор как изобрели Эксель вообще дерьмо вопрос )))
PS Пиво где, где пиво? Я Драйверу должен )))
ну я и планировал если что все через эксель прогнать, там все просто…
пиво пока остывает так сказать. но процесс ещё не завершён, на днях доберусь до авто поковыряю, так то все закуплено
формула конечно хорошо, но только из таблицы оно будет брать такта за 4 процессора +- а вот сколько будет считать формулу - вопрос , на интеле это делалось за один так процессора )))
и зачем тебе авто, прицепи крутёлки и посмотри работу на столе
PS и таки да память программ в контроллере, это не то, что ты сможешь завещать внукам, девать её некуда
ну а сколько там мгц у процессора... не думаю что нехватит...
на столе не очень получится, мне нужно снимать "входящие" параметры, а они из-за так называемого самообучающегося дросселя - меняются, и меняются они пока дроссель не выйдет из режима самообучения. т.е. это поставил девайс, потыкал, и надо поездить пол дня, и так пока не попаду в "штатные" параметры.
PS и таки да память программ в контроллере, это не то, что ты сможешь завещать внукам, девать её некуда - это типа не сохраняется что-то? память энергозависимая?
а по делу, мега справится с табличным подходом, как только формула будет нужна и на "лету", все, о меге забывайте, иначе инертность вход/выход при вычислении, ставит крест на этой затее.
а по делу, мега справится с табличным подходом, как только формула будет нужна и на "лету", все, о меге забывайте, иначе инертность вход/выход при вычислении, ставит крест на этой затее.
тут к дяде СТМу нужно, с его "сопроцессором".
педаль газа и дроссельный узел достаточно медленные устройства и нафиг там супербыстрый отклик от МК не нужен. имхо , ресурсов атмеги 328 в данной задаче до попы , хоть для формул , хоть по точкам. Просто забивать всю эту таблицу то ещё развлечение
на столе не очень получится, мне нужно снимать "входящие" параметры, а они из-за так называемого самообучающегося дросселя - меняются, и меняются они пока дроссель не выйдет из режима самообучения. т.е. это поставил девайс, потыкал, и надо поездить пол дня, и так пока не попаду в "штатные" параметры.
интересно о каких параметрах речь? в дросселе два датчика-потенциометра, в педали газа тоже самое. Что там может меняться? Вот %открытия дросселя/педали да, может подстраиваться. А напряжения на датчиках в списке параметров реальные и видишь. Нужна осциллограмма "родных" датчиков и тех, которые вы подсовываете этому чужому для них ЭБУ , тогда сразу все станет понятно. а так пальцем в небо.
хм, по моим самым грубым прикидкам, не забываем что надо не только пересчитать но и куда то (хоть в цап) засунуть, 4 канала займут 800-900ms, а для сваперов-корчеров это вечность как мне кажется. но вам видней...
0.9 секунды? че цап такой медленный чтоли. А расчет формулы то явно быстрее должен быть. в 10мс то точно должно уложиться. А так если частота обновления сигнала дросселя будет в секунду , то это вообще никуда не годится, от слова совсем.
так это тогда не так надо делать, искать авто с оригинальными датчиками ставить энкодер позволяющий считать точное положение и писать в таблицу значение энкодера - значение с датчика, для газа так точно можно сделать
интересно о каких параметрах речь? в дросселе два датчика-потенциометра, в педали газа тоже самое. Что там может меняться? Вот %открытия дросселя/педали да, может подстраиваться. А напряжения на датчиках в списке параметров реальные и видишь. Нужна осциллограмма "родных" датчиков и тех, которые вы подсовываете этому чужому для них ЭБУ , тогда сразу все станет понятно. а так пальцем в небо.
ничего в датчиках не меняется, меняется в "мозге", так как один из датчиков не соответствует штатному, по сопротивлению конечно же. осцилограмму наверное не смогу снять, элементарно нечем. поэтому методом тыка, ну и там не особо сложно, я знаю например что при закрытом дросселе на ХХ должно в мозг заходить 0.6 вольт при полностью открытом 4.8в, на "парковке" просто какой-то сигнал (типа вкл-выкл 1/0). и это напряжение должно соотвествовать второму датчику, что важно, а как только оно не соотвествует, мозг впадает в обучение дросселя, и корректиурет положение дросселя электроприводом, и так до бесконечности. всё что нужно, это подогнать значения педали в том или ином положении, с открытием заслонки. Я сначала хотел подогнать сопротивление, но оказалось, что оно уже выше, чем нужно, т.е. сопротивление нужно убрать) Вот и решил просто выдавать своё напряжение через ардуину, в зависимости от нажатия на педаль.
А скорость у чипа сколько? 16мгц? Этого более чем...
так это тогда не так надо делать, искать авто с оригинальными датчиками ставить энкодер позволяющий считать точное положение и писать в таблицу значение энкодера - значение с датчика, для газа так точно можно сделать
ЗЫ я бы вообще записывал в EEPROM
да есть старый дроссель, его можно поставить и считать, но мне это ничего не даст.
что нужно будет подавать на выход их я и так знаю, но эти параметры не будут привязаны к углу открытия дросселя, типа я получу 2 вольта, а на каком угле? в итоге я решил так делать - открываю педалью дроссель, и считываю напряжение с датчика заслонки (со второго), вижу там например 1 в, значит и на педали должно быть 1 в, значит угол открытия педали соотвествует углу заслонки. и параллельно, мне надо это параметры сопоставлять со входящими от педали, так как на вход будет другое напряжение. вот как-то так. поэтому только методом тыка)
хм, по моим самым грубым прикидкам, не забываем что надо не только пересчитать но и куда то (хоть в цап) засунуть, 4 канала займут 800-900ms, а для сваперов-корчеров это вечность как мне кажется. но вам видней...
это что-то оч долго, мозг сразу в ошибку выпадет при таком лаге...
С тех пор как изобрели арифметику это не наш метод )))
для этого энкодер и ставится на дроссель )))
Педалью подавить обучить скетч чтобы заполнил весь буфер, позиция в буфере - угол дросселя, значение - значение на этом угле, здесь самое сложное - механика
С тех пор как изобрели арифметику это не наш метод )))
для этого энкодер и ставится на дроссель )))
Педалью подавить обучить скетч чтобы заполнил весь буфер, позиция в буфере - угол дросселя, значение - значение на этом угле, здесь самое сложное - механика
у меня не так много есть устройств для измерений) за 100 рублей из ашана мультиметр и всё. даже паяльника по факту нет.
педалью обучить скетч не получится, педаль механически не связана с заслонкой, угол открытия заслонкой регулируется электроприводом, и проблема в том, что он всегда разный. т.е. когда я жму на педаль, я фактически не знаю какой угол, я лишь знаю какое напряжение выдаёт датчик положения дросселя, оно вроде даже по ОБД2 показывается, и как-то интерпретируется даже в % открытия. Но саму педаль не показывает. Поэтому я просто скидываю мозг, считываю входящие с педали, и сразу же считываю показания с дросселя. дальше подставляю на выход в ЦАП свои значения. Может так оказаться что там нужно будет просто прибавить сколько то вольт везде, и тогда я без ардуино что-то спаяю.
Мультиметра до жопы хватит. Измерь сопротивление в крайних точках (положения заслонки полностью открыто и полностью закрыто) родного и свапного дросселя. Мерить между массой датчиков и сигнальным ползунком или между питанием и сигнальным ползунком. Только смотри у электронного дросселя полностью закрытое положение надо рукой дозакрывать. (он чуть подпружинен в приоткрытом состоянии). Также измерить сколько всего сопротивление у переменного резистора датчика (между контактами питание и масса датчиков) возможно вообще без МК обойтись, добавив резюк в плечо делителя
Зы при чем тут Эл педаль газа вообще не понял
Или же перерезать один провод моторчика дросселя, чтоб мотор не работал и вручную перемещать дроссель от края до края контролируя напругу датчиков в диагностике, тогда и мультиметр не нужен
Мультиметра до жопы хватит. Измерь сопротивление в крайних точках (положения заслонки полностью открыто и полностью закрыто) родного и свапного дросселя. Мерить между массой датчиков и сигнальным ползунком или между питанием и сигнальным ползунком. Только смотри у электронного дросселя полностью закрытое положение надо рукой дозакрывать. (он чуть подпружинен в приоткрытом состоянии). Также измерить сколько всего сопротивление у переменного резистора датчика (между контактами питание и масса датчиков) возможно вообще без МК обойтись, добавив резюк в плечо делителя Зы при чем тут Эл педаль газа вообще не понял
в том то и дело, что у полностью закрытого (педаль газа отпущена) дроссель чуть открыт да, но для педали газа (а там тоже датчик) это конечное состояние, дальше не закрыть. Сопротивление то я могу померить, что я первым делом и делал когда подбирал датчики на заслонку, а вот на педаль я не могу подобрать датчик, он физический другой, только что-то самому изобретать механически чтобы другой ставить. Но суть в том, что сейчас сопротивление на 3-5кОм выше чем требуется. Если я отключу привод моторчика или сниму любой из датчиков, или они сильно отличаются от шатных по параметрам - мозг входит в аварийный режим, питание пропадает, дроссель открывается на 10% только при педали в пол (там механически уже работает). Т.е. измерения нужно проводить на +- рабочем состоянии.
Или же перерезать один провод моторчика дросселя, чтоб мотор не работал и вручную перемещать дроссель от края до края контролируя напругу датчиков в диагностике, тогда и мультиметр не нужен
так не будет работать, нужно чтобы напряжение на датчике из педали газа, и с положения заслонки были одинаковые. да они могут отличаться, только тогда будут разные углы нажатия на педаль и открытия заслонки, типа нажал на 15% педаль, а открылось на 30%.
в том то и дело, что у полностью закрытого (педаль газа отпущена) дроссель чуть открыт да, но для педали газа (а там тоже датчик) это конечное состояние, дальше не закрыть. Сопротивление то я могу померить, что я первым делом и делал когда подбирал датчики на заслонку, а вот на педаль я не могу подобрать датчик, он физический другой, только что-то самому изобретать механически чтобы другой ставить. Но суть в том, что сейчас сопротивление на 3-5кОм выше чем требуется. Если я отключу привод моторчика или сниму любой из датчиков, или они сильно отличаются от шатных по параметрам - мозг входит в аварийный режим, питание пропадает, дроссель открывается на 10% только при педали в пол (там механически уже работает). Т.е. измерения нужно проводить на +- рабочем состоянии.
вообще ниче не понял. Причем тут педаль. У дросселя и педали газа нет жесткой связи. Это отдельные устройства. Что значит дальше дроссель не закрыть? Подпружинено в приоткрытом состоянии лишь для того, чтобы эл.мотору дросселя было легче держать заслонку в предзакрытом состоянии, т.к. заслонку в таких почти закрытых положениях вакуумом пытается прихлопнуть и пружина помогает мотору держать её на малых углах открытия.
педаль тоже меняли чтоли, она не родная для эбу? Нафига в педаль лезти если она родная?
по педали просто смотришь в диагностике если от 0 % до 100% при нажатии на педаль нормально меняется параметр, и ошибок на неё нет вообще педаль не трогай, зачем до нее докопался
и если отключишь мотор дросселя, да будет в аварии эбу . но питание на датчики дросселя все равно должно идти, измерения проводить понятное дело на неработающем двигателе при включенном зажигании вручную шевелив дроссель и смотреть в диагностике на напряжения сигнальных проводов датчиков.
и как он тебе дроссель откроет на 10% если ты провод мотора перерезал? бред какойто
по педали просто смотришь в диагностике если от 0 % до 100% при нажатии на педаль нормально меняется параметр, и ошибок на неё нет вообще педаль не трогай, зачем до нее докопался
и если отключишь мотор дросселя, да будет в аварии эбу . но питание на датчики дросселя все равно должно идти, измерения проводить понятное дело на неработающем двигателе при включенном зажигании вручную шевелив дроссель и смотреть в диагностике на напряжения сигнальных проводов датчиков.
и как он тебе дроссель откроет на 10% если ты провод мотора перерезал? бред какойто
в диагностике показывает с датчика заслонки, а не с педали.
если отключаю мотор с дросселя то питание пропадает (проверял).
дроссель открывается на 10-15% МЕХАНИЧЕСКИ если полностью педаль нажать в пол. Ну такой узел, там если до конца выкрутить, то язычок уже тянет за заслонку минуя электронику, это на случай если что-то сломалось, ты мог ехать хоть как-то.
дроссель открывается на 10-15% МЕХАНИЧЕСКИ если полностью педаль нажать в пол. Ну такой узел, там если до конца выкрутить, то язычок уже тянет за заслонку минуя электронику, это на случай если что-то сломалось, ты мог ехать хоть как-то.
чето мы на разных языках чтоли говорим. Он откроется сразу на величину подпружинивания , как только ты провод эл мотора перережешь . Пофиг как там у тебя педаль газа хоть в пол , хоть не в пол. Или у тебя трос чтоли от педали до дросселя я вообще нихера не пойму
не понял. Причем тут педаль. У них нет жесткой связи. Что значит дальше не закрыть. Подпружинено в приоткрытом состоянии лишь для того, чтобы эл.мотору дросселя было легче держать заслонку в предзакрытом состоянии, т.к. заслонку в таких почти закрытых положениях вакуумом пытается прихлопнуть и пружина помогает мотору держать её на малых углах открытия.
педаль тоже меняли чтоли, она не родная для эбу?
мне нужно изменить выходные параметры именно для датчика с педали, поэтому она тут "причём". И педаль дозакрыть не могу) она механически упирается в ограничительный болт при полностью отпущеной педали. В этот момент она встаёт на так называемый паркинг, детектится по второму каналу, и уже работает ХХ по своему алгоритму. Сама же заслонка подпружинена да, но не для того чтобы легко держать заслонку, а чтобы закрывать её ещё больше когда это требуется, например при торможении двигателем, она больше закрывается чем просто на ХХ, но и закрыться она полностью не может, есть ограничительный болт, по которому выставляется определённый зазор на заслонке. Собвстенно по этому и возникают проблемы, из-за неправильных данных с педали газа, дроссель пытается закрыться полностью, упирается в болт ограничительный. Пробовал больше выставить зазор - в других местах проблемы вылазят.
Сейчас для ЭБУ неродная только педаль, датчик самой заслонки я подобрал по сопротивлению с другой, и он типа болт он подошёл, только проводку отзеркалил.
Задача - синхронизировать напряжение с датчика педали, с датчиком заслонки. Как это выглядит - в ардуино входит сигнал с датчика заслонки, и с датчика педали, жму на педаль, в ардуине вижу вольтаж с педали и с заслонки, например 1 вольт с педали и с заслонки, например 0.8 вольт, и всё. Дальше в ардуино надо прописать, что если входит 1в, на ЦАП подать 0.8 в. Дальше датчик дросселя для ардуино не используется.
На снятом или на столе эти данные я не могу сопоставить, так как не знаю степень открытия ни пидали на заслонки. Поэтом проще это всё делать прям по месту.
чето мы на разных языках чтоли говорим. Он откроется сразу на величину подпружинивания , как только ты провод эл мотора перережешь . Пофиг как там у тебя педаль газа хоть в пол , хоть не в пол. Или у тебя трос чтоли от педали до дросселя я вообще нихера не пойму
мы говорим о разных дроссельных узлах. конкретно в этом, если нажать газ в пол, то механически, там шестерёночки за который тросик тянет, типа да, есть тросс, но педаль электронная, ты тросиком тянешь потенциометр, а он уже через моторчик открывает дроссль. Но в самом конце устройства есть язычок, он откроет дроссель на 10-15% (я не помню точно, но типа километров 60-70 на пятой она поедет.
Открывается на величину подпружинивания только если всё выключено, или когда дроссель впадает в аварийный режим. Это 100%, потому что как только вырубается дроссель, чуть поднимаются ХХ (открывается на величину подпружинивания), если всё работает и управляется приводом, то дроссель чуть закрыт, я вижу это и как по разряжению во впуске (МАП) и по датчику положения заслонки + если тормозить двигателем там уже упирается в ограничительный болт, т.е. ещё сильнее закрывается, но не засчёт разряжения во впуске, заслонка же круглая, на оси, поток её пытается "всосать" как снизу так и сверху, за одну часть пытается закрыть, за другую - открыть, типа компенсируется. Иначе бы она схлопывалась уже, там и так щелка на подпружиненной 0.5мм щуп лезет.
ua6em, потри сообщение в теме про али.
может и забьет, только разбираться в этом хламе без визуализации - жесть.
я бы сократил кол-во точек раз в сто, и дальше апроксимация на выбор
а пиво одно мне :)))
да хоть все десять, я пиво не пью )))
у тебя жеж всё по взрослому, с апи, с приложением, а тут "ты помнишь как всё начиналось" - те года когда программировали свою первую ПЗУ РТ5 ручным программатором на тумблерах с кнопкой )))
ua6em, потри сообщение в теме про али.
может и забьет, только разбираться в этом хламе без визуализации - жесть.
я бы сократил кол-во точек раз в сто, и дальше апроксимация на выбор
а пиво одно мне :)))
ты ж пас?
там всё есть, ОБЯЗАНО работать из коробки, и никаких аппроксимаций чистый хард!!!
PS а уменьшить число значений - не вопрос, говори сколько надо точек измерений (только пропорционально)
01
// библиотека - <a href="https://github.com/hideakitai/MCP4728" rel="nofollow">https://github.com/hideakitai/MCP4728</a>
02
03
#include <Wire.h>
04
#include "MCP4728.h"
05
MCP4728 dac;
06
07
const
uint16_t PROGMEM my_dump1[64] = {
08
1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,
09
17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32,
10
33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48,
11
49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64,
12
};
13
14
const
uint16_t PROGMEM my_dump2[64] = {
15
1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,
16
17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32,
17
33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48,
18
49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64,
19
};
20
21
const
uint16_t PROGMEM my_dump3[64] = {
22
1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,
23
17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32,
24
33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48,
25
49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64,
26
};
27
const
uint16_t PROGMEM my_dump4[64] = {
28
1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,
29
17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32,
30
33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48,
31
49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64,
32
};
33
uint16_t d1;
34
uint16_t d2;
35
uint16_t d3;
36
uint16_t d4;
37
38
void
setup
() {
39
// Serial.begin(115200);
40
pinMode(A0, INPUT);
41
pinMode(A1, INPUT);
42
pinMode(A2, INPUT);
43
pinMode(A3, INPUT);
44
45
Wire.begin();
46
dac.attach(Wire, 14);
47
dac.readRegisters();
48
dac.selectVref(MCP4728::VREF::VDD, MCP4728::VREF::VDD, MCP4728::VREF::VDD, MCP4728::VREF::VDD);
49
dac.selectPowerDown(MCP4728::PWR_DOWN::GND_100KOHM, MCP4728::PWR_DOWN::GND_100KOHM, MCP4728::PWR_DOWN::GND_100KOHM, MCP4728::PWR_DOWN::GND_100KOHM);
50
dac.selectGain(MCP4728::GAIN::X1, MCP4728::GAIN::X1, MCP4728::GAIN::X1, MCP4728::GAIN::X1);
51
dac.analogWrite(MCP4728::DAC_CH::A, 0);
52
dac.analogWrite(MCP4728::DAC_CH::B, 0);
53
dac.analogWrite(MCP4728::DAC_CH::C, 0);
54
dac.analogWrite(MCP4728::DAC_CH::D, 0);
55
dac.enable(
true
);
56
dac.readRegisters();
57
delay(5000);
58
}
59
60
void
loop
() {
61
d1 = map(analogRead(A0),0,1023,0,64);
62
d2 = map(analogRead(A0),0,1023,0,64);
63
d3 = map(analogRead(A0),0,1023,0,64);
64
d4 = map(analogRead(A0),0,1023,0,64);
65
dac.analogWrite(my_dump1[d1], my_dump2[d2], my_dump3[d3], my_dump4[d4]);
66
delay(10);
67
dac.readRegisters();
68
}
Скетч использует 4714 байт (14%) памяти устройства. Всего доступно 32256 байт.
Глобальные переменные используют 364 байт (17%) динамической памяти, оставляя 1684 байт для локальных переменных. Максимум: 2048 байт.
PS войдёт даже в attiny85
ты ж пас?
там всё есть, ОБЯЗАНО работать из коробки, и никаких аппроксимаций чистый хард!!!
PS а уменьшить число значений - не вопрос, говори сколько надо точек измерений (только пропорционально)
01
// библиотека - <a href="https://github.com/hideakitai/MCP4728" rel="nofollow">https://github.com/hideakitai/MCP4728</a>
02
03
#include <Wire.h>
04
#include "MCP4728.h"
05
MCP4728 dac;
06
07
const
uint16_t PROGMEM my_dump1[64] = {
08
1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,
09
17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32,
10
33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48,
11
49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64,
12
};
13
14
const
uint16_t PROGMEM my_dump2[64] = {
15
1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,
16
17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32,
17
33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48,
18
49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64,
19
};
20
21
const
uint16_t PROGMEM my_dump3[64] = {
22
1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,
23
17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32,
24
33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48,
25
49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64,
26
};
27
const
uint16_t PROGMEM my_dump4[64] = {
28
1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,
29
17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32,
30
33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48,
31
49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64,
32
};
33
uint16_t d1;
34
uint16_t d2;
35
uint16_t d3;
36
uint16_t d4;
37
38
void
setup
() {
39
// Serial.begin(115200);
40
pinMode(A0, INPUT);
41
pinMode(A1, INPUT);
42
pinMode(A2, INPUT);
43
pinMode(A3, INPUT);
44
45
Wire.begin();
46
dac.attach(Wire, 14);
47
dac.readRegisters();
48
dac.selectVref(MCP4728::VREF::VDD, MCP4728::VREF::VDD, MCP4728::VREF::VDD, MCP4728::VREF::VDD);
49
dac.selectPowerDown(MCP4728::PWR_DOWN::GND_100KOHM, MCP4728::PWR_DOWN::GND_100KOHM, MCP4728::PWR_DOWN::GND_100KOHM, MCP4728::PWR_DOWN::GND_100KOHM);
50
dac.selectGain(MCP4728::GAIN::X1, MCP4728::GAIN::X1, MCP4728::GAIN::X1, MCP4728::GAIN::X1);
51
dac.analogWrite(MCP4728::DAC_CH::A, 0);
52
dac.analogWrite(MCP4728::DAC_CH::B, 0);
53
dac.analogWrite(MCP4728::DAC_CH::C, 0);
54
dac.analogWrite(MCP4728::DAC_CH::D, 0);
55
dac.enable(
true
);
56
dac.readRegisters();
57
delay(5000);
58
}
59
60
void
loop
() {
61
d1 = map(analogRead(A0),0,1023,0,64);
62
d2 = map(analogRead(A0),0,1023,0,64);
63
d3 = map(analogRead(A0),0,1023,0,64);
64
d4 = map(analogRead(A0),0,1023,0,64);
65
dac.analogWrite(my_dump1[d1], my_dump2[d2], my_dump3[d3], my_dump4[d4]);
66
delay(10);
67
dac.readRegisters();
68
}
Скетч использует 4714 байт (14%) памяти устройства. Всего доступно 32256 байт.
Глобальные переменные используют 364 байт (17%) динамической памяти, оставляя 1684 байт для локальных переменных. Максимум: 2048 байт.
PS войдёт даже в attiny85
я думаю потребуется какая-то функция, а не просто значения.
а девайс то в итоге какой заказывать? нано 3? или вообще думаю такое взять https://ampero.ru/arduino-pro-mini.html + ЦАП на 4 канала. Вопрос только по питанию, в авто есть линия 5В, но может там и 4.5 присутствует... Повлияет ли это на выход напруги из ЦАП? Или подать на один канал ещё сигнал типа вольтметра сделать, и компенсировать разницу на выход?
не знаю! я пользуюсь проверенными поставщиками
1. Ардуино нано
2. MCP4728 к примеру вижу тут, поставщика не знаю
PS из автомобильной электрики разбираюсь немного только в ГАЗ-51
не, заграница неподходит. авто ковыряется на улице, уже холодает, надо уже в наличии.
не, заграница неподходит. авто ковыряется на улице, уже холодает, надо уже в наличии.
у нас в станице микросхемы не продаются
не, заграница неподходит. авто ковыряется на улице, уже холодает, надо уже в наличии.
у нас в станице микросхемы не продаются
не, заграница неподходит. авто ковыряется на улице, уже холодает, надо уже в наличии.
у нас в станице микросхемы не продаются
марка?
Troyka-DAC Screw Terminal, Внешний ЦАП MCP4725
на тройке не знаю, но это один цап на корпус, но зацепить их можно не более 2-х на нано, выше уже обговаривали это и человек предложил 4728
4728 тока на заказ с алика месяц поставка, это в лучшем случае... а эти в наличии, возьму получается два, и сам нано в мск есть.
4728 тока на заказ с алика месяц поставка, это в лучшем случае... а эти в наличии, возьму получается два, и сам нано в мск есть.
врать-то чего, вот сразу в Ебурге или тут
или тут
так стопээ, а эта подойдёт? к лапкам паять?
я использую готовые модули уже на платах с шагом на пинах 2.54мм, кто умеет, тот паяет, я не умею
подумал я тут подумал, всё таки 8 битное разрешение будет самым оптимальным:
001
// библиотека - <a href="https://github.com/hideakitai/MCP4728" rel="nofollow">https://github.com/hideakitai/MCP4728</a>
002
003
#include <Wire.h>
004
#include "MCP4728.h"
005
MCP4728 dac;
006
007
const
uint16_t PROGMEM my_dump1[256] = {
008
0, 0, 1, 1, 2, 4, 6, 8,
009
10, 12, 15, 19, 22, 26, 30, 35,
010
39, 44, 50, 55, 61, 68, 74, 81,
011
88, 96, 103, 111, 120, 128, 137, 146,
012
156, 166, 176, 186, 197, 208, 219, 230,
013
242, 254, 266, 279, 291, 304, 318, 331,
014
345, 359, 374, 388, 403, 418, 433, 449,
015
465, 481, 497, 514, 531, 548, 565, 582,
016
600, 618, 636, 654, 673, 691, 710, 729,
017
749, 768, 788, 808, 828, 848, 869, 889,
018
910, 931, 952, 974, 995, 1017, 1039, 1060,
019
1083, 1105, 1127, 1150, 1172, 1195, 1218, 1241,
020
1264, 1288, 1311, 1334, 1358, 1382, 1406, 1429,
021
1453, 1478, 1502, 1526, 1550, 1575, 1599, 1624,
022
1648, 1673, 1698, 1723, 1747, 1772, 1797, 1822,
023
1847, 1872, 1897, 1922, 1948, 1973, 1998, 2023,
024
2048, 2073, 2098, 2123, 2148, 2174, 2199, 2224,
025
2249, 2274, 2299, 2324, 2349, 2373, 2398, 2423,
026
2448, 2472, 2497, 2521, 2546, 2570, 2594, 2618,
027
2643, 2667, 2690, 2714, 2738, 2762, 2785, 2808,
028
2832, 2855, 2878, 2901, 2924, 2946, 2969, 2991,
029
3013, 3036, 3057, 3079, 3101, 3122, 3144, 3165,
030
3186, 3207, 3227, 3248, 3268, 3288, 3308, 3328,
031
3347, 3367, 3386, 3405, 3423, 3442, 3460, 3478,
032
3496, 3514, 3531, 3548, 3565, 3582, 3599, 3615,
033
3631, 3647, 3663, 3678, 3693, 3708, 3722, 3737,
034
3751, 3765, 3778, 3792, 3805, 3817, 3830, 3842,
035
3854, 3866, 3877, 3888, 3899, 3910, 3920, 3930,
036
3940, 3950, 3959, 3968, 3976, 3985, 3993, 4000,
037
4008, 4015, 4022, 4028, 4035, 4041, 4046, 4052,
038
4057, 4061, 4066, 4070, 4074, 4077, 4081, 4084,
039
4086, 4088, 4090, 4092, 4094, 4095, 4095, 4095,
040
};
041
042
const
uint16_t PROGMEM my_dump2[256] = {
043
0, 0, 1, 1, 2, 4, 6, 8,
044
10, 12, 15, 19, 22, 26, 30, 35,
045
39, 44, 50, 55, 61, 68, 74, 81,
046
88, 96, 103, 111, 120, 128, 137, 146,
047
156, 166, 176, 186, 197, 208, 219, 230,
048
242, 254, 266, 279, 291, 304, 318, 331,
049
345, 359, 374, 388, 403, 418, 433, 449,
050
465, 481, 497, 514, 531, 548, 565, 582,
051
600, 618, 636, 654, 673, 691, 710, 729,
052
749, 768, 788, 808, 828, 848, 869, 889,
053
910, 931, 952, 974, 995, 1017, 1039, 1060,
054
1083, 1105, 1127, 1150, 1172, 1195, 1218, 1241,
055
1264, 1288, 1311, 1334, 1358, 1382, 1406, 1429,
056
1453, 1478, 1502, 1526, 1550, 1575, 1599, 1624,
057
1648, 1673, 1698, 1723, 1747, 1772, 1797, 1822,
058
1847, 1872, 1897, 1922, 1948, 1973, 1998, 2023,
059
2048, 2073, 2098, 2123, 2148, 2174, 2199, 2224,
060
2249, 2274, 2299, 2324, 2349, 2373, 2398, 2423,
061
2448, 2472, 2497, 2521, 2546, 2570, 2594, 2618,
062
2643, 2667, 2690, 2714, 2738, 2762, 2785, 2808,
063
2832, 2855, 2878, 2901, 2924, 2946, 2969, 2991,
064
3013, 3036, 3057, 3079, 3101, 3122, 3144, 3165,
065
3186, 3207, 3227, 3248, 3268, 3288, 3308, 3328,
066
3347, 3367, 3386, 3405, 3423, 3442, 3460, 3478,
067
3496, 3514, 3531, 3548, 3565, 3582, 3599, 3615,
068
3631, 3647, 3663, 3678, 3693, 3708, 3722, 3737,
069
3751, 3765, 3778, 3792, 3805, 3817, 3830, 3842,
070
3854, 3866, 3877, 3888, 3899, 3910, 3920, 3930,
071
3940, 3950, 3959, 3968, 3976, 3985, 3993, 4000,
072
4008, 4015, 4022, 4028, 4035, 4041, 4046, 4052,
073
4057, 4061, 4066, 4070, 4074, 4077, 4081, 4084,
074
4086, 4088, 4090, 4092, 4094, 4095, 4095, 4095,
075
};
076
077
const
uint16_t PROGMEM my_dump3[256] = {
078
0, 0, 1, 1, 2, 4, 6, 8,
079
10, 12, 15, 19, 22, 26, 30, 35,
080
39, 44, 50, 55, 61, 68, 74, 81,
081
88, 96, 103, 111, 120, 128, 137, 146,
082
156, 166, 176, 186, 197, 208, 219, 230,
083
242, 254, 266, 279, 291, 304, 318, 331,
084
345, 359, 374, 388, 403, 418, 433, 449,
085
465, 481, 497, 514, 531, 548, 565, 582,
086
600, 618, 636, 654, 673, 691, 710, 729,
087
749, 768, 788, 808, 828, 848, 869, 889,
088
910, 931, 952, 974, 995, 1017, 1039, 1060,
089
1083, 1105, 1127, 1150, 1172, 1195, 1218, 1241,
090
1264, 1288, 1311, 1334, 1358, 1382, 1406, 1429,
091
1453, 1478, 1502, 1526, 1550, 1575, 1599, 1624,
092
1648, 1673, 1698, 1723, 1747, 1772, 1797, 1822,
093
1847, 1872, 1897, 1922, 1948, 1973, 1998, 2023,
094
2048, 2073, 2098, 2123, 2148, 2174, 2199, 2224,
095
2249, 2274, 2299, 2324, 2349, 2373, 2398, 2423,
096
2448, 2472, 2497, 2521, 2546, 2570, 2594, 2618,
097
2643, 2667, 2690, 2714, 2738, 2762, 2785, 2808,
098
2832, 2855, 2878, 2901, 2924, 2946, 2969, 2991,
099
3013, 3036, 3057, 3079, 3101, 3122, 3144, 3165,
100
3186, 3207, 3227, 3248, 3268, 3288, 3308, 3328,
101
3347, 3367, 3386, 3405, 3423, 3442, 3460, 3478,
102
3496, 3514, 3531, 3548, 3565, 3582, 3599, 3615,
103
3631, 3647, 3663, 3678, 3693, 3708, 3722, 3737,
104
3751, 3765, 3778, 3792, 3805, 3817, 3830, 3842,
105
3854, 3866, 3877, 3888, 3899, 3910, 3920, 3930,
106
3940, 3950, 3959, 3968, 3976, 3985, 3993, 4000,
107
4008, 4015, 4022, 4028, 4035, 4041, 4046, 4052,
108
4057, 4061, 4066, 4070, 4074, 4077, 4081, 4084,
109
4086, 4088, 4090, 4092, 4094, 4095, 4095, 4095,
110
};
111
112
const
uint16_t PROGMEM my_dump4[256] = {
113
0, 0, 1, 1, 2, 4, 6, 8,
114
10, 12, 15, 19, 22, 26, 30, 35,
115
39, 44, 50, 55, 61, 68, 74, 81,
116
88, 96, 103, 111, 120, 128, 137, 146,
117
156, 166, 176, 186, 197, 208, 219, 230,
118
242, 254, 266, 279, 291, 304, 318, 331,
119
345, 359, 374, 388, 403, 418, 433, 449,
120
465, 481, 497, 514, 531, 548, 565, 582,
121
600, 618, 636, 654, 673, 691, 710, 729,
122
749, 768, 788, 808, 828, 848, 869, 889,
123
910, 931, 952, 974, 995, 1017, 1039, 1060,
124
1083, 1105, 1127, 1150, 1172, 1195, 1218, 1241,
125
1264, 1288, 1311, 1334, 1358, 1382, 1406, 1429,
126
1453, 1478, 1502, 1526, 1550, 1575, 1599, 1624,
127
1648, 1673, 1698, 1723, 1747, 1772, 1797, 1822,
128
1847, 1872, 1897, 1922, 1948, 1973, 1998, 2023,
129
2048, 2073, 2098, 2123, 2148, 2174, 2199, 2224,
130
2249, 2274, 2299, 2324, 2349, 2373, 2398, 2423,
131
2448, 2472, 2497, 2521, 2546, 2570, 2594, 2618,
132
2643, 2667, 2690, 2714, 2738, 2762, 2785, 2808,
133
2832, 2855, 2878, 2901, 2924, 2946, 2969, 2991,
134
3013, 3036, 3057, 3079, 3101, 3122, 3144, 3165,
135
3186, 3207, 3227, 3248, 3268, 3288, 3308, 3328,
136
3347, 3367, 3386, 3405, 3423, 3442, 3460, 3478,
137
3496, 3514, 3531, 3548, 3565, 3582, 3599, 3615,
138
3631, 3647, 3663, 3678, 3693, 3708, 3722, 3737,
139
3751, 3765, 3778, 3792, 3805, 3817, 3830, 3842,
140
3854, 3866, 3877, 3888, 3899, 3910, 3920, 3930,
141
3940, 3950, 3959, 3968, 3976, 3985, 3993, 4000,
142
4008, 4015, 4022, 4028, 4035, 4041, 4046, 4052,
143
4057, 4061, 4066, 4070, 4074, 4077, 4081, 4084,
144
4086, 4088, 4090, 4092, 4094, 4095, 4095, 4095,
145
};
146
147
uint16_t d1;
148
uint16_t d2;
149
uint16_t d3;
150
uint16_t d4;
151
152
void
setup
() {
153
// Serial.begin(115200);
154
pinMode(A0, INPUT);
155
pinMode(A1, INPUT);
156
pinMode(A2, INPUT);
157
pinMode(A3, INPUT);
158
159
Wire.begin();
160
dac.attach(Wire, 14);
161
dac.readRegisters();
162
dac.selectVref(MCP4728::VREF::VDD, MCP4728::VREF::VDD, MCP4728::VREF::VDD, MCP4728::VREF::VDD);
163
dac.selectPowerDown(MCP4728::PWR_DOWN::GND_100KOHM, MCP4728::PWR_DOWN::GND_100KOHM, MCP4728::PWR_DOWN::GND_100KOHM, MCP4728::PWR_DOWN::GND_100KOHM);
164
dac.selectGain(MCP4728::GAIN::X1, MCP4728::GAIN::X1, MCP4728::GAIN::X1, MCP4728::GAIN::X1);
165
dac.analogWrite(MCP4728::DAC_CH::A, 0);
166
dac.analogWrite(MCP4728::DAC_CH::B, 0);
167
dac.analogWrite(MCP4728::DAC_CH::C, 0);
168
dac.analogWrite(MCP4728::DAC_CH::D, 0);
169
dac.enable(
true
);
170
dac.readRegisters();
171
delay(5000);
172
}
173
174
void
loop
() {
175
d1 = (analogRead(A0) >> 2);
176
d2 = (analogRead(A1) >> 2);
177
d3 = (analogRead(A2) >> 2);
178
d4 = (analogRead(A3) >> 2);
179
180
dac.analogWrite(my_dump1[d1], my_dump2[d2], my_dump3[d3], my_dump4[d4]);
181
delay(10);
182
dac.readRegisters();
183
}
и что скажешь?
да формула там нужна будет скорее всего. никаких точек. Что на что свапали ?
01
const
uint16_t PROGMEM my_dump1[256] = {
02
0, 0, 1, 1, 2, 4, 6, 8,
03
10, 12, 15, 19, 22, 26, 30, 35,
04
39, 44, 50, 55, 61, 68, 74, 81,
05
88, 96, 103, 111, 120, 128, 137, 146,
06
156, 166, 176, 186, 197, 208, 219, 230,
07
242, 254, 266, 279, 291, 304, 318, 331,
08
345, 359, 374, 388, 403, 418, 433, 449,
09
465, 481, 497, 514, 531, 548, 565, 582,
10
600, 618, 636, 654, 673, 691, 710, 729,
11
749, 768, 788, 808, 828, 848, 869, 889,
12
910, 931, 952, 974, 995, 1017, 1039, 1060,
13
1083, 1105, 1127, 1150, 1172, 1195, 1218, 1241,
14
1264, 1288, 1311, 1334, 1358, 1382, 1406, 1429,
15
1453, 1478, 1502, 1526, 1550, 1575, 1599, 1624,
16
1648, 1673, 1698, 1723, 1747, 1772, 1797, 1822,
17
1847, 1872, 1897, 1922, 1948, 1973, 1998, 2023,
18
2048, 2073, 2098, 2123, 2148, 2174, 2199, 2224,
19
2249, 2274, 2299, 2324, 2349, 2373, 2398, 2423,
20
2448, 2472, 2497, 2521, 2546, 2570, 2594, 2618,
21
2643, 2667, 2690, 2714, 2738, 2762, 2785, 2808,
22
2832, 2855, 2878, 2901, 2924, 2946, 2969, 2991,
23
3013, 3036, 3057, 3079, 3101, 3122, 3144, 3165,
24
3186, 3207, 3227, 3248, 3268, 3288, 3308, 3328,
25
3347, 3367, 3386, 3405, 3423, 3442, 3460, 3478,
26
3496, 3514, 3531, 3548, 3565, 3582, 3599, 3615,
27
3631, 3647, 3663, 3678, 3693, 3708, 3722, 3737,
28
3751, 3765, 3778, 3792, 3805, 3817, 3830, 3842,
29
3854, 3866, 3877, 3888, 3899, 3910, 3920, 3930,
30
3940, 3950, 3959, 3968, 3976, 3985, 3993, 4000,
31
4008, 4015, 4022, 4028, 4035, 4041, 4046, 4052,
32
4057, 4061, 4066, 4070, 4074, 4077, 4081, 4084,
33
4086, 4088, 4090, 4092, 4094, 4095, 4095, 4095,
34
};
1
uint16_t my_dump1(
double
x) {
2
return
-14.549464 + 1.61280719 * x + 0.12322994 * x**2
3
}
Коэффициент корреляции с таблицей 0.9998653436
01
const
uint16_t PROGMEM my_dump1[256] = {
02
0, 0, 1, 1, 2, 4, 6, 8,
03
10, 12, 15, 19, 22, 26, 30, 35,
04
39, 44, 50, 55, 61, 68, 74, 81,
05
88, 96, 103, 111, 120, 128, 137, 146,
06
156, 166, 176, 186, 197, 208, 219, 230,
07
242, 254, 266, 279, 291, 304, 318, 331,
08
345, 359, 374, 388, 403, 418, 433, 449,
09
465, 481, 497, 514, 531, 548, 565, 582,
10
600, 618, 636, 654, 673, 691, 710, 729,
11
749, 768, 788, 808, 828, 848, 869, 889,
12
910, 931, 952, 974, 995, 1017, 1039, 1060,
13
1083, 1105, 1127, 1150, 1172, 1195, 1218, 1241,
14
1264, 1288, 1311, 1334, 1358, 1382, 1406, 1429,
15
1453, 1478, 1502, 1526, 1550, 1575, 1599, 1624,
16
1648, 1673, 1698, 1723, 1747, 1772, 1797, 1822,
17
1847, 1872, 1897, 1922, 1948, 1973, 1998, 2023,
18
2048, 2073, 2098, 2123, 2148, 2174, 2199, 2224,
19
2249, 2274, 2299, 2324, 2349, 2373, 2398, 2423,
20
2448, 2472, 2497, 2521, 2546, 2570, 2594, 2618,
21
2643, 2667, 2690, 2714, 2738, 2762, 2785, 2808,
22
2832, 2855, 2878, 2901, 2924, 2946, 2969, 2991,
23
3013, 3036, 3057, 3079, 3101, 3122, 3144, 3165,
24
3186, 3207, 3227, 3248, 3268, 3288, 3308, 3328,
25
3347, 3367, 3386, 3405, 3423, 3442, 3460, 3478,
26
3496, 3514, 3531, 3548, 3565, 3582, 3599, 3615,
27
3631, 3647, 3663, 3678, 3693, 3708, 3722, 3737,
28
3751, 3765, 3778, 3792, 3805, 3817, 3830, 3842,
29
3854, 3866, 3877, 3888, 3899, 3910, 3920, 3930,
30
3940, 3950, 3959, 3968, 3976, 3985, 3993, 4000,
31
4008, 4015, 4022, 4028, 4035, 4041, 4046, 4052,
32
4057, 4061, 4066, 4070, 4074, 4077, 4081, 4084,
33
4086, 4088, 4090, 4092, 4094, 4095, 4095, 4095,
34
};
1
uint16_t my_dump1(
double
x) {
2
return
-14.549464 + 1.61280719 * x + 0.12322994 * x**2
3
}
Коэффициент корреляции с таблицей 0.9998653436
да нет, это абстрактные данные были. ТС в полной уверенности, что может вывести кривые по 4-рём каналам сам, как он это сделает ума не приложу, вопрос был о разумной достаточности разрешающей способности по числу элементов массива
да формула там нужна будет скорее всего. никаких точек. Что на что свапали ?
да в природе всё просто либо синус либо гибербола
1
uint16_t my_dump1(
double
x) {
2
return
-14.549464 + 1.61280719 * x + 0.12322994 * x**2
3
}
Коэффициент корреляции с таблицей 0.9998653436
A мне квадратом не фитит, только кубом.
да формула там нужна будет скорее всего. никаких точек. Что на что свапали ?
формула и нужна, будут какие-то промежуточные опорные точки, но все в пределах.
да формула там нужна будет скорее всего. никаких точек. Что на что свапали ?
формула и нужна, будут какие-то промежуточные опорные точки, но все в пределах.
PS Пиво где, где пиво? Я Драйверу должен )))
да формула там нужна будет скорее всего. никаких точек. Что на что свапали ?
формула и нужна, будут какие-то промежуточные опорные точки, но все в пределах.
PS Пиво где, где пиво? Я Драйверу должен )))
ну я и планировал если что все через эксель прогнать, там все просто…
пиво пока остывает так сказать. но процесс ещё не завершён, на днях доберусь до авто поковыряю, так то все закуплено
да формула там нужна будет скорее всего. никаких точек. Что на что свапали ?
формула и нужна, будут какие-то промежуточные опорные точки, но все в пределах.
PS Пиво где, где пиво? Я Драйверу должен )))
ну я и планировал если что все через эксель прогнать, там все просто…
пиво пока остывает так сказать. но процесс ещё не завершён, на днях доберусь до авто поковыряю, так то все закуплено
формула конечно хорошо, но только из таблицы оно будет брать такта за 4 процессора +- а вот сколько будет считать формулу - вопрос , на интеле это делалось за один так процессора )))
и зачем тебе авто, прицепи крутёлки и посмотри работу на столе
PS и таки да память программ в контроллере, это не то, что ты сможешь завещать внукам, девать её некуда
ну а сколько там мгц у процессора... не думаю что нехватит...
на столе не очень получится, мне нужно снимать "входящие" параметры, а они из-за так называемого самообучающегося дросселя - меняются, и меняются они пока дроссель не выйдет из режима самообучения. т.е. это поставил девайс, потыкал, и надо поездить пол дня, и так пока не попаду в "штатные" параметры.
PS и таки да память программ в контроллере, это не то, что ты сможешь завещать внукам, девать её некуда - это типа не сохраняется что-то? память энергозависимая?
PS Пиво где, где пиво? Я Драйверу должен )))
да... я жду... :)))
а по делу, мега справится с табличным подходом, как только формула будет нужна и на "лету", все, о меге забывайте, иначе инертность вход/выход при вычислении, ставит крест на этой затее.
тут к дяде СТМу нужно, с его "сопроцессором".
об ИИ и разговора не было, ты стучал себя в грудь, что таблицы сам поправишь, НУ НУ )))
а по делу, мега справится с табличным подходом, как только формула будет нужна и на "лету", все, о меге забывайте, иначе инертность вход/выход при вычислении, ставит крест на этой затее.
тут к дяде СТМу нужно, с его "сопроцессором".
педаль газа и дроссельный узел достаточно медленные устройства и нафиг там супербыстрый отклик от МК не нужен. имхо , ресурсов атмеги 328 в данной задаче до попы , хоть для формул , хоть по точкам. Просто забивать всю эту таблицу то ещё развлечение
на столе не очень получится, мне нужно снимать "входящие" параметры, а они из-за так называемого самообучающегося дросселя - меняются, и меняются они пока дроссель не выйдет из режима самообучения. т.е. это поставил девайс, потыкал, и надо поездить пол дня, и так пока не попаду в "штатные" параметры.
интересно о каких параметрах речь? в дросселе два датчика-потенциометра, в педали газа тоже самое. Что там может меняться? Вот %открытия дросселя/педали да, может подстраиваться. А напряжения на датчиках в списке параметров реальные и видишь. Нужна осциллограмма "родных" датчиков и тех, которые вы подсовываете этому чужому для них ЭБУ , тогда сразу все станет понятно. а так пальцем в небо.
хм, по моим самым грубым прикидкам, не забываем что надо не только пересчитать но и куда то (хоть в цап) засунуть, 4 канала займут 800-900ms, а для сваперов-корчеров это вечность как мне кажется. но вам видней...
0.9 секунды? че цап такой медленный чтоли. А расчет формулы то явно быстрее должен быть. в 10мс то точно должно уложиться. А так если частота обновления сигнала дросселя будет в секунду , то это вообще никуда не годится, от слова совсем.
MaksVV чет да, я хапнул сильновато, похоже на порядок ошибся, пойду всю ночь пересчитывать буду...
так это тогда не так надо делать, искать авто с оригинальными датчиками ставить энкодер позволяющий считать точное положение и писать в таблицу значение энкодера - значение с датчика, для газа так точно можно сделать
ЗЫ я бы вообще записывал в EEPROM
интересно о каких параметрах речь? в дросселе два датчика-потенциометра, в педали газа тоже самое. Что там может меняться? Вот %открытия дросселя/педали да, может подстраиваться. А напряжения на датчиках в списке параметров реальные и видишь. Нужна осциллограмма "родных" датчиков и тех, которые вы подсовываете этому чужому для них ЭБУ , тогда сразу все станет понятно. а так пальцем в небо.
ничего в датчиках не меняется, меняется в "мозге", так как один из датчиков не соответствует штатному, по сопротивлению конечно же. осцилограмму наверное не смогу снять, элементарно нечем. поэтому методом тыка, ну и там не особо сложно, я знаю например что при закрытом дросселе на ХХ должно в мозг заходить 0.6 вольт при полностью открытом 4.8в, на "парковке" просто какой-то сигнал (типа вкл-выкл 1/0). и это напряжение должно соотвествовать второму датчику, что важно, а как только оно не соотвествует, мозг впадает в обучение дросселя, и корректиурет положение дросселя электроприводом, и так до бесконечности. всё что нужно, это подогнать значения педали в том или ином положении, с открытием заслонки. Я сначала хотел подогнать сопротивление, но оказалось, что оно уже выше, чем нужно, т.е. сопротивление нужно убрать) Вот и решил просто выдавать своё напряжение через ардуину, в зависимости от нажатия на педаль.
А скорость у чипа сколько? 16мгц? Этого более чем...
так это тогда не так надо делать, искать авто с оригинальными датчиками ставить энкодер позволяющий считать точное положение и писать в таблицу значение энкодера - значение с датчика, для газа так точно можно сделать
ЗЫ я бы вообще записывал в EEPROM
да есть старый дроссель, его можно поставить и считать, но мне это ничего не даст.
что нужно будет подавать на выход их я и так знаю, но эти параметры не будут привязаны к углу открытия дросселя, типа я получу 2 вольта, а на каком угле? в итоге я решил так делать - открываю педалью дроссель, и считываю напряжение с датчика заслонки (со второго), вижу там например 1 в, значит и на педали должно быть 1 в, значит угол открытия педали соотвествует углу заслонки. и параллельно, мне надо это параметры сопоставлять со входящими от педали, так как на вход будет другое напряжение. вот как-то так. поэтому только методом тыка)
хм, по моим самым грубым прикидкам, не забываем что надо не только пересчитать но и куда то (хоть в цап) засунуть, 4 канала займут 800-900ms, а для сваперов-корчеров это вечность как мне кажется. но вам видней...
поэтому только методом тыка)
С тех пор как изобрели арифметику это не наш метод )))
для этого энкодер и ставится на дроссель )))
Педалью подавить обучить скетч чтобы заполнил весь буфер, позиция в буфере - угол дросселя, значение - значение на этом угле, здесь самое сложное - механика
С тех пор как изобрели арифметику это не наш метод )))
для этого энкодер и ставится на дроссель )))
Педалью подавить обучить скетч чтобы заполнил весь буфер, позиция в буфере - угол дросселя, значение - значение на этом угле, здесь самое сложное - механика
у меня не так много есть устройств для измерений) за 100 рублей из ашана мультиметр и всё. даже паяльника по факту нет.
педалью обучить скетч не получится, педаль механически не связана с заслонкой, угол открытия заслонкой регулируется электроприводом, и проблема в том, что он всегда разный. т.е. когда я жму на педаль, я фактически не знаю какой угол, я лишь знаю какое напряжение выдаёт датчик положения дросселя, оно вроде даже по ОБД2 показывается, и как-то интерпретируется даже в % открытия. Но саму педаль не показывает. Поэтому я просто скидываю мозг, считываю входящие с педали, и сразу же считываю показания с дросселя. дальше подставляю на выход в ЦАП свои значения. Может так оказаться что там нужно будет просто прибавить сколько то вольт везде, и тогда я без ардуино что-то спаяю.
Мультиметра до жопы хватит. Измерь сопротивление в крайних точках (положения заслонки полностью открыто и полностью закрыто) родного и свапного дросселя. Мерить между массой датчиков и сигнальным ползунком или между питанием и сигнальным ползунком. Только смотри у электронного дросселя полностью закрытое положение надо рукой дозакрывать. (он чуть подпружинен в приоткрытом состоянии). Также измерить сколько всего сопротивление у переменного резистора датчика (между контактами питание и масса датчиков) возможно вообще без МК обойтись, добавив резюк в плечо делителя
Зы при чем тут Эл педаль газа вообще не понял
Или же перерезать один провод моторчика дросселя, чтоб мотор не работал и вручную перемещать дроссель от края до края контролируя напругу датчиков в диагностике, тогда и мультиметр не нужен
в том то и дело, что у полностью закрытого (педаль газа отпущена) дроссель чуть открыт да, но для педали газа (а там тоже датчик) это конечное состояние, дальше не закрыть. Сопротивление то я могу померить, что я первым делом и делал когда подбирал датчики на заслонку, а вот на педаль я не могу подобрать датчик, он физический другой, только что-то самому изобретать механически чтобы другой ставить. Но суть в том, что сейчас сопротивление на 3-5кОм выше чем требуется. Если я отключу привод моторчика или сниму любой из датчиков, или они сильно отличаются от шатных по параметрам - мозг входит в аварийный режим, питание пропадает, дроссель открывается на 10% только при педали в пол (там механически уже работает). Т.е. измерения нужно проводить на +- рабочем состоянии.
Понял! Пива мы с Драйвером не дождёмся )))
вообще ниче не понял. Причем тут педаль. У дросселя и педали газа нет жесткой связи. Это отдельные устройства. Что значит дальше дроссель не закрыть? Подпружинено в приоткрытом состоянии лишь для того, чтобы эл.мотору дросселя было легче держать заслонку в предзакрытом состоянии, т.к. заслонку в таких почти закрытых положениях вакуумом пытается прихлопнуть и пружина помогает мотору держать её на малых углах открытия.
педаль тоже меняли чтоли, она не родная для эбу? Нафига в педаль лезти если она родная?
по педали просто смотришь в диагностике если от 0 % до 100% при нажатии на педаль нормально меняется параметр, и ошибок на неё нет вообще педаль не трогай, зачем до нее докопался
и если отключишь мотор дросселя, да будет в аварии эбу . но питание на датчики дросселя все равно должно идти, измерения проводить понятное дело на неработающем двигателе при включенном зажигании вручную шевелив дроссель и смотреть в диагностике на напряжения сигнальных проводов датчиков.
и как он тебе дроссель откроет на 10% если ты провод мотора перерезал? бред какойто
Понял! Пива мы с Драйвером не дождёмся )))
по педали просто смотришь в диагностике если от 0 % до 100% при нажатии на педаль нормально меняется параметр, и ошибок на неё нет вообще педаль не трогай, зачем до нее докопался
и если отключишь мотор дросселя, да будет в аварии эбу . но питание на датчики дросселя все равно должно идти, измерения проводить понятное дело на неработающем двигателе при включенном зажигании вручную шевелив дроссель и смотреть в диагностике на напряжения сигнальных проводов датчиков.
и как он тебе дроссель откроет на 10% если ты провод мотора перерезал? бред какойто
в диагностике показывает с датчика заслонки, а не с педали.
если отключаю мотор с дросселя то питание пропадает (проверял).
дроссель открывается на 10-15% МЕХАНИЧЕСКИ если полностью педаль нажать в пол. Ну такой узел, там если до конца выкрутить, то язычок уже тянет за заслонку минуя электронику, это на случай если что-то сломалось, ты мог ехать хоть как-то.
дроссель открывается на 10-15% МЕХАНИЧЕСКИ если полностью педаль нажать в пол. Ну такой узел, там если до конца выкрутить, то язычок уже тянет за заслонку минуя электронику, это на случай если что-то сломалось, ты мог ехать хоть как-то.
чето мы на разных языках чтоли говорим. Он откроется сразу на величину подпружинивания , как только ты провод эл мотора перережешь . Пофиг как там у тебя педаль газа хоть в пол , хоть не в пол. Или у тебя трос чтоли от педали до дросселя я вообще нихера не пойму
не понял. Причем тут педаль. У них нет жесткой связи. Что значит дальше не закрыть. Подпружинено в приоткрытом состоянии лишь для того, чтобы эл.мотору дросселя было легче держать заслонку в предзакрытом состоянии, т.к. заслонку в таких почти закрытых положениях вакуумом пытается прихлопнуть и пружина помогает мотору держать её на малых углах открытия.
педаль тоже меняли чтоли, она не родная для эбу?
мне нужно изменить выходные параметры именно для датчика с педали, поэтому она тут "причём". И педаль дозакрыть не могу) она механически упирается в ограничительный болт при полностью отпущеной педали. В этот момент она встаёт на так называемый паркинг, детектится по второму каналу, и уже работает ХХ по своему алгоритму. Сама же заслонка подпружинена да, но не для того чтобы легко держать заслонку, а чтобы закрывать её ещё больше когда это требуется, например при торможении двигателем, она больше закрывается чем просто на ХХ, но и закрыться она полностью не может, есть ограничительный болт, по которому выставляется определённый зазор на заслонке. Собвстенно по этому и возникают проблемы, из-за неправильных данных с педали газа, дроссель пытается закрыться полностью, упирается в болт ограничительный. Пробовал больше выставить зазор - в других местах проблемы вылазят.
Сейчас для ЭБУ неродная только педаль, датчик самой заслонки я подобрал по сопротивлению с другой, и он типа болт он подошёл, только проводку отзеркалил.
Задача - синхронизировать напряжение с датчика педали, с датчиком заслонки. Как это выглядит - в ардуино входит сигнал с датчика заслонки, и с датчика педали, жму на педаль, в ардуине вижу вольтаж с педали и с заслонки, например 1 вольт с педали и с заслонки, например 0.8 вольт, и всё. Дальше в ардуино надо прописать, что если входит 1в, на ЦАП подать 0.8 в. Дальше датчик дросселя для ардуино не используется.
На снятом или на столе эти данные я не могу сопоставить, так как не знаю степень открытия ни пидали на заслонки. Поэтом проще это всё делать прям по месту.
чето мы на разных языках чтоли говорим. Он откроется сразу на величину подпружинивания , как только ты провод эл мотора перережешь . Пофиг как там у тебя педаль газа хоть в пол , хоть не в пол. Или у тебя трос чтоли от педали до дросселя я вообще нихера не пойму
мы говорим о разных дроссельных узлах. конкретно в этом, если нажать газ в пол, то механически, там шестерёночки за который тросик тянет, типа да, есть тросс, но педаль электронная, ты тросиком тянешь потенциометр, а он уже через моторчик открывает дроссль. Но в самом конце устройства есть язычок, он откроет дроссель на 10-15% (я не помню точно, но типа километров 60-70 на пятой она поедет.
Открывается на величину подпружинивания только если всё выключено, или когда дроссель впадает в аварийный режим. Это 100%, потому что как только вырубается дроссель, чуть поднимаются ХХ (открывается на величину подпружинивания), если всё работает и управляется приводом, то дроссель чуть закрыт, я вижу это и как по разряжению во впуске (МАП) и по датчику положения заслонки + если тормозить двигателем там уже упирается в ограничительный болт, т.е. ещё сильнее закрывается, но не засчёт разряжения во впуске, заслонка же круглая, на оси, поток её пытается "всосать" как снизу так и сверху, за одну часть пытается закрыть, за другую - открыть, типа компенсируется. Иначе бы она схлопывалась уже, там и так щелка на подпружиненной 0.5мм щуп лезет.