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一下:步进电机和舵机后续再更

  • 44
    点赞
  • 265
    收藏
    觉得还不错? 一键收藏
  • 17
    评论
淘宝买了几个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舵机驱动板程序部分截图:
### 回答1: STM32F103STM32系列微控制器中的一款型号,它是一款基于ARM Cortex-M3内核的32位微控制器。而STM32CubeMX是STMicroelectronics提供的一款软件工具,用于生成基于STM32微控制器的工程代码。 要使用STM32CubeMX生成驱动直流电机的工程,首先需要配置STM32F103微控制器的引脚和时钟设置。打开STM32CubeMX软件后,选择STM32F103型号,在引脚配置界面中选择合适的引脚来连接直流电机的控制线,如电机驱动芯片的使能引脚、输入控制引脚等。 接下来,在中间的"芯片功能"选项卡中,可以选择对应的定时器进行配置,以产生PWM信号来控制直流电机。选择适当的定时器,并设置PWM模式和频率,以匹配直流电机的要求。 随后,在左侧的"配置"选项卡中,可以选择"GPIO"和"TIM"模块,进一步配置相关的GPIO引脚和定时器模块。根据直流电机的控制方式,可以选择合适的GPIO引脚,并对定时器的时钟和模式进行设置。 配置完成后,点击"生成代码"按钮,STM32CubeMX将自动生成包含对应的工程代码文件。得到生成的代码后,可以使用任意的集成开发环境(IDE)打开生成的工程,并根据需要进行进一步的编程。 在生成的代码中,通常会包含对GPIO和定时器的初始化配置,以及PWM信号的生成和控制。根据直流电机的要求,可以在代码中添加控制逻辑,如调整PWM的占空比来控制电机的转速和方向。 通过以上步骤,我们可以使用STM32F103以及STM32CubeMX生成的工程代码成功驱动直流电机,实现对电机的转速和方向的控制。当然,具体的代码编写和调试还需要根据具体的电机驱动芯片和应用场景进行进一步的调整和优化。 ### 回答2: 使用STM32CubeMX生成的工程可以驱动直流电机。首先,打开STM32CubeMX软件,选择相应的STM32F103芯片并创建一个新的工程项目。然后,在"Pinout & Configuration"选项卡中,选择需要使用的引脚并分配给直流电机的控制信号引脚。一般情况下,直流电机需要一个PWM信号引脚用于控制电机的转速和方向。 接下来,在"Peripherals"选项卡中,找到TIM(定时器)模块,并设置一个定时器用于产生PWM信号。设置定时器的时钟源、预分频系数和周期计数值等参数。 然后,在"Configuration"选项卡中,配置定时器相关的PWM输出。可以选择输出通道,设置输出比较模式和输出比较通道的电平等。 完成以上设置后,点击"Project"选项卡生成工程代码。STM32CubeMX将自动生成初始化代码和驱动程序,包括定时器配置、中断处理以及GPIO的初始化等。 在生成的代码中,找到控制直流电机的函数,一般为Motor_Control函数。在该函数中,可以通过调整PWM信号的占空比和输出通道的电平来控制直流电机的转速和方向。 最后,使用编译器将生成的代码编译并下载到STM32F103芯片上。将对应的引脚连接到直流电机的控制信号引脚上,即可驱动直流电机运行。 总结起来,使用STM32CubeMX生成的工程通过配置定时器和PWM输出来驱动直流电机。用户只需根据自己的需求进行相关设置和调整,然后编译并下载到STM32F103芯片上即可实现驱动直流电机的功能。 ### 回答3: STM32F103是STMicroelectronics(意法半导体)推出的一款32位ARM Cortex-M3内核的微控制器。它具有丰富的外设和强大的性能,广泛应用于工业控制、自动化、仪器仪表等领域。 STM32CubeMX是STMicroelectronics提供的一款图形化配置工具,用于快速生成STM32微控制器的初始化代码。使用STM32CubeMX可以简化工程的配置和初始化过程,提高开发效率。 驱动直流电机是应用中常见的任务之一。在使用STM32CubeMX生成工程驱动直流电机时,我们可以按照以下步骤进行配置: 1. 打开STM32CubeMX工具,并选择对应的STM32F103型号微控制器。 2. 在"Pinout & Configuration"选项卡中选择对应的引脚配置,将控制直流电机的GPIO引脚设置为输出模式。 3. 在"Configuration"选项卡中选择对应的定时器(TIM)模块,配置定时器的工作模式、频率、周期等参数。直流电机通常使用PWM(脉冲宽度调制)信号来控制转速和转向。 4. 在"Middlewares"选项卡中选择驱动直流电机的库函数,例如STMicroelectronics提供的STM32F10x_StdPeriph_Lib库函数。 5. 在"Project"选项卡中配置工程的输出路径和名称,点击"Generate Code"生成代码。 6. 打开生成的工程代码,并根据实际需求调用库函数,编写控制直流电机转速和转向的代码。 7. 连接STM32F103开发板与直流电机,并将编译好的代码烧录到开发板上进行测试。 以上是使用STM32CubeMX生成工程驱动直流电机的一般步骤。具体的配置和代码编写还需要根据实际情况和需求进行调整。同时,还需要注意相应的硬件连接和电源供应等问题,以确保驱动直流电机正常工作。
评论 17
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值