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
    +关注

    关注

    36

    文章

    4578

    浏览量

    175836
  • 伺服马达
    +关注

    关注

    0

    文章

    24

    浏览量

    8103
  • 电路连接
    +关注

    关注

    0

    文章

    12

    浏览量

    6857
  • STM32F103C8
    +关注

    关注

    1

    文章

    23

    浏览量

    8428
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    Proteus中配置STM32外部时钟HSE如何配置

    有大佬会配置Proteus中的STM32F103C8的外部时钟吗 这个proteus中打印不出来数据,但是在实物的连接中可以正常打印 代码如下: 并且配置proteus中的虚拟串口打印波特率也是
    发表于 11-02 13:54

    创建stm32f103c8工程后为什么终端没有打印Hello RT_Thread?

    创建stm32f103c8工程后为什么终端没有打印Hello RT_Thread!,程序好像也没有下载进去
    发表于 09-26 08:24

    CherryUSB +STM32F103C8 example usb cdc device不识别是怎么回事?

    stm32f103c8t6 配置cdc,使用cubeMX 配置生成xxx_msp.c 为什么 放开 CONFIG_USBDEV_SETUP_LOG_PRINT 发现 usb 中断 一直未能进入 ____usbd_event_ep0_setup_complete_hand
    发表于 09-10 07:03

    STM32F103c8上做DLQR最优控制算法的C编程资料

    这是我近期做的一个项目--基于STM32F103c8的DLQR控制算法的C编程,涉及DLQR最优控制算法、嵌入式STM32F103编程、CM
    发表于 07-23 15:30 0次下载

    STM32F103C8出现找不到\'STM32100B_EVAL/stm32100b_eval.h\' file not found的情况,为什么?

    我是STM32新手,這幾天在創建STM32F103C8新工程時,在編譯之後都會出現 ./Libraries/STM32F103_StdPeriph_Driver/incstm32
    发表于 06-18 07:56

    STM32F103C6T6 DCAC逆变器原理图

    STM32F103C6T6 DCAC逆变器原理图
    发表于 05-19 17:48 2次下载

    stm32f103c8t6主控芯片无人机原理图

    stm32f103c8t6主控芯片无人机原理图
    发表于 04-29 17:02 2次下载

    基于STM32C8T6控制,FSR402压力传感器+oled屏幕显示代码

    基于STM32C8T6控制,FSR402压力传感器+oled屏幕显示代码
    发表于 04-14 15:06 6次下载

    STM32F103x8 STM32F103xB单片机数据手册

    STM32F103x8STM32F103xB单片机数据手册
    发表于 04-14 14:55 6次下载

    创建stm32f103c8工程后为什么终端没有打印Hello RT_Thread?

    创建stm32f103c8工程后为什么终端没有打印Hello RT_Thread!,程序好像也没有下载进去
    发表于 04-01 06:55

    STM32F103C8T6开发板最小系统原理图

    电子发烧友网站提供《STM32F103C8T6开发板最小系统原理图》资料免费下载
    发表于 03-24 09:09 83次下载

    STM32F103×8/STM32F103×B MCU手册

    本文提供了STM32F103x8STM32F103xB中密度高性能系列微控制器的订购信息和机械器件特性。有关整个STMicroelectronics STM32F103xx系列的更
    发表于 03-18 16:37 0次下载

    STM32F103C8T6 PA2无PWM输出怎么解决?

    STM32F103C8T6最小系统PA0/PA1/PA2/PA3为PWM输出控制舵机,配置相同,PA2始终无输出,PA0/PA1/PA3输出正常;试验软件对STM32F103C8T6
    发表于 02-27 08:13

    基于STM32F103V8T6的智能水处理系统设计与实现

    基于 STM32F103V8T6 的智能水处理装置设计 摘要 : 本文基于 STM32F103V8T6 微控制器,设计并实现了一款智能水处理装置。该装置集多种传感器与电源管理模块于一体,具有精准采集
    的头像 发表于 02-19 14:16 1153次阅读
    基于<b class='flag-5'>STM32F103V8</b>T6的智能水处理系统设计与实现

    基于STM32F103C8T6 ADXL345 加速度传感器的计步器设计指南和代码

    基于 STM32F103C8T6 微控制器和 ADXL345 加速度传感器的计步器设计相关内容,包括 ADXL345 传感器的工作原理、初始化与数据读写操作,以及基于该传感器的计步器算法实现
    的头像 发表于 01-17 17:38 2676次阅读