当前位置:网站首页>Stm32f103c8t6 PWM drive steering gear (sg90)
Stm32f103c8t6 PWM drive steering gear (sg90)
2022-07-07 15:06:00 【Related to the sun_】
Little knowledge : Same timer , Different channel outputs different outputs PWM Characteristics .
For different channel outputs of the same timer PWM, Because they share a counter , therefore frequency
It has to be the same , and Duty cycle
By their own CCR
decision , It can be set separately . also , phase
Due to counter update , all PWM Will jump at the same time , So the phase is synchronous .
If you use 1 A timer controls multiple steering gears or DC motors , Use different channels of the same timer PWM, That's fine .
TIM_OC1Init(TIM2,&TIM_OCInitStructure);
TIM_OC2Init(TIM2,&TIM_OCInitStructure);
TIM_OC3Init(TIM2,&TIM_OCInitStructure);
TIM_OC4Init(TIM2,&TIM_OCInitStructure);
Code :
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); // Turn on timer 2
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);// passageway 2 Clock enable function
GPIO_InitTypeDef GPIO_InitStructure; // Definition GPIO Initializing structure variables
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; // Set up GPIO For push-pull output mode
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; // The speed is set to 50MHz
GPIO_Init(GPIOA, &GPIO_InitStructure); // Proceed according to the above parameters GPIO The initialization
TIM_InternalClockConfig(TIM2);//TIM The time base unit of is controlled by the internal clock
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 The value of the automatic reloader
TIM_TimeBaseInitStructure.TIM_Prescaler = 72 - 1; //PSC Prescaler value Yes 72M(720000000) Conduct 7200 frequency division namely 10K At different frequencies meter 10000 Number 1s Time for
TIM_TimeBaseInitStructure.TIM_RepetitionCounter = 0;// Repeat counter value
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;// Output polarity selection
TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;// Output status enable
TIM_OCInitStructure.TIM_Pulse = 0;//CCR, That is, the duty cycle is 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; // Steering 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);// Show the angle on the screen
}
}
What happened :
Changed a steering gear , Then use the oscilloscope to measure that the pin is
Wave
Of , But the steering gear isImmobility
. Later it was found thatvoltage
Not enough .
Work hard , Grow slowly
边栏推荐
- Andriod --- JetPack :LiveData setValue 和 postValue 的区别
- CPU与chiplet技术杂谈
- CTFshow,信息搜集:web14
- Emqx 5.0 release: open source Internet of things message server with single cluster supporting 100million mqtt connections
- MySQL bit类型解析
- @Introduction and three usages of controlleradvice
- CTFshow,信息搜集:web5
- A need to review all the knowledge, H5 form is blocked by the keyboard, event agent, event delegation
- CTFshow,信息搜集:web7
- 时空可变形卷积用于压缩视频质量增强(STDF)
猜你喜欢
CTFshow,信息搜集:web8
【服务器数据恢复】戴尔某型号服务器raid故障的数据恢复案例
Unity之ASE实现卡通火焰
⼀个对象从加载到JVM,再到被GC清除,都经历了什么过程?
智汀不用Home Assistant让小米智能家居接入HomeKit
Discussion on CPU and chiplet Technology
安恒堡垒机如何启用Radius双因素/双因子(2FA)身份认证
CTFshow,信息搜集:web2
Niuke real problem programming - Day11
[server data recovery] a case of RAID data recovery of a brand StorageWorks server
随机推荐
[server data recovery] data recovery case of raid failure of a Dell server
MySQL installation configuration 2021 in Windows Environment
Xiaomi's path of chip self-development
数据库如何进行动态自定义排序?
Unity之ASE实现卡通火焰
Concurrency Control & NoSQL and new database
Spatiotemporal deformable convolution for compressed video quality enhancement (STDF)
Cocoscreator operates spine for animation fusion
CTFshow,信息搜集:web7
What are PV and UV? pv、uv
How bad can a programmer be? Nima, they are all talents
简述keepalived工作原理
用于增强压缩视频质量的可变形卷积密集网络
Ctfshow, information collection: web13
JSON解析实例(Qt含源码)
Ctfshow, information collection: web1
Delete a whole page in word
Novel Slot Detection: A Benchmark for Discovering Unknown Slot Types in the Dialogue System
Navigation — 这么好用的导航框架你确定不来看看?
Classification of regression tests