STM32F103使用L9110s驱动直流电机(必须简单易懂)

首先我们来看一下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一下:步进电机和舵机后续再更

淘宝买了几个4g舵机,3.2一个,价格便宜,但是不带电路板和摆臂。 样子如下图,带5根线,2根电机线,3根电位器线。 拆开后,大概就是这个样子,可见棕色和白色两根线接电位器的两端,黄线接电位器中间。 我这里用的图,都是淘宝卖家拍的,下面的拆开图,是6g舵机的,但是接线是一样的。 万用表测量了一下,这个电位器是4.9K的,也就当5K吧。 这个舵机是萝莉群的群友推荐的,希望我能做个舵机的电路板出来驱动它。 一直拖了一个多星期吧,硬件电路是几天前就搭好了,今天下午大概写了一下代码,本来想用一下PID算法,显得高大上一点,不过后来看了看,这种东西比较简单,单纯的比例算法就可以了,不需要PID这么复杂。 思路大概解释一下。 电路板用了3个元件,一个STC15W408AS DIP16的单片机。 这个单片机带10位精度的ADC,刚好测量舵机里面电位器的位置。 然后电机驱动用的L9110 DIP8。 L9110最大电流0.8A,对于4g舵机的小空心杯电机来说,足够了。 而且L9110的电路也非常简单。 最后一个元件就是加了个47uf的电容。如果是改贴片元件,大概10uf和0.1uf两个贴片电容就差不多了。 L9110的基本应用电路如下: STC15W408AS DIP16 的引脚图如下: 顺便说一下,我用直插元件和洞洞板搭了一个驱动电路,没有采用贴片元件和打板子。 因为重点还是单片机的电路设计和编程,而不是做一个比较完美的成品。 4g舵机驱动板程序部分截图:
### STM32F103用于物流小车项目的开发指南 #### 一、硬件连接方案 对于基于STM32F103的物流小车项目而言,合理的硬件设计至关重要。通常情况下,会涉及到电机驱动模块的选择以及传感器接口的设计等问题。 - **电源管理**:确保为MCU提供稳定的工作电压,一般采用5V供电并通过LDO转换成3.3V给STM32核心供电[^1]。 - **电机控制**:选用合适的H桥芯片来实现直流电机的速度与方向调节;同时考虑到可能存在的电流冲击情况,在电路中加入必要的保护措施如TVS管等元件[^3]。 - **传感器接入**:根据实际需求配置各类感知设备(红外避障器、超声波测距仪),并将它们按照各自协议正确接线至单片机相应IO端口上完成初始化设置。 #### 二、软件编程要点 针对此类应用场合下的固件编写工作主要围绕着以下几个方面展开: - **环境搭建**:利用官方提供的CubeMX工具快速生成初始框架代码,并在此基础上进一步完善功能逻辑部分。 - **编码规则遵循**:参照《STM32F103系列中文参考手册》中的指导原则来进行具体函数定义及调用操作,保证整个程序结构清晰易懂且易于维护升级。 - **在线编程支持**:为了方便后期调试测试阶段能够灵活调整参数设定或者修正潜在漏洞缺陷,可以考虑集成IAP(In Application Programming)特性以便于远程刷新应用程序镜像文件而不必每次都重新烧录全部内容到Flash存储区内[^2]。 ```c // 示例:简单的LED闪烁实验作为入门练习 #include "stm32f1xx_hal.h" int main(void){ HAL_Init(); __HAL_RCC_GPIOA_CLK_ENABLE(); //使能GPIOA时钟 GPIO_InitTypeDef GPIO_InitStruct = {0}; GPIO_InitStruct.Pin = GPIO_PIN_5; GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; GPIO_InitStruct.Pull = GPIO_NOPULL; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; HAL_GPIO_Init(GPIOA,&GPIO_InitStruct); while (1){ HAL_GPIO_TogglePin(GPIOA,GPIO_PIN_5); //切换PA5电平状态 HAL_Delay(500); //延时500ms } } ```
评论 19
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值