0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

用STM32F103C8控制伺服马达的电路连接及代码说明

芯情观察猿 来源:芯情观察猿 作者:芯情观察猿 2022-07-04 10:28 次阅读

伺服马达(Servo motor)凭准确、小型、高效,易用在机器人领域应用广泛,其高扭矩特性非常适合升降重物。本项目用电位器改变马达转子位置,用STM32F103C8(蓝丸)控制伺服马达,用LCD显示角度值。

项目BOM表及电路连接

项目BOM表如下:

1、STM32F103C8蓝丸板 x1

2、伺服马达(SG90) x1

3、LCD(16x2) x1

4、电位器 x2

5、面包板 x1

6、跳线 若干


pYYBAGLCUFKAP7dRAACkYYRGUkM70.jpeg?source=d16d100b

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引脚(该引脚通常带有颜色)提供脉冲信号

STM32F103C8与LCD的连接如下:

STM32F103C8 LCD

GND VSS

+5V VDD

电位器中心PIN V0

PB0 RS

GND RW

PB1 E

PB10 D4

PB11 D5

PC13 D6

PC14 D7

+5V A

GND K


伺服马达与STM32F103C8的连接如下:

STM32F103C8 伺服马达

+5V RED (+5V)

PA0 ORANGE (PWM pin)

GND BROWN (GND)


poYBAGLCUFKAe1HgAAC4_QBAFKY58.jpeg?source=d16d100b

本项目使用两个电位器:

(1)右边的用来改变LCD对比度。左边接5V电源,右边接地,中间引脚与LCD的V0连接。

(2)左边的用来模拟输入电压的大小,以改变伺服马达转子的位置。左边引脚接3.3V电源,右边接地,中间连接与的STM32板子的PA3引脚。

编程及代码说明

如果电脑安装了Arduino IDE,连接上USB接口,就可以像使用Arduino一样,对STM32F103C8进行编程了,无须使用FTDI编程器。


首先,载入马达和LCD函数:

#include

#include


其次,声明LCD显示器引脚并初始化。同时还要声明其他几个用于PWM和电位器的变量:

const int rs = PB0, en = PB1, d4 = PB10 , d5 = PB11 , d6 = PC13, d7 = PC14;

LiquidCrystal lcd(rs,en,d4,d5,d6,d7);

int servoPin = PA0;

int potPin = PA3;


这里,我们创建了伺服变量,并将其赋予前述声明的PWM引脚。

Servo servo;

servo.attach(servoPin);


然后,从ADC引脚——PA3读取模拟值,将模拟电压(0-3.3)转换成数字形式(0-4095)。

analogRead(potPin);

该ADC为12位,我们需要获得的0-170模拟值,要将其均分为(0-4096)数字形式。

angle = (reading/24);


下面指令使伺服马达以给定的角度旋转转轴:

servo.write(angle);

完整的代码如下:

//INTERFACE SERVO WITH STM32

//CIRCUIT DIGEST

#include //including servo library

#include //including LCD display library

const int rs = PB0, en = PB1, d4 = PB10 , d5 = PB11 , d6 = PC13, d7 = PC14; //declaring pin names and pin numbers of lcd

LiquidCrystal lcd(rs,en,d4,d5,d6,d7);//setting lcd and its paramaters

int servoPin = PA0; //declare and initialize pin for servo output PWM

int potPin = PA3; //potentiometer ADC input

Servo servo; // creating variable servo with datatype Servo

void setup()

{

lcd.begin(16,2); //setting lcd as 16x2

lcd.setCursor(0,0); //setting cursor at first row and first column

lcd.print("CIRCUIT DIGEST"); //puts CIRCUIT DIGEST in LCD

lcd.setCursor(0,1); //setting cursor at second row and first column

lcd.print("SERVO WITH STM32"); //puts SERVO WITH STM32 in LCD

delay(3000); // delays for 3 seconds

lcd.clear(); //clears lcd display

servo.attach(servoPin); //it connects pin PA0 with motor as control feedback by providing pulses

}

void loop()

