当前位置:网站首页>[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 isB1
Pin 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
边栏推荐
- A laravel background management expansion package you can't miss - Voyager
- Data Lake (IX): Iceberg features and data types
- Full details of efficientnet model
- FFmpeg----图片处理
- Ctfshow, information collection: web14
- MySQL installation configuration 2021 in Windows Environment
- Guangzhou Development Zone enables geographical indication products to help rural revitalization
- Niuke real problem programming - day15
- Navigation - are you sure you want to take a look at such an easy-to-use navigation framework?
- Ffmpeg --- image processing
猜你喜欢
Navigation - are you sure you want to take a look at such an easy-to-use navigation framework?
安恒堡垒机如何启用Radius双因素/双因子(2FA)身份认证
Xiaomi's path of chip self-development
【OBS】RTMPSockBuf_Fill, remote host closed connection.
CTFshow,信息搜集:web3
CTFshow,信息搜集:web14
Niuke real problem programming - day15
With 8 modules and 40 thinking models, you can break the shackles of thinking and meet the thinking needs of different stages and scenes of your work. Collect it quickly and learn it slowly
Promoted to P8 successfully in the first half of the year, and bought a villa!
Data Lake (IX): Iceberg features and data types
随机推荐
Webrtc audio anti weak network technology (Part 1)
CTFshow,信息搜集:web12
JSON parsing instance (QT including source code)
Ascend 910 realizes tensorflow1.15 to realize the Minist handwritten digit recognition of lenet network
Infinite innovation in cloud "vision" | the 2022 Alibaba cloud live summit was officially launched
@ComponentScan
[understanding of opportunity -40]: direction, rules, choice, effort, fairness, cognition, ability, action, read the five layers of perception of 3GPP 6G white paper
CTFshow,信息搜集:web7
Niuke real problem programming - Day10
leetcode:648. Word replacement [dictionary tree board + find the shortest matching prefix among several prefixes]
Es log error appreciation -- allow delete
[server data recovery] a case of RAID data recovery of a brand StorageWorks server
Today's sleep quality record 78 points
CTFshow,信息搜集:web2
Deformable convolutional dense network for enhancing compressed video quality
【OBS】RTMPSockBuf_Fill, remote host closed connection.
Ctfshow, information collection: web12
拜拜了,大厂!今天我就要去厂里
How does the database perform dynamic custom sorting?
【數據挖掘】視覺模式挖掘:Hog特征+餘弦相似度/k-means聚類