【STM32驱动无刷电调遇到的问题及其解决办法】

2023-11-10 22:40

本文主要是介绍【STM32驱动无刷电调遇到的问题及其解决办法】,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

STM32驱动无刷电机遇到的问题

  • 前言
  • 一、PWM驱动代码
  • 软件仿真部分
    • 使用Keil自带仿真
    • 示波器画面
  • 总结


前言

提示:这里可以添加本文要记录的大概内容:

使用STM32开发板进行无刷电调的驱动开发,发现舵机测试仪可以轻松驱动无刷电机旋转和调速,而自己拟写的PWM程序则无法驱动。后面上示波器抓波,终于发现了端倪,不知道大家是如何解决的。欢迎评论


提示:以下是本篇文章正文内容,下面案例可供参考

一、PWM驱动代码

正点原子开发例程修改而来
pwm.c文件

#include "pwm.h"
void My_TIM3_Init(u16 arr,u16 psc)//初始化
{GPIO_InitTypeDef GPIO_InitStruct;//gpio结构体TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStruct;//定时器结构体TIM_OCInitTypeDef TIM_OCInitStruct;//通道结构体RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);//开启GPIOARCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE);//开启TIM3RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);//开启复用AFIOGPIO_InitStruct.GPIO_Mode=GPIO_Mode_AF_PP;//复用推挽GPIO_InitStruct.GPIO_Pin=GPIO_Pin_7|GPIO_Pin_6;//引角PA6,PA7GPIO_InitStruct.GPIO_Speed=GPIO_Speed_50MHz;GPIO_Init(GPIOA, &GPIO_InitStruct);//GPIO初始化TIM_TimeBaseInitStruct.TIM_ClockDivision=TIM_CKD_DIV1;//分频因子TIM_TimeBaseInitStruct.TIM_CounterMode=TIM_CounterMode_Up;//向上计数TIM_TimeBaseInitStruct.TIM_Period=arr;//自动重装载值TIM_TimeBaseInitStruct.TIM_Prescaler=psc;//预分频系数TIM_TimeBaseInit(TIM3, &TIM_TimeBaseInitStruct);//初始化TIM_OCInitStruct.TIM_OCMode=TIM_OCMode_PWM1;TIM_OCInitStruct.TIM_OCNPolarity=TIM_OCPolarity_High;TIM_OCInitStruct.TIM_OutputState=TIM_OutputState_Enable;TIM_OC1Init(TIM3,&TIM_OCInitStruct);//通道1初始化TIM_OC2Init(TIM3,&TIM_OCInitStruct);//通道2初始化TIM_OC1PreloadConfig(TIM3,TIM_OCPreload_Enable);  //使能预装载寄存器TIM_OC2PreloadConfig(TIM3,TIM_OCPreload_Enable);TIM_Cmd(TIM3,ENABLE);        //使能TIM3}

main.c文件


#include "stm32f10x.h"
#include "delay.h"
#include "pwm.h"int main(void)
{	int i = 0;NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);delay_init();My_TIM3_Init(19999,71);//周期为20ms  (arr+1)(psc+1)/Tclk=20000*72/72000000=20ms//TIM_SetCompare1(TIM3,700);//油门最高点                改占空比,计算方法500/20000=0.5/20//Delay_s(1);//	延迟2秒//TIM_SetCompare1(TIM3,1000);//油门中位while(1){		for(i = 800; i < 2000;i++){TIM_SetCompare1(TIM3,i);//	保持delay_ms(1);}Delay_s(1);for(i = 2000; i > 800;i--){TIM_SetCompare1(TIM3,i);//	保持delay_ms(1);}Delay_s(1);}
}

软件仿真部分

使用Keil自带仿真

在这里插入图片描述

示波器画面

这是单片机输出的PWM经过三极管放大后的波形 输出高电平为5V 因为只用了一个三极管 所以波形会取反
在这里插入图片描述

这是单片机配置为PWM2模式输出的波形,高电平为3.3V 且占空比很大
在这里插入图片描述
电路图如下
在这里插入图片描述
当然 如果感觉修改程序PWM2模块 反向麻烦的话 那就硬件再次放大,相当于再次反向就好,这样输入和输出同向。
电路图如下
在这里插入图片描述


总结

经过三极管放大后 输出的PWM高电平为5V 成功驱动无刷电调。
驱动不足原因,高电平电压不足。
解决方案:三极管放大

这篇关于【STM32驱动无刷电调遇到的问题及其解决办法】的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/385751

相关文章

linux生产者,消费者问题

pthread_cond_wait() :用于阻塞当前线程,等待别的线程使用pthread_cond_signal()或pthread_cond_broadcast来唤醒它。 pthread_cond_wait() 必须与pthread_mutex 配套使用。pthread_cond_wait()函数一进入wait状态就会自动release mutex。当其他线程通过pthread

问题:第一次世界大战的起止时间是 #其他#学习方法#微信

问题:第一次世界大战的起止时间是 A.1913 ~1918 年 B.1913 ~1918 年 C.1914 ~1918 年 D.1914 ~1919 年 参考答案如图所示

2024.6.24 IDEA中文乱码问题(服务器 控制台 TOMcat)实测已解决

1.问题产生原因: 1.文件编码不一致:如果文件的编码方式与IDEA设置的编码方式不一致,就会产生乱码。确保文件和IDEA使用相同的编码,通常是UTF-8。2.IDEA设置问题:检查IDEA的全局编码设置和项目编码设置是否正确。3.终端或控制台编码问题:如果你在终端或控制台看到乱码,可能是终端的编码设置问题。确保终端使用的是支持你的文件的编码方式。 2.解决方案: 1.File -> S

零基础STM32单片机编程入门(一)初识STM32单片机

文章目录 一.概要二.单片机型号命名规则三.STM32F103系统架构四.STM32F103C8T6单片机启动流程五.STM32F103C8T6单片机主要外设资源六.编程过程中芯片数据手册的作用1.单片机外设资源情况2.STM32单片机内部框图3.STM32单片机管脚图4.STM32单片机每个管脚可配功能5.单片机功耗数据6.FALSH编程时间,擦写次数7.I/O高低电平电压表格8.外设接口

vcpkg安装opencv中的特殊问题记录(无法找到opencv_corexd.dll)

我是按照网上的vcpkg安装opencv方法进行的(比如这篇:从0开始在visual studio上安装opencv(超详细,针对小白)),但是中间出现了一些别人没有遇到的问题,虽然原因没有找到,但是本人给出一些暂时的解决办法: 问题1: 我在安装库命令行使用的是 .\vcpkg.exe install opencv 我的电脑是x64,vcpkg在这条命令后默认下载的也是opencv2:x6

问题-windows-VPN不正确关闭导致网页打不开

为什么会发生这类事情呢? 主要原因是关机之前vpn没有关掉导致的。 至于为什么没关掉vpn会导致网页打不开,我猜测是因为vpn建立的链接没被更改。 正确关掉vpn的时候,会把ip链接断掉,如果你不正确关掉,ip链接没有断掉,此时你vpn又是没启动的,没有域名解析,所以就打不开网站。 你可以在打不开网页的时候,把vpn打开,你会发现网络又可以登录了。 方法一 注意:方法一虽然方便,但是可能会有

iOS HTTPS证书不受信任解决办法

之前开发App的时候服务端使用的是自签名的证书,导致iOS开发过程中调用HTTPS接口时,证书不被信任 - (void)URLSession:(NSURLSession *)session didReceiveChallenge:(NSURLAuthenticationChallenge *)challenge completionHandler:(void (^)(NSURLSessionAu

vue同页面多路由懒加载-及可能存在问题的解决方式

先上图,再解释 图一是多路由页面,图二是路由文件。从图一可以看出每个router-view对应的name都不一样。从图二可以看出层路由对应的组件加载方式要跟图一中的name相对应,并且图二的路由层在跟图一对应的页面中要加上components层,多一个s结尾,里面的的方法名就是图一路由的name值,里面还可以照样用懒加载的方式。 页面上其他的路由在路由文件中也跟图二是一样的写法。 附送可能存在

vue+elementui--$message提示框被dialog遮罩层挡住问题解决

最近碰到一个先执行this.$message提示内容,然后接着弹出dialog带遮罩层弹框。那么问题来了,message提示框会默认被dialog遮罩层挡住,现在就是要解决这个问题。 由于都是弹框,问题肯定是出在z-index比重问题。由于用$message方式是写在js中而不是写在html中所以不是很好直接去改样式。 不过好在message组件中提供了customClass 属性,我们可以利用

Visual Studio中,MSBUild版本问题

假如项目规定了MSBUild版本,那么在安装完Visual Studio后,假如带的MSBUild版本与项目要求的版本不符合要求,那么可以把需要的MSBUild添加到系统中,然后即可使用。步骤如下:            假如项目需要使用V12的MSBUild,而安装的Visual Studio带的MSBUild版本为V14。 ①到MSDN下载V12 MSBUild包,把V12包解压到目录(