PWM驱动直流电机

一、知识补充;

低频时有蜂鸣器响声,加大PWM频率,超出人耳范围就可以听不到,20Hz~20kHz

加大频率-->减小预分频器,从720-->36现在频率就是20kHz这样不会影响占空比?

 二、接线图

三、代码分析

main,c

#include "stm32f10x.h"    // Device header
#include "Delay.h"
#include "OLED.h"
#include "Motor.h"
#include "Key.h"


uint8_t KeyNum;
int8_t Speed;

int main(void)
{
	OLED_Init();
	Motor_Init();
	Key_Init();
	
	OLED_ShowString(1,1,"Speed:");
	
	
	
	while(1)
	{
		KeyNum = Key_GetNum();
		if(KeyNum == 1)
		{
			Speed += 20;
			if(Speed > 100)
			{
				Speed = -100;
			}
		}
		Motor_SetSpeed(Speed);
		OLED_ShowSignedNum(1,7,Speed,3);
	}
	
}

motor.c

#include "stm32f10x.h"                  // Device header
#include "PWM.h"

void Motor_Init(void)
{   RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
	
	GPIO_InitTypeDef GPIO_InitStructure;
	GPIO_InitStructure.GPIO_Mode= GPIO_Mode_Out_PP;
	GPIO_InitStructure.GPIO_Pin=GPIO_Pin_4|GPIO_Pin_5;
	GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
	GPIO_Init(GPIOA,&GPIO_InitStructure);
	
	PWM_Init();
}

void Motor_SetSpeed(int8_t Speed)
{
	if(Speed >= 0)//正转 此处为逆时针,可以改接线或者对调Set REset
	{
		GPIO_SetBits(GPIOA,GPIO_Pin_4);
		GPIO_ResetBits(GPIOA,GPIO_Pin_5);
		PWM_SetCompare3(Speed);
	}
	else//反转 顺时针
	{
		GPIO_ResetBits(GPIOA,GPIO_Pin_4);
		GPIO_SetBits(GPIOA,GPIO_Pin_5);
		PWM_SetCompare3(-Speed);//setcompare必须传正数
	}
}

PWM.c

此处变动:接PA2通道 为CH3 频率改高 

#include "stm32f10x.h"                  // Device header

void PWM_Init(void)
{
	
	RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,ENABLE);//时钟
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
	
	
	GPIO_InitTypeDef GPIO_InitStructure;
	GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;//一般使用输出数据寄存器控制
												//想让定时器控制
												//就要复用输出,输出控制权转移给片上外设
	GPIO_InitStructure.GPIO_Pin=GPIO_Pin_2;//查找引脚定义知,TIM2_CH1_ETR在PA0口
	GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
	GPIO_Init(GPIOA,&GPIO_InitStructure);
	
	TIM_InternalClockConfig(TIM2);//选择时基单元时钟源,上电默认使用内部时钟,不写也行
	
	/*****时基单元初始化*****/
	TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure;
	TIM_TimeBaseInitStructure.TIM_ClockDivision =TIM_CKD_DIV1;//一分频
	TIM_TimeBaseInitStructure.TIM_CounterMode =TIM_CounterMode_Up ;//向上计数
	TIM_TimeBaseInitStructure.TIM_Period = 100 - 1;//ARR的值
	TIM_TimeBaseInitStructure.TIM_Prescaler = 36 - 1 ;//PSC 20kHz
	TIM_TimeBaseInitStructure.TIM_RepetitionCounter = 0;//重复计数器(高级计数器才有)
	TIM_TimeBaseInit(TIM2,&TIM_TimeBaseInitStructure);

	TIM_OCInitTypeDef TIM_OCInitStructure;
	TIM_OCStructInit(&TIM_OCInitStructure);//总结:赋一个初始值
										//下面再改自己想改的参数
										//防止配置通用定时器时未配置全部结构体成员导致改为高级定时器时出现错误
	
	TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;//输出模式
	TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;//输出极性
	TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;//输出使能
	TIM_OCInitStructure.TIM_Pulse = 0 ;//初始化CCR
	TIM_OC3Init( TIM2,&TIM_OCInitStructure);
	
	TIM_Cmd(TIM2,ENABLE);
}

void PWM_SetCompare3(uint16_t Compare)
{
	TIM_SetCompare3(TIM2,Compare);
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/392462.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

批量采集网站产品图并生成对应EXCEL

运营的小哥需要批量采集某网站的产品大图产品标题,粗略看了看是shopfy的网站,数据大概1000多点,需求嘛就是需要生成带图的cxcel文档,想想去折腾个程序太浪费时间了,何况不会python就另辟蹊径了。 用到了后羿采集器&am…

rust函数 stuct struct方法 关联函数

本文结合2个代码实例主要介绍了rust函数定义方法,struct结构体定义、struct方法及关联函数等相关基础知识。 代码1: main.rc #[derive(Debug)]//定义一个结构体 struct Ellipse {max_semi_axis: u32,min_semi_axis: u32, }fn main() {//椭圆&#xff0…

大数据01-导论

零、文章目录 大数据01-导论 1、数据与数据分析 **数据:是事实或观察的结果,是对客观事物的逻辑归纳,是用于表示客观事物的未经加工的原始素材。**数据可以是连续的值,比如声音、图像,称为模拟数据;也可…

电阻器的脉冲浪涌能力?

由于现有需求,许多现代电子电路和设备都会经历瞬态脉冲和浪涌。这反过来又导致需要“设计”瞬态浪涌保护,尤其是在电机控制器等电路中。当电机启动时,此时消耗的电流过大,可能导致电阻器故障。同样,如果电容器用于电机…

2023-CVPR-Adjustment and Alignment for Unbiased Open Set Domain Adaptation

Adjustment and Alignment (ANNA) Front-Door Adjustment:类似二分类交叉熵,令概率接近1,以降低损失 Decoupled Causal Alignment:类似多分类交叉熵,令概率接近标签M

差异分析和PPI网路图绘制教程

写在前面 在原文中,作者获得285个DEG,在此推文中共获得601个DEG。小杜的猜想是标准化的水段不同的原因吧,或是其他的原因。此外,惊奇的发现发表医学类的文章在附件中都不提供相关的信息文件,如DEG数据、GO、KEGG富集信…

【教3妹学编程-算法题】N 叉树的前序遍历

2哥 : 叮铃铃,3妹,准备复工了啊,过年干嘛呢,是不是逛吃逛吃,有没有长胖呢。 3妹:切,不想上班,假期能不能重来一遍啊,虽然在家我妈张罗着要给我相亲呢。可是在家还是很好的…

Linux CentOS stream 9 安装docker

在计算机技术中,虑拟化是一种资源管理技术,是将计算机的各种实体资源(CPU、内存、磁盘空间、网络适配器等),予以抽象、转换后呈现出来并可供分区、组合为一个或多个电脑配置环境。 目前,大多数服务器的容量的利用率不足15%,这导致服务器数量激增以及增加了复杂性。服务…

SG5032EEN晶体振荡器SPXO

5G将使通信流量呈指数级增长,5G通信网络需要高速和宽带,同时将噪声水平保持在最低水平,这可以通过通信设备的高频低抖动参考时钟来实现,使用上述晶体振荡器SPXO,客户可以输入一个具有极低相位抖动和功率的高频参考时钟…

《Go 简易速速上手小册》第3章:数据结构(2024 最新版)

文章目录 3.1 数组与切片:Go 语言的动态队伍3.1.1 基础知识讲解3.1.2 重点案例:动态成绩单功能描述实现代码扩展功能 3.1.3 拓展案例 1:数据分析功能描述实现代码扩展功能 3.1.4 拓展案例 2:日志过滤器功能描述实现代码扩展功能 3…

鸿蒙开发者预览版如何?

在24年的华为鸿蒙发布会中表示。预览版已经向开发者开放申请,首批支持的机型有三款分别为华为 Mate 60、华为Mate 60 Pro、华为Mate X5。 其HarmonyOS NEXT去除Linux内核以及AOSP代码,采用的鸿蒙内核以及代码,HarmonyOS NEXT系统仅支持鸿蒙内…

MySQL数据库基础(四):图形化开发工具DataGrip

文章目录 图形化开发工具DataGrip 一、DataGrip介绍 二、DataGrip安装 三、创建工程 四、连接数据库 五、选择要使用的数据库 六、DataGrip软件设置 1、设置字体大小 2、设置关键字大写 3、自动排版 图形化开发工具DataGrip 一、DataGrip介绍 DataGrip是JetBrains公…

用于图像处理的Python顶级库 !!

文章目录 前言 1、OpenCV 2、Scikit-Image 3、Scipy 4、Python Image Library(Pillow / PIL) 5、Matplotlib 6、SimpleITK 7、Numpy 8、Mahotas 前言 正如IDC所指出的,数字信息将飙升至175ZB,而这些信息中的巨大一部分是图片。数…

综合交易模型教程---qmt实盘链接,提供源代码

综合交易模型教程---qmt实盘链接,提供源代码 Original L1511732 数据分析与运用 2024-02-17 00:13 贵州 目前框架实盘全部完成了,后面写教程,每一个函数怎么样使用,怎么样开发自己的策略 模拟盘现在登录不了我直接实盘展示 后面…

FLUENT Meshing Watertight Geometry工作流入门 - 8 添加边界层网格

本视频中学到的内容: 如何使用 “添加边界层”任务生成边界层网格边界层网格在流体动力学中的重要性可用于添加边界层网格的方法以及所需的用户输入 视频链接: FLUENT Meshing入门教程-8添加边界层网格_哔哩哔哩_bilibili 流体动力学中边界层的概念及…

备战蓝桥杯---图论之最小生成树

首先,什么是最小生成树? 他就是无向图G中的所有生成树中树枝权值总和最小的。 如何求? 我们不妨采用以下的贪心策略: Prim算法(复杂度:(nm)logm): 我们对于把上述的点看成两个集…

SNMPv1/v2c-原理浅谈+报文示例+简易配置

个人认为,理解报文就理解了协议。通过报文中的字段可以理解协议在交互过程中相关传递的信息,更加便于理解协议。 因此本文将在SNMP协议报文的基础上进行介绍。 SNMPv1版本相关RFC SNMPv2版本相关RFC 关于 Community-based SNMPv2 的基本原理&#xff…

docker部署Gogs安装

简介 Gogs 的目标是打造一个最简单、最快速和最轻松的方式搭建自助 Git 服务。使用 Go 语言开发使得 Gogs 能够通过独立的二进制分发,并且支持 Go 语言支持的 所有平台,包括 Linux、Mac OS X、Windows 以及 ARM 平台。 非docker下载 https://dl.gogs.io/ #根据需要的版本下…

jwt+redis实现登录认证

项目环境&#xff1a;spring boot项目 pom.xml引入jwt和redis <!-- jwt --><dependency><groupId>com.auth0</groupId><artifactId>java-jwt</artifactId><version>4.3.0</version></dependency><!-- redis坐标-->…

php数据类型以及运算符、判断条件

php数据类型以及运算符 1. php数据类型2. 使用举例3. 运算符4. 判断条件if else elseif 1. php数据类型 包括 String(字符串)、Integer(整型)、Float(浮点型)、Boolean(布尔型)、Array(数组)、Object(对象)、NULL(空值) 2. 使用举例 1.字符串 2.整型 3.浮点型 4.布尔型 5.数组…
最新文章