Embedded module-L298N drives AB phase encoder motor and speed measurement

Basic knowledge and principles:
https : //blog.csdn.net/teavamc/article/details/77429519?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522159609695319724848359683%2522%252C%2522scm%2522%253A%252220140713.130102334... 2522% & 257D the request_id% = 159609695319724848359683 & biz_id = 0 = & utm_medium distribute.pc_search_result.none-Task-2-Blog All first_rank_ecpm_v3 ~ pc_rank_v2-10-77429519.first_rank_ecpm_v3_pc_rank_v2 L298N & utm_term = 94%%% B5% E7 E6% 9C% BA% E9% Bl the A9% %E5%8A%A8%E6%A8%A1%E5%9D%97%E4%BD%BF%E7%94%A8%E6%96%B9%E6%B3%95&spm=1018.2118.3001.4187

Connection diagram:
https://www.jianguoyun.com/p/DbIheDoQ0KP8BxirlrAD

Solutions to problems encountered:
https://blog.csdn.net/m0_37763336/article/details/100343098?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522159610118019725250163299%2522%252C%2522scm%2522%253A% 252220140713.130102334…%2522%257D&request_id=159610118019725250163299&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2 all sobaiduend~default-3-100343098.first_rank_ecpm_v7%_pc_rank_v2&utm_term=l9298n%E5%A9% %B5%E6%9C%BA%E4%B8%8D%E5%8A%A8&spm=1018.2118.3001.4187

Program source code:
with main function:

#include "sys.h"
#include "delay.h"
#include "usart.h"
#include "led.h"
#include "pwm.h"
#include "timer.h"
#include "stm32f4xx_rcc.h"

RCC_ClocksTypeDef get_rcc_clock;    //获取系统时钟状态

int main(void)
{
    
     
	RCC_GetClocksFreq(&get_rcc_clock);

	int encoder;
	NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置系统中断优先级分组2
	LED_Init();
	delay_init(168);  //初始化延时函数
	uart_init(115200);//初始化串口波特率为115200
 	TIM14_PWM_Init(500-1,84-1);	//84M/84=1Mhz的计数频率,重装载值500,所以PWM频率为 1M/500=2Khz. 

	encoder_tim3_init();
	
   while(1) //实现比较值从0-300递增,到300后从300-0递减,循环
	{
    
    
		GPIO_SetBits(GPIOF,GPIO_Pin_0); //正转
	  GPIO_ResetBits(GPIOF,GPIO_Pin_1);
		
		TIM_SetCompare1(TIM14,0);	//修改比较值,修改占空比
		delay_ms(1000);
		encoder = read_encoder();
    printf("t:%d\r\n",encoder);
		
		TIM_SetCompare1(TIM14,400);	//修改比较值,修改占空比
		delay_ms(1000);
		encoder = read_encoder();
    printf("t:%d\r\n",encoder);

	  GPIO_ResetBits(GPIOF,GPIO_Pin_0); //停止
		GPIO_ResetBits(GPIOF,GPIO_Pin_1);
		delay_ms(1000);
		encoder = read_encoder();
    printf("t:%d\r\n",encoder);
		
	  GPIO_ResetBits(GPIOF,GPIO_Pin_0); //反转
		GPIO_SetBits(GPIOF,GPIO_Pin_1);
		
		TIM_SetCompare1(TIM14,0);	//修改比较值,修改占空比
		delay_ms(1000);
		encoder = read_encoder();
    printf("t:%d\r\n",encoder);
		
		TIM_SetCompare1(TIM14,400);	//修改比较值,修改占空比
		delay_ms(1000);
		encoder = read_encoder();
    printf("t:%d\r\n",encoder);
	}
}

Guess you like

Origin blog.csdn.net/Williamcsj/article/details/107697051