首先我们来看一下L9110S的驱动手册:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
注意到IB接的是PB8,IA接的是PB9
根据第二个图片里面的真值表我们可以得到如下信息:
在这里插入图片描述

PB8配置位复用推挽输出,PB9配置为通用推挽
然后我给PB8配置PWM波,PB9给拉低,那么电机是不是就是正转
反转同理
停止两个端口同时拉低或者拉高就行了

在这里插入图片描述

接下里我们来配置一下PWM波,我们配置电机反转
PB9配置位复用推挽输出,PB8配置为通用推挽 然后我给PB9配置PWM波,PB8给拉低,那么电机是不是就是正转
看一下上图的定时器为TIM4,第4个管道。

void machinery_config(void)
{
 	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);//开时钟
	/*PB9 复用推挽输出*/
	GPIO_InitTypeDef GPIO_INIT;
	GPIO_INIT.GPIO_Mode = GPIO_Mode_AF_PP;
	GPIO_INIT.GPIO_Speed = GPIO_Speed_50MHz;
	GPIO_INIT.GPIO_Pin = GPIO_Pin_9;
	GPIO_Init(GPIOB,&GPIO_INIT);

	GPIO_INIT.GPIO_Mode = GPIO_Mode_Out_PP;
	GPIO_INIT.GPIO_Speed = GPIO_Speed_50MHz;
	GPIO_INIT.GPIO_Pin = GPIO_Pin_8;
	GPIO_Init(GPIOB,&GPIO_INIT);
	
	RCC->APB1ENR |=(0X01<<2);//开TIM4时钟
	//定时器4通道 9 CH4
	//时钟组成
	TIM4->PSC = 72;
	TIM4->ARR = 1000;
	TIM4->CNT = 0;	
		TIM4->CR1 &=~(0X01<<4);//计数方向--向上记数
		//配置PWM波 有效电平 PWM模式  输出到响应引脚
		TIM4->CCER &=~(0X01<<13);//高电平有效
		TIM4->CCMR2 |=(0X06<<12);//PWM模式1 PWM输出模式
		TIM4->CCER |=(0X01<<12);//OC4对应到PB9,将输出信号配置到指定管脚
		TIM4->CCR4=0;//比较值
		TIM4->CR1 |=(0X01<<0);//计数器使能
	GPIO_ResetBits(GPIOB,GPIO_Pin_8);//拉低PB8

}

这样我们是不是只需要改变配置里面的比较值(TIM4->CCR4)就可以实现电机的速度控制了
我们在主函数里这样简单测试一下,每延时3s我让比较值增加200:

		TIM4->CCR4=200;
		systick_ms(3000);
	    TIM4->CCR4=400;
		systick_ms(3000);
		TIM4->CCR4=600;
		systick_ms(3000);
		systick_ms(3000);
		TIM4->CCR4=800;
		systick_ms(3000);
		TIM4->CCR4=1000;
		systick_ms(3000);

ok!这里就结束了,如果你需要别的控制,你只需要在满足你的控制条件后,更改比较值就可以实现电机的速度控制了。
如有不同的见解,欢迎评论区或者私信交流指正。
感觉写的不错,拜托观众姥爷一键三连。你的认同是我更新最大的动力。
ps:我是真的懒啊!!!!!
再ps一下:步进电机和舵机后续再更

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