Jump to content
Sign in to follow this  
Стальной

STM32F407 инверсия ЦАП

Recommended Posts

Доброго времени суток.

Скажите пожалуйста, кто-то замечал, что у stm32f407vet6 выход 1 ЦАПа инвертирован при включённом буфере? То есть при 12 битах правого выравнивания кладу в выходной регистр 4095 и получаю 0 В реальных. Кладу в выходной регистр 0 и получаю 3,3 В на пине. Промежуточные значения ведут себя аналогично. При выключенном буфере и на канале 2 всё работает логично. 

Нигде ничего подобного в доках не нашёл. Кажется, крыша едет. На всякий случай, измеряю мультиметром относительно земли. Проект сгенерирован кубом. Среда ИАР. Содержимое регистров подозрений не вызывает, смотрел отладчиком.

Спасибо.

Share this post


Link to post
Share on other sites

Конденсаторы Panasonic. Часть 4. Полимеры – номенклатура

В заключительной, четвертой статье из цикла «Конденсаторы Panasonic» рассматриваются основные достоинства и особенности использования конденсаторов этого японского производителя на основе полимерной технологии. Главной конструктивной особенностью таких конденсаторов является полимерный материал, используемый в качестве проводящего слоя. Полимер обеспечивает конденсаторам высокую электрическую проводимость и пониженное эквивалентное сопротивление (ESR). Номинальная емкость и ESR отличается в данном случае высокой стабильностью во всем рабочем диапазоне температур. А повышенная емкость при низком ESR идеальна для решения задач шумоподавления и ограничения токовых паразитных импульсов в широком частотном диапазоне.

Читать статью

плоховато ищете. Без особого энтузиазма

2017-11-11_21-45-49.thumb.png.4d5d1af6c71d19c7d6250fc7c8773459.png

буфер выполнен инвертирующим, для того, чтобы сделать его точнее, то есть убрать смещение. На более простых контроллерах выход не инвертированный и от того при включении буфера от нуля лезет огромная ступенька и приходится ставить внешний буфер с компенсацией этого смещения. В 407-ом уже по уму значит сделали. Ну и еще такой буфер позволяет видимо использовать и отрицательный диапазон Vref

Edited by mail_robot

Share this post


Link to post
Share on other sites
                     

STM32G0 - средства противодействия угрозам безопасности

Результатом выполнения требований безопасности всегда является усложнение разрабатываемой системы. Особенно чувствительными эти расходы стали теперь, в процессе массового внедрения IoT. Обладая мощным набором инструментов информационной безопасности, микроконтроллеры STM32G0 производства STMicroelectronics, объединив в себе невысокую цену, энергоэффективность и расширенный арсенал встроенных аппаратных инструментов, способны обеспечить полную безопасность разрабатываемого устройства.

Подробнее...

Join the conversation

