当前位置:网站首页>[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
边栏推荐
- 激光雷达lidar知识点滴
- Guangzhou Development Zone enables geographical indication products to help rural revitalization
- Shengteng experience officer Episode 5 notes I
- 暑期安全很重要!应急安全教育走进幼儿园
- 知否|两大风控最重要指标与客群好坏的关系分析
- PG basics -- Logical Structure Management (locking mechanism -- table lock)
- Ctfshow, information collection: web14
- How to enable radius two factor / two factor (2fa) identity authentication for Anheng fortress machine
- 6. Electron borderless window and transparent window lock mode setting window icon
- ⼀个对象从加载到JVM,再到被GC清除,都经历了什么过程?
猜你喜欢
Computer win7 system desktop icon is too large, how to turn it down
Niuke real problem programming - Day17
⼀个对象从加载到JVM,再到被GC清除,都经历了什么过程?
【数据挖掘】视觉模式挖掘:Hog特征+余弦相似度/k-means聚类
Ctfshow, information collection: web14
C 6.0 language specification approved
How bad can a programmer be? Nima, they are all talents
Introduction and use of Kitti dataset
Navigation — 这么好用的导航框架你确定不来看看?
暑期安全很重要!应急安全教育走进幼儿园
随机推荐
Mathematical modeling -- what is mathematical modeling
Comparable and comparator of sorting
Ctfshow, information collection: web10
Ascend 910 realizes tensorflow1.15 to realize the Minist handwritten digit recognition of lenet network
Computer win7 system desktop icon is too large, how to turn it down
JSON解析实例(Qt含源码)
Ctfshow, information collection: web14
Deformable convolutional dense network for enhancing compressed video quality
[server data recovery] data recovery case of raid failure of a Dell server
2022年5月互联网医疗领域月度观察
防火墙基础之服务器区的防护策略
暑期安全很重要!应急安全教育走进幼儿园
Introduction and use of Kitti dataset
JSON parsing instance (QT including source code)
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
Compile advanced notes
A laravel background management expansion package you can't miss - Voyager
What is cloud primordial? This time, I can finally understand!
Discussion on CPU and chiplet Technology
⼀个对象从加载到JVM,再到被GC清除,都经历了什么过程?