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

dimir

Участник
  • Постов

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

  • Посещение

Сообщения, опубликованные dimir


  1. В моторчике или статор или якорь состоит из магнита.Я его не разбирал.Потому как выведены + и - и больше  нет выводов. Времён СССР движок.Рукой можно взять и сверлить.В эл.машинах постоянного тока если есть якорь и обмотка возбуждения то выводятся наружу вывода.Может они соеденены в корпусе не знаю.

  2. В 27.03.2024 в 12:11, jcxz сказал:

    Это не всегда так. А чаще вообще не так. Чаще целевым параметром ПИД-регулирования при управлении мотором, является не скорость, а крутящий момент. Например - в электротранспорте так. Потому что задающим воздействием, которое нужно выполнить ПИД-у, является величина нажатия педали акселератора водителем. Педаль задаёт крутящий момент, а не скорость. Аналогично - с электросамокатами и прочими средствами передвижения.

    Так что мы делаем педалью акселератора увеличиваем момент.Каким это образом? Ногой это можно сделать.? Наверное открываем заслонку в карбюраторе или не так.?

    Есть напряжение и ток два параметра на которые можно делать упор.Тахогенератор это тоже можно но для моторчика в 24 в нецелесообразно.

    Датчик хода тоже хорошо но нужны прибамбасы выдумывать.

  3. А по формуле от чего зависит частота вращения? Там тахогенератора нет  в формуле.

    Частоту вращения двигателей постоянного тока можно изменять тремя способами: изменением сопротивления rя цепи якоря, изменением магнитного потока Ф, изменением подводимого к двигателю напряжения U.

    А так как у меня в моторчике магнит на якоре.То напряжение оптимальный вариант.Хотя тахогенератор -круче

  4. В 26.02.2024 в 18:40, EdgeAligned сказал:

    А вы поэкспериментируйте на практике. Тема - фильтрация сигналов RC-фильтром. Касательно темы электромоторчика, там фильтром (LС) выступают сами обмотки моторчика.

    А вот этот дельный совет хороший.Спасибо.

  5. У меня возник вопрос по синусу но с помощью ШИМа.Есть такое понятие дискретизация сигнала.Что это такое и с чем его едят.И Пишут что она якобы должна быть от 4-12Кгц._это наполнее сигнала низкой частоты ШИМом или я не так понимаю?Ну у меня есть проект правда не мой.И не на stm32 а на AVR.Там частота ШИМа 31Кгц.А как добиться частоты 4 Кгц ШИМ что бы было на выходе 50 гц (через ФНЧ фильтр)?

  6. Спойлер
    /*
     * timers.c
     *
     *  Created on: 22 черв. 2023 р.
     *      Author: Admin
     */
    #include "stm32f103xb.h"
    #include "stm32f1xx.h"
    #include "timers.h"
     extern volatile float TIM_Pulse;
       extern int i;
    	extern volatile	int d ;
    	extern volatile	float TIM_Per;          // F=72000/47+1= 1500 kHz
    	extern volatile	float Zapoln;
    extern volatile  uint16_t PR;
    void timer1_init(void) {
    
    	RCC->APB2ENR |= RCC_APB2ENR_TIM1EN;
    	// NVIC_EnableIRQ (TIM2_IRQn);
    	//TIM2->CR1&=~  TIM_CR1_CEN;
    	TIM1->PSC = 2400 - 1; // ����������� �������� ��� ������ ����� 1000 ��� � �������
    	TIM1->ARR = 100-1;
    	TIM1->RCR = 5 - 1;
    
    	TIM1->DIER |= TIM_DIER_UIE;
    	TIM1->EGR = TIM_EGR_UG;
    
    	TIM1->CR1 |= TIM_CR1_CEN;
    	NVIC_EnableIRQ(TIM1_UP_IRQn);
    }
    void timer2_init_PWM(void) {
    	//RCC->APB2ENR|=RCC_APB2ENR_IOPAEN;
    
    	RCC->APB1ENR |= RCC_APB1ENR_TIM2EN;
    	RCC->APB2ENR |= RCC_APB2ENR_AFIOEN;
    	//	GPIOA->CRH&=~GPIO_CRH_CNF15_1;
    	//	GPIOA->CRH|=GPIO_CRH_CNF15_1;
    
    	//	GPIOA->CRH&=~GPIO_CRH_MODE15;
    	//	GPIOA->CRH|=GPIO_CRH_MODE15;
    	//  AFIO-> MAPR|=AFIO_MAPR_TIM2_REMAP ;
    	// NVIC_EnableIRQ (TIM2_IRQn);
    	//TIM2->CR1&=~  TIM_CR1_CEN;
    	TIM2->PSC =0; // ����������� �������� ��� ������ ����� 1000 ��� � �������
    	TIM2->ARR = 1000;
    	// TIM2->DIER |= TIM_DIER_UIE;
    	TIM2->EGR |= TIM_EGR_UG;
    	TIM2->CCMR1 = TIM_CCMR1_OC1M_2 | TIM_CCMR1_OC1M_1;
    	// TIM2->CCMR1 = TIM_CCMR1_OC2M_2 | TIM_CCMR1_OC2M_1;
    	// TIM2->CCMR2 = TIM_CCMR2_OC3M_2 | TIM_CCMR2_OC3M_1;
    	// TIM2->CCMR2 = TIM_CCMR2_OC4M_2 | TIM_CCMR2_OC4M_1;
    	TIM2->CCER |= TIM_CCER_CC1E;
    	// TIM2->CCER =TIM_CCER_CC2E;
    	// TIM2->CCER =TIM_CCER_CC3E;
    	// TIM2->CCER =TIM_CCER_CC4E;
    	TIM2->CCER &= ~TIM_CCER_CC1P;
    	TIM2->CR1 &= ~TIM_CR1_DIR;
    	// NVIC_EnableIRQ (TIM2_IRQn);
    	// TIM2->CCR1=0;
    	//  TIM2->CCR2=0;
    	//  TIM2->CCR3=0;
    	// TIM2->CCR4=0;
    
    	TIM2->CR1 |= TIM_CR1_CEN;
    	//  NVIC_EnableIRQ (TIM2_IRQn);
    }
    void timer_2_init(void)
    {
    	//RCC->APB2ENR|=RCC_APB2ENR_IOPAEN;
    	GPIOA->CRL |= GPIO_CRL_CNF0_1;
       GPIOA->CRL &= ~GPIO_CRL_CNF0_0;
       GPIOA->CRL|=GPIO_CRL_MODE0;
    	 RCC->APB2ENR |= RCC_APB2ENR_AFIOEN;
    	// AFIO->MAPR &= ~AFIO_MAPR_TIM2_REMAP;
    	RCC->APB1ENR |= RCC_APB1ENR_TIM2EN;
    
    //	TIM2->PSC =0; // ����������� �������� ��� ������ ����� 1000 ��� � �������
    	//TIM2->ARR = 200 - 1; //65535
    	TIM2->PSC =0;
    			TIM2->CCR1=TIM_Pulse;
    			TIM2->ARR =TIM_Per;
    	TIM2->CCMR1&=~TIM_CCMR1_CC1S;
    	//TIM2->CCMR1|=_VAL2FLD(TIM_CCMR1_OC1M,6);
    	TIM2->CCMR1|=TIM_CCMR1_OC1M_2|TIM_CCMR1_OC1M_1;
    	TIM2->CCMR1|=TIM_CCMR1_OC1PE;
    	TIM2->CCER|=TIM_CCER_CC1P;
    	TIM2->CCER|=TIM_CCER_CC1E;
    
    	//TIM2->EGR |= TIM_EGR_UG;
    	//TIM2->DIER |=TIM_DIER_CC1IE;
    
    	//TIM2->DIER |= TIM_DIER_UIE;
    	TIM2->CR1 |= TIM_CR1_CEN;
    	//NVIC_EnableIRQ(TIM2_IRQn);
    	//NVIC_GetPriority(TIM2_IRQn,0.0);
    }
    void timer3_init(void) {
    	RCC->APB1ENR |= RCC_APB1ENR_TIM3EN;
    	TIM3->PSC = 9; // ����������� �������� ��� ������ ����� 1000 ��� � �������
    	TIM3->ARR = 7000;
    
    	TIM3->EGR |= TIM_EGR_UG;
    	TIM3->CR1 |= TIM_CR1_CEN;
    }
    void timer3_encoder(void) {
    	/*
    	 GPIOA->MODER|=GPIO_MODER_MODER6_1;
    	 GPIOA->MODER|=GPIO_MODER_MODER7_1;
    	 GPIOA->PUPDR|=GPIO_PUPDR_PUPDR6_0;
    	 GPIOA->PUPDR|=GPIO_PUPDR_PUPDR7_0 ;
    
    	 GPIOA->AFR[0]|=_VAL2FLD(GPIO_AFRL_AFSEL6,2);
    	 GPIOA->AFR[0]|=	_VAL2FLD(GPIO_AFRL_AFSEL7,2);
    	 */
    	GPIOA->CRL &= ~(GPIO_CRL_MODE7 | GPIO_CRL_MODE6);
    	GPIOA->CRL &= ~(GPIO_CRL_CNF7_1 | GPIO_CRL_CNF6_1);
    	GPIOA->CRL |= GPIO_CRL_CNF7_0 | GPIO_CRL_CNF6_0;
    	RCC->APB1ENR |= RCC_APB1ENR_TIM3EN;
    
    	TIM3->CCMR1 |= TIM_CCMR1_IC1F | TIM_CCMR1_IC2F;
    	TIM3->CCMR1 |= TIM_CCMR1_CC1S_0 | TIM_CCMR1_CC2S_0;
    	TIM3->CCER &= ~(TIM_CCER_CC1P | TIM_CCER_CC2P);
    	TIM3->SMCR |= TIM_SMCR_SMS_1 | TIM_SMCR_SMS_0;
    
    	TIM3->ARR = 100;
    
    	TIM3->CR1 |= TIM_CR1_CEN;
    
    	TIM3->CNT = 0;
    }
    void timer4_init(void) {
    	RCC->APB1ENR |= RCC_APB1ENR_TIM4EN;
    	TIM4->PSC = 2500- 1; // ����������� �������� ��� ������ ����� 1000 ��� � �������
    	TIM4->ARR = 100 - 1;
    	TIM4->EGR |= TIM_EGR_UG;
    	TIM4->DIER |= TIM_DIER_UIE;
    	TIM4->CR1 |= TIM_CR1_CEN;
    	NVIC_EnableIRQ(TIM4_IRQn);
    }
    void init_pwm_timer4(void) {
    
    	//RCC->APB2ENR|=RCC_APB2ENR_IOPBEN ;
    
    	GPIOB->CRL |= GPIO_CRL_CNF6_1;
    	GPIOB->CRL &= ~GPIO_CRL_CNF6_0;
    	GPIOB->CRL |= GPIO_CRL_MODE6_1;
    	GPIOB->CRL |= GPIO_CRL_MODE6_0;
    	//--��������� ������� ������ ���-����7------//
    	GPIOB->CRL |= GPIO_CRL_CNF7_1;
    	GPIOB->CRL &= ~GPIO_CRL_CNF7_0;
    	GPIOB->CRL |= GPIO_CRL_MODE7_1;
    	GPIOB->CRL |= GPIO_CRL_MODE7_0;
    	GPIOB->CRH |= GPIO_CRH_CNF8_1;
    	GPIOB->CRH &= ~GPIO_CRH_CNF8_0;
    	GPIOB->CRH |= GPIO_CRH_MODE8_1;
    	GPIOB->CRH |= GPIO_CRH_MODE8_0;
    
    	//--��������� ������� ������ ���-����9------//
    	GPIOB->CRH |= GPIO_CRH_CNF9_1;
    	GPIOB->CRH &= ~GPIO_CRH_CNF9_0;
    	GPIOB->CRH |= GPIO_CRH_MODE9_1;
    	GPIOB->CRH |= GPIO_CRH_MODE9_0;
    	// RCC->APB2ENR|=RCC_APB2ENR_AFIOEN;
    	AFIO->MAPR &= ~AFIO_MAPR_TIM4_REMAP;
    	RCC->APB1ENR |= RCC_APB1ENR_TIM4EN;
    	TIM4->PSC = 0;
    	TIM4->ARR = 4095;
    	//TIM4->CCMR1&=~TIM_CCMR1_CC1S;//��������� ������ 1 �� �����.
    	TIM4->CCMR1 &= ~TIM_CCMR1_CC2S; //��������� ������ 2 �� �����.
    	TIM4->CCMR2 &= ~TIM_CCMR2_CC3S;
    	TIM4->CCMR2 &= ~TIM_CCMR2_CC4S;
    	//TIM4->CR1&=~TIM_CR1_DIR;
    	TIM4->CCMR1 |= TIM_CCMR1_OC1M_2 | TIM_CCMR1_OC1M_1; //|TIM_CCMR1_OC1M_0;//;//
    	TIM4->CCMR1 |= TIM_CCMR1_OC2M_2 | TIM_CCMR1_OC2M_1; //|TIM_CCMR1_OC2M_0;//
    	TIM4->CCMR2 |= TIM_CCMR2_OC3M_2 | TIM_CCMR2_OC3M_1; //|TIM_CCMR1_OC2M_0;//
    	TIM4->CCMR2 |= TIM_CCMR2_OC4M_2 | TIM_CCMR2_OC4M_1;
    
    	TIM4->CCMR1 |= TIM_CCMR1_OC1PE;
    	TIM4->CCMR1 |= TIM_CCMR1_OC2PE;
    	TIM4->CCMR2 |= TIM_CCMR2_OC3PE;
    	TIM4->CCMR2 |= TIM_CCMR2_OC4PE;
    
    	TIM4->CCER |= TIM_CCER_CC1E;
    	TIM4->CCER |= TIM_CCER_CC2E;
    	TIM4->CCER |= TIM_CCER_CC3E;
    	TIM4->CCER |= TIM_CCER_CC4E;
    	// TIM4->CCER &=~TIM_CCER_CC1P;
    	TIM4->CCER &= ~TIM_CCER_CC2P;
    	TIM4->CCER &= ~TIM_CCER_CC3P;
    	TIM4->CCER &= ~TIM_CCER_CC4P;
    	// TIM4->CR1|=TIM_CR1_ARPE;
    	//TIM4->EGR|= TIM_EGR_UG;
    	// TIM4->CCR1=30000;
    	TIM4->CR1 |= TIM_CR1_CEN;
    }

     

    Спойлер
    /*
     * main.c
     *
     *  Created on: 20 ���. 2020 �.
     *      Author: Ivan
     */
    #include "main.h"
    #define RT
    #define SYSCLOCK 72000000U
    //#define TIM_Pulse TIM2->CCR1
    volatile unsigned int adc_data1 = 0;
    volatile unsigned int adc_data2 = 0;
    volatile unsigned int pauza = 0;
    volatile  uint16_t PR;
    __IO uint32_t SysTick_CNT = 0;
    //int bufer=TIM4->CCR1*16;
     volatile float TIM_Pulse =50;
        int i;
    		int d = 10;
    	volatile	float TIM_Per = 100;          // F=72000/47+1= 1500 kHz
    	volatile	float Zapoln;
    struct {
    	volatile unsigned int menu_lcd;
    	volatile unsigned int menu_btn;
    	volatile unsigned int a;
    	volatile  uint16_t PR;
    	char buf1[50];
    	char buf2[50];
    	volatile unsigned char flag0;
    	volatile unsigned int pauza_2;
    	volatile unsigned int pauza_4;
    } danie, *Danie;
    
    struct {
    	volatile unsigned int pauza1;
    } timer, *Timer;
    void pauzat(int T) //���� ����� �����(���������) ��� �������� �������� � ���������� #include "paua.h"����� ������ � �������� ����� pauza()� ������ ����� ���������� T
    {
    	int i = 0; //�������� ��������������� i
    	char t = 0; // �������� ������������ ���������� t ������� ����� ���������������
    	for (i = 0; i < T; t++) //���������� � �����
    			{
    		if (t == 255)
    			i = i + 1; // ������� ������ ����� ����� ����������� i ������������ ��������� TCCR2 ������������ 0.1.2 ������ ��� ��������� ������� ������ �������
    	}
    }
    
    void TIM1_UP_IRQHandler(void) {
    	TIM1->SR &= ~ TIM_SR_UIF;
    	//PR++;
    
    	//TIM2->PSC =PR-1;
    	//IWDG->KR = 0xAAAA;
    /*
    	 pauza++;
    	 if(pauza==50)
    	 {
    	 GPIOC->ODR|=GPIO_ODR_ODR13 ;
    	 }
    	 if(pauza==100)
    	 {
    	 GPIOC->ODR&=~GPIO_ODR_ODR13 ;
    	 pauza=0;
    	 }
    */
    }
    
    void TIM2_IRQHandler(void)
    {
    	/*
    	if(TIM2->SR & TIM_SR_UIF)
    	{
    		TIM2->SR &= ~ TIM_SR_UIF;
    		pauza++;
    				if (pauza ==40) {
    					GPIOC->BSRR |= GPIO_BSRR_BS13;
    					GPIOA->BSRR |= GPIO_BSRR_BS0;
    					//GPIOA->ODR |= GPIO_ODR_ODR1;
    
    				}
    				if (pauza == 80) {
    					GPIOC->BSRR |= GPIO_BSRR_BR13;
    					//GPIOA->ODR &= ~GPIO_ODR_ODR1;
    					GPIOA->BSRR |= GPIO_BSRR_BR0;
    					pauza = 0;
    				}
    	}
    	*/
    	if (TIM2->SR & TIM_SR_CC1IF)
    	{
    
    		TIM2->SR|=TIM_SR_CC1OF;
    	}
    
    }
    
    void TIM4_IRQHandler(void) {
    	if (TIM4->SR & TIM_SR_UIF) {
    		TIM4->SR &= ~ TIM_SR_UIF;
    
    
    
    		pauza++;
    
    		if (pauza ==40) {
    			PR++;
    			GPIOC->BSRR |= GPIO_BSRR_BS13;
    		//	GPIOC->ODR |= GPIO_ODR_ODR13;
    
    		}
    		if (pauza == 80) {
    			//PR=1000;
    			GPIOC->BSRR |= GPIO_BSRR_BR13;
    			//GPIOC->ODR &= ~GPIO_ODR_ODR13;
    			pauza = 0;
    		}
    /*
    		 pauza++;
    		 if(pauza>20)
    		 {
    		 GPIOA->BSRR|=GPIO_BSRR_BS5;
    		 }
    		 if(pauza>40)
    		 {
    		 GPIOA->BSRR|=GPIO_BSRR_BR5;
    		 pauza=0;
    		 }
    
    
    		 */
    
    	}
    }
    void delay(__IO uint32_t tck) {
    	while (tck) {
    		tck--;
    	}
    }
    void delay_ms(uint32_t ms) {
    	MODIFY_REG(SysTick->VAL, SysTick_VAL_CURRENT_Msk, SYSCLOCK / 1000 - 1);
    
    	SysTick_CNT = ms;
    	while (SysTick_CNT) {
    	}
    }
    void NMI_Handler(void) {
    	if ((RCC->CIR & RCC_CIR_CSSF) != 0) // HSE fail
    			{
    		RCC->CIR |= RCC_CIR_CSSC; // Clear CSSF flag
    
    	}
    }
    void SysTick_Handler(void) {
    	if (SysTick_CNT > 0)
    		SysTick_CNT--;
    }
    void init_systimer(void) {
    	MODIFY_REG(SysTick->LOAD, SysTick_LOAD_RELOAD_Msk, SYSCLOCK / 1000 - 1);
    
    	CLEAR_BIT(SysTick->VAL, SysTick_VAL_CURRENT_Msk);
    	SET_BIT(SysTick->CTRL,
    			SysTick_CTRL_CLKSOURCE_Msk | SysTick_CTRL_ENABLE_Msk | SysTick_CTRL_TICKINT_Msk);
    
    }
    void RCC_init(void) {
    	FLASH->ACR |= FLASH_ACR_PRFTBE;
    	FLASH->ACR |= FLASH_ACR_LATENCY_2;
    
    	RCC->CR |= RCC_CR_HSEON;
    	while (!(RCC->CR & RCC_CR_HSERDY)) {
    
    	}
    	RCC->CR |= RCC_CR_CSSON;
    	RCC->CFGR |= RCC_CFGR_PLLMULL9;
    	RCC->CFGR |= RCC_CFGR_HPRE_DIV1; //_VAL2FLD(RCC_CFGR_HPRE,1);
    	RCC->CFGR |= RCC_CFGR_PPRE1_DIV2; //_VAL2FLD(RCC_CFGR_PPRE1,2);
    	RCC->CFGR |= RCC_CFGR_PPRE2_DIV1; //_VAL2FLD(RCC_CFGR_PPRE2,1);
    	RCC->CFGR |= RCC_CFGR_ADCPRE_DIV6;
    	RCC->CFGR |= RCC_CFGR_PLLSRC;
    	RCC->CFGR |= RCC_CFGR_PLLXTPRE_HSE;
    
    	RCC->CR |= RCC_CR_PLLON;
    	while (!(RCC->CR & RCC_CR_PLLRDY)) {
    
    	}
    
    	RCC->CFGR |= RCC_CFGR_SW_PLL;
    	while ((RCC->CFGR & RCC_CFGR_SWS) != RCC_CFGR_SWS_PLL) {
    	}
    }
    void RCC_DeInit(void) {
    	SET_BIT(RCC->CR, RCC_CR_HSION);
    	while (READ_BIT(RCC->CR, RCC_CR_HSIRDY == RESET)) {
    	}
    	MODIFY_REG(RCC->CR, RCC_CR_HSITRIM, 0x80U);
    	CLEAR_REG(RCC->CFGR);
    	while (READ_BIT(RCC->CFGR, RCC_CFGR_SWS) != RESET) {
    	}
    	CLEAR_BIT(RCC->CR, RCC_CR_PLLON);
    	while (READ_BIT(RCC->CR, RCC_CR_PLLRDY) != RESET) {
    	}
    	CLEAR_BIT(RCC->CR, RCC_CR_HSEON | RCC_CR_CSSON);
    	while (READ_BIT(RCC->CR, RCC_CR_HSERDY) != RESET) {
    	}
    	CLEAR_BIT(RCC->CR, RCC_CR_HSEBYP);
    	//Reset all CSR flags
    	SET_BIT(RCC->CSR, RCC_CSR_RMVF);
    }
    void SetSysClockTo72(void) {
    	SET_BIT(RCC->CR, RCC_CR_HSEON);
    	while (READ_BIT(RCC->CR, RCC_CR_HSERDY == RESET)) {
    	}
    	//Enable the Prefetch Buffer
    	CLEAR_BIT(FLASH->ACR, FLASH_ACR_PRFTBE);
    	SET_BIT(FLASH->ACR, FLASH_ACR_PRFTBE);
    	MODIFY_REG(FLASH->ACR, FLASH_ACR_LATENCY, FLASH_ACR_LATENCY_2);
    	MODIFY_REG(RCC->CFGR, RCC_CFGR_HPRE, RCC_CFGR_HPRE_DIV1);
    	MODIFY_REG(RCC->CFGR, RCC_CFGR_PPRE2, RCC_CFGR_PPRE2_DIV1);
    	MODIFY_REG(RCC->CFGR, RCC_CFGR_PPRE1, RCC_CFGR_PPRE1_DIV2);
    	MODIFY_REG(RCC->CFGR,
    			RCC_CFGR_PLLSRC | RCC_CFGR_PLLXTPRE | RCC_CFGR_PLLMULL,
    			RCC_CFGR_PLLSRC | RCC_CFGR_PLLMULL9);
    	SET_BIT(RCC->CR, RCC_CR_PLLON);
    	while (READ_BIT(RCC->CR, RCC_CR_PLLRDY) != (RCC_CR_PLLRDY)) {
    	}
    	MODIFY_REG(RCC->CFGR, RCC_CFGR_SW, RCC_CFGR_SW_PLL);
    	while (READ_BIT(RCC->CFGR, RCC_CFGR_SWS) != RCC_CFGR_SWS_PLL) {
    	}
    }
    
    
    
     void adc1_init(void)
     {
    
     //	RCC->CFGR &=~ RCC_CFGR_ADCPRE;
    
     // RCC->APB2ENR|=RCC_APB2ENR_IOPAEN;
     GPIOA->CRL&=~GPIO_CRL_CNF1;
     GPIOA->CRL&=~ GPIO_CRL_MODE1;
     GPIOA->CRL&=~GPIO_CRL_CNF2;
     GPIOA->CRL&=~ GPIO_CRL_MODE2;
     RCC->APB2ENR |=  RCC_APB2ENR_ADC1EN;
     //   RCC->APB2ENR |=  RCC_APB2ENR_ADC2EN;
    
     //RCC->CFGR |= RCC_CFGR_ADCPRE_DIV2;
    
     //������ ������������ ���
     ADC1->CR2 |= ADC_CR2_RSTCAL;
     while (!(ADC1->CR2 & ADC_CR2_RSTCAL))
     {
     }
    
     ADC1->CR2 |= ADC_CR2_CAL;
     // while (!(ADC1->CR2 & ADC_CR2_CAL));
     // {
     // }
    
     ADC1->CR2 |=ADC_CR2_CONT;//�������� ���
     ADC1->CR2    |=  ADC_CR2_EXTSEL;
     //    ADC1->CR1|=ADC_CR1_SCAN ;
     ADC1->CR2  |= ADC_CR2_EXTTRIG;
     // ADC1->CR1&=~ADC_CR1_DUALMOD;
     ADC1->SMPR2&=~ ADC_SMPR2_SMP1_0; //1
     ADC1->SMPR2&=~ADC_SMPR2_SMP1_1; //1
     ADC1->SMPR2 &=~ ADC_SMPR2_SMP1_2; //1
    
     ADC1->SQR3   |= ADC_SQR3_SQ1_0;   //1 IN1
     ADC1->SQR3   &= ~ ADC_SQR3_SQ1_1;     //0
     ADC1->SQR3   &= ~ADC_SQR3_SQ1_2;   //0
     ADC1->SQR3   &=~  ADC_SQR3_SQ1_3;     //0
     ADC1->SQR3   &= ~ADC_SQR3_SQ1_4;
     ADC1->CR2 |=  ADC_CR2_ADON;
     ADC1->CR2 |= ADC_CR2_SWSTART;
     //}
     //void adc2_init(void)
     //{
     //RCC->CFGR &=~ RCC_CFGR_ADCPRE;
     //RCC->APB2ENR|=RCC_APB2ENR_IOPAEN;
     //		GPIOA->CRL&=~GPIO_CRL_CNF2;
     //   	GPIOA->CRL&=~ GPIO_CRL_MODE2;
     //   	RCC->APB2ENR |=  RCC_APB2ENR_ADC2EN;
     //	RCC->CFGR |= RCC_CFGR_ADCPRE_DIV2;
     // ADC2->CR2 |= ADC_CR2_RSTCAL;
     // while (!(ADC2->CR2 & ADC_CR2_RSTCAL))
     // {
     // }
    
     //	 ADC2->CR2 |= ADC_CR2_CAL;
     //ADC2->CR2 |=ADC_CR2_CONT;//�������� ���
     //ADC2->CR2    |=  ADC_CR2_EXTSEL;
     //	ADC2->CR2  |= ADC_CR2_EXTTRIG;
     //ADC2->SMPR2&=~ ADC_SMPR2_SMP2_0; //1
     //	ADC2->SMPR2&=~ADC_SMPR2_SMP2_1; //1
     //	ADC2->SMPR2 &=~ ADC_SMPR2_SMP2_2; //1
     //  	ADC2->SQR3   &=~ ADC_SQR3_SQ1_0;   //1 IN1
     //	ADC2->SQR3   |=  ADC_SQR3_SQ1_1;     //0
     // 	ADC2->SQR3   &= ~ADC_SQR3_SQ1_2;   //0
     //	ADC2->SQR3   &=~  ADC_SQR3_SQ1_3;     //0
     //  ADC2->SQR3   &= ~ADC_SQR3_SQ1_4;
     //  ADC2->CR2 |=  ADC_CR2_ADON;
     }
     void DMA_init(void)
     {
     RCC->AHBENR|=RCC_AHBENR_DMA1EN;
     DMA1_Channel1->CPAR=(uint32_t)&ADC1->DR;
     DMA1_Channel1->CMAR=(uint32_t)&TIM4->CCR1;
     DMA1_Channel1->CNDTR=1;
     DMA1_Channel1->CCR|=DMA_CCR_CIRC;
     DMA1_Channel1->CCR&=~DMA_CCR_PINC ;
     DMA1_Channel1->CCR&=~DMA_CCR_MINC;
     DMA1_Channel1->CCR|=DMA_CCR_PSIZE_0 ;
     DMA1_Channel1->CCR|=DMA_CCR_MSIZE_0;
     DMA1_Channel1->CCR&=~DMA_CCR_DIR ;
     DMA1_Channel1->CCR|=DMA_CCR_EN ;
    
     ADC1->CR2|=ADC_CR2_DMA;
     }
    
    
    void IWDT_init(void) {
    	RCC->CSR |= RCC_CSR_LSION;
    
    	IWDG->KR = 0x5555; // Access to registers
    	IWDG->PR &= ~(IWDG_PR_PR_0 | IWDG_PR_PR_1 | IWDG_PR_PR_2); // 4096
    	IWDG->RLR = 3000; //0x7FF;
    	while (!((IWDG->SR & IWDG_SR_PVU) && (IWDG->SR & IWDG_SR_RVU))) {
    	} // wait while bist of PVU and RVU will be set.
    	IWDG->KR = 0xCCCC; // Start count down;
    }
    
    int main(void) {
    
    	//Danie = &danie;
    	//IWDT_init();
    	RCC_init();
    	init_systimer();
    	APB_init();
    
    	GPIO_init();
    	//IWDT_init();
    	//timer1_init();
    
    	timer_2_init();
    	//timer3_encoder();
    	timer4_init();
         I2C1_Init();
    	 LCD_ini();
    	LCD_Clear();
    
    	while (1) {
    		//timer_2_init();
    		Zapoln = TIM_Per/TIM_Pulse;
    		if((GPIOB->IDR&GPIO_IDR_IDR5)==0)
    		{
    
    			if (TIM_Per < 65535)
    
    								 TIM_Per = TIM_Per+d;
    								TIM2->ARR = TIM_Per;
    							TIM_Pulse = TIM_Per/Zapoln; TIM2->CCR1 = TIM_Pulse;  // menyaem pwm vmeste s F
    							//for(i=0;i<0x300000;i++);
    		}
    		pauzat(100);
    		//for(i=0;i<0x300000;i++);
    /*
    		 switch(Danie->menu_btn)
    		 {
    		 case 0:
    		 IWDG->KR= 0xAAAA;
    		 TIM3->CNT=Danie->a;
    		 if(Danie->a>=100)
    		 {
    		 Danie->a=0;
    		 }
    		 Danie->a++;
    		 if(Danie->a<=0)
    		 {
    		 Danie->a=100;
    
    		 }
    		 Danie->a--;
    		 Danie->a=TIM3->CNT;
    		 break;
    		 case 1:
    		 IWDG->KR= 0xAAAA;
    
    		 TIM3->CNT=Danie->b;
    		 if(Danie->b>=100)
    		 {
    		 Danie->b=0;
    		 }
    		 Danie->b++;
    		 if(Danie->b<=0)
    		 {
    		 Danie->b=100;
    		 }
    		 Danie->b--;
    		 Danie->b=TIM3->CNT;
    		 break;
    		 case 2:
    		 Danie->menu_btn=0;
    		 break;
    		 }
    
    		switch (Danie->menu_lcd) {
    		case 0:
    			IWDG->KR = 0xAAAA;
    			// sprintf(Danie->buf0,"a=%2d ",Danie->a);
    			LCD_SetPos(0, 0);
    			LCD_String("Mama");
    
    			 LCD_SendChar('M');
    			 LCD_SendChar('a');
    			 LCD_SendChar(0xBC);
    			 LCD_SendChar('a');
    			 LCD_SendChar(' ');
    
    			break;
    		case 1:
    			IWDG->KR = 0xAAAA;
    			// sprintf(Danie->buf1,"b=%2d ",Danie->b);
    
    			LCD_SetPos(0, 0);
    
    			 LCD_SendChar(0xA8);
    			 LCD_SendChar('a');
    			 LCD_SendChar(0xBE);
    			 LCD_SendChar('a');
    			 LCD_SendChar(' ');
    
    			LCD_String("Papa");
    			break;
    		case 2:
    			Danie->menu_lcd = 0;
    			break;
    
    		}
    */
    
    	//	LCD_SetPos(0,1);
    	//	LCD_String("Mama");
    	}
    }
    

    Вот он код только немного видоизменённый.Так как на SPL был написан и моя задержка.

     

  7. В 11.02.2024 в 09:15, tonyk_av сказал:

    Так и есть. Я один и тот же вопрос от этого ivan dimir вижу на многих сайтах. У него подход к делу такой: прикинуться шлангом, выложить какой-нибудь бред, а потом ждать, пока грамотные челы ему всё разжуют и напишут. При этом он сам даже напрягаться не хочет, чтобы изучить теорию. Поэтому я удивляюсь, что многие до сих пор ведутся и тратят на него своё время.

    Я нашёл пример на ютубе.И автор скинул на мою почту.Правда компилятор пишет ошибки.Пока не проверял рабочий он или нет.Правда в режиме ШИМ производится регулировка.У меня один вопрос к вам спецам или профисианалам .Для чего создаются форумы?Цель и задача форума .Мои цели вам известны. Вот человек поделился.Если надо и я поделюсь чем могу.А так как то не по человечески.Ведь информация должна передаваться из руки в руки. Иначе не имеет всё это смысла.Спасибо конечно за внимание.

  8. В 11.02.2024 в 00:53, Obam сказал:

    Но вот решить проблему вот такого плана не смог.Нужно менять частоту поэтапно от нуля включить на частоту 800 кГц .Потом шаг 80 кГц и менять до заданного значения метод итерации.
    Ну вот и посчитай на бумажке коэффициенты деления для 80, 160, 240..(весь ряд сам допиши, у мну устный счёт плохо) 800 кГц

    Ряд можно дописать .Программу написать .Но она не будет выполнять данную работу.А примера нет.Есть только  видео stm32 & DDS .Si5351A -DDS прямоугольных импульсов.Но нужно создавать программу под неё.Да зная структурную схему DDS можно её самому сделать на базе stm32  но не на контроллере которого хочу я применить.Покажите пример. 

  9. В 10.02.2024 в 06:13, HardWareMan сказал:

    Частота зависит от периодов счёта и прескалера. Коэффициенты без проблем вычисляются из значений частоты периферии (брать APB1/APB2 к которому принадлежит выбранный таймер) и требуемой частоты. В чём проблема управлять частотой генерации таймера, если выбранный вами таймер без lock режима?

    Это я знаю. Каким образом это можно реализовать.Одной переменной не обойтись. Просто в основном цикле вычислить и подставить -не работает.Так покажите пример.

    • Downvote 1
  10. Как мне менять частоту генерации меандра?Я нашёл в своём коде пару ошибок.Из за них код не работал.Но вот решить проблему вот такого плана не смог.Нужно менять частоту поэтапно от нуля включить на частоту 800 кГц .Потом шаг 80 кГц и менять до заданного значения метод итерации.

  11. HAL это хорошо.Спасибо заранее.Этот режим мне нужен для генератора меандр.Но генератор не просто на одной частоте.Как сделать управлением прескаллера.В майне по умолчанию.?Если можете проконсультировать амматора.

  12. Настроил таймер на  режим output compare  togle.И всё погасло  а тыкал на выход С1-112А абсолюный ноль.Что не так?

    Спойлер
    void timer_2_init(void)
    {
    	RCC->APB2ENR|=RCC_APB2ENR_IOPAEN;
    	GPIOA->CRL |= GPIO_CRL_CNF0_1;
    	GPIOA->CRL &= ~GPIO_CRL_CNF0_0;
       GPIOA->CRL|=GPIO_CRL_MODE0;
       RCC->APB2ENR |= RCC_APB2ENR_AFIOEN;
    	RCC->APB1ENR |= RCC_APB1ENR_TIM2EN;
    
    	TIM2->PSC =2-1; // ����������� �������� ��� ������ ����� 1000 ��� � �������
    	TIM2->ARR = 3 - 1; //65535
    	TIM2->CCR1= 2;
    	TIM2->CCMR1&=~TIM_CCMR1_CC1S;
    	TIM2->CCMR1|=_VAL2FLD(TIM_CCMR1_OC1M,2);
    	TIM2->CCMR1&=~TIM_CCMR1_OC1PE;
    	TIM2->CCER&=~TIM_CCER_CC1P;
    	TIM2->CCER|=TIM_CCER_CC1E;
    	TIM2->EGR |= TIM_EGR_UG;
    	TIM2->DIER |=TIM_DIER_CC1IE;
    
    	//TIM2->DIER |= TIM_DIER_UIE;
    	TIM2->CR1 |= TIM_CR1_CEN;
    	NVIC_EnableIRQ(TIM2_IRQn);
    	//NVIC_GetPriority(TIM2_IRQn,0);
    } 

     

     

  13. Я пошарил  в нете и на сайте st нвшёл решение своей проблемы.Наверное это клон st-link/v2.Потому как cubeide сканирует под номером 6.Прошивается но отладка только с оригиналом.Ну так я прочитал.

  14. Ну вот я по умолчанию выбрал проект и прошил  Debug нажал и что должно показать в этой сессии.Можно подробнее до деталей.Потому как я ставлю галочку на сканирование  st-link нажимаю  Debug и ошибка?хотя по ютубу такого нет.

  15. у меня возник вопрос об отладке .Научился я прошивать Stm32 в Cubeide среде.Провозился с обновлением .Настроил для прошивки.А какие критерии настройки отладки и как я могу визуально это увидеть?

  16. В 16.01.2024 в 17:22, tonyk_av сказал:

    Этот ТС уже не единожды честно признавался, что читать не умеет и не хочет, зато умеет trahaть людям мозги на форумах. Я в его темы захожу вместо сайтов с анекдотами, когда пью кофе как сейчас, например.

    Спасибо за комплимент.Я с Одесского региона анекдоты и мне нравятся.Но смотрите.Если вы же специалисты.У вас же можно проконсультироватся.?

×
×
  • Создать...