在电子产品中,由于伺服电机的准确性和易用性,它们大多用于机器人项目。伺服电机尺寸较小,非常有效且节能。它们提供高扭矩,可根据电机规格来举起或推动重物。在本教程中,我们将学习伺服电动机以及 如何将伺服与STM32F103C8板连接。还连接了一个电位计以改变伺服电机轴的位置,并连接一个LCD以显示角度值。
所需组件
- STM32F103C8(Blue Pill)板
- 伺服马达(SG90)
- 液晶屏(16x2)
- 电位器
- 面包板
- 跳线
电路图和连接
SMT32F103C8引脚详细信息
在STM32F103C8中,我们有10个ADC引脚(PA0-PB1),这里我们仅使用一个引脚(PA3)作为 Analogread() 来通过电位计设置电动机的轴位置。同样在STM32的15个PWM引脚(PA0,PA1,PA2,PA3,PA6,PA7,PA8,PA9,PA10,PB0,PB1,PB6,PB7,PB8,PB9)中,一个引脚将用于向伺服提供脉冲电机的PWM引脚(通常为橙色)。
您可以通过阅读以下详细文章来了解有关PWM和ADC的更多信息:
- 如何在STM32F103C8中使用ADC
- STM32F103C8中的脉冲宽度调制(PWM)
STM32F103C8和LCD之间的连接
STM32F103C8 | 液晶屏 |
地线 | VSS |
+5伏 | VDD |
至电位计中心PIN | V0 |
PB0 | RS |
地线 | 读写器 |
PB1 | Ë |
PB10 | D4 |
PB11 | D5 |
PC13 | D6 |
PC14 | D7 |
+5伏 | 一种 |
地线 | ķ |
伺服电机与STM32F103C8之间的连接
STM32F103C8 |
伺服 |
+5伏 |
红色(+ 5V) |
PA0 |
橙色(PWM引脚) |
地线 |
棕色(GND) |
电位计连接
我们在这里使用了两个电位器
1.右边的电位器用于改变LCD的对比度。它具有三个引脚,左引脚用于+ 5V,右引脚用于GND,中心引脚连接至LCD的V0。
2.左侧的电位器用于通过控制模拟输入电压来改变伺服电机的轴位置,左侧引脚具有输入3.3V,右侧引脚具有GND,中心输出连接至STM32的(PA3)
为伺服电机编程STM32
像我们之前的教程一样,我们通过Arduino IDE通过USB端口对STM32F103C8进行了编程,而无需使用FTDI编程器。我们可以像Arduino一样进行编程。在项目结束时,下面提供了完整的代码。
首先,我们包含了用于伺服和LCD功能的库文件:
#包括
然后声明用于LCD显示的引脚并对其进行初始化。还声明了PWM和电位计的其他一些变量:
const int rs = PB0,en = PB1,d4 = PB10,d5 = PB11,d6 = PC13,d7 = PC14; LiquidCrystal LCD(rs,en,d4,d5,d6,d7); 内部伺服Pin = PA0; int potPin = PA3;
在这里,我们创建了数据类型为 Servo的 可变伺服,并将其附加到先前声明的PWM引脚上。
伺服伺服 伺服附件(servoPin);
然后从引脚PA3读取模拟值,因为它是ADC引脚,它将模拟电压(0-3.3)转换为数字形式(0-4095)
AnalogRead(potPin);
由于数字输出为12位分辨率,因此我们需要获得度数范围(0-170),它根据最大角度170度将ADC(0-4096)值除以,因此我们将其除以24。
角度=(读数/ 24);
以下陈述使伺服电机以给定角度旋转轴。
伺服。写入(角度);
完整的代码在下面给出,并通过注释进行了很好的解释。