Skip to content

因为项目需要,需要设计一个音圈电机的驱动器,先开个仓库,后面陆续整理资料

Notifications You must be signed in to change notification settings

Alansortorz/Cyber-VCM

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

6 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

音圈电机驱动器 - Version1.0

我们日常生活中会看到各种电机,比如电脑的散热风扇,电风扇,电动车等电气产品中常常看到它们的影子。见多了可能大家会形成一种惯性,一说到电机,下意识就会和旋转这种动作结合起来,但回归第一原理,电机的本质是电与磁的交融,是通电线圈在磁场中受到电磁力的作用进而产生的运动,所以只要是通过电来控制磁力,进而控制运动的机械装置,我们都可以认为是电机。照这个说法,航母上的电磁弹射是不是也是电机呀?

1 前言

音圈电机的名字起源于扬声器,工作原理与扬声器类似。如图所示,其內部是一个导电线圈,外壳的内表壁是一个永磁体,线圈通电,通电线圈再磁场中受到电磁力的作用,通过控制线圈外部的电压的大小来改变电流的大小,进而控制电磁力的大小。

音圈电机工作原理

电机的物理模型如下图所示:

音圈电机的物理模型

物理模型对参数调节实际上作用不大,但是物理模型能告诉我们哪些参数是重要的,哪些是不重要的。所以我认为物理模型在理论上是用于定量分析,但实际工程中的作用还是定性分析。

2 硬件设计

2.1 驱动器接口

主控板驱动正面介绍

主控板驱动反面介绍

2.2 GPIO部署图

GPIO部署图

3 固件部分

3.1 传感器数据采集

传感器数据采集分为以下几个部分:

  • 光栅传感器位置数据 - 用于获取位置和速度
  • 电流传感器电流数据

3.2 交互

这里用交互这个词可能大家觉得有点怪怪的,但是仔细思考一下,我们人与人进行沟通,以及人与计算机进行信息的交流,本质上是一样的,就是一种交互,进行信息的沟通和传递,只不过人与人之间的交互要比人与机器之间的交互要丰富的多,复杂的多。

3.2.1 LED

LED也许是人机交互最简单的手段了,它可以传递的数据量非常小,但是却可以显示一些关键的信息,配置也非常简单。

3.2.2 OLED

OLED有SPI通讯的,也有IIC通讯的,本项目中使用的是软件IIC通讯,具体请参考源码哈。

3.2.3 串口

串口在配置完成之后需要进行重定向,配置函数如下:

int fputc(int ch, FILE *f)
{
  HAL_UART_Transmit(&huart2, (uint8_t *)&ch, 1, 0xffff);
  return ch;
}

int fgetc(FILE *f)
{
  uint8_t ch = 0;
  HAL_UART_Receive(&huart2, &ch, 1, 0xffff);
  return ch;
}

CLion开发环境下由于FILE定义在stdio.h这个头文件中的,所以需要在项目中包含这个头文件,但是测试发现Keil里面包含的是MDK\ARM\ARMCC\include这个目录下的stdio.h文件,而CLion是没有链接到这个文件的,因此在CLion中按这种方式进行重定向会发现printf是没有任何输出的。这个时候可以参考这篇文章:更“高端”的嵌入式开发方式 — 基于CLion的STM32开发教程 – 小牧的元宇宙空间 (goho.co)

3.2 控制算法

3.2.1 PID控制算法

最简单却又最经典的,PID控制算法,需要想清楚下面几个问题:

  • 先搞清楚电机的输入量,输出量和误差是什么?
  • 控制器计算出来的控制量U(t)本质上是什么?
  • 控制目标是电机的转速,输入量是电压,那么电压于在程序中的PWM占空比的数值是个什么关系呢?
  • 控制器输出值U(t)与PWM之间又是一个什么关系呢?

解释一下上面几个问题:

  • 输入量是给定的电压值,在嵌入式系统中通过给定PWM占空比来控制输入电压。输出量是电机的转速值,

About

因为项目需要,需要设计一个音圈电机的驱动器,先开个仓库,后面陆续整理资料

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published