Перейти к содержанию

karomag

Members
  • Постов

    40
  • Зарегистрирован

  • Посещение

Информация

  • Город
    Воронеж

Электроника

  • Стаж в электронике
    Менее года
  • Сфера радиоэлектроники
    Микроконтроллеры
  • Оборудование
    Holdpeak hp-890cn

Посетители профиля

Блок последних пользователей отключён и не показывается другим пользователям.

Достижения karomag

Новобранец

Новобранец (2/14)

  • 10 постов на форуме
  • Неделя на форуме
  • Месяц на форуме
  • Год на форуме

Последние значки

0

Репутация

  1. Это и хотелось бы понимать. Вроде бы, функционал схож.
  2. У KSGER похоже 4 нет, это quiko. Когда контролер STC. Просто интересно, чего не хватает в 4х контактной, может заземления? Т.к. в сон они уходят, как и 5ти контактные. просто нравится вот такая ручка https://aliexpress.ru/item/4000250623752.html?sku_id=10000001013915206&spm=a2g2w.productlist.search_results.9.283f1adbAnqTjt
  3. Фен в итоге взял KADA 858D2. С бонусами обошелся всего за 1200р. Да, вот на 4х контактную не могу найти... Что-то запутался.
  4. Подскажите, пжл, почему какие-то ручки для Т12 имеют 4 контакта, а какие-то 5?
  5. Если бы 2... Есть еще самодельная на STM32 с таким же паяльником) https://voronezh.vseinstrumenti.ru/product/stantsiya-fen-kada-858d2-m7752319-3676332/ ?
  6. Да по сути, мне паяльник от станции не нужен - есть отдельный 900 серии, но нормальный - меня пока устраивает. Да и жал набор есть. Нужен именно фен, но когда начал выбирать фен подумал, почему бы не взять сразу ПС, т.к. цена не намного отличается. Станция все же удобней, чем по отдельности. Ну за 1000 сейчас ничего не взять...
  7. Добрый день. Помогите, пжл, выбрать ПС для хобби. Не могу определиться между вариантами: ELEMENT 898BD и ELEMENT 915 Mini? Сейчас по акции у них разница в ~150р. На мой субъективный взгляд 915, вроде современное решение, компактное. Но настораживает отзыв: Это действительно важно? Еще, как я понимаю, у них конструктивное отличие в блоках питания - в 898BD трансформатор, а 915 импульсный БП (надеюсь правильно сформулировал...). 898BD выглядит как более серьезное устройство, иначе зачем зачем такой корпус большой в сравнении с 915. Заранее благодарю, за конструктивные ответы.
  8. Заработал вот такой код: #include "stm32f10x.h" #include "stm32f10x_gpio.h" #include "stm32f10x_rcc.h" #include "stm32f10x_spi.h" float temp; void delay(void) { volatile uint32_t i; for (i=1; i != 0x1FFFF; i++) ; } int main(void) { GPIO_InitTypeDef GPIO_InitStructure; SPI_InitTypeDef SPI_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_SPI1, ENABLE); RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5 | GPIO_Pin_6 ; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; GPIO_Init(GPIOA, &GPIO_InitStructure); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_Init(GPIOA, &GPIO_InitStructure); //Заполняем структуру с параметрами SPI модуля SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex; //полный дуплекс SPI_InitStructure.SPI_DataSize = SPI_DataSize_16b; // передаем по 8 бит SPI_InitStructure.SPI_CPOL = SPI_CPOL_Low; // Полярность и SPI_InitStructure.SPI_CPHA = SPI_CPHA_2Edge; // фаза тактового сигнала SPI_InitStructure.SPI_NSS = SPI_NSS_Soft; // Управлять состоянием сигнала NSS аппаратно SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_128; // Предделитель SCK SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB; // Первым отправляется старший бит SPI_InitStructure.SPI_Mode = SPI_Mode_Master; // Режим - слейв SPI_Init(SPI1, &SPI_InitStructure); //Настраиваем SPI1 SPI_Cmd(SPI1, ENABLE); // Включаем модуль SPI1.... SPI_NSSInternalSoftwareConfig(SPI1, SPI_NSSInternalSoft_Set); u16 data = 0; while(1) { GPIO_ResetBits(GPIOA, GPIO_Pin_4); //Подаем сигнал CS слейву SPI_I2S_SendData(SPI1, 0); //Передаем байт 0 через SPI1 while (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_BSY)) //Передатчик занят? ;// значит ничего не делаем GPIO_SetBits(GPIOA, GPIO_Pin_4); //Снимаем сигнал CS if (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_RXNE)) { //Если данные пришли data = SPI_I2S_ReceiveData(SPI1); temp = (data >> 3) * 0.25; } delay(); } } Получается, что принять данные надо что то отправить сначала?
  9. Помогите, разобраться. Пытаюсь считать данные с модуля на max6675. #include "stm32f10x.h" #include "stm32f10x_gpio.h" #include "stm32f10x_rcc.h" #include "stm32f10x_spi.h" float temp; u16 MSBLSB; volatile uint32_t ticks_delay = 0; void SysTick_Handler(void) { ticks_delay++; } void delay(uint32_t milliseconds) { uint32_t start = ticks_delay; while((ticks_delay - start) < milliseconds); } int main(void) { GPIO_InitTypeDef GPIO_InitStructure; SPI_InitTypeDef SPI_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_SPI1 | RCC_APB2Periph_AFIO, ENABLE); RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_4; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz; GPIO_Init(GPIOA, &GPIO_InitStructure); SPI_StructInit(&SPI_InitStructure); SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_RxOnly; SPI_InitStructure.SPI_Mode = SPI_Mode_Master; SPI_InitStructure.SPI_DataSize = SPI_DataSize_16b; SPI_InitStructure.SPI_CPOL = SPI_CPOL_Low; SPI_InitStructure.SPI_CPHA = SPI_CPHA_2Edge; SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB; SPI_InitStructure.SPI_NSS = SPI_NSS_Soft; SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_128; SPI_Init(SPI1, &SPI_InitStructure); SPI_Cmd(SPI1, ENABLE); SPI_I2S_ITConfig(SPI1, SPI_I2S_IT_RXNE, ENABLE); NVIC_EnableIRQ(SPI1_IRQn); SysTick_Config(SystemCoreClock/1000); while(1) { temp = (MSBLSB >> 3); temp = temp * 0.25; } } void SPI1_IRQHandler (){ if (SPI_I2S_GetFlagStatus(SPI1,SPI_I2S_FLAG_RXNE)==SET) { GPIOA->BSRR = GPIO_BSRR_BR4; MSBLSB = SPI_I2S_ReceiveData(SPI1); delay(2000); GPIOA->BSRR = GPIO_BSRR_BS4; } } Ничего хорошего пока не получилось. Код собирал по кусочкам со всего интернета(. 1. Правильно ли я настроил SPI? 2. Как преобразовать полученные данные из регистра DR в температуру? С битовыми операциями, пока туго... 3. Может кто нибудь даст пример? Прошу сильно не пинать.
  10. Ну у меня этот алгоритм выполняется в цикле 10мс. //timer 3 interrupt void TIM3_IRQHandler(void) { //if interrupt happens the do this if (TIM_GetITStatus(TIM3, TIM_IT_Update) != RESET) { //clear interrupt and start counting again to get precise freq TIM_ClearITPendingBit(TIM3, TIM_IT_Update); interruptCount++; // счетчик циклов прерываний sumU += get_adc_value(); // суммирование выборок АЦП // проверка числа выборок усреднения if (interruptCount >= MEASURE_PERIOD) { interruptCount = 0; averageU = sumU; // перегрузка среднего значения sumU = 0; flagReady = 1; // признак результат измерений готов } } } int main(void) { ... if (flagReady == 1) { flagReady = 0; adcVal = averageU / MEASURE_PERIOD; measureU = powerU / 4095 * adcVal; measureT = 99.893 * measureU + 25.012; //Опрос кнопок if (GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_9) == 0) { setTemp -= 5; } if (GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_10) == 0) { setTemp += 5; } //ПИД регулятор if (setTemp >= 0) { ... Разве этого не достаточно?
  11. Помогите, пжл. Сделал простенькую паяльную станцию на stm32f103c8t6. Регулировка сделана ПИД-регулятором. Все работает для заданной программно температуры. Добавил две кнопки + и -. //Опрос кнопок if (GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_9) == 0) { setTemp -= 5; } if (GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_10) == 0) { setTemp += 5; } //ПИД регулятор if (setTemp >= 0) { regTmpErr = setTemp - measureT; // вычисление ошибки рассогласования regTmpInt = regTmpInt + regTmpErr * koeffRegTmpInt; // интегральная часть if (regTmpInt < 0) regTmpInt = 0; // ограничение снизу if (regTmpInt > MAX_PWM) regTmpInt = MAX_PWM; // ограничение сверху regTmpPr = regTmpErr * koeffRegTmpPr; // пропорциональная часть regTmpDif = (regTmpErr - regTmpErrPrev) * koeffRegTmpDif; // дифференцирующая часть regTmpErrPrev = regTmpErr; // перегрузка предыдущей ошибки pwmVal = (u16) regTmpInt + regTmpPr + regTmpDif; // сумма составляющих if (pwmVal < DEAD_TIME) pwmVal = 0; //мертвое время ШИМ if (pwmVal > (MAX_PWM - DEAD_TIME)) pwmVal = MAX_PWM; TIM_PWMOutput(pwmVal); } else { pwmVal = 0; TIM_PWMOutput(pwmVal); } Но при нажатии, происходит, что-то для меня непонятное: нажал + температура начинает расти без остановки, - соответственно вниз температура. Что я не правильно делаю?
  12. Интересуют программные средства.
  13. А что это? Каким "средством" я например могу посмотреть сигнал ШИМ на пине?
  14. Logic Analyser в Keil 5 работает только с некоторыми МК? Насколько я понял из описания на сайте http://www.keil.com/support/docs/3726.htm.
×
×
  • Создать...