Jump to content

COKPOWEHEU

Members
  • Content Count

    3080
  • Joined

  • Last visited

Community Reputation

274 Хороший

About COKPOWEHEU

  • Rank
    Старожил
  • Birthday 02/23/1991

Информация

  • Пол
    Мужчина
  • Город
    московская область

Электроника

  • Стаж в электронике
    6-10 лет
  • Сфера радиоэлектроники
    контроллеры

Recent Profile Visitors

15337 profile views
  1. А точно ТСу нужна регулировка с точностью 0,07% ? Учитывая, что индикация не упомянута, точность установки вряд ли нужна выше 5%. Даже для моего примера это 21 такт разницы (6000 против 5700 дают 20000 против 19000 шагов/сек, то есть 400 против 421 такта). Опять же запаса нет, но не безнадежно. В более реалистичном варианте - 1500 об/мин (25 об/сек) и 24 шага -> 600 шагов/сек, точность 5%: 1500 об/мин -> 600 шагов/сек -> 13333 такта 1425 об/мин -> 570 шагов/сек -> 14035 тактов разница аж 702 такта
  2. А зачем, если и у AVR'ок хватит быстродействия? Допустим, у ШД 200 шагов на оборот (вообще-то, это довольно много) и скорость 6000 об/мин (100 об/с). Получается 20`000 шагов в секунду. То есть 400 тактов на шаг при 8 МГц частоты. Запас, конечно, небольшой, но на задачу ТСа быстродействия вполне хватит. Тем более если ставить более типичные шаговики, шагов на 20.
  3. Через эмулятор клавиатуры что ли? Или есть более изящный способ?
  4. за такое - по рукам бить. Для кого придумали именованные биты Почему именно 32000? На первый взгляд логичнее выглядит ограничение 65535 или 32767 или INT_MAX
  5. Не библиотеки, а просто набор фоточек плат на stm32f103 и stm32l151 L1_blink.rar F1_blink.rar
  6. димексид тоже пробовал, не так впечатлил. Даже нашел "удалитель клея", но уж больно густой оказался, для удаления клея из-под микросхемы бесполезно. А что "жестко"? Оно сработало, разве что кнопка пострадала, но не жалко. Не так много на плате нежных компонентов, которым ацетон повредит.
  7. Никаких чудес. В основном цель - потыкать режим сна в ARMах длинной палочкой. 5 мкА потребления бы вполне устроили. Внешняя периферия это отдельный вопрос, ее стоит рассматривать индивидуально. Пока что удалось выжать 20-30 мкА, но это просыпаясь каждые 100 мс. В принципе, уже неплохо, хотя могло бы быть лучше. Оказалось, косяк в цикле main. Сейчас под рукой нет рабочего варианта чтобы выложить. Да вроде никому он тут и не нужен кроме меня. не врут! Ацетон полностью удалил следы клея, да еще и кнопку в придачу. Справедливости ради, все остальные компоненты уцелели, даже пластиковые разделители для гребенок.
  8. Вот для начала. http://we.easyelectronics.ru/STM32/ispolzovanie-gcc-dlya-stm32f100.html Нужно будет в makefile поменять серию устройства. Тут еще важны буквы, от них зависит память устройства и линия. Для классического f103C8T6 это medium density если не ошибаюсь. Если описать алгоритм вкратце: нужно скомпилировать main (юзерский код) и startup (настройка памяти, прерываний и всего прочего, эта штука компилируется из ассемблерного файла, предоставляемого производителем, только надо найти в нужном формате), у меня это Libraries/CMSIS/CM3/DeviceSupport/ST/STM32F10x/startup/gcc_ride7/startup_stm32f10x_ml.s. Для всей серии stm32f1x испольщуется один заголовочный файл #include <stm32f10x.h> , выбор конкретного камня задается дефайном DEVCLASS (лучше всего в makefile через флаг -D ), например -D DEVCLASS = STM32F10X_MD. Но дополнительно надо еще указать путь к инклюдам на конкретные камни, например Libraries/CMSIS/CM3/DeviceSupport/ST/STM32F10x/ Мало того, при линковке надо еще указать распределение памяти и еще какие-то параметры. Это делается указанием линкеру файла настроек через флаг -T, например -T ld/stm32f10xC8.ld Из того что вспомнил, вроде все. Можно бы еще упомянуть прошивку, но это уже будет зависеть от программатора. Я пробовал с stm32flash (uart bootloader) и самодельным st-link2 (прошитым через тот же stm32flash, естественно) через openocd.
  9. Читал и раньше. Попробовал еще несколько комбинаций: - переключение выводов в Digital input + pull-up вместо analog input: потребление растет - запуск часов от LSI вместо LSE: потребление практически не меняется. Возможно, только на фоне общего потребления в пол-миллиампера, а в абсолютных величинах будет заметнее. - бит PWR_CR_ULP (внутренняя опора для аналоговых блоков?) : потребление немного снижается. Последняя надежда что недостаточно очистил плату и идут утечки по налипшей гадости. Я ее, конечно, отмывал в спирте, но мало ли. Попробую еще в керосине, ацетоне и прочих растворителях. Кстати, кто-нибудь знает чем можно удалить остатки цианакрилата? В инете пишут что ацетоном, диметилсульфоксидом и теплой водой (wtf?). Пока лучше тонких проволочек и бритвенного лезвия лучшего способа не нашел.
  10. Код я привел. Все выводы настраиваются как аналоговые входы, даже те, что под JTAG используются. Внешней обвязки тоже нет, максимум проводки сантиметров по 5 от силы.
  11. Если бы все было так просто. Ток-то я меряю после него
  12. Захотелось сделать устройство с минимальным потреблением. Первоначально хотел попробовать на f103, но глянул в даташит и ужаснулся: в любом режиме сна у него потребление больше, чем у AVR-ок. Ну хорошо, в standby сравнимо, но этот режим мне не подходит. Поискал аналоги, вроде бы серия L1 больше подходит для автономных устройств. Да еще там есть вкусности вроде сенсорных кнопок и управления ЖКИ (не то чтобы необходимо, но поиграться стоит). Собрал макетную плату с высокочастотным (8 МГц) и низкочастотным (32768) кварцами, стабилизатором, кнопками и светодиодами (из кода понятно что где висит). Запускаю RTC с пробуждением раз в секунду (в финальном устройстве просыпаться будет еще чаще) и пытаюсь увести в режим stop. Но вместо потребления в единицы микроампер получаю пол-миллиампера. Либо я какую-то периферию не отключил (да я их и не включал вроде...), либо как-то неправильно увожу в сон (вроде все по даташиту...), либо лыжи не едут. Вот ключевые моменты кода (остальное во вложении): void enable_btn(){ RCC->AHBENR |= RCC_AHBENR_GPIOBEN; GPIO_config(JBTN); //настройка на вход с минимальной скоростью, без подтяжке } void disable_all(){ GPIOA->MODER = 0xFFFFFFFF; //all to analog in GPIOB->MODER = 0xFFFFFFFF; //all to analog in GPIOC->MODER = 0xFFFFFFFF; //all to analog in GPIOD->MODER = 0xFFFFFFFF; //all to analog in GPIOA->OSPEEDR = 0; //all to low speed (наверное, неважно) GPIOB->OSPEEDR = 0; //all to low speed (наверное, неважно) GPIOC->OSPEEDR = 0; //all to low speed (наверное, неважно) GPIOD->OSPEEDR = 0; //all to low speed (наверное, неважно) GPIOA->OTYPER &=~ 0x0000FFFF; GPIOB->OTYPER &=~ 0x0000FFFF; GPIOC->OTYPER &=~ 0x0000FFFF; GPIOD->OTYPER &=~ 0x0000FFFF; RCC->AHBENR &=~ (RCC_AHBENR_GPIOAEN | RCC_AHBENR_GPIOBEN | RCC_AHBENR_GPIOCEN | RCC_AHBENR_GPIODEN); clock_MS(); } void go_sleep(){ RCC->APB1ENR |= RCC_APB1ENR_PWREN;//вкл тактирование PWR SCB->SCR |= SCB_SCR_SLEEPDEEP; //для M3 разрешаем sleepdeep PWR->CR &=~PWR_CR_PDDS;//выбираем режим Power Down Deepsleep PWR->CR &=~PWR_CR_CWUF ; //очищаем wakeup flag PWR->CR |= PWR_CR_LPSDSR; //уменьшаем voltage regulator __WFI(); } ... //когда нужно заснуть disable_all(); go_sleep(); enable_btn(); Пробовал совсем не переключаться с MSI на HSE, это влияет только на рабочий режим, во сне как было 500 мкА так и остается. L1_sleep.rar
  13. Посмотрите описание порта PB2. К сожалению, вы не написали какой контроллер вы используете. Если stm32f103c8t6 в 48-выводном корпусе, то 20-й вывод. На практике достаточно притянуть BOOT0 и BOOT1 к земле через резистор. Плюс поставить перемычку, замыкающую BOOT0 на питание. Тогда для перепрошивки надеваете перемычку, дергаете ресет (или питание) и запскаете прошивку. После окончания снимаете перемычку и дергаете ресет (питание) для проверки прошитого. UART1: PA9, PA10, которые 30, 31 выводы в 48-выводном корпусе.
  14. Если хочет как сложно, надо не Ардуину брать, а ATtiny2313, травить плату, кодить на ассмеблере
×
×
  • Create New...