当前位置:网站首页>[follow Jiangke University STM32] stm32f103c8t6_ PWM controlled DC motor_ code
[follow Jiangke University STM32] stm32f103c8t6_ PWM controlled DC motor_ code
2022-07-07 15:06:00 【Related to the sun_】

Code :
PWM.h
#ifndef __PWM_H
#define __PWM_H
void PWM_Init();
void PWM_SetCompare3(uint16_t Compare);
#endif
Inside the motor Coil and magnet , So in PWM Driven by , The buzzer will sound
When the SCM is set PWM When the frequency is within the range that our human ears can receive , We press and hold the rotating motor , You will hear an obvious buzzing ( The sound of buzzer )
Methods of elimination : enlarge PWM frequency , When PWM When the frequency is large enough , Beyond the scope of human ears , I can't hear it .Reduce prescaler , This will not affect the duty cycle
The radio frequency range of the human ear :20Hz To 20kHz.
It is amended as follows :TIM_TimeBaseInitStructure.TIM_Prescaler =36- 1; // The frequency changes to 20kHz
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_2;
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 = 100 - 1; //ARR The value of the automatic reloader
TIM_TimeBaseInitStructure.TIM_Prescaler = 720 - 1; //PSC Prescaler value Yes 72M(720000000) Conduct 720 frequency division namely 1K At different frequencies meter 1000 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 = 10;//CCR, That is, the duty cycle is 10%
TIM_OC3Init(TIM2,&TIM_OCInitStructure);
TIM_Cmd(TIM2,ENABLE);
}
void PWM_SetCompare3(uint16_t Compare)
{
TIM_SetCompare3(TIM2, Compare);
}
Motor.h
#ifndef __MOTOR_H
#define __MOTOR_H
void Motor_Init();
void Motor_SetSpeed(int8_t Speed);
#endif
Motor.c
#include "stm32f10x.h" // Device header
#include "PWM.h"
void Motor_Init()
{
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_Out_PP ; // Set up GPIO For push-pull output mode
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4|GPIO_Pin_5;// Motor direction control foot
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
PWM_Init();
}
void Motor_SetSpeed(int8_t Speed)
{
if(Speed >= 0) // Positive rotation ( Turn clockwise )
{
GPIO_SetBits(GPIOA, GPIO_Pin_4);
GPIO_ResetBits(GPIOA, GPIO_Pin_5);
PWM_SetCompare3(Speed);
}
else// reverse ( Turn counter clockwise )
{
GPIO_ResetBits(GPIOA, GPIO_Pin_4);
GPIO_SetBits(GPIOA, GPIO_Pin_5);
PWM_SetCompare3(-Speed);
}
}
main.c
Press the key to control the motor speed
Code here shows KeyNum = Key_GetNum(); What you get isB1Pin value , So I put the button on this foot .
#include "stm32f10x.h" // Device header
#include "Delay.h"
#include "LED.h"
#include "Key.h"
#include "OLED.H"
#include "Motor.H"
uint8_t KeyNum,Speed;;
int main(void)
{
OLED_Init();
Motor_Init();
Key_Init();
OLED_ShowString(1,1,"Speed:");
while (1)
{
KeyNum = Key_GetNum();
if(KeyNum == 1)
{
Speed += 20;
if(Speed > 100)
{
Speed = -100;
}
}
Motor_SetSpeed(Speed);
OLED_ShowNum(1,7,Speed,3);
}
}
Work hard Grow slowly
边栏推荐
- Niuke real problem programming - Day11
- Niuke real problem programming - day20
- A laravel background management expansion package you can't miss - Voyager
- Protection strategy of server area based on Firewall
- 暑期安全很重要!应急安全教育走进幼儿园
- What is the process of ⼀ objects from loading into JVM to being cleared by GC?
- What are PV and UV? pv、uv
- Lidar Knowledge Drop
- Stm32cubemx, 68 sets of components, following 10 open source protocols
- Concurrency Control & NoSQL and new database
猜你喜欢

Niuke real problem programming - Day10

Introduction and use of Kitti dataset

【深度学习】语义分割实验:Unet网络/MSRC2数据集

CTFshow,信息搜集:web7

“百度杯”CTF比赛 2017 二月场,Web:include

Wechat applet - Advanced chapter component packaging - Implementation of icon component (I)

【數據挖掘】視覺模式挖掘:Hog特征+餘弦相似度/k-means聚類
![leetcode:648. Word replacement [dictionary tree board + find the shortest matching prefix among several prefixes]](/img/3e/cdde4b436821af8700eb65d35e8f59.png)
leetcode:648. Word replacement [dictionary tree board + find the shortest matching prefix among several prefixes]

Navigation — 这么好用的导航框架你确定不来看看?

Novel Slot Detection: A Benchmark for Discovering Unknown Slot Types in the Dialogue System
随机推荐
CTFshow,信息搜集:web9
Niuke real problem programming - day20
IDA pro逆向工具寻找socket server的IP和port
Why do we use UTF-8 encoding?
Read PG in data warehouse in one article_ stat
【服务器数据恢复】某品牌StorageWorks服务器raid数据恢复案例
Stream learning notes
Protection strategy of server area based on Firewall
Zhiting doesn't use home assistant to connect Xiaomi smart home to homekit
激光雷達lidar知識點滴
#yyds干货盘点# 解决名企真题:交叉线
In the field of software engineering, we have been doing scientific research for ten years!
6. Electron borderless window and transparent window lock mode setting window icon
asp. Netnba information management system VS development SQLSERVER database web structure c programming computer web page source code project detailed design
Niuke real problem programming - Day17
@Introduction and three usages of controlleradvice
Bye, Dachang! I'm going to the factory today
A laravel background management expansion package you can't miss - Voyager
Compile advanced notes
CTFshow,信息搜集:web10
