我们日常生活中会看到各种电机,比如电脑的散热风扇,电风扇,电动车等电气产品中常常看到它们的影子。见多了可能大家会形成一种惯性,一说到电机,下意识就会和
旋转
这种动作结合起来,但回归第一原理,电机的本质是电与磁的交融,是通电线圈在磁场中受到电磁力的作用进而产生的运动,所以只要是通过电来控制磁力,进而控制运动的机械装置,我们都可以认为是电机。照这个说法,航母上的电磁弹射是不是也是电机呀?
音圈电机的名字起源于扬声器,工作原理与扬声器类似。如图所示,其內部是一个导电线圈,外壳的内表壁是一个永磁体,线圈通电,通电线圈再磁场中受到电磁力的作用,通过控制线圈外部的电压的大小来改变电流的大小,进而控制电磁力的大小。
电机的物理模型如下图所示:
物理模型对参数调节实际上作用不大,但是物理模型能告诉我们哪些参数是重要的,哪些是不重要的。所以我认为物理模型在理论上是用于定量分析,但实际工程中的作用还是定性分析。
传感器数据采集分为以下几个部分:
- 光栅传感器位置数据 - 用于获取位置和速度
- 电流传感器电流数据
这里用
交互
这个词可能大家觉得有点怪怪的,但是仔细思考一下,我们人与人进行沟通,以及人与计算机进行信息的交流,本质上是一样的,就是一种交互,进行信息的沟通和传递,只不过人与人之间的交互要比人与机器之间的交互要丰富的多,复杂的多。
LED也许是人机交互最简单的手段了,它可以传递的数据量非常小,但是却可以显示一些关键的信息,配置也非常简单。
OLED有SPI通讯的,也有IIC通讯的,本项目中使用的是软件IIC通讯,具体请参考源码哈。
串口在配置完成之后需要进行重定向,配置函数如下:
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)
最简单却又最经典的,PID控制算法,需要想清楚下面几个问题:
- 先搞清楚电机的输入量,输出量和误差是什么?
- 控制器计算出来的控制量U(t)本质上是什么?
- 控制目标是电机的转速,输入量是电压,那么电压于在程序中的PWM占空比的数值是个什么关系呢?
- 控制器输出值U(t)与PWM之间又是一个什么关系呢?
解释一下上面几个问题:
- 输入量是给定的电压值,在嵌入式系统中通过给定PWM占空比来控制输入电压。输出量是电机的转速值,