Микроконтролери и електроника
http://mcu-bg.com/mcu_site/

STM32f4-discovery
http://mcu-bg.com/mcu_site/viewtopic.php?f=3&t=14208
Страница 1 от 4

Автор:  bobi13 [ Съб Дек 05, 2015 9:12 am ]
Заглавие:  STM32f4-discovery

Здравейте,
Искам да си направя генератор на три сигнала - полусинусиодален, триъгълен и правоъгълен ползвайки вътрешния ЦАП на development board STM32f4-discovery. Искам да променям честотата и амплитудата на сигналите. Проблемът, е че немога да разбера дали е възможно да променям опорното напрежение между 100mV - 2V със стъпка 100mV и ако е възможно как става.
В момента съм пуснал само триъгълния сигнал, който се генерира вътрешно от контролера и на него се опитах да му променям амплитудата чрез натискане на бутон, но не се получи нищо.



Код:
#define amlitude_step  (uint32_t)(4095/30)
static uint32_t parameter = 0;

static void DAC_Ch1_TriangleConfig(void)
{

  /*##-1- Initialize the DAC peripheral ######################################*/
  if(HAL_DAC_Init(&DacHandle) != HAL_OK)
  {
    /* Initialization Error */
    Error_Handler();
  }
 
  /*##-2- DAC channel2 Configuration #########################################*/
  sConfig.DAC_Trigger = DAC_TRIGGER_T6_TRGO;
  sConfig.DAC_OutputBuffer = DAC_OUTPUTBUFFER_ENABLE; 

  if(HAL_DAC_ConfigChannel(&DacHandle, &sConfig, DACx_CHANNEL1) != HAL_OK)
  {
    /* Channel configuration Error */
    Error_Handler();
  }
 
  /*##-3- DAC channel2 Triangle Wave generation configuration ################*/
   
   if(ubKeyPressed != RESET)
   {
      parameter = amlitude_step;
      
   //parameter = parameter+amlitude_step;
      parameter +=  amlitude_step;
      
   }
   
  if(HAL_DACEx_TriangleWaveGenerate(&DacHandle, DACx_CHANNEL1, parameter) != HAL_OK)
/*DAC_TRIANGLEAMPLITUDE_4095 */
  {
      
    /* Triangle wave generation Error */
    Error_Handler();
  }
 
  /*##-4- Enable DAC Channel1 ################################################*/
  if(HAL_DAC_Start(&DacHandle, DACx_CHANNEL1) != HAL_OK)
  {
    /* Start Error */
    Error_Handler();
  }

  /*##-5- Set DAC channel1 DHR12RD register ################################################*/
  if(HAL_DAC_SetValue(&DacHandle, DACx_CHANNEL1, DAC_ALIGN_12B_R, 0x100) != HAL_OK)
  {
    /* Setting value Error */
    Error_Handler();
  }
}

Автор:  ToHu [ Съб Дек 05, 2015 1:07 pm ]
Заглавие:  Re: STM32f4-discovery

Че може може, през ЦАП-а може всякакъв сигнал да го мениш както искаш със стъпката на ЦАП-а но друго не мога да ти кажа, идея си нямам от тоя проц какъв му е цапа, как се конфигурира и нямам време да го разследвам, други колеги със сигурност ще помогнат.

Автор:  miro_atc [ Съб Дек 05, 2015 2:47 pm ]
Заглавие:  Re: STM32f4-discovery

bobi13 написа:
Проблемът, е че немога да разбера дали е възможно да променям опорното напрежение между 100mV - 2V със стъпка 100mV и ако е възможно как става.


По принцип DAC работи с Vref, който може да се задава от външен източник, обаче ти едва ли имаш такъв, а и да имаш може да се променя само в тесни граници. За подробности референс мануала и чаршафа, но с една дума не е добра идея.

На генератора на триъгълното може да задаваш долната и горната точка, така че това е малко по-добър вариант.
Но за другите форми няма скалиране до колкото помня, така че каквото зададеш това излиза като амплитуда. Ако не ти харесва амплитудата - не я задавай такава ;-)


Цитат:
В момента съм пуснал само триъгълния сигнал, който се генерира вътрешно от контролера и на него се опитах да му променям амплитудата чрез натискане на бутон, но не се получи нищо.

Не се отчайвай, нормално е ;-)

Бих те посъветвал да започнеш с лек прочит на перифериите, да се запознаеш с възможностите им и след това да прецениш как да ги ползваш. Ако ще правиш различни форми, може би най-добре да не ползваш триъгълника (щото е само триъгълник), а всичи форми да си ги подготвиш в различни таблички. Така само с избор на табличка ще определяш формата.
Ако искаш скалиране/офсет може от текущата табличка да си преизчислиш и да получиш офсетнатата и скалирана форма в нова табличка.
След това преценяваш как ще наливаш тая табличка в DAC-a. Вариантите са софтуерно без прекъсвания, т.е. нещо като DDS генератор. Другия вариант е пак софтуерно, но с прекъсвания примерно на таймерче. И последния вариант е изцяло хардуерен - пускаш едно таймерче, което ти определя стъпката в рамките на периода (от там и честотата). Това таймерче трябва да генерира евенти, които пък задействат DMA, което път от своя страна копва една стойност от последната табличка към DAC-a...

Не е толкова сложно... просто документациите не са удобни, но ако ги прочетеш няколко пъти ще ти светне ;-)

Автор:  bobi13 [ Съб Дек 05, 2015 7:12 pm ]
Заглавие:  Re: STM32f4-discovery

Цитат:
По принцип DAC работи с Vref, който може да се задава от външен източник, обаче ти едва ли имаш такъв, а и да имаш може да се променя само в тесни граници


Това което разбрах от datasheet-a, е че може да го настроиш от 0 до Vref, но още не съм рабрал как и дали въобще е възможно само с вътрешния източник ( сега гледам борда дали е възможно да сложа външен източник ). Аз искам да управлявам амплитудата и честота чрез тъчскрийн ( бутони ) и в краен случай ще сложа външен ЦАП и чрез I2C ще го управлявам, поне това което съм чел досега, не съм пускал външен ЦАП, така че ако съм в грешка ме поправете. За формите в таблицата ми е ясно, аз вече съм пуснал една такава, но в библиотеката никъде не виждам да управлявам амплитуда, на осцилоскопа виждам че е колкото Vref по подразбиране.

Автор:  ToHu [ Съб Дек 05, 2015 7:30 pm ]
Заглавие:  Re: STM32f4-discovery

Без да засягаме изобщо самият процесор и конкретният DAC като че ли малко теорията как това работи ти се губи. DAC не прави нищо друго освен да обърне това което му подаваш като число в напрежение или ток. Да речем имаш 8 битов DAC с опорно напрежение 2.54 V, в този случай ако му подадеш число 100, на изхода му ще имаш точно 1 V, а ако му подадеш 1 ще имаш 10 mV, т.е. Vref/2^8 , ако е 10 битов ще е Vref/2^10 и т.н. От тук това което трябва да правиш е дамениш стойността на DAC в зависимост от формата на сигнала който искаш да имаш, разбира се и с нужната дискретност, т.е. на колко да ти е разделен сигнала. Примерно ако си решил да апроксимираш синусуида то тя ще се получи на стъпълца, като колкото по точно искаш да я апроксимираш, толков аповече стъпълца ти трябват. Тук идва лимитацията от самият DAC защото времето му за установяване не е безкрайно малко, примерно можеш да го зареждаш 1.000.000 пъти в секунда. Така ако искаш да имаш синусуида със 100 стъпълца, максималната ти честота която можеш да изкараш е 1000000/100 = 10000 или 10 kHz. от тук нататък самият ти софт трябва да се погрижи през точните интервали от време да зарежда DAC със съответната стойност.
Та така най-общо работи DAC, това е съвсем опростено, има един куп неща свързани както с линейността, така и с точността и с това колко стъпълца да имаш, също така как може ефективно да се генерират нужните данни, и къде и как може да са ти от полза разните екстри които предлага съответното контролерче.

Автор:  bobi13 [ Съб Дек 05, 2015 8:00 pm ]
Заглавие:  Re: STM32f4-discovery

Благодаря за обяснението :)

Автор:  Цецо [ Съб Дек 05, 2015 9:50 pm ]
Заглавие:  Re: STM32f4-discovery

DAC-a на STM-a работи като DAC на всеки друг процесор. Vref ти го подаваш отвън или както е в случая с дискавърито Vref=VCC. И не може да скалира.

Ако искаш да правиш променлива амплитуда на изхода на DAC-a единствения ти вариант е да променяш старшите битове на данните които подаваш (реципрочно да си намалиш резолюцията). Ако можеш да варираш с хардуер - вариант е да вържеш отвън един цифров потенциометър и да си направиш 256 или колкокото там искаш "степени на усилването", което точно за сигнал генератор е по-добро решение според мен. Така амплитудата ти става независимо регулируема и си имаш пълната резолюция на DAC-a.

Автор:  4040 [ Нед Дек 06, 2015 1:06 pm ]
Заглавие:  Re: STM32f4-discovery

На Vref-а може да подадеш DC от PWM . Така формата си я правиш с ЦАП-а, а амплитудата с ПВМ-а. Ако буташ амплитудата с ЦАП-а, ще ти се влошава формата.

Автор:  bobi13 [ Нед Дек 06, 2015 1:15 pm ]
Заглавие:  Re: STM32f4-discovery

Цитат:
На Vref-а може да подадеш DC от PWM . Така формата си я правиш с ЦАП-а, а амплитудата с ПВМ-а. Ако буташ амплитудата с ЦАП-а, ще ти се влошава формата.


Moжеш ли да го обясниш малко по- подробно, че немога да рзбера как чрез PWM ще променям амплитудата на сигнала.
Пак разгледах схемата на борда и не виждам Vref да е изведен на пин, той е директно закачен за Vdd.

Автор:  4040 [ Нед Дек 06, 2015 1:22 pm ]
Заглавие:  Re: STM32f4-discovery

Важи по принцип , конкретния проц не го знам ,но едва ли е без ПВМ. Пина от ПВМ-а го прекарваш през 2 RC-филтъра и го подаваш на Vref. Обикновено има опция опорното на ЦАП-а да идва от външен пин, виж си даташита. Другото е директно да променяш Vdd в някакви граници, ама това е доста извратено. :)

Автор:  bobi13 [ Нед Дек 06, 2015 1:34 pm ]
Заглавие:  Re: STM32f4-discovery

Процесора си има пин за PWM, но проблема, e че на development board-a пина който е за Vref на ЦАП-а е директно закачен на Vdd и неможе да се променя.

Автор:  miro_atc [ Нед Дек 06, 2015 1:45 pm ]
Заглавие:  Re: STM32f4-discovery

Vref си има изисквания като долната граница мисля беше 1.8V. Проверете чаршафите, от самото начало казах че това не е добра идея.

Автор:  bobi13 [ Нед Дек 06, 2015 1:52 pm ]
Заглавие:  Re: STM32f4-discovery

Цитат:
Vref си има изисквания като долната граница мисля беше 1.8V. Проверете чаршафите, от самото начало казах че това не е добра идея.


Долната граница е 1,8V.

Автор:  4040 [ Нед Дек 06, 2015 1:54 pm ]
Заглавие:  Re: STM32f4-discovery

Някои ЦАП-ове са си дефакто цифрови потенциометри и позволяват всякакви напрежения за Vref в границите до Vdd. Случая явно не е такъв. Тогава остава само цифрово скалиране - сиреч повече сметки и по-начупена форма.

Автор:  Цецо [ Нед Дек 06, 2015 4:10 pm ]
Заглавие:  Re: STM32f4-discovery

Стига сте обсъждали Vref, конкретния процесор няма такава екстра. Тоест има, ама е забита в чипа на VDD :)

Страница 1 от 4 Часовете са според зоната UTC + 2 часа [ DST ]
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/