Значит предупреждения у тебя включены по дефолту. Типы данных включаются в stdint.h. Я специально привёл пример с разными типами. Обрати внимание на компилятор.
OKF, по твоей картинке я все равно ничего не понимаю про твой компилятор. у меня для разных типов чисел не нужно подключать никакой заголовочный файл, ни для целых, ни для "плавающих". а если есть в программе математические функции (возведение в степень, синус и т.п.), то для них подключается свой заголовок. ты мне в личке давал тестовый текст, так там подключен был только stdlib.h, и никаких подключений для типов чисел там нет, и "флотский" тип там работал.
_________________ Мудрость приходит вместе с импотенцией... Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.
Опубликованы материалы вебинара, посвященного пленочным конденсаторам компании Hongfa, на котором была представлена текущая линейка и модельный ряд продукции этого направления, включая новые, недавно вышедшие серии.
На вебинаре были приведены актуальные примеры применения пленочных конденсаторов Hongfa в источниках питания, зарядных станциях для электротранспорта, преобразователях частоты, фотоэлектрических преобразователях и ветрогенераторах.
Компания Hongfa - один из лидеров азиатского рынка пленочных конденсаторов с полным циклом производства. Она выпускает пять серий помехоподавляющих конденсаторов этого типа как для бытовой, так и для трехфазной промышленной сети, а также для автомобильного применения. Продукция компании по ассортименту, параметрам и количеству серий конденсаторов ЭМП не уступает другим крупным производителям этого сегмента и может легко заменить ассортимент ушедших из РФ брендов.
Starichok51, Исправил везде "t=(uint8_t)(sin(1.57/descr1*i)*Amp)", t объявил uint8_t , ничего не изменилось. descr1 = (uint16_t)(120 * exp(freq / 341.0)). Поэкспериментировал: 120 заменил на 190 чтобы срезать высокие частоты (столько не нужно), 341 заменил на 600, регулировка стала более плавной. Так можно делать?
Добавлено after 6 minutes 5 seconds: И почти в самом конце регулятора, чуток не доходя до максимума, какой-то "всплеск" - частота подскакивает почти до максимума, амплитуда тоже. Как будто в резонанс входит, дальше кручу резистор- всё нормализуется и до конца всё нормально.
да, так можно и даже нужно делать, чтобы управлять максимальной и минимальной частотой. вернулся я домой из гостей и провел анализ в атмел студио 7.0. никакого криминала в расчетах, приводящего к подобным сбоям в частоте и амплитуде я не нашел. то есть, я совершенно не вижу причины скачка частоты и нарушения амплитуды. поэтому я могу даже допустить появления резонанса механической системы. но проверить каждое значение freq от 0 до 1023 - это практически не реально. к тому же, из-за недостатка ОЗУ невозможно создать большие массивы, чтобы по массиву просмотреть все получаемые значения синуса. посмотрел я экспоненту в массиве из 256 значений (4 варианта freq от 0 до 1023) - всё замечательно. посмотрел для нескольких конкретных значений переменной descr1 в расчете кусочков синуса - тоже сбоев не нашел. могу еще проверить через большие массивы в программе для компа, где ограничения размеров массивов практически нет. если все таки есть такая причина, я думаю, что она должна проявиться и в программе на компе.
НО! нашел одно существенное упрощение в расчетах. поскольку (1 - k) + k = 1, обе формулы расчета нарастания и спада синуса можно объединить смело. цикл получится такой: //1 полуволна for (uint16_t i = (descr1 * (1 - k)); i < (descr1 * (1 - k)) + descr1; i++) { t=sin(1.5708 * i / descr1) * Amp; // считаем синус... PWM1(t); } фактически это "сумма" обеих формул (нарастание + спад). по прежнему descr1 * (1 - k) определяет начало синуса, а "длину" кусочка синуса определят величина descr1. для второй полуволны точно эта же формула, только PWM2(t) вместо PWM1(t).
Добавлено after 3 minutes 53 seconds: да, ещё я убедился, что в атмел студио можно не делать приведение типов данных, то есть, для t писать (uint8_t) не нужно, и для descr1 писать (uint16_t) тоже не нужно.
_________________ Мудрость приходит вместе с импотенцией... Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.
выкинуть деление на descr1 вполне можно, так как переменная цикла может быть с плавающей точкой. тогда получится так: for (float i = 1 - k; i < 2 - k; i += 1.0 / descr1) { t=sin(1.5708 * i) * Amp; // считаем синус... PWM1(t); } но частота без операции деления при этом немного возрастет, и придется немного увеличить коэффициент в расчете экспоненты. и еще можно добавить смело знак равенства: for (float i = 1 - k; i <= 2 - k; i += 1.0 / descr1) {
Добавлено after 2 hours 25 minutes 22 seconds: и еще у меня есть одно предложение. при малых значениях freq там получается для descr1 по несколько одинаковых значений. да и вообще не нужно иметь 1024 значения частоты. я предлагаю число ступенек частоты сократить до 64. это получается так: int freq = ADCread(7) / 16; а формула для descr1 получится такая: descr1 = 190 * exp(freq / 35.0); при этом частота будет изменяться в 6 раз.
Добавлено after 23 minutes 20 seconds: Varlakotam, после сокращения числа ступеней частоты я ожидаю, что уйдет тот участок значений descr1, где наблюдается срыв в работе, а после этого участка восстанавливается нормальная работа. я бы даже сократил число ступеней частоты до 16. я думаю, что этого вполне хватило бы. тогда будут такие формулы: int freq = ADCread(7) / 64; descr1 = 190 * exp(freq / 8.0); при этом частота будет изменяться в 6,5 раз.
Добавлено after 2 hours 52 minutes 50 seconds: прозевал я тогда, когда сказал про (1 - k) + k = 1. там относительно 1 должно быть симметрично. for (uint16_t i =descr * (1 - k); i <= descr * (1 + k); i++) { t = sin(1.5708 * i / descr1) * Amp; PWM1(t); } или с плавающей точкой: for (float i = 1 - k; i <= 1 + k; i += 1.0 / descr1) { t = sin(1.5708 * i) * Amp; PWM1(t); }
_________________ Мудрость приходит вместе с импотенцией... Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.
Varlakotam, замени переменный резистор, который по частоте. к вычислениям претензий нет и быть не может. там просто могут быть обрывы контакта с ползунком.
Добавлено after 1 hour 2 minutes 44 seconds: еще поменяй местами провода на краях переменного резистора, тогда у тебя влево до упора будет минимальная частота и с поворотом частота будет расти. и если там есть обрывы контакта, то сбой частоты должен быть в том же положении резистора.
_________________ Мудрость приходит вместе с импотенцией... Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.
Starichok51, спасибо! Резистор менял, они у меня даже не паянные, лет 40 лежали без дела. Со стороны железа всё проверено. На выходных попробую формулы поменять.
тогда такой срыв мне не понятен. как я уже сказал, к вычислениям (формулам) у меня претензий нет. а как ты собираешься менять формулы? сократить число ступенек частоты, как я предложил, ты не пробовал?
_________________ Мудрость приходит вместе с импотенцией... Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.
Starichok51, именно это и собираюсь сделать- сократить число ступенек
Добавлено after 3 minutes 10 seconds: поменял на for (float i = 1 - k; i <= 1 + k; i += 1.0 / descr1) { t = sin(1.5708 * i) * Amp; PWM1(t);колебания стали "сдвоенными"
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 8
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения