stm32 pwm 电调 电机
先上代码
python 树莓派版本,通俗表现原理。stm32 C语言版本在后面
import RPi.GPIO as GPIO
import time
mode=2
IN1=11
def setup():
GPIO.setwarnings(False)
GPIO.setmode(GPIO.BOARD)
GPIO.setup(IN1, GPIO.OUT)
def set():
print "set"
try:
print "High"
while(1):
GPIO.output(IN1,0)
time.sleep(0.02-0.002)
GPIO.output(IN1,1)
time.sleep(0.002)
except:
print "low"
while(1):
GPIO.output(IN1,0)
time.sleep(0.02-0.001)
GPIO.output(IN1,1)
time.sleep(0.001)
def loop():
print "LOOP"
print "run"
try:
while(1):
GPIO.output(IN1,0)
time.sleep(0.02-0.001)
GPIO.output(IN1,1)
time.sleep(0.001)
except:
while(1):
GPIO.output(IN1,0)
time.sleep(0.02-0.00199)
GPIO.output(IN1,1)
time.sleep(0.00199)
'''
if(up>=0.018):
up=up
else:
up=up+0.0001
'''
setup()
if( mode==1):
set()
elif(mode==2):
loop()
C语言版本
/***********************************************
功能:输出PWM的定时器2初始化
输入参数:无
输出:无
描述:调用该函数,初始化定时器2为PWM输出模式
硬件连接:PA0,PA1,PA2,PA3
***********************************************/
void MotorInit(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
TIM_OCInitTypeDef TIM_OCInitStructure;
uint16_t PrescalerValue = 0; //控制电机PWM频率
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); //打开外设A的时钟和复用时钟
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2 ,ENABLE); //打开定时器2时钟
// 设置GPIO功能。
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure);
// 复位定时器。
//TIM_DeInit(TIM2);
// 配置计时器。
//PrescalerValue = (uint16_t) (SystemCoreClock / 24000000) - 1;
PrescalerValue =71;
TIM_TimeBaseStructure.TIM_Period = 19999; //设为50hz
TIM_TimeBaseStructure.TIM_Prescaler = PrescalerValue; //pwm时钟分频
TIM_TimeBaseStructure.TIM_ClockDivision = 0;
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //向上计数
TIM_TimeBaseInit(TIM2,&TIM_TimeBaseStructure);
// 配置TIM2为PWM输出模式
//TIM_OCStructInit(&TIM_OCInitStructure);
TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;
TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
//TIM_OCInitStructure.TIM_Pulse = 0; //0
TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;
TIM_OC1Init(TIM2,&TIM_OCInitStructure);
TIM_OC2Init(TIM2,&TIM_OCInitStructure);
TIM_OC3Init(TIM2,&TIM_OCInitStructure);
TIM_OC4Init(TIM2,&TIM_OCInitStructure);
TIM_OC1PreloadConfig(TIM2, TIM_OCPreload_Enable);
TIM_OC2PreloadConfig(TIM2, TIM_OCPreload_Enable);
TIM_OC3PreloadConfig(TIM2, TIM_OCPreload_Enable);
TIM_OC4PreloadConfig(TIM2, TIM_OCPreload_Enable);
// 启动计时器。
TIM_Cmd(TIM2,ENABLE);
//printf("Motor init success...\r\n");
}
//下面是启动方法
TIM_SetCompare1(TIM2,999);
TIM_SetCompare2(TIM2,999);
TIM_SetCompare3(TIM2,999);
TIM_SetCompare4(TIM2,999); //先把油门打到最低,即高电平为1ms
delay_ms(1800);//等待电机确认
delay_ms(1800);
delay_ms(1800);
delay_ms(1800);
delay_ms(1800);
delay_ms(1800);
delay_ms(1800);
delay_ms(1800);
TIM_SetCompare1(TIM2,1800); //再把高电平时间设为1~2ms
TIM_SetCompare2(TIM2,1800);
TIM_SetCompare3(TIM2,1800);
TIM_SetCompare4(TIM2,1800);
之前做过T形马达的小车,是通过pwm波控制小车速度,四轴飞行器的无刷电机也差不多。控制方法如下所述
控制频率
我的电调控制频率(pwm波的频率)50Hz就ok了。有的电调可能要500Hz或者其它的数值
所谓油门
油门就是pwm波的高电平持续时间(也可能是指占空比,over)
控制方法
第一次启动设置行程
先让控制器输出50Hz(T=20ms),高电平时间为2ms的pwm波,然后给电调上电。持续这个波一会儿到提示音响起。搞不清楚各种提示音的话就估摸着2、3s就行了。
然后立即让控制器输出50Hz,高电平时间为1ms的pwm波,持续一会儿到提示音响起。这个时候你可以断电了。
正常情况下启动电机
先让控制器输出50Hz,高电平持续时间为1ms的pwm波,然后给电调上电。持续一会儿听到提示音后,把高电平时间调为1~2ms之间,电机就启动了。
珍爱生命,注意安全
stm32 pwm 电调 电机的更多相关文章
- stm32通过电调带动电机(可按键调速)
这几天在做32通过电调带动电机的实验,上网一查,发现这方面的资料很少,经过自己的亲自实践,总结出以下经验,供大家参考. 论坛上也有很多人说自己在做,但是都遇到了同样的瓶颈.我想他们大多是pwm的频率和 ...
- 无刷电调修理方法 | 银燕(EMAX)12A无刷电调维修
一. 银燕(XP-12A)电调修理 笔者的电调在使用4S电池时烧毁,其中一个PMOS管明显烧焦. 将其拆除,买来新元件重新焊接,通电依然冒烟了. 引脚定义 丝印662F: XC6206P332MR 低 ...
- 树莓派pwm驱动好盈电调及伺服电机
本文讲述如何通过树莓派的硬件PWM控制好盈电调来驱动RC车子的前进后退,以及如何驱动伺服电机来控制车子转向. 1. 好盈电调简介 车子上的电调型号为:WP-10BLS-A-RTR,在好盈官网并没有搜到 ...
- 新西达电调初始化代码,使用nodejs ffi技术调用wiringpi,代码使用typescript编写
这是我设计的F450四轴飞行器飞控代码的一部分 运行在orangepi-zero上,操作系统是armbian,思路是使用node-ffi调用wiringpi的so库与GPIO通信,然后控制端逻辑代码使 ...
- 无刷电调基础知识以及BLHeli固件烧录和参数调整
标题: 无刷电调基础知识以及BLHeli固件烧录和参数调整 作者: 梦幻之心星 sky-seeker@qq.com 标签: [#基础知识,#电调,#BLHeli,#固件,#烧录,#调参] 目录: [电 ...
- MTO1804无刷电机引发的悲惨经历之二:电调固件刷新与优化
前言 原创文章,转载引用请务必注明链接,水平有限,如有疏漏,欢迎指正. 书接上回,我们总算是基本确认了黑衣神秘电调的身份,本文就尝试对电调固件进行一番设置,来个免费优化. 1.刷新固件 关于电调的固件 ...
- arduino 驱动电调
#include <TimerOne.h> #define PPMPIN 7 ; //0-9 ; void setup() { // put your setup code here, t ...
- STM32 PWM的输出与Keil软件仿真
导读:PWM(Pulse Width Modulation)控制——脉冲宽度调制技术,通过对一系列脉冲的宽度进行调制,来等效地获得所需要波形(含形状和幅值). PWM控制技术在逆变电路中应用最广,应用 ...
- 8元电调调参教程(使用Arduino Uno)| BLHeli无刷电调的固件烧写及调参
前言 淘某上有款8元电调,性价比很高,但是需要简单设置一下 1.材料清单 (1)Arduino UNO开发板 (2)BLHeliSuite 16.7.14.9.0.1 调参软件及固件已上传Gitee: ...
随机推荐
- python platform模块
该模块用来访问平台相关属性. 常见属性和方法 系统名称 platform.system() 返回系统/操作系统名称,例如“Linux”,“Windows” >>> platform. ...
- SRM 619
easy: 假设每堆石头不全为1,那么每次我们总能取一堆石头分给另外两堆,堆数-1.而且新的局面肯定有一堆的个数大于1. 于是,假设每堆石头数都为1 -> lose.否则的话推断堆数奇偶就可以 ...
- Mysql技术内幕——InnoDB存储引擎
Mysql技术内幕——InnoDB存储引擎 http://jingyan.baidu.com/article/fedf07377c493f35ac89770c.html 一.mysql体系结构和存储引 ...
- react-native 相关问题
使用create-react-native-app时,报错,好像是npm版本不对,想问下npm怎么降低版本? npm install npm@4 -g 创建并启动项目 老方法1 创建项目 react ...
- TC命令流量控制测试(针对具体IP地址和IP协议)
这里测试系统为Linux操作系统,通过简单的TC命令来实现对带宽的控制. 1对具体IP地址的流量控制 这里采用iperf来进行带宽的测试,首先在服务器和客户端都安装上iperf软件,通过该软件下的命令 ...
- [LeetCode] 513. Find Bottom Left Tree Value_ Medium tag: BFS
Given a binary tree, find the leftmost value in the last row of the tree. Example 1: Input: 2 / \ 1 ...
- 最新可靠好用的DNS服务器地址汇总
如果修改DNS服务器地址就可以访问google等服务,你还等什么?使用免费DNS解析服务除了去掉了运营商的各种广告,还有个最大的好处就是不会重定向或者过滤用户所访问的地址,这样就防止了很多网站被电信. ...
- python基础24 -----python中的各种锁
一.全局解释器锁(GIL) 1.什么是全局解释器锁 在同一个进程中只要有一个线程获取了全局解释器(cpu)的使用权限,那么其他的线程就必须等待该线程的全局解释器(cpu)使 用权消失后才能使用全局解释 ...
- java 字节流与字符流的区别详解
字节流与字符流 先来看一下流的概念: 在程序中所有的数据都是以流的方式进行传输或保存的,程序需要数据的时候要使用输入流读取数据,而当程序需要将一些数据保存起来的时候,就要使用输出流完成. 程序中的输入 ...
- Bootstrap学习笔记-布局
Bootstrap学习笔记-布局 默认是响应式布局,就是你在改变页面的时候也不会出现乱的现象. <html><head> <meta charset="utf- ...