You are posting as a guest. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
Sign in to follow this  

  • Similar Content

    • By n_angelo
      Привет, знатоки. Написал свою первую программу для контроллера STM8L152C6T6 (STM8L-Discovery). Это, собственно, моя первая программа для контроллеров вообще. Я многого не знаю и не понимаю. Возможно ваш ответ на мой вопрос будет банален.
      Используемая периферия: DAC, DMA, TIM4, CLK, GPIO
      Задача у программы такая:
      В EEPROM зашит один период синусоиды с дискретизацией 44100Гц. Период занимает ровно 101 байт, что по сути должно быть равно 2,29мс (1/44100*101). В коде программы только конфигурация периферии, одно прерывание на кнопке и пустой бесконечный цикл, который ничего не делает. Всю работу выполняет таймер, который настроен выдавать запрос к DMA на каждые 1/44100 (ядро тактируется 2мГц, таймер считает до 45). В свою очередь DMA забирает из EEPROM по одному байту на каждый запрос от таймера и передаёт его в DAC. Далее DAC выводит бесконечную синусоиду на ногу PF0. Прерывание на кнопке запускает весь этот механизм и зажигает светодиод.
      Проблема:
      Измеряя ногу PF0 осциллографом было замечено, что период синусоиды занимает около ≈4мс. Фото под катом.
      Меня это расстроило. Экспериментально выяснилось, что стоит только вписать в бесконечный цикл какую-нибудь проверку, например, [если значение текущего байта синусоиды = 0xFF, то зажечь светодиод, если 0x00, то потушить], то осциллограф показывает правильный тайминг в 2(с копейками)мс. В принципе в теле цикла может быть что угодно, кроме пустоты, и тайминг налаживается.
      Я не могу отдебажить дизассемблер, т.к. его не знаю. Это у меня в планах. Но я очень хочу понять, что происходит и почему пустой цикл рушит тайминг.
      Спасибо.
       
       
       
       
    • By German Churilin
      Добрый день всем! Столкнулся с проблемой, над решением которой бьюсь уже месяц - суть в том, что при пересылке аудио данных с контроллера в внешний цап на выходе цапа звучит белый шум(именно когда летят данные). Уже перепробовал разные конфигурации и параметры, да даже другой цап ставил - всё равно та же самая проблема. Может кто сталкивался, или у кого есть идеи почему так происходит?
      Контроллер stm32f407ve китайский, но вроде как рабочий, цап - pcm1606, вытащенный из двд-плеера.

      код инициализации i2s
      RCC_PLLI2SCmd(DISABLE); RCC_I2SCLKConfig(RCC_I2S2CLKSource_PLLI2S); RCC_PLLI2SConfig(200,5); RCC_PLLI2SCmd(ENABLE); while(RCC_GetFlagStatus(RCC_FLAG_PLLI2SRDY) == RESET){}; //WS - word clock output GPIO_PinAFConfig(GPIOB, GPIO_PinSource9, GPIO_AF_SPI2); GPIO_StructInit(&gpioInit); gpioInit.GPIO_Pin = GPIO_Pin_9; gpioInit.GPIO_Mode = GPIO_Mode_AF; gpioInit.GPIO_OType = GPIO_OType_PP; gpioInit.GPIO_PuPd = GPIO_PuPd_NOPULL; gpioInit.GPIO_Speed = GPIO_Speed_100MHz; GPIO_Init(GPIOB, &gpioInit); //BCLK - shift clock output GPIO_PinAFConfig(GPIOB, GPIO_PinSource10, GPIO_AF_SPI2); gpioInit.GPIO_Pin = GPIO_Pin_10; GPIO_Init(GPIOB, &gpioInit); //SD - serial audio data GPIO_PinAFConfig(GPIOC, GPIO_PinSource3, GPIO_AF_SPI2); gpioInit.GPIO_Pin = GPIO_Pin_3; GPIO_Init(GPIOC, &gpioInit); //MCO - master clock output GPIO_PinAFConfig(GPIOC, GPIO_PinSource6, GPIO_AF_SPI2); gpioInit.GPIO_Pin = GPIO_Pin_6; GPIO_Init(GPIOC, &gpioInit); I2S_StructInit(&i2sInit); i2sInit.I2S_CPOL = I2S_CPOL_Low; i2sInit.I2S_Mode = I2S_Mode_MasterTx; i2sInit.I2S_MCLKOutput = I2S_MCLKOutput_Enable; i2sInit.I2S_Standard = I2S_Standard_Phillips; i2sInit.I2S_AudioFreq = I2S_AudioFreq_48k; i2sInit.I2S_DataFormat = I2S_DataFormat_24b; I2S_Init(SPI2, &i2sInit); SPI2->I2SPR = (uint16_t)((uint16_t)512 | (uint16_t)12 | (uint16_t)1); //for 48k Fs SPI_I2S_DMACmd(SPI2, SPI_I2S_DMAReq_Tx, ENABLE); I2S_Cmd(SPI2, ENABLE);  
      код инициализации dma
      DMA_InitTypeDef dmaInit; NVIC_InitTypeDef nvicInit; DMA_DeInit(DMA1_Stream4); DMA_Cmd(DMA1_Stream4, DISABLE); while(DMA_GetCmdStatus(DMA1_Stream4) == ENABLE){}; __ISB(); RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_DMA1, ENABLE); //To dmaInit.DMA_PeripheralBaseAddr = (uint32_t) &(SPI2->DR); //From dmaInit.DMA_Memory0BaseAddr = (uint32_t)&AUDIO_SAMPLE; dmaInit.DMA_BufferSize = 20480; dmaInit.DMA_Channel = DMA_Channel_0; dmaInit.DMA_DIR = DMA_DIR_MemoryToPeripheral; dmaInit.DMA_PeripheralInc = DMA_PeripheralInc_Disable; dmaInit.DMA_MemoryInc = DMA_MemoryInc_Enable; dmaInit.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord; dmaInit.DMA_MemoryDataSize = DMA_MemoryDataSize_Byte; dmaInit.DMA_Mode = DMA_Mode_Circular; dmaInit.DMA_Priority = DMA_Priority_High; dmaInit.DMA_FIFOMode = DMA_FIFOMode_Enable; dmaInit.DMA_FIFOThreshold = DMA_FIFOThreshold_HalfFull; dmaInit.DMA_MemoryBurst = DMA_MemoryBurst_Single; dmaInit.DMA_PeripheralBurst = DMA_PeripheralBurst_Single; while(DMA_GetCmdStatus(DMA1_Stream4) == ENABLE); DMA_Init(DMA1_Stream4, &dmaInit); DMA_ITConfig(DMA1_Stream4, DMA_IT_TC | DMA_IT_HT, ENABLE); //configure interrupt nvicInit.NVIC_IRQChannel = DMA1_Stream4_IRQn; nvicInit.NVIC_IRQChannelPreemptionPriority = 0; nvicInit.NVIC_IRQChannelSubPriority = 0; nvicInit.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&nvicInit); DMA_Cmd(DMA1_Stream4, ENABLE); while(DMA_GetCmdStatus(DMA1_Stream4) != ENABLE){}; AUDIO_SAMPLE просто wav скопированный через hex редактор и живущий в памяти контроллера, крутиться по кругу. Вроде как, в теории всё должно работать(снизу скрин из pulseview - снято логическим анализатором), к сожалению осциллограф пока что не приобрёл, так что проверить правильность частот не представляется возможнымб но всё же всё вроде как красиво.
      Формат i2s на контроллере совпадает с форматом на цапе - первый бит передаётся через 1 тик sck после смены ws
       
      П.С. подозреваю сразу вопросы про MSB/LSB - wav файл сам по себе little-endian, собственно как и контроллер, то есть тут не должно быть проблем, а i2s стандарт передаёт MSB первым, соответственно если у меня в памяти записано 0x64, 0x61, 0x61, 0x66, 0x02, 0x00, 0x85... то, судя по скрину всё передаётся правильно? или я что то не понимаю в этом всём? Но не в этом суть - в один момент тоже подумал что порядок не тот, но, к сожалению, попытки свапать байты местами(и побайтово, и по словам) не дали ни какого результата

    • By maxssau
      Продам адаптеры USB-I2S. 

       
      Возможности:
       
      стерео ввод/вывод PCM 16-32 бита, 44.1-384 кГц. Ввода DSD нет, как и драйверов для ввода DSD.
      вывод DSD в режиме DoP 64-128, в режиме Native 64-256. Native доступен в Linux без "хитрых" драйверов.
      Тактирование от платы ЦАП/АЦП, частоты 512 fs (22.5792/24.576 МГц). Теоретически возможно и 1024fs(скорости 768кГц и DSD512 Native), но это не опробовано.
      Гальваническая изоляция на Si8662/Si8640.
      Питание возможно как Self так и Bus Powered. В режиме Bus Powered необходимо самостоятельно позаботиться о мастерклоке, т.к. возможны сильные глюки при выключенном генераторе мастерклока.
       
      Тема: 
      срок изготовления 3-5 недель (сильно зависит от поставок процессоров).
      На данный момент полностью реализован интерфейс Legacy. Для отладки Native режима пока нет платы ЦАП, в процессе разработки, будет не раньше осени.
      Цена 6000 + пересылка (в среднем 250 р.).
    • By Trisector
      Простой USB ЦАП на PCM2706 и ES9023. Покупал себе, но пока слушать с компьютера оказывается удобнее.

      1200 руб.
      Питер, Ленобласть.
      Перешлю по России.
       
    • By aitras
      Продам немного обновленные платы ЦАПа Mercury. Комплектуются мелкой платой для генераторов с управлением от МК.
       
       
       
      Отличие от последней ревизии в том, что добавлен сигнал переключения генераторов и футпринт под трансформаторы сделан универсальным для серий ТП и TEZ.
      Цена 600р за штуку. Отправлю по России.
      В наличии 6 шт и есть 2 шт с косметическим дефектом - поцарапанной внизу маской. Они по 450р.
  • Сообщения

    • Вряд ли. Просто в последнее время в магазинах появилось большое число малогабаритных импульсных зарядных устройств по цене менее $50. И тема потеряла актуальность. Тем не менее, в одной из последующих версий мне удалось таки разработать вариант с очень хорошим стабилизатором тока зарядки на базе нелинейного И-регулятора. Именно этот вариант я упоминал 14 октября 2015 года. Схема, разумеется, усложнилась, хотя и не катастрофически. Причем, в ней по-прежнему нет ни одного операционного усилителя, – своего рода продолжение деревенско-гаражной традиции. Нет в ней и привычного сложного в изготовлении и сильно греющегося датчика тока. В качестве шунта запланирован либо амперметр, либо вообще провод сечением 1,5мм2 и длиной 4,5м, который все равно нужно использовать для подключения аккумулятора. Разработка этой схемы – это у меня теперь такое развлечение в обеденный перерыв. Благо, мощный компьютер всегда доступен.
    • Устройство для ручной подачи припоя. Припой диаметром 1 мм наматывается на катушку от 13 мм ленты для пишущих машинок и помещается в их же коробочку. В коробочке сверлится отверстие 2,5 мм для выхода припоя. В куске изоленты проделывается отверстие и коробочка оборачивается с краёв  для фиксации крышки. Нужное количество припоя  вытягивается вручную. На катушку помещается около 15 м припоя диаметром 1 мм. Диаметр  готового устройства 55 мм, толщина 20 мм. Остальное понятно по фото.
    • почему же не стабилитрон  затвор - эмиттер ?. реальная схема  Lenze . :
    • Возможен и такой вариант.  Ламповый усилитель со своими 12-15вт.  вовлекает слушателя в атмосферу исполнителя,  а транзисторный со своими 150вт. не вовлекает, он может хорошо, очень хорошо или замечательно, громко или тихо, но просто играть  музыку.  Как то вот у меня сложилось такое впечатление. 
    • @FonSchtirlitz Справедливое утверждение! При покупке надо подключать и слушать с тем устройством, с которым они будут работать. Я тоже всегда так поступаю. Да и колонки для УНЧ тоже надо подбирать и реально прослушивать с тем усилителем с которым они будут работать, для того, чтобы добиться идеальной согласованности и качества. 
    • Ну тогда открою Вам маленькую тайну - 99% частотников в дистанционном режиме успешно работают вообще без пульта, который можно смело снять  даже во время работы и выбросить, например, в мусорное ведро, поскольку исполнительная программа находится не в пульте, а в самом частотнике. В пульт можно скопировать программу и перенести на бесконечное число подобных частотников. Большинство крупных предприятий, имеющих возможность заключать прямые договоры с изготовителем так и поступают - покупают 100 частотников и ...один пульт. Большинство мировых брендов не нуждаются вообще в пультах, поскольку имеют в арсенале соответствуюшие программы-оболочки, позволяющие программировать частотники напрямую с ПК. Теперь об индикации. Нет такого параметра, который нельзя было бы вывести на индикацию , используя совершенно другие индикационные устройства, нежели пульт, используя стандартные аналого-цифровые входы-выходы частотника. Их нужно только правильно запрограммировать. Большинство мануалов потому и напоминвют китайскую грамоту, поскольку большинство разделов посвящено именно этой теме - как программировать входы-выходы, чтобы расширить функционал помимо пульта. И, наконец последнее.что мешает перенести пульт(если уж без него никак) на расстояние достаточное большое, используя тот же FTP?
    • Есть такая защита, плата китайская. Много всего наворочено, что эта защита может?  
  • Покупай!

×
×
  • Create New...