【无标题】电机驱动软硬件项目

我又发现了超赞的软硬件项目,全部开源
今天给大家推荐一个开源的无刷电机驱动项目。

项目地址:https://github.com/vedderb
在这里插入图片描述
ESC是Electric Speed Controller的缩写,也就是电子调速控制器,简称电调;作者是Benjamin Vedder,所以叫VESC,大家可能听说过,就是本杰明电调。

这个项目主要分为几个部分,VESC固件,物料清单,VESC硬件,VESC工具软件,是一个非常完整的软硬件项目,并且配套的软件也出色。
在这里插入图片描述
项目还很活跃,就在我写文章的前5小时,作者还合并了一个推送请求。
在这里插入图片描述
项目整体特征:

硬件和软件是开源的,CPU 资源充足,二次开发很灵活;
基于 STM32F4 微控制器;
DRV8302 MOSFET 驱动器/降压转换器/分流放大器;
IRFS7530 MOEFET(其他 FET 也适用);
DRV8302 上集成的降压器为外部电路提供 5V 1A 的电源输出。
电压:8V ~ 60V;
电流:240A峰值电流或持续约50A,具体取决于PCB周围的温度和空气流通情况;
从固件FW 2.3 起,实现了所有电机参数的自动检测的有传感器和无传感器 FOC;
基于ChibiOS/RT的固件;
PCB尺寸:40mm x 60mm;
所有相位的电流和电压测量;
支持直流电机;
支持有传感器或无传感器;
具有大量配置参数的 GUI
自适应 PWM 频率以获得尽可能好的 ADC 测量值;
基于 RPM 的相位提前(或定时/磁场减弱);
在无传感器模式下(显然在有传感器模式下也是如此)具有良好的启动扭矩;
占空比控制、速度控制或电流控制。
丰富的电机控制接口:PPM 信号(RC 伺服)、模拟、UART、I2C、USB 或 CAN 总线;
可选PPM信号输出。例如,在从树莓派或安卓设备控制遥控车时很有用。
可调节保护

当达到电流限制时,在电机继续运行的同时使用软退避策略。如果电流变得太高,电机将完全关闭;
RPM 限制也有一个软退避策略;
即使电机速度快速变化,换向也能完美运行。这是因为磁通量在过零之后被积分,而不是基于之前的速度添加延迟。
当控制器关闭时电机旋转时,会跟踪换向和方向。还计算了获得相同速度的占空比。这是为了在电机已经旋转时获得平稳启动。
VESC固件
项目地址:https://github.com/vedderb/bldc

这是一个开源的电机控制器源码,适用于直流电机,直流无刷电机调速,支持方波驱动和FOC驱动,比较关键的是支持无感FOC。
在这里插入图片描述
VESC硬件
项目地址:https://github.com/vedderb/bldc-hardware

这个项目是基于STM32F4 芯片,下面是一个直流无刷电机控制器的硬件原理图,感兴趣的话,可以基于这个项目做一下自己的硬件。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
工具软件
项目地址:https://github.com/vedderb/bldc-tool

这是一个基于Qt的直流电机控制器用户界面,用于配置硬件参数,控制和调试控制器,具体如下图所示;
在这里插入图片描述
这真的是一个很棒的项目,如果你对电机控制很感兴趣,Enjoy!

详细参考:http://vedder.se/2015/01/vesc-open-source-esc/

