Jack_A, никакой ШИМ не сравнится по качеству и частоте синуса с ЦАПом 16 бит на резисторах. Есть специальные синусные микросхемы, но дорого. Можно на операх собрать, но гемор. На GD407 DAC только 12бит, но тактовая 400Мгц!
Как вариант. Составить таблицу синуса из 129/период, тогда синус получается 775,19Гц. Таблица составляется по выражению OCR1B=40+40*sin(i*360/129)-1 При этом из опыта -нежелательно генерировать точки с вырожденным pwm, для чего, немного жертвуя амплитудой, множитель перед sin немного уменьшить. Допустим до 32 -применить контроллер с более продвинутым 8-разрядным таймером, что нибудь типа tiny. Тогда можно таблицу уменьшить в 2 раза за счет занесения в регистр сравнения байта вместо слова -поднять частоту тактирования до максимально возможной. Тогда можно и амплитуду поднять.
Но насколько подсказывает логика, в вопросах безопасности на транспорте, как и в медоборудовании, несертифицированная самодеятельность не допускается. Или не?
Лично у нас всё должно пройти по бумагам, даже замены конденсаторов, не говоря про стенды и покуда не проверят и подпишут разрешение ничего менять и использовать не имеешь право. Для настройки, только заводские стенды и поверенное оборудование. А для выявлении причин отказа, это не критично и по бумагам пройдёт без проблем.
Потеря емкости аккумулятора напрямую зависит от условий хранения и эксплуатации. При неправильном хранении даже самый лучший литиевый источник тока с превосходными характеристиками может не оправдать ожиданий. Технология, основанная на рекомендациях таких известных производителей литиевых источников тока, как компании FANSO и EVE Energy, поможет организовать правильный процесс хранения батареек и аккумуляторов.
Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре.
Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств.
Типа вот такой последовательности цифр 39,75,0,78,0,55,27,44,38,33,77,0,78,0,77,32,39,43,28,54,0,78,0,75,37,34,49,23,59,0,77,2,73,7,29,54,18, 63,9,76,4,70,11,62,58,14,67 и т.п.
ну да, чушь нереальная. вообще-то, аргумент синуса должен быть в радианах, а не в градусах. видимо, поэтому и получил ты такие результаты. лучше нп компе посчитай - там калькулятор считает в градусах. и даже на компе быстрее будет - не надо ждать по 100 секунд твою задержку.
_________________ Мудрость приходит вместе с импотенцией... Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.
аргумент синуса должен быть в радианах, а не в градусах..
Если значение i переводить в радианы, то данные в таблице более похожи, а если выражение в скобках, то тоже как бы не то получается. 39,42,44,46,48,50,52,54,55,57,59,61,62,64,65,67,68,69,70,72,73,74,75,75,76,77,77,78,78,78,78,78,78,78, 78,78,77,77,76,76,75,74,73,72,71,70,69,67,66,64,63,61,60,58,56,55,53,51,49,47,45,43,41,39,38,36,34,32, 30,28,26,24,22,21,19,17,16,14,13,11,10,8,7,6,5,4,3,2,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,2,2,3,4,5,7,8,9,10,12, 13,15,16,18,20,22,23,25,27,29,31,33,35,37,38.
i - это переменная цикла, целое число. а радианах должен быть аргумент синуса. и градусы в формуле вообще не нужны. 360 градусов - это 2*PI. и формула должны выглядеть так: sin(2 * PI * i / steps) где steps - число шагов, у тебя их 129.
_________________ Мудрость приходит вместе с импотенцией... Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.
А чего такой маленький диапазон (амплитуда всего 40)? Так надо?
Несколько нулей: это (скорей всего): * из-за маленького динамического диапазона (вблизи к максимуму/минимуму cинус мало меняется - производная то нулевая или близкая к нулю) * и скорей всего, ты не округляешь (не правильно округляешь) у меня нулей меньше
То, что не так округление работает говорит то, что первое значение в таблице 39, а вообще-то должно быть 40 (как я понял из ранее выложенного исходника).
Alex_ka писал(а):
i=130, чтобы в таблице получить 129 значений.
А у тебя 130 значений: i = 0, 1, 2, .... 129
Вот такоая таблица на 129 элементов у меня получилась (если амплитуда 40 и смещение 40) Спойлер
у тебя не может быть i=130, так как в твоей формуле for (int i=0;i<130;i++) i всегда меньше 130. а сформироваться у тебя должно 130 значений, так как от 0 до 129 количество значений переменой цикла равно 130.
_________________ Мудрость приходит вместе с импотенцией... Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.
В личку кинул исходник (в stdout выводит си-шный массив). Но тебе же еще модулировать, как мне кажется, желательно использовать весь диапазон значений (0.255), а не его треть (0..80). В исходнике константами настраивается число точек в периоде, амплитуда и смещение.
Ну и частота у тебя константа (как я понял), непонятно почему не хочешь в таблицу положить кратное число периодов, чтобы была точная частота на выходе без "фазового дрожания" и без необходимости что-то пересчитывать "на лету" - во флеше то места навалом (или нет?).
Таблица синуса для амплитуды 120 (смещение 128) Спойлер
Чтобы управлять амплитудой, таблицу нужно пересчитывать. Имеет смысл сократить таблицу до четверти и памяти меньше занимает. Вторая четверть зеркальна и т.д.
Думаю, при тактовой 8МГц частота при такой таблице будет 8'000'000/256/129~242Гц вместо 775 требуемых. Придется уменьшать число точек/период или задирать тактирование до 25,6МГц. Не каждая mega8 справится.
linkov1959 писал(а):
Чтобы управлять амплитудой, таблицу нужно пересчитывать.
Можно таблицу синуса нормировать типа SIN(I*360/129). Тогда для управления амплитудой можно будет модулировать множитель по той же таблице синуса. OUT_PWM=40+K*SIN(I*360/129), где K=40 без модуляции и K 0...40 с модуляцией.
то есть, мои слова, что аргумент должен быть в радианах, для тебя пустой звук? повторю специально для тебя:
Starichok51 писал(а):
градусы в формуле вообще не нужны. 360 градусов - это 2*PI. и формула должна выглядеть так: sin(2 * PI * i / steps) где steps - число шагов, у тебя их 129.
_________________ Мудрость приходит вместе с импотенцией... Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 18
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения