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

    文章

    4411

    浏览量

    167034
  • 伺服马达
    +关注

    关注

    0

    文章

    21

    浏览量

    7699
  • 电路连接
    +关注

    关注

    0

    文章

    10

    浏览量

    6667
  • STM32F103C8
    +关注

    关注

    1

    文章

    23

    浏览量

    8073
收藏 人收藏

    评论

    相关推荐

    STM32F103×8/STM32F103×B MCU手册

    需要确定系统时钟源,如使用HSE或HSI,然后配置PLL倍增因子以获得所需的系统时钟频率。这通常通过修改RCC(复位与时钟控制)寄存器来完成,并可以在STM32CubeMX或标准外设库/HAL库中轻松设置。2. Q: 为什么STM32F
    发表于 11-18 15:14 0次下载

    19.4-STM32接收数据-状态显示在屏幕 openMV寻迹与小车控制 Openmv+STM32F103C8T6视觉巡线小车

    19.4-STM32接收数据-状态显示在屏幕 openMV寻迹与小车控制 Openmv+STM32F103C8T6视觉巡线小车
    的头像 发表于 08-20 11:12 768次阅读
    19.4-<b class='flag-5'>STM32</b>接收数据-状态显示在屏幕 openMV寻迹与小车<b class='flag-5'>控制</b> Openmv+<b class='flag-5'>STM32F103C8</b>T6视觉巡线小车

    STMC32F103C8T6核心板原理图

    STM32F103C8T6原理图
    发表于 07-15 11:47 3次下载

    STM32为什么首选F103C8T6?

    STM32F103C8T6是STMicroelectronics(ST)推出的一款基于ARMCortex-M3内核的32位微控制器单片机(MCU)。它具有一系列优势和广泛的应用场景。这里就来介绍一下
    的头像 发表于 05-18 08:04 4689次阅读
    学<b class='flag-5'>STM32</b>为什么首选<b class='flag-5'>F103C8</b>T6?

    STM32f103c8板子不能多次下载程序的原因?

    STM32f103c8 做的开发,第一次尝试用stm32cubemx 图形化做片子的一些初始化,按照教程把所有东西配置完之后,下载到片子里边,程序是正常执行了,灯的闪烁,常亮什么的都很
    发表于 04-28 08:14

    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下载程序过程中中断,然后上电运行MCU,此时MCU在跑哪一段代码

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

    USB转TTL线怎么把程序烧写到stm32f103C8T6中

    USB转TTL线怎么把程序烧写到stm32f103C8T6中  将程序烧写到STM32F103C8T6芯片中需要使用USB转TTL线连接计算机和开发板,并使用适当的软件来进行编程和烧
    的头像 发表于 01-31 15:46 7024次阅读

    stm32f103c8t6读内部温度

    STM32F103C8T6是一款32位的Cortex-M3内核微控制器,它拥有丰富的外设资源和强大的计算能力,可以广泛应用于各种嵌入式系统中。其中一个重要的功能是能够使用内部传感器来读取芯片的温度
    的头像 发表于 01-08 13:48 3439次阅读

    stm32f103c8t6怎么连接噪声传感器

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

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

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

    在GD32F103移植STM32F103代码

    使用相同FLASH和管脚数量相同的芯片,例如GDF103C8T6移植STM32F103C8T6程序。虽然两个款芯片的寄存器地址以及架构基本相同。但是需要注意的是GD32F10x主频是108兆,但是
    的头像 发表于 12-15 13:37 1580次阅读
    在GD32<b class='flag-5'>F103</b>移植<b class='flag-5'>STM32F103</b><b class='flag-5'>代码</b>