【单片机项目】制作一辆基于STM32的智能小车——A4950电机驱动
A4950电机驱动模块特性
- 2路电机驱动输出,单板典型最大电流2A
- 驱动板工作电压范围:7.6V~30V
- 驱动频率:500Hz~300KHZ
模块接口说明
- VM:驱动模块的电源
- VCC:接5V输入,不要接3.3V会影响性能
- GND:接地引脚
电机A的两个线分别接AOUT1、AOUT2,电机B的两个线分别接BOUT1、BOUT2。控制电机时,直接将PB6、PB7(PB8、PB9)接不同占空比的PWM。由于AIN1和AIN2(BIN1和BIN2)之间存在压差,电机可以转动,并且压差越大,转速越快。凭此我们通过调节PWM控制小车速度以及方向。
这里我们使用TIM4的1、2、3、4通道
timer.h
#ifndef __TIMER_H
#define __TIMER_H
#include "sys.h"void pwm_init(u16 arr,u16 psc);#endif
timer.c
#include "timer.h"
void pwm_init(u16 arr,u16 psc)
{GPIO_InitTypeDef GPIO_Initure;TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;TIM_OCInitTypeDef TIM4_CHxHandler;//定时器4通道x句柄RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4, ENABLE); //时钟使能RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE); GPIO_Initure.GPIO_Pin=GPIO_Pin_6|GPIO_Pin_7;//配置IOGPIO_Initure.GPIO_Mode=GPIO_Mode_AF_PP;GPIO_Initure.GPIO_Speed=GPIO_Speed_50MHz; GPIO_Init(GPIOB,&GPIO_Initure);GPIO_Initure.GPIO_Pin=GPIO_Pin_8|GPIO_Pin_9;GPIO_Init(GPIOB,&GPIO_Initure);TIM_TimeBaseStructure.TIM_Period = arr;//配置定时器TIM_TimeBaseStructure.TIM_Prescaler =psc; TIM_TimeBaseStructure.TIM_ClockDivision = 0;TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //向上计数模式TIM_TimeBaseInit(TIM4, &TIM_TimeBaseStructure); TIM4_CHxHandler.TIM_OCMode = TIM_OCMode_PWM1; //选择定时器模式:TIM脉冲宽度调制模式2TIM4_CHxHandler.TIM_OutputState = TIM_OutputState_Enable; //比较输出使能TIM4_CHxHandler.TIM_OCPolarity = TIM_OCPolarity_High; //输出比较极性高TIM_OC1Init(TIM4, &TIM4_CHxHandler); //配置pwm通道TIM_OC2Init(TIM4, &TIM4_CHxHandler); TIM_OC3Init(TIM4, &TIM4_CHxHandler); TIM_OC4Init(TIM4, &TIM4_CHxHandler);TIM_OC1PreloadConfig(TIM4,TIM_OCPreload_Enable);//预装载使能TIM_OC2PreloadConfig(TIM4,TIM_OCPreload_Enable);TIM_OC3PreloadConfig(TIM4,TIM_OCPreload_Enable);TIM_OC4PreloadConfig(TIM4,TIM_OCPreload_Enable);TIM_Cmd(TIM4,ENABLE); //使能定时器}
motor.h
#ifndef __MOTOR_H
#define __MOTOR_H
#include "sys.h"void motor_forth(void);
void motor_back(void);
void motor_left(void);
void motor_right(void);
void motor_stop(void);#endif
motor.c
#include "motor.h"
#include "delay.h"//TIM_SetCompare1,2对应左边电机,TIM_SetCompare3,4对应右边电机void motor_forth()//前行
{TIM_SetCompare1(TIM4,599);TIM_SetCompare2(TIM4,899);TIM_SetCompare3(TIM4,593);TIM_SetCompare4(TIM4,899);
}void motor_back()//后退
{TIM_SetCompare1(TIM4,899);TIM_SetCompare2(TIM4,700);TIM_SetCompare3(TIM4,899);TIM_SetCompare4(TIM4,700);
}void motor_left()//左转
{TIM_SetCompare1(TIM4,899);TIM_SetCompare2(TIM4,700);TIM_SetCompare3(TIM4,750);TIM_SetCompare4(TIM4,899); delay_ms(565);motor_stop();
}void motor_right()//右转
{TIM_SetCompare1(TIM4,750);TIM_SetCompare2(TIM4,899);TIM_SetCompare3(TIM4,899);TIM_SetCompare4(TIM4,700); delay_ms(593);motor_stop();
}void motor_stop()
{TIM_SetCompare1(TIM4,899);TIM_SetCompare2(TIM4,899);TIM_SetCompare3(TIM4,899);TIM_SetCompare4(TIM4,899); }
下面是裸机跑的主函数————(私奔?裸奔??)
main.c
#include "sys.h"
#include "delay.h"
#include "usart.h"
#include "led.h"
#include "motor.h"
#include "timer.h"
/************************************************************************/int main(void){ SystemInit();delay_init(); //延时函数初始化 nms<=1864 LED_Init(); //初始化与LED连接的硬件接口pwm_init(899,0);motor_stop();delay_ms(1800);delay_ms(1800);while(1){LED=0;motor_forth();delay_ms(1500);LED=1;motor_stop();delay_ms(1500);LED=0;motor_left();delay_ms(900);LED=1;motor_stop();delay_ms(1500);LED=0;motor_forth();delay_ms(1000);LED=1;motor_stop();delay_ms(1500);LED=0;motor_right();delay_ms(900);LED=1;motor_stop();delay_ms(1500);}}
主函数功能是测试电机运作是否正常,以及调试出合适的PWM输出。
【单片机项目】制作一辆基于STM32的智能小车——A4950电机驱动相关推荐
- 【单片机项目】制作一辆基于STM32的智能小车——概述
去年九月买了一块STM32F429的开发板,直到今年三月份因为疫情不能返校宅在家里才算把教学视频都看完了,中途因为课程停了一段时间,就很长一段时间没有继续学习,所以这个速度算是极慢极慢的了. 我走进这 ...
- 【单片机项目】制作一辆基于STM32的智能小车——三路循迹模块
1.引脚定义: GND接地,VCC供电,X1.X2.X3各自对应一对红外探头 2.实验原理: 红外传感器巡线的基本原理是利用物体的反射性质,当红外线发射到黑色上时会被黑线吸收掉,当红外线发射到不同的颜 ...
- 基于STM32的智能小车(一)
## 基于STM32的智能小车 在假期自学了STM32,一直想做一个智能小车,刚好这次有时间就在家自己制作了这个基于STM32的智能小车,小车基本功能包括循迹.壁障及手机蓝牙控制,本人是第一次制作小车 ...
- 基于STM32的智能小车方案设计
基于STM32的智能小车设计 前言 一.什么是STM32智能小车? 二.模块汇总 1.主控板(STM32F103ZE) 2.底板 3.电机 4.避障模块(超声波传感器,红外传感器) 5.寻迹模块(3路 ...
- 基于STM32的智能小车--电机驱动设计
基于STM32的智能小车 第一章 基于STM32的智能小车方案设计 基于STM32的智能小车--电机驱动设计 基于STM32的智能小车 前言 一.电机是什么? 二.常见电机分类 1.有刷电机 2.无刷 ...
- 基于STM32的智能小车--舵机云台设计
基于STM32的智能小车 第一章 基于STM32的智能小车方案设计 第二章 基于STM32的智能小车–电机驱动设计 第三章 基于STM32的智能小车–循迹设计 第四章 基于STM32的智能小车–避障设 ...
- 【单片机项目】基于STM32的智能小车设计(一)流程设计
其实前几周就已经将小车调好并且也发了视频,但是每天忙于复习,也没有时间来对小车的流程设计.硬件设计.程序编写进行一个总结,正好周五可以休息一下,就分三个模块对这个智能小车项目进行一个总结. 这个小项目 ...
- 基于stm32的智能小车(远程控制、避障、循迹)
学完stm32,总是想做点东西"大显身手"一下,智能小车就成了首选项目,其核心只是就是PWM输出,I/O口引脚电平判断. 制作智能小车的硬件名单: 制作智能小车的硬件列表:(1) ...
- 基于stm32蓝牙智能小车设计
前言: 本文描述了一个由STM32微处理器.步进电机.蓝牙,L298N等模块构成的.该系统采用STM32微处理器为核心,在MDK环境下进行编程,通知控制L298N模块IN1~IN4引脚的高低电平进而控 ...
最新文章
- MySql采用range分区可提升查询效率
- 蹭一波热度,对《青春有你2》109位漂亮小姐姐下手了
- 工业数据采集平台SaaS
- mysql 网页员工登记表_作业1:小型考勤登记表
- ROS学习(15)RoboWare Studio的安装使用
- java soap服务_「java调用webservice」java调用webservice接口 三种方法 - seo实验室
- 光电LED玻璃屏成商显新势力 优势颠覆传统LED灯条屏
- Python内置下载服务器
- 梯度(gradient)
- X1000对于CPU Core的参数解读(MIPS Cache)
- pycharm打开长代码文件CPU占用率过高问题
- 93.<报错 SyntaxError: Unexpected token R in JSON at position 0 at JSON.parse (<anonymous>)的解决方法>
- vc调用浏览器打开指定网址页面
- 利用反病毒软件开展恶意活动:Dharma勒索软件分析
- 配置pcie网卡指示灯
- 必备外文文献网站,有外文文献翻译功能
- 总是跳转到国内版(cn.bing.com)?New Bing使用全攻略
- Python--自动切换壁纸
- 使用Visual Studio+OpenCV进行的Susan算子边缘检测及数米粒图像处理实验
- VS2019安装VA X插件过程
热门文章
- NRLMSISE-00、太阳辐射流量F107、地磁活动指数Ap
- springboot之aop切面获取请求
- 软件的升级及卸载原理
- f分布表完整图a=0.01_自动控制原理2.2.2传递函数零极点,零点如何影响输出响应曲线...
- 设置MATLAB中figure图的背景为白色
- 【Android音视频开发】【015】通过MediaCodec和SurfaceView,对H264数据进行解帧和播放
- 记账系统推荐金蝶精斗云_金蝶精斗云和用友T+财务软件哪个好用?实用?各自优缺点是什么...
- 添加购物车及展示购物车列表,修改购物车数量
- 新入手的Mac安装开发软件
- Python自动化办公社区 · 最新教程