шим
- Войдите на сайт для отправки комментариев
Пнд, 30/05/2016 - 00:28
доброго времени, может кто подсказать как управлять шим по схеме если 5в то шим =0, если 0в то шим =255. и еще момент при напряжении на потенциометре 1в на шим должно приходить значение 100
Как исходные данные получаете? analogRead()? Да в любом случае - смотрите в сторону встроенной функции map - она отображает один диапазон на другой. Дальше, думаю, разберётесь.
спасибо буду пробывать .
добрый день с цифрами разобрался ) это уже хорошо и все заработало но появилась другая проблема при реском увелечении напряжения шим реагирует ступенями может подскажете как можно сгладить этот момент или ускорить шим
ШИМ не может реагировать ступенями: проблема в Вашем коде или способе подключения.
ШИМ не может реагировать ступенями: проблема в Вашем коде или способе подключения.
Может если ТС переводит из широкой школы в узкую. Согласен с Вами проблемма в коде. Чтобы небыло ступеней нужен ФНЧ, но тогда инерционность будет. Поясню - надо взять допустим 2 части нового значения с ацп и 3 прошлого, и их сумму разделить на 5. (както так), меняя отношение частей можно менять скорость реакции (инерции).
добрый день . с проблемой скачков разобрался хватило rc фильтра . теперь пытаюсь разобратся со следующей задачей, оказалось что изменить шим с (255,0) на(165,0) мне не достаточно .получилось то что нужно в начале и конце . нужно еще както установить промеж уточные значения шим , например:
если напряжение на входе 1в то на шим должно быть 2.4в ,
если на входе 2в то на шим 1.8. и так далее .
тоесть нужно составить таблицу подскажите пожалуйста куда копать
yrik8407, Вы сами понимаете, что Вам нужно?
В стартовом сообщении Вы пишете, что при 1в должно быть 100, а в 6-м - что 2.4.
Так что если "куда копать" - то копать в сторону составления внятной формулировки (желательно по-русски), что именно Вам нужно.
вы яркостью управляете? Глаз воспринимает только логарифмическое изменение как линейное, поэтому простая конвертация уровней не особо подходит.
http://arduino.ru/forum/apparatnye-voprosy/ochen-plavnoe-regulirovanie-s...
я управляю не яростью у меня на авто стоит расходомер воздуха который работает от 5 до 0 вольт и сигнал идет налоговый а на новом который хочу поставить сигнал идет на оборот и еще просто перевернуть значения шим не достаточно оказалось придется составлять таблицу на каждое налоговое значение свое значение шим . вот и ломаю голову как составить таблицу и применить . напряжение меняется в зависимости от расхода воздуха . думаю надо записать данные с одного расходомера и с другова и по этим данным составлять таблицу.
я нашел готовое решение на просторах интернета то что примерно мне надо
http://www.primera-club.ru/f/elektronika/62778-preobrazovatel-vq-tablic-...
доброго времени на просторах интернета нашол то что надо методом тыка настроил под то что мне надо но хотелось бы разобратся в скетче что там и для чего ? и как его перенести на форум чтоб он выглядел по человечески ?
вот код:
[code] const int PWM_PIN = 3; const int AIN_PIN = 0; long VQin[64] = { 271, 271, 271, 271, 271, 275, 297, 337, 396, 475, 575, 695, 837, 1002, 1190, 1402, 1639, 1901, 2190, 2506, 2850, 3224, 3628, 4063, 4530, 5030, 5565, 6135, 6741, 7385, 8068, 8790, 9554, 10360, 11209, 12104, 13045, 14087, 15169, 16308, 17507, 18766, 20087, 21473, 22925, 24444, 26034, 27695, 29429, 31238, 33125, 35090, 37136, 39265, 41479, 43779, 46168, 48647, 51219, 53885, 56648, 59509, 62471, 65535 }; long VQout[64] = { 36, 36, 36, 36, 36, 36, 132, 232, 338, 453, 578, 718, 873, 1047, 1241, 1457, 1699, 1967, 2265, 2581, 2892, 3234, 3611, 4028, 4484, 4980, 5513, 6079, 6674, 7290, 7919, 8550, 9338, 10171, 11057, 11996, 12991, 14043, 15153, 16323, 17554, 18848, 20205, 21628, 23118, 24675, 26301, 27998, 29766, 31606, 33520, 35509, 37573, 39714, 41933, 44230, 46606, 49063, 51601, 54221, 56924, 59710, 62580, 65535 }; void setup() { TCCR2B = TCCR2B & 0b11111000 | 0x02; } void loop() { const int VPWR = 5030; const int MAXV = 5120; const int MINV = 80; int inVoltage = map(analogRead(AIN_PIN), 0, 1023, 0, VPWR); int outVoltage = 0; long inQ = 0; int adrL = constrain(map(inVoltage, MINV, MAXV, 0, 63), 0, 63); int adrH = adrL + 1; int voltageValueL = map(adrL, 0, 63, MINV, MAXV); int voltageValueH = map(adrH, 0, 63, MINV, MAXV); int diff = voltageValueH - voltageValueL; float k = (float)(inVoltage - voltageValueL) / (float)diff; float valL = 0.0; float valH = 0.0; if (inVoltage < MINV) { inQ = VQin[0]; } else if (adrL < 63) { valL = VQin[adrL]; valH = VQin[adrH]; inQ = valL + ((valH - valL) * k); } else { inQ = VQin[63]; } for (long i = 0; i < 64; i++) { int outVolL = 0; int outVolH = 0; long QvalL, QvalH, d; if (VQout[i] > inQ) { if (i > 0) { outVolH = map(i, 0, 63, MINV, MAXV); outVolL = map(i - 1, 0, 63, MINV, MAXV); QvalH = VQout[i]; QvalL = VQout[i - 1]; d = QvalH - QvalL; k = (float)(inQ - QvalL) / (float)d; outVoltage = (outVolL + ((outVolH - outVolL) * k)); } else { outVoltage = MINV; } break; } } analogWrite(PWM_PIN, constrain(map(outVoltage, 0, VPWR, 0, 255), 0, 255)); } [/code]