👍Чтобы выходной сигнал не искажался около нуля, необходимо отключить встроенный буфер. Для тестов на осциллограф можно напрямую, а в схемах имеет смысл поставить внешний буфер на ОУ с двуполярным питанием. Где-то на середине синуса наблюдается странный излом, да и в целом похоже, что форма искажена. Я бы использовал внешнюю табличную генерацию точек. Должно быть все красиво.
Давно хочу, если руки дойдут, ЖКИ индикатор попробовать через эту штуку подключить, там какой-то хитрый аналоговый сигнал для управления надо.. Бывает конечно встроенный контроль, но это для больших индикаторов и сам контроллер километрового размера надо брать...
@@NRelectronics цап и шим однополярные если делать смещение 3.3 / 2 на буферном ОУ то до инициализации МК выходное напряжение уйдет в минус. при чем зесь программирование ??
Не получается получить контролируемые значения частоты синуса через прерывания TIM6_DAC_IRQHandler(). :( Хотябы 1 МГц. Юзаю G431.Запихиваю в обработчик функцию HAL_DAC_SetValue(&hdac1, DAC_CHANNEL_1, DAC_ALIGN_12B_R, sin_table[i++]); само собой обнуляя i при достижении 256. i берется из табличных значений, что быстрее чем по формуле. Все равно в лучшем случае какие-то жалкие сотни герц. Счет TIM6 до 1, прескейлер 0. Частота мк 150МГц. Не ужели изза тормознутости функции? или я туплю?
@@NRelectronics Да понять бы где :( Голоу уже сломал :( Вот содержимое обработчика и настройки таймера. Вроде всё правильно. А на выходе имею 1.7 кГц при частоте мк 150мГц. Массив со значениями sin_table взял из комментов ниже void TIM6_DAC_IRQHandler(void) { HAL_TIM_IRQHandler(&htim6); HAL_DAC_IRQHandler(&hdac1); static uint32_t i = 0; HAL_DAC_SetValue(&hdac1, DAC_CHANNEL_1, DAC_ALIGN_12B_R, sin_table[i++]); if (i > 255) i = 0; } htim6.Instance = TIM6; htim6.Init.Prescaler = 0; htim6.Init.CounterMode = TIM_COUNTERMODE_UP; htim6.Init.Period = 1; htim6.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;
@@alex225559как будто цикл отрабатывает напрямую без таймера, и синус кривой из-за того что расчет разных значений синуса происходит за разное количество тактов
Для второго примера синтеза синуса по 256 отсчетам через 12р DAC. Сначала в инициализационной части, перед вечным циклом должна быть рассчитана таблица отсчетов sin_value[256] по правильной формуле: for (unsigned int i=0; i
Спасибо за Ваш труд и уроки. Всех Вам благ.
Спасибо Вам большое за тёплые слова
👍Чтобы выходной сигнал не искажался около нуля, необходимо отключить встроенный буфер. Для тестов на осциллограф можно напрямую, а в схемах имеет смысл поставить внешний буфер на ОУ с двуполярным питанием.
Где-то на середине синуса наблюдается странный излом, да и в целом похоже, что форма искажена. Я бы использовал внешнюю табличную генерацию точек. Должно быть все красиво.
Возможно действительно встроенный буфер сделал своё дело. Форма норм, а на середине есть небольшой действительно переход.
Я тоже не понял, зачем в цикле все точки пересчитывать снова и снова.
Ну вы даёте. Чтобы синус был непрерывный во времени.
Проверил с выключенным все же буфером, излом сохранился, дело точно не в нем. Буфер как бы и не должен влиять на форму, на то он и буфер...
@@NRelectronics имеется ввиду, что достаточно один раз создать массив значений, а уже в цикле подставлять из массива
Благодарю за информацию, интерестно
Пожалуйста, заходите ещё.
Как Вы это все поняли) моё увожения
Сам до сих пор не понимаю как я это понял)) спасибо Вам!
Давно хочу, если руки дойдут, ЖКИ индикатор попробовать через эту штуку подключить, там какой-то хитрый аналоговый сигнал для управления надо.. Бывает конечно встроенный контроль, но это для больших индикаторов и сам контроллер километрового размера надо брать...
Даведите руки до этого.
можете обьяснить как вы код подключили в синусу в этой программе amcap
Не совсем понял вопрос. Как я подключил синус или программу amcap?
не совсем понял, зачем ты создал массив sine_value, если ты только одно значение там храниш и оно у тебя выводится сразу же в цап
Это с первого примера остаток, когда просто числа были.
число PI чуть чуть неточное в коде :D
Чуть чуть можно 😀👍
как сделать синусоиду симетричную относительно нуля и чтобы во время инициализации котролера не было выброса ?
Запрограммировать)
@@NRelectronics цап и шим однополярные если делать смещение 3.3 / 2 на буферном ОУ то до инициализации МК выходное напряжение уйдет в минус. при чем зесь программирование ??
Программирование всегда необходимо. В минус не уйдет при одноподярном питании. Значит синус схемотехникой надо "смещать" вниз.
Не получается получить контролируемые значения частоты синуса через прерывания TIM6_DAC_IRQHandler(). :( Хотябы 1 МГц. Юзаю G431.Запихиваю в обработчик функцию HAL_DAC_SetValue(&hdac1, DAC_CHANNEL_1, DAC_ALIGN_12B_R, sin_table[i++]); само собой обнуляя i при достижении 256. i берется из табличных значений, что быстрее чем по формуле. Все равно в лучшем случае какие-то жалкие сотни герц. Счет TIM6 до 1, прескейлер 0. Частота мк 150МГц. Не ужели изза тормознутости функции? или я туплю?
возможна где-то ошибка у вас, ибо звук выводят довольно не убого качества. По таблице да, быстрее выводить.
@@NRelectronics Да понять бы где :( Голоу уже сломал :( Вот содержимое обработчика и настройки таймера.
Вроде всё правильно. А на выходе имею 1.7 кГц при частоте мк 150мГц.
Массив со значениями sin_table взял из комментов ниже
void TIM6_DAC_IRQHandler(void)
{
HAL_TIM_IRQHandler(&htim6);
HAL_DAC_IRQHandler(&hdac1);
static uint32_t i = 0;
HAL_DAC_SetValue(&hdac1, DAC_CHANNEL_1, DAC_ALIGN_12B_R, sin_table[i++]);
if (i > 255) i = 0;
}
htim6.Instance = TIM6;
htim6.Init.Prescaler = 0;
htim6.Init.CounterMode = TIM_COUNTERMODE_UP;
htim6.Init.Period = 1;
htim6.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;
В обработчике не вижу что отсутствует сброс какого либо флага по попаданию в него. Это общий момент работы обработчиков.
Синус,однако, получился весьма условный. В чём причина? Ведь DAC весьма неплохой.
мало точек видимо ...
@@NRelectronics для 256 точек странная форма. Может нужен выходной буффер?
думаю нет, не перегружен выход
Как то стнус больше на треугольник похож со скруглёнными вершинами
Так и получается синус))
@@NRelectronics я часто вижу синус/косинус с преобразователей , как то немного по другому выглядит , или в STM линейность DAC не совсем линейная .
@@alex225559как будто цикл отрабатывает напрямую без таймера, и синус кривой из-за того что расчет разных значений синуса происходит за разное количество тактов
Для второго примера синтеза синуса по 256 отсчетам через 12р DAC.
Сначала в инициализационной части, перед вечным циклом должна быть рассчитана таблица отсчетов sin_value[256] по правильной формуле:
for (unsigned int i=0; i
0xFFF != 4096 😏
Где такое, было? Допускаю что оговорка, подскажите где?