当前位置:网站首页>STM32F103C8T6 PWM驱动舵机(SG90)
STM32F103C8T6 PWM驱动舵机(SG90)
2022-07-07 13:02:00 【与太阳有关_】
小知识:同一个定时器,不同通道输出不同输出PWM的特点。
对于同一个定时器的不同通道输出PWM,因为它们是共用一个计数器的,所以频率
必须一样,而占空比
由各自的CCR
决定,可以各自设定。还有,相位
由于计数器更新,所有PWM会同时跳变,所以相位是同步的。
若是使用1个定时器控制多个舵机或者直流电机,则使用同一个定时器不同通道的PWM,就完全可以了。
TIM_OC1Init(TIM2,&TIM_OCInitStructure);
TIM_OC2Init(TIM2,&TIM_OCInitStructure);
TIM_OC3Init(TIM2,&TIM_OCInitStructure);
TIM_OC4Init(TIM2,&TIM_OCInitStructure);
代码:
PWM.h
#ifndef __PWM_H
#define __PWM_H
void PWM_Init();
void PWM_SetCompare2(uint16_t Compare);
#endif
PWM.c
#include "stm32f10x.h" // Device header
void PWM_Init()
{
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,ENABLE); //开启定时器2
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);//通道2时钟使能函数
GPIO_InitTypeDef GPIO_InitStructure; //定义GPIO初始化结构体变量
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //设置GPIO为推挽输出模式
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //速度设置为 50MHz
GPIO_Init(GPIOA, &GPIO_InitStructure); //按照以上参数进行 GPIO的初始化
TIM_InternalClockConfig(TIM2);//TIM的时基单元由内部时钟控制
TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure;
TIM_TimeBaseInitStructure.TIM_ClockDivision = TIM_CKD_DIV1;
TIM_TimeBaseInitStructure.TIM_CounterMode = TIM_CounterMode_Up;
TIM_TimeBaseInitStructure.TIM_Period = 20000 - 1; //ARR 自动重装器的值
TIM_TimeBaseInitStructure.TIM_Prescaler = 72 - 1; //PSC 预分频器的值 对72M(720000000)进行 7200分频 即10K的频率下 计10000个数 1s的时间
TIM_TimeBaseInitStructure.TIM_RepetitionCounter = 0;//重复计数器的值
TIM_TimeBaseInit(TIM2,&TIM_TimeBaseInitStructure);
TIM_OCInitTypeDef TIM_OCInitStructure;
TIM_OCStructInit(&TIM_OCInitStructure);
TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;
TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;//输出极性选择
TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;//输出状态使能
TIM_OCInitStructure.TIM_Pulse = 0;//CCR,即占空比为 10%
TIM_OC2Init(TIM2,&TIM_OCInitStructure);
TIM_Cmd(TIM2,ENABLE);
}
void PWM_SetCompare2(uint16_t Compare)
{
TIM_SetCompare2(TIM2, Compare);
}
Serco.h
#ifndef __Servo_H
#define __Servo_H
void Servo_Init(void);
void Servo_SetAngle(float Angle);
#endif
Servo.c
#include "stm32f10x.h" // Device header
#include "PWM.H"
void Servo_Init(void)
{
PWM_Init();
}
void Servo_SetAngle(float Angle)
{
PWM_SetCompare2(Angle / 180 * 2000 +500);
}
main.c
#include "stm32f10x.h" // Device header
#include "Delay.h"
#include "LED.h"
#include "Key.h"
#include "OLED.H"
#include "Servo.H"
uint8_t KeyNum;
float Angle; //舵机角度
int main(void)
{
OLED_Init();
Servo_Init();
Key_Init();
OLED_ShowString(1,1,"Angle:");
while (1)
{
KeyNum = Key_GetNum();
if(KeyNum == 1)
{
Angle +=30;
if(Angle > 180)
{
Angle = 0;
}
}
Servo_SetAngle(Angle);
OLED_ShowNum(1,7,Angle,3);//在屏幕上显示角度
}
}
出现的问题:
换了个舵机,然后用示波器测引脚上是
有波
的,但是舵机就是不动
。后来发现是电压
给得不够。
好好努力,慢慢成长
边栏推荐
- Niuke real problem programming - Day9
- 知否|两大风控最重要指标与客群好坏的关系分析
- Ctfshow, information collection: web8
- C# 6.0 语言规范获批
- Integer learning
- CTFshow,信息搜集:web2
- How to enable radius two factor / two factor (2fa) identity authentication for Anheng fortress machine
- Simple steps for modifying IP of sigang electronic scale
- WebRTC 音频抗弱网技术(上)
- Niuke real problem programming - day20
猜你喜欢
【数据挖掘】视觉模式挖掘:Hog特征+余弦相似度/k-means聚类
Computer win7 system desktop icon is too large, how to turn it down
Promoted to P8 successfully in the first half of the year, and bought a villa!
数学建模——什么是数学建模
拼多多败诉,砍价始终差0.9%一案宣判;微信内测同一手机号可注册两个账号功能;2022年度菲尔兹奖公布|极客头条...
Niuke real problem programming - day18
Niuke real problem programming - Day11
Used by Jetson AgX Orin canfd
[Yugong series] go teaching course 005 variables in July 2022
How bad can a programmer be? Nima, they are all talents
随机推荐
Niuke real problem programming - day13
什么是pv和uv? pv、uv
[understanding of opportunity -40]: direction, rules, choice, effort, fairness, cognition, ability, action, read the five layers of perception of 3GPP 6G white paper
Summary on adding content of background dynamic template builder usage
The method of parsing PHP to jump out of the loop and the difference between continue, break and exit
Ctfshow, information collection: web10
【深度学习】语义分割实验:Unet网络/MSRC2数据集
PG basics -- Logical Structure Management (locking mechanism -- table lock)
Cocoscreator resource encryption and decryption
word中删除一整页
⼀个对象从加载到JVM,再到被GC清除,都经历了什么过程?
Read PG in data warehouse in one article_ stat
Webrtc audio anti weak network technology (Part 1)
13 ux/ui/ue best creative inspiration websites in 2022
拼多多败诉,砍价始终差0.9%一案宣判;微信内测同一手机号可注册两个账号功能;2022年度菲尔兹奖公布|极客头条...
Comparable and comparator of sorting
MySQL bit类型解析
Guangzhou Development Zone enables geographical indication products to help rural revitalization
Notes HCIA
Simple steps for modifying IP of sigang electronic scale