转载自“小麦大叔”公众号,版权归原作者所有。转载仅为学习参考,不代表本号认同其观点,本号亦不对其内容、文字、图片承担任何侵权责任。

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
/* This file is part of AutoQuad ESC32. AutoQuad ESC32 is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. AutoQuad ESC32 is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with AutoQuad ESC32. If not, see . Copyright © 2011, 2012 Bill Nesbitt */ /* * pwm.c文件.此文件有2个功能,2个功能分别使用,不能同时使用 * 1、pwm in输入模式,pwm输入中断里,调用runNewInput函数 * 2、one wire通讯协议,pwm输入中断里,调用owEdgeDetect函数,来输入新的数据,调用owReset函数来复位1wire通讯 * */ #include "pwm.h" #include "timer.h" #include "run.h" #include "main.h" #include "ow.h" #include "stm32f10x_gpio.h" #include "stm32f10x_tim.h" #include "misc.h" static int16_t pwmMinPeriod; //timer1 ch1 pwm 输入最小周期 static int16_t pwmMaxPeriod; //timer1 ch1 pwm 输入最大周期 int16_t pwmMinValue; //timer1 ch2 pwm 输入最小周期 static int16_t pwmMaxValue; //timer1 ch2 pwm 输入最大周期 int16_t pwmLoValue; int16_t pwmHiValue; int16_t pwmMinStart; volatile uint32_t pwmValidMicros; //关闭输入捕获比较中断 1和2 void pwmIsrAllOff(void) { PWM_TIM->DIER &= (uint16_t)~(TIM_IT_CC1 | TIM_IT_CC2);//关闭中断 } //开启输入捕获比较中断 1和2 void pwmIsrAllOn(void) { PWM_TIM->CCR1; PWM_TIM->CCR2; PWM_TIM->DIER |= (TIM_IT_CC1 | TIM_IT_CC2);//允许捕获比较 1 2中断 } //开启捕获比较2中断 void pwmIsrRunOn(void) { uint16_t dier = PWM_TIM->DIER; dier &= (uint16_t)~(TIM_IT_CC1 | TIM_IT_CC2); dier |= TIM_IT_CC2;//允许捕获/比较2中断 PWM_TIM->CCR1; PWM_TIM->CCR2; PWM_TIM->DIER = dier; } //timer 1 void pwmInit(void) { GPIO_InitTypeDef GPIO_InitStructure; NVIC_InitTypeDef NVIC_InitStructure; TIM_ICInitTypeDef TIM_ICInitStructure; TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; pwmSetConstants(); // TIM1 channel 1 pin (PA.08) configuration GPIO_InitStructure.GPIO_Pin = PWM_PIN; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(PWM_PORT, &GPIO;_InitStructure); // Enable the TIM1 global Interrupt NVIC_InitStructure.NVIC_IRQChannel = PWM_IRQ; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 2; NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC;_InitStructure); TIM_TimeBaseStructInit(&TIM;_TimeBaseStructure); TIM_TimeBaseStructure.TIM_Prescaler = (PWM_CLK_DIVISOR-1); TIM_TimeBaseStructure.TIM_Period = 0xffff; TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; TIM_TimeBaseInit(PWM_TIM, &TIM;_TimeBaseStructure); TIM_ICInitStructure.TIM_Channel = PWM_CHANNEL; TIM_ICInitStructure.TIM_ICPolarity = TIM_ICPolarity_Rising; TIM_ICInitStructure.TIM_ICSelection = TIM_ICSelection_DirectTI; TIM_ICInitStructure.TIM_ICPrescaler = TIM_ICPSC_DIV1; TIM_ICInitStructure.TIM_ICFilter = 0x0; TIM_PWMIConfig(PWM_TIM, &TIM;_ICInitStructure); // Select the TIM Input Trigger: TI1FP1 // 滤波后的定时器输入1(TI1FP1) TIM_SelectInputTrigger(PWM_TIM, TIM_TS_TI1FP1); // Select the slave Mode: Reset Mode TIM_SelectSlaveMode(PWM_TIM, TIM_SlaveMode_Reset);//复位模式 // Enable the Master/Slave Mode TIM_SelectMasterSlaveMode(PWM_TIM, TIM_MasterSlaveMode_Enable); // TIM enable counter TIM_Cmd(PWM_TIM, ENABLE); pwmIsrAllOn(); } //timer1 TIM1_CC_IRQHandler中断 void PWM_IRQ_HANDLER(void) { uint16_t pwmValue; uint16_t periodValue; uint8_t edge; edge = !(PWM_TIM->SR & TIM_IT_CC2); periodValue = PWM_TIM->CCR1; //IO 输入PA8 周期 pwmValue = PWM_TIM->CCR2; //IO 输入(但是没有看到配置了使用哪个IO做为输入了) 脉宽长度 // look for good RC PWM input if (inputMode == ESC_INPUT_PWM && //PWM输入模式 periodValue >= pwmMinPeriod && periodValue = pwmMinValue && pwmValue <= pwmMaxValue //脉宽长度 ) { if (edge == 0) { pwmValidMicros = timerMicros; runNewInput(pwmValue); //PWM正确.输入 } } } void pwmSetConstants(void) { float rpmScale = p[PWM_RPM_SCALE]; pwmMinPeriod = p[PWM_MIN_PERIOD] = (int)p[PWM_MIN_PERIOD];//PWM最小周期 timer1 ch1 pwmMaxPeriod = p[PWM_MAX_PERIOD] = (int)p[PWM_MAX_PERIOD];//PWM最大周期 timer1 ch1 pwmMinValue = p[PWM_MIN_VALUE] = (int)p[PWM_MIN_VALUE]; //PWM最小周期 timer1 ch2 pwmMaxValue = p[PWM_MAX_VALUE] = (int)p[PWM_MAX_VALUE]; //PWM最大周期 timer1 ch2 pwmLoValue = p[PWM_LO_VALUE] = (int)p[PWM_LO_VALUE]; pwmHiValue = p[PWM_HI_VALUE] = (int)p[PWM_HI_VALUE]; pwmMinStart = p[PWM_MIN_START] = (int)p[PWM_MIN_START]; if (rpmScale PWM_RPM_SCALE_MAX) rpmScale = PWM_RPM_SCALE_MAX; p[PWM_RPM_SCALE] = rpmScale; } ESC32开源电调 源码与原理图,此源码采用RTT操作系统,CAN PWM操作方式 ,本人已用PWM方式成功驱动起来,CAN 暂且还没做测试。 此资料是 啊嘉 开源出来的,好资料不敢独享,稍加整理放到这与大家共享。
无刷电机是一种高效、低噪音、长寿命的电机,广泛应用于工业、家电、汽车等领域。无刷电机的本体设计需要考虑其功率、转速、扭矩等参数,以满足不同应用场合的需求。一般来说,无刷电机的本体设计包括电机结构设计、电磁设计、机械设计等方面。 无刷电机的控制技术分为硬件控制和软件控制两种。硬件控制是指通过电路设计实现电机的启停、转速控制、反转等功能,主要包括驱动电路、控制电路、传感器等。软件控制则是指通过编程实现电机的控制,主要包括控制算法设计、控制器选型等。 在无刷电机的硬件控制中,常用的驱动方式包括直流切换、交流切换、三相桥式等。其中,三相桥式驱动是最为常用的一种方式,其控制电路相对简单,可实现电机的精确控制。在传感器方面,无刷电机常用霍尔传感器、反电动势传感器等,以获取电机转速、位置等信息。 在无刷电机的软件控制中,常用的控制算法包括电机模型预测控制、PID控制、矢量控制等。其中,矢量控制是最为常用的一种方式,其通过控制电机的磁场方向和大小来实现电机的精确控制。在控制器选型方面,常用的控制器有单片机、DSP等,其选择应根据具体应用场合和控制要求进行。 总之,无刷电机的本体设计及软、硬件的驱动控制技术是实现无刷电机高效、精确控制的关键。在实际应用中,应根据具体应用场合和控制要求进行技术选型和优化设计。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值