本文主要是介绍STM32单片机模拟量脉冲调速的STM32Cube配置,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
STM32单片机模拟量脉冲调速的STM32Cube配置
有些时候我们需要伺服电机以速度模式运行。当伺服电机以速度模式运行时最优选的方式自然是通过伺服驱动器自身的模拟量输入来进行调速。但是一些伺服驱动器本身不带有模拟量输入,此时我们可以用单片机制作一个建议的模拟量脉冲调速装置——通过单片机来接收模拟量信号,然后根据模拟量的不同来调节输出脉冲的频率,以此来实现对伺服电机的模拟量调速控制。
要实现上述的功能,主要需要单片机进行1ADC、2脉冲输出。为了实现这两个功能,下面将简略对这两个功能进行解释并简略介绍STM32Cube的相应配置。
ADC
ADC是Analog-to-digital converter的缩写,直译为模数转换。它的作用是将模拟量(通常由电压形式表达)转换为可以数字处理的数字量的过程。
而上面提到的模拟量是指变量在一定范围连续变化的量,比如一个在0V到5V之间变化的电压。模拟量与数字量最大的区别在于模拟量是“连续的”、而数字量是“阶跃的”。一个模拟量可以从一个值连续的变为另一个值,就好像给游泳池加水的时候水面一点点的由低到高。而数字量是非连续的,它的相邻值之间存在最小的差,它的变化是阶跃的,非连续的。
对于单片机来说,其内部的运算都是数字式的,所以对于外界的模拟量必须先经过ADC将其转换为相应的数字量单片机才能进一步进行处理。
STM32单片机的ADC配置
在此以STM32F103C8T6为例:该单片机有两个ADC——ADC1,ADC2,每一个ADC又有多个通道。我们可以选择第一个ADC的第一个通道如下图(展开Analog页——选择ADC1——选中IN0)。
脉冲
脉冲的标准定义实际上一种比较广义的定义,像方波,突变的电压信号等等等都可以算作脉冲。
但在伺服控制中,脉冲特指方波信号。例如接收脉冲控制的伺服驱动器就是通过特定的IO阵脚接收外界的方波脉冲来确定伺服系统的目标位置的。对于单片机来说,产生一个脉冲的实质就是将IO的输出电平进行切换。例如GPIO的PA0引脚将电平从GND抬升到VDD然后又下拉至GND就是产生了一个脉冲信号。
STM32单片机GPIO的配置
既然我们要产生脉冲的输出,显然需要有对应的GPIO作为输出,但除了这个输出我们还需要输入引脚来引入信号以让单片机获得“正转、反转、停止”的命令。除此之外,因为涉及到电机的正反转,所以必然要使用到伺服驱动器的方向针脚,所以GPIO除了一个作为脉冲输出的输出引脚外还需要一个作为方向输出的输出引脚。
在这里我们选择PA3、PA4、PA5作为输入,其分别代表“正转”、“反转”、“停止”信号;PA6、PA7作为输出,其分别用作产生“脉冲”和“方向”信号。
我们可以在STM32Cube的Pinout view界面选择这几个引脚并根据需要选择为“GPIO_INPUT”、“GPIO_OUTPUT”如下图。
考虑到输入信号的抗干扰性(实际现场往往有干扰信号,尤其是伺服驱动器本身会产生大量的谐波和射频干扰),我们常常采用上拉/下拉电阻来增强抗干扰性。我们可以展开System Core页——选择GPIO——然后将各个GPIO进行相应的配置。在这里,我们选择将PA3、PA4、PA5配置为内部下拉——选择“Pull-down”。在下拉模式下,当没有具体输入时引脚的值将一直为0。
时钟
时钟是单片机的核心,单片机内的各种功能都是按照时钟来运行的,所以我们需要对时钟进行必要的配置。
由于在进行试验的时候使用的是STM32F103C8T6最小系统板,该电路板上装有8MHz的晶振作为外部高速时钟(HSE)。所以我们在配置时钟时先展开System Core页——选择RCC——选择HSE为“Crystal”。
STM32单片机的时钟配置
配置可以按照下图进行。
计时器
单片机内部有多个计时器,计时器在被开启后会根据配置按照计时器时钟进行加减计数,在计数达到后便可以触发特定中断。由此,通过计时器中断方式我们可以较为精确的进行特定动作。
我们要发送脉冲实际上需要考虑伺服驱动器的接收能力,如果单片机发送的脉冲频率大于驱动器的接收频率,驱动器的运行将与实际发送的脉冲偏离。所以我个人并不推荐通过函数或写寄存器的方式拉高电平后马上拉低来产生脉冲的方式。
↓这是不推荐的方式,这种方式的脉冲频率非常高,以至于伺服驱动器无法正确获得脉冲数。
HAL_GPIO_WritePin(GPIOA,GPIO_PIN_0,GPIO_PIN_SET);
HAL_GPIO_WritePin(GPIOA,GPIO_PIN_0,GPIO_PIN_RESET);
一种改进的方式是在拉高电平后通过一个延时再拉低电平。但是这种方式降低了单片机CPU的运行效率(大量用于延时的无效运算),故也是不推荐的,但是这种方式本身的确是可以正常运行的。
↓该方式亦不推荐,但伺服可以正常接收脉冲
HAL_GPIO_WritePin(GPIOA,GPIO_PIN_0,GPIO_PIN_SET);
for(int i=0;i<65530;i++);
HAL_GPIO_WritePin(GPIOA,GPIO_PIN_0,GPIO_PIN_RESET);
在此推荐的脉冲方式为通过计时器中断来产生脉冲。即配置计时器按照一定频率运行,在不需要发送脉冲时,计时器中断触发后完全不进行电平操作;而当需要发送脉冲时,计时器中断触发后进行电平反转。通过这样的方式正常产生脉冲的同时又防止了CPU的大量算力用于延时计算。
STM32单片机的计时器配置
在这里我们使用TIM4计时器,配置上展开Timers页——选择TIM4——选中“Internal Clock”来激活TIM4的进一步配置。在Parameter Setting里修改Prescaler为71,修改Counter Period为99,以产生10kHz的计时器中断。操作完成后需要在NVIC Setting内勾选计时器中断。
至此,整个前期配置就基本完成了。后续的编程思路为——计时器中断每次触发时,通过
ADC获得电位器读数,通过该读数来影响脉冲频率;当需要发送脉冲时,中断中对PA6的电平进行改变。除此之外中断中还设置有案件的判断等功能。具体程序可由下面链接下载。
ADC控制脉冲频率程序
这篇关于STM32单片机模拟量脉冲调速的STM32Cube配置的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!