Но сдвиг фазы ТОЛЬКО на целое число микросекунд, в гет-вейв() сам посмотришь.
Меандр делается двумя прерываниями из ДМА: полуготовность и готовность. Нужно будет сам разберешься.
Если тебе фаза нужна точнее 1 мкс, то самое лучшее меандр выдавать на неподвижный синус (который на PB7), а двигать PA8 через массив, как раньше было. Иначе нужно городить еще один таймер, а это бред. Но и с этим помогу, если будет минута и желание.
Большое спасибо это много работы - излучаю. Мой генератор работает на 7 kHz, фазовая точность 0.1 градусов.
Ну вот опять придется обзываться!
1.Ду....нь! Это в формуле у тебя было 0.1, а в реальности все это съедается. Ты хоть понимаешь как ИМЕННО эта программа генерит синус? Кто тебе это писал? Попроси пояснить,а я не нанимался в коррекционные педагоги. ;)
Я потому и спросил про 1 мкс, что не знаю для чего тебе все это. Какая точность фазы на самом деле нужна? Если ты параметры звукового тракта измеряешь, то 1 мкс - достаточно, если это лабораторное исследование, то хрен его знает.
2. в первом посте генератор был на 72000000/2000/102=352 Гц.
Не 7 КГц, мля, а 352Гц! В 20 раз меньше.
3. я тебе переписал сразу с преобразованием. Задаешь ТОЛЬКО #define FREQ ! Остальное она все сама делает.
короче так: я, возможно (без обещаний!!!), захочу написать тебе нормальный код бесплатно.
С тебя требуется тут, в этой теме, четко и ясно описать что ты делаешь. Описать своим языком, свою задачу. Не пытаясь что-то говорить про програмирование.
Твоя попытка вставить третий таймер говорит, не то что о улевом, а об отрицательном уровне подготовки. Поэтому прошу говорить о своей цели.
я прелагаю сделать прямоугольные синфазно PB7, а двигать PA8. Поскольку фазу можно двигать как в + так и в - - это проще. Тебе просто в подключении нужно поменять входы.
Короче, пиши, что и для чего ты используешь. Иначе я мозг себе сломаю, что-то объясняя.
Первый вариант - ошибка, поэтому я дал второй вариант. Моя цель - добавить 3 канала - прямоугольные импульсы с той же фазой, что и на A7
Ты, блин, плохо соображаешь?! Я прошу сказать, что ты делаешь, то есть зачем ты это используешь. А не что от программы хочешь. Твои хотелки - скорее всего полная чушь и решаются без изнасилования STM32.
Меандр синфазно PA8 я тебе УЖЕ сделал,в коде выше. Поиграй с ним пока. Посмотри осцилографом.
Я проверил вторую версию, есть третий канал, кнопки не работают,
поменял A9 на B12, A9 и A10 будет использоваться для Serial Plotter, пытаюсь добавить эту строчку _ Serial.println (sine1, sine2);
Я хочу сделать металлоискатель с минимальным количеством аналоговых частей, следующий в очереди, - AD8302 amplitude/ phase detector - фазометр. Сколько будет стоить чобы его заменить ?
Парень, который написал эту программу, знает программирование, но не знает электроники, ему потребовалось много времени, чтобы написать эту программу.
Теперь поехали, раз уж появиласьреальная информация.
1. Код это писали долго???!!! Написана херня, с которой тяжело работатьи тяжело модифицировать.
Нет, не безграмотно, по своему забавно, но "из пушки по воробьям".
2. Вопросы:
1. 7000Нц тебе нужно фиксированно или нужно перестраивать?
2. какие выходы тебе нужны? два синуса со смещением фазы и меандр синфазно одному из них, так?
3. Какие регулировки? сечас фаза и амплитуда одного из синусов. Что еще нужно? Какие у тебя кнопки ? (матрица, просто тактовая на землю или что еще?)
4. Про прием? АЦП у СТМ32 - не сильно хорош в смысле шума Какая чувствительность по фазе и амлитуде тебе нужна.
5. если добавлять прием двух каналов на АЦП и измерение их параметров то код уже никуда не годится. Он сейчас уже почти всю память забил.
У синуса нет смысла держать весь период. Не больше 1/4 периода. все остальное проще пересчитывать на ходу... но если одновременно прием, вместо AD8302, то смотреть на что ресурсов хватит. Это будетзависеть от частоты синуса и количества самплов.
если ты не заметил, то массивы самплов синусов я сделал динамическими и они не в глобальных теперь. А они и жрут всю память
Почему не заметил - заметил. Если взять данные из твоего же скетча, там два массива по sqrt(72MHz/ 900 Hz) сэмплов - то есть два массива по 282 значения - это добавляет всего 1к.
Дисклаймер - Я не спорю, я понять хочу - это правильно или я что напутал
если ты не заметил, то массивы самплов синусов я сделал динамическими и они не в глобальных теперь. А они и жрут всю память
Почему не заметил - заметил. Если взять данные из твоего же скетча, там два массива по sqrt(72MHz/ 900 Hz) сэмплов - то есть два массива по 282 значения - это добавляет всего 1к.
Дисклаймер - Я не спорю, я понять хочу - это правильно или я что напутал
Если сделать, как ТС хочет еще один канал на таймере, то это еще память, и если принимать два канала, то нужно еще два массива хотя бы по 1000 на прием.
Если сделать, как ТС хочет еще один канал на таймере, то это еще память, и если принимать два канала, то нужно еще два массива хотя бы по 1000 на прием.
Что за каша в твоей голове, и что ты хочешь - ты объяснил, теперь о грустной реальности.
В данный момент, при частоте 7000Гц и частоте самого контроллера в 72 МГц, мы имеем шаг дискретизации в генераторе синуса 1/100 периода и шаг амплитуды тоже 1/100 от максимальной, то есть от 3 вольт.
Это понятно? Понятно ли, что это не свойство программы, а законы физики и математики? Вот это ВАЖНО понять!
то есть шаг амплитуды 30 мВ и точность фазы, при любом шаге в программе, не выше 360/100=3.6 градуса.
Следовательно тебе нужно решить, что ты хочешь улучшить из двух параметров: точность установки фазы или амплитуды?
--------------------
поясню: 72МГц / 7КГц = примерно 10000. Это 100 самплов по 100 единиц. амплитуда при этом способе генерации - целочисленная - от 0 до 50.
Фаза - тут чуть лучше, но синус создается импульсами ШИМа, посмотри картинку на осцилографе., точность фазы после фильтра не выше количества импульсов на период, то есть не больше 0,01 периода, что равно 3.6 гр.
Вот это то, что реально выдается на порту PB7 (вот прямщас снял ;) ), в синус это превращается RC фильтром. По синусу меняется скважность от импульса к импульсу, понятно?
Поскольку произведение числа самплов на на количество отсчетов в самле у нас 10000, то мы можем увеличить одно, только уменьшив другое, это ясно?
================================
Поняв написанное, выскажи свои скорректированные хотелки. Все писать за тебя не стану, пора начинать думать своей головой.
В коде: B7 - не меняет амплитуду, А8 - меняет, А9 - меандр синфазно А8. кнопки работают все четыре.
Каши у меня в голове нет только в информации которую передал.
Запрос был; шаг для фазы 0.1 градусов, для амплитуды 1мВ. Но поучилось как говоришь 3.6 градусов и 2мВ после твоего исправления - поделил амплитуду на 10.
Я добавил третий таймер, потерял сигнал на A8 и ничего на A9. Сигнал остался на B7
Синусу необходимо и дополнительно прямоугольник
Ну какой же синус без прямоугольника? :)
вот тебе вариант с настраиваимой частотой.
Но сдвиг фазы ТОЛЬКО на целое число микросекунд, в гет-вейв() сам посмотришь.
Меандр делается двумя прерываниями из ДМА: полуготовность и готовность. Нужно будет сам разберешься.
Если тебе фаза нужна точнее 1 мкс, то самое лучшее меандр выдавать на неподвижный синус (который на PB7), а двигать PA8 через массив, как раньше было. Иначе нужно городить еще один таймер, а это бред. Но и с этим помогу, если будет минута и желание.
Большое спасибо это много работы - излучаю. Мой генератор работает на 7 kHz, фазовая точность 0.1 градусов.
Большое спасибо это много работы - излучаю. Мой генератор работает на 7 kHz, фазовая точность 0.1 градусов.
Ну вот опять придется обзываться!
1.Ду....нь! Это в формуле у тебя было 0.1, а в реальности все это съедается. Ты хоть понимаешь как ИМЕННО эта программа генерит синус? Кто тебе это писал? Попроси пояснить,а я не нанимался в коррекционные педагоги. ;)
Я потому и спросил про 1 мкс, что не знаю для чего тебе все это. Какая точность фазы на самом деле нужна? Если ты параметры звукового тракта измеряешь, то 1 мкс - достаточно, если это лабораторное исследование, то хрен его знает.
2. в первом посте генератор был на 72000000/2000/102=352 Гц.
Не 7 КГц, мля, а 352Гц! В 20 раз меньше.
3. я тебе переписал сразу с преобразованием. Задаешь ТОЛЬКО #define FREQ ! Остальное она все сама делает.
короче так: я, возможно (без обещаний!!!), захочу написать тебе нормальный код бесплатно.
С тебя требуется тут, в этой теме, четко и ясно описать что ты делаешь. Описать своим языком, свою задачу. Не пытаясь что-то говорить про програмирование.
Твоя попытка вставить третий таймер говорит, не то что о улевом, а об отрицательном уровне подготовки. Поэтому прошу говорить о своей цели.
Первый вариант - ошибка, поэтому я дал второй вариант. Моя цель - добавить 3 канала - прямоугольные импульсы с той же фазой, что и на A7
Новый код с самого начала не нужно, слишком много работы LM386 работает хорошо, как я уже писал, я хотел заменить его программой.
я прелагаю сделать прямоугольные синфазно PB7, а двигать PA8. Поскольку фазу можно двигать как в + так и в - - это проще. Тебе просто в подключении нужно поменять входы.
Короче, пиши, что и для чего ты используешь. Иначе я мозг себе сломаю, что-то объясняя.
==========================================================
Сейчас на моем коде выстави частоту и поиграйся пока с ним.
Завтра расскажешь. Я человек не молодой, мне спать пора.
Первый вариант - ошибка, поэтому я дал второй вариант. Моя цель - добавить 3 канала - прямоугольные импульсы с той же фазой, что и на A7
Ты, блин, плохо соображаешь?! Я прошу сказать, что ты делаешь, то есть зачем ты это используешь. А не что от программы хочешь. Твои хотелки - скорее всего полная чушь и решаются без изнасилования STM32.
Меандр синфазно PA8 я тебе УЖЕ сделал,в коде выше. Поиграй с ним пока. Посмотри осцилографом.
В вашей программе на B8 и B9 ничего нет. Но A8 - имеются очень узкие импульсы. Если бы они были в фазе с оригинальным A8, тогда это было бы хорошо.
Моя цель - добавить 3 канала
должно быть - добавить третий канал
Дык они ж закомментированы!
Ты слепой? Я взял код из твоего первого сообщения и добавил меандр и перестройку частоты.
Я не могу понять, ты на код смотришь как на шумерскую клинопись или, все-таки, читаешь его?
Я псравнял с моим ничего не нашел.
Теперь поехали, раз уж появиласьреальная информация.
1. Код это писали долго???!!! Написана херня, с которой тяжело работатьи тяжело модифицировать.
Нет, не безграмотно, по своему забавно, но "из пушки по воробьям".
2. Вопросы:
1. 7000Нц тебе нужно фиксированно или нужно перестраивать?
2. какие выходы тебе нужны? два синуса со смещением фазы и меандр синфазно одному из них, так?
3. Какие регулировки? сечас фаза и амплитуда одного из синусов. Что еще нужно? Какие у тебя кнопки ? (матрица, просто тактовая на землю или что еще?)
4. Про прием? АЦП у СТМ32 - не сильно хорош в смысле шума Какая чувствительность по фазе и амлитуде тебе нужна.
5. если добавлять прием двух каналов на АЦП и измерение их параметров то код уже никуда не годится. Он сейчас уже почти всю память забил.
У синуса нет смысла держать весь период. Не больше 1/4 периода. все остальное проще пересчитывать на ходу... но если одновременно прием, вместо AD8302, то смотреть на что ресурсов хватит. Это будетзависеть от частоты синуса и количества самплов.
Я псравнял с моим ничего не нашел.
Это про что? Если про кнопки, то коментарий сними с них. Я ими вообще не интересовался.
сорри за опечатки . дерьмовая резиновая китайская клава на кухне. Половину букв не нажимаетили нажимает не те ;););) Очень она пробел не любит!
про синус: если знаешь, то насколько чистый он тебе нужен? Коэфф. гармоник допустимый есть в теории ваших металлоискателей?
Извините, мой первый пост был ошибкой, о которой я писал, второй хороший - я буду искать
Извини, ОФФТОП, я маразмы и приколы коллекционирую.
А "много" это сколько именно времени?
Извините, мой первый пост был ошибкой, о которой я писал, второй хороший - я буду искать
Чего искать????
В моем варианте искажения не делают проблемы, в твоей версии выглядит хорошо.
Я буду сравнивать с постом # 2, там кнопки работают
А "много" это сколько именно времени?
два месяца
если добавлять прием двух каналов на АЦП и измерение их параметров то код уже никуда не годится. Он сейчас уже почти всю память забил.
Дракула, с интересом слежу за дискуссией. Позволю замечание на тему "код ужн всю память забил" - скомпилил твой код из сообщения #53 - результат:
так что вроде места еще навалом? Или я что-то не учел?
компиляция Ардуино ИДЕ 1.6.12, плата STM32F103C8T6
если добавлять прием двух каналов на АЦП и измерение их параметров то код уже никуда не годится. Он сейчас уже почти всю память забил.
Дракула, с интересом слежу за дискуссией. Позволю замечание на тему "код ужн всю память забил" - скомпилил твой код из сообщения #53 - результат:
так что вроде места еще навалом? Или я что-то не учел?
компиляция Ардуино ИДЕ 1.6.12, плата STM32F103C8T6
если ты не заметил, то массивы самплов синусов я сделал динамическими и они не в глобальных теперь. А они и жрут всю память
Я буду искать кнопки, подумайте о ph-метре
если ты не заметил, то массивы самплов синусов я сделал динамическими и они не в глобальных теперь. А они и жрут всю память
Почему не заметил - заметил. Если взять данные из твоего же скетча, там два массива по sqrt(72MHz/ 900 Hz) сэмплов - то есть два массива по 282 значения - это добавляет всего 1к.
Дисклаймер - Я не спорю, я понять хочу - это правильно или я что напутал
вот тебе с кнопками. Моя вина, я пересчет убрал пока проверял.... и так его тебе и кинул. ;)
Как говориться "и про старушку снимают порнушку"! ;)
прямоугольные импульсы (A9) можно использовать для запуска таймера, чтобы остановить - сигнал от приемника
если ты не заметил, то массивы самплов синусов я сделал динамическими и они не в глобальных теперь. А они и жрут всю память
Почему не заметил - заметил. Если взять данные из твоего же скетча, там два массива по sqrt(72MHz/ 900 Hz) сэмплов - то есть два массива по 282 значения - это добавляет всего 1к.
Дисклаймер - Я не спорю, я понять хочу - это правильно или я что напутал
Если сделать, как ТС хочет еще один канал на таймере, то это еще память, и если принимать два канала, то нужно еще два массива хотя бы по 1000 на прием.
прямоугольные импульсы (A9) можно использовать для запуска таймера, чтобы остановить - сигнал от приемника
ты прямоугольные проверь! я не смотрел они синфазно или противофазно. переставлять их с А9 можешь куда угодно.
формируются они в fun2()
5. а с чем сравнивать будешь? уровень то измерить не проблемма, а фазу нужно сравнивать, так с чем?
Без обид, но ты много тупил, поэтому твой уровень и в электронике не ясен пока.
Понимаешь ли ты, что AD8302 СРАВНИВАЕТ фазы на двух своих входах? а остальное - тупое измерение уровня сигнала, доступное на чем угодно?
Вот я и спрашиваю, фаза относительно чего? в твоем понимании, если без AD8302.
Если сделать, как ТС хочет еще один канал на таймере, то это еще память, и если принимать два канала, то нужно еще два массива хотя бы по 1000 на прием.
ок понял
5. а с чем сравнивать будешь? уровень то измерить не проблемма, а фазу нужно сравнивать, так с чем?
прямоугольные импульсы (A9) можно использовать для запуска таймера, чтобы остановить - сигнал от приемника
Сейчас шаг для фазы 60 градусов, для амплитуды гдето 100 мв но только 3 шага - сам идиот туда и обратно
Я снова загрузил , амплитуда регулируется почти как надо, фаза не регулируется.
У тебя рюсске не родной, штоле?
ok. пробуй пиши. Я - до завтра.
Шабат, самогон и все эти вещи...
фаза сдвигается большими шагами в одну сторону
нужно уменьшить шаг настройки амплитуды в 10 раз и записать переменные в ЕЕПРОМ, регулировка фазы не работает.
Так. Вот тебе код с работающими кнопками по фазе и амплттуде.
Теперь про точность регулировок:
Что за каша в твоей голове, и что ты хочешь - ты объяснил, теперь о грустной реальности.
В данный момент, при частоте 7000Гц и частоте самого контроллера в 72 МГц, мы имеем шаг дискретизации в генераторе синуса 1/100 периода и шаг амплитуды тоже 1/100 от максимальной, то есть от 3 вольт.
Это понятно? Понятно ли, что это не свойство программы, а законы физики и математики? Вот это ВАЖНО понять!
то есть шаг амплитуды 30 мВ и точность фазы, при любом шаге в программе, не выше 360/100=3.6 градуса.
Следовательно тебе нужно решить, что ты хочешь улучшить из двух параметров: точность установки фазы или амплитуды?
--------------------
поясню: 72МГц / 7КГц = примерно 10000. Это 100 самплов по 100 единиц. амплитуда при этом способе генерации - целочисленная - от 0 до 50.
Фаза - тут чуть лучше, но синус создается импульсами ШИМа, посмотри картинку на осцилографе., точность фазы после фильтра не выше количества импульсов на период, то есть не больше 0,01 периода, что равно 3.6 гр.
Вот это то, что реально выдается на порту PB7 (вот прямщас снял ;) ), в синус это превращается RC фильтром. По синусу меняется скважность от импульса к импульсу, понятно?
Поскольку произведение числа самплов на на количество отсчетов в самле у нас 10000, то мы можем увеличить одно, только уменьшив другое, это ясно?
================================
Поняв написанное, выскажи свои скорректированные хотелки. Все писать за тебя не стану, пора начинать думать своей головой.
В коде: B7 - не меняет амплитуду, А8 - меняет, А9 - меандр синфазно А8. кнопки работают все четыре.
Выглядит хорошо, дальше проверяю.
на всякий случай, для единообразия...
У тебя Blue pill? Вот такая?
и пора бы привести схему своей вундер-штуки ;).
Как ты уже, наверно, понял, тут, на форуме, люди... ну так, мягко, скажем, немного грамотнее тебя ;) ... не обижайся.