{

lcd.clear(); //clears lcd

int angle; //declare varible angle as int

int reading; //declare varible reading as int

reading = analogRead(potPin); //read analog value from pin PA3

angle = (reading/24); //it divides ADC the value according to max angle 170 deg

servo.write(angle); //it puts angle value at servo

lcd.setCursor(0,0); //setting cursor at first row and first column

lcd.print("ANGLE:"); //puts ANGLE in LCD

lcd.print(angle); //puts value at angle

delay(100); //delay in time

审核编辑:汤梓红
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • lcd
    lcd
    +关注

    关注

    34

    文章

    4278

    浏览量

    164097
  • 伺服马达
    +关注

    关注

    0

    文章

    17

    浏览量

    7517
  • 电路连接
    +关注

    关注

    0

    文章

    8

    浏览量

    6642
  • STM32F103C8
    +关注

    关注

    1

    文章

    23

    浏览量

    8012
收藏 人收藏

    评论

    相关推荐

    STM32F103C8cubemx创建工程开启RTC则USB不正常是哪里的问题?

    STM32F103C8cubemx创建工程,开启USB存储器、fatfs、freertos,默认编译后可以发现U盘,PC13灯闪烁(freertos的任务)如果开启RTC,则不能设别设备,PC13的灯也不闪,请帮我看看问题在哪?
    发表于 04-24 07:31

    请问STM32F103C8如何做成USB转SPI的接口芯片?

    STM32F103C8如何做成USB转SPI的接口芯片?
    发表于 04-23 08:01

    STM32F103C8使用CUBEMX5.2,生成的USB HID工程编译出错怎么解决?

    STM32F103C8使用CUBEMX5.2,选择Custom Human Interface Device Class(HID),生成工程后直接编译尽然有错误在usbd_conf.c里有这么一个
    发表于 04-22 06:45

    为什么我程序都能下载到stm32f103zet6上,却不能下载到stm32f103c8上?

    为何我程序都能下载到stm32f103zet6上,却不能下载到stm32f103c8上?需要改变什么配置吗?
    发表于 04-17 06:42

    STM32F103C8 UART1, I2C1, CAN冲突问题怎么解决?

    ST芯片型号: STM32F103C8T6 PB7,PB6用于UART1 PB8,PB9用于做CAN. 问题:I2C1_REMAP关闭,影响PB7,PB6的UART1功能,导致UART1不能发送
    发表于 04-08 08:10

    ST-LINK烧录STM32F103C8T6程序,烧录程序就会出现无法连接的情况是为什么?

    请教一个古老的问题.我ST-LINK烧录一个STM32F103C8T6的程序,并设置了烧录完成自动运行,程序开始跑了。然后在中途过程中,如果我再烧录程序就会出现无法连接,必须手动按下复位键(不松
    发表于 04-07 07:44

    STM32F103C8下载程序过程中中断,然后上电运行MCU,此时MCU在跑哪一段代码

    STM32F103C8下载程序过程中中断,然后上电运行MCU,此时,MCU在跑哪一段代码?有哪些外设在工作?多谢
    发表于 03-29 08:05

    使用CubeMX生成STM32F103C8T6的DMA ADC代码为什么无效?

    请问各位,我使用CubeMX生成STM32F103C8T6的DMA ADC代码,工程配置请看附件,我运行如下代码为什么无效: /* USER CODE BEGIN Includes
    发表于 03-29 06:08

    STM32F103C8T6 SPI从机发送数据错误的原因?

    主机的是STM32F103C8T6,SPI1,从机的是STM32F051C8T6,SPI2,全双工,数据位为8位,发送的数据本来应该是主
    发表于 03-11 08:24

    STM32F302C8T6 USB断开连接代码停止运行是怎么回事?如何解决?

    STM32F302C8T6 USB断开连接代码停止运行
    发表于 03-08 07:34

    stm32f103c8t6怎么连接噪声传感器

    连接噪声传感器到STM32F103C8T6需要以下步骤: 确定传感器和STM32F103C8T6之间的连接接口。噪声传感器通常使用模拟信号输出,可以将其
    的头像 发表于 12-21 16:10 531次阅读

    2片AD7794能否直接和STM32F103C8的SPI口直接相连?

    ADI专家,求助关于AD7794的应用问题,用于采集热电偶信号的。 1、有没有AD7794的应用参考电路? 2、2片AD7794能否直接和STM32F103C8的SPI口直接相连?(SCLK
    发表于 12-21 06:29

    STM32F103xC, STM32F103xD, STM32F103xE介绍

    、三个SPI、两个I2S、一个SDIO、五个USART、一个USB和一个可以。 STM32F103xx高密度性能生产线系列在-40至+105°C温度下运行温度范围,从2.0到3.6伏的电源。一套全面
    发表于 10-10 08:04

    史上最全STM32F103封装资料

    STM32F103C6T6,STM32F103C8T6,STM32F103CBT6,STM32F103R6T6,STM32F103R8T6,
    发表于 09-27 08:17

    什么是伺服马达?DC伺服马达与AC伺服马达比较

      伺服马达在驱动时由于负载的关系而产生扭矩的缘故,使得流进马达的电流增大,一旦流进马达的电流过大时会造成马达烧毁的情形。为防止此一情形发生
    发表于 05-04 12:47 1325次阅读
    什么是<b class='flag-5'>伺服</b><b class='flag-5'>马达</b>?DC<b class='flag-5'>伺服</b><b class='flag-5'>马达</b>与AC<b class='flag-5'>伺服</b><b class='flag-5'>马达</b>比较