欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136
標(biāo)題:
stm32 PWM調(diào)速電機(jī)控制源碼
[打印本頁]
作者:
DoubleM
時間:
2017-8-10 15:03
標(biāo)題:
stm32 PWM調(diào)速電機(jī)控制源碼
/**********************************************************************************
** 紅龍開發(fā)板
** 實驗名: 紅龍板_基定時器(帶視頻)
** KEIL MDK-ARM Standard Version:4.11
** 軟件庫(keil) Version: unused
** 固件庫(ST) Version: V3.5
** 使用外設(shè): 基定時器
**********************************************************************************/
程序測試說明: #define TEST_1 TEST_1 LED燈測試
#define TEST_2 TEST_2 按鍵測試
LED 測試說明:注釋掉 TEST_2 按鍵測試 //#define TEST_2
初始化系統(tǒng)時鐘
LED燈的IO口初始化
測試現(xiàn)象: JLINK下載運(yùn)行后,三個LED燈輪番閃爍。
-----------------------------------------------------------------------------------
TIM 測試說明:TIM定時器定時點燈(高級定時器TIM1,通用定時器TIM2 均可設(shè)置,
其他定時器以此為例,均能快速掌握)
步驟:初始化系統(tǒng)時鐘
中斷初始化
TIM初始化
注意:中斷使能(NVIC)
中斷函數(shù)調(diào)用(STM32F10X_IT.C)
實驗現(xiàn)象:
JLINK下載運(yùn)行后
軟件:定時時間到,發(fā)生一次更新事件Update;
硬件:LED1燈按設(shè)置閃爍。打開和關(guān)閉LED3由亮漸滅控制。
/********************************************************************************************
*函數(shù)名稱:void RCC_Configuration(void)
*功能說明:系統(tǒng)時鐘初始化配置
* RCC_HSICmd(ENABLE);//使能內(nèi)部高速晶振 ;
* RCC_SYSCLKConfig(RCC_SYSCLKSource_HSI);//選擇內(nèi)部高速時鐘作為系統(tǒng)時鐘SYSCLOCK=8MHZ
* RCC_HCLKConfig(RCC_SYSCLK_Div1); //選擇HCLK時鐘源為系統(tǒng)時鐘SYYSCLOCK
* RCC_PCLK1Config(RCC_HCLK_Div4); //APB1時鐘為2M
* RCC_PCLK2Config(RCC_HCLK_Div4); //APB2時鐘為2M
* RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB , ENABLE);//使能APB2外設(shè)GPIOB時鐘
*******************************************************************************************/
void RCC_Configuration(void);
void RCC_Configuration(void)
{
/* RCC system reset(for debug purpose) */
RCC_DeInit();
/* Enable HSE */
RCC_HSEConfig(RCC_HSE_ON);
/* Wait till HSE is ready */
while (RCC_GetFlagStatus(RCC_FLAG_HSERDY) == RESET);
/* Enable Prefetch Buffer */
FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);
/* Flash 2 wait state */
FLASH_SetLatency(FLASH_Latency_2);
/* HCLK = SYSCLK */
RCC_HCLKConfig(RCC_SYSCLK_Div1);
/* PCLK2 = HCLK */
RCC_PCLK2Config(RCC_HCLK_Div1);
/* PCLK1 = HCLK/2 */
RCC_PCLK1Config(RCC_HCLK_Div2);
/* PLLCLK = 8MHz * 9 = 72 MHz */
RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_9);
/* Enable PLL */
RCC_PLLCmd(ENABLE);
/* Wait till PLL is ready */
while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET);
/* Select PLL as system clock source */
RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);
/* Wait till PLL is used as system clock source */
while(RCC_GetSYSCLKSource() != 0x08);
}
#define GPIO_IN GPIOB
#define GPIO_PWM GPIOA
#define GPIO_Pin_IN1 GPIO_Pin_1
#define GPIO_Pin_IN2 GPIO_Pin_2
#define GPIO_Pin_IN3 GPIO_Pin_5
#define GPIO_Pin_IN4 GPIO_Pin_6
#define GPIO_PWM_A GPIO_Pin_8
#define GPIO_PWM_B GPIO_Pin_11
#define IN1_H GPIO_SetBits(GPIO_IN,GPIO_Pin_IN1);
#define IN1_L GPIO_ResetBits(GPIO_IN,GPIO_Pin_IN1);
#define IN2_H GPIO_SetBits(GPIO_IN,GPIO_Pin_IN2);
#define IN2_L GPIO_ResetBits(GPIO_IN,GPIO_Pin_IN2);
#define IN3_H GPIO_SetBits(GPIO_IN,GPIO_Pin_IN3);
#define IN3_L GPIO_ResetBits(GPIO_IN,GPIO_Pin_IN3);
#define IN4_H GPIO_SetBits(GPIO_IN,GPIO_Pin_IN4);
#define IN4_L GPIO_ResetBits(GPIO_IN,GPIO_Pin_IN4);
#define PWM_A_OFF 1000
#define PWM_B_OFF 1000
單片機(jī)源程序如下:
#define GPIO_IN GPIOB
#define GPIO_PWM GPIOA
#define GPIO_Pin_IN1 GPIO_Pin_1
#define GPIO_Pin_IN2 GPIO_Pin_2
#define GPIO_Pin_IN3 GPIO_Pin_5
#define GPIO_Pin_IN4 GPIO_Pin_6
#define GPIO_PWM_A GPIO_Pin_0
#define GPIO_PWM_B GPIO_Pin_1
#define IN1_H GPIO_SetBits(GPIO_IN,GPIO_Pin_IN1);
#define IN1_L GPIO_ResetBits(GPIO_IN,GPIO_Pin_IN1);
#define IN2_H GPIO_SetBits(GPIO_IN,GPIO_Pin_IN2);
#define IN2_L GPIO_ResetBits(GPIO_IN,GPIO_Pin_IN2);
#define IN3_H GPIO_SetBits(GPIO_IN,GPIO_Pin_IN3);
#define IN3_L GPIO_ResetBits(GPIO_IN,GPIO_Pin_IN3);
#define IN4_H GPIO_SetBits(GPIO_IN,GPIO_Pin_IN4);
#define IN4_L GPIO_ResetBits(GPIO_IN,GPIO_Pin_IN4);
#define PWM_A_OFF 1001
#define PWM_B_OFF 1001
#include "pbdata.h"
void TimCounterInit(int rate_1,int rate_2);
void Gpio_PWM_Init(void);
void Gpio_M_Init(void);
void NVIC_Configuration(void);
void TurnLeft(void);
void TurnRight(void);
void straight(void);
void sternway(void);
int A,B;
/****主函數(shù)****/
int main(void)
{
u8 flag=1;
Gpio_PWM_Init();
Gpio_M_Init();
while(flag==1)
{
flag=0;
straight();//直走
delay_ms(1000);
delay_ms(1000);
delay_ms(1000);
TurnLeft();//左轉(zhuǎn)
delay_ms(1000);
delay_ms(500);
straight();
delay_ms(1000);
TurnRight();
delay_ms(1000);
delay_ms(500);
straight();
delay_ms(500);
TurnRight();
delay_ms(1000);
straight();
delay_ms(1000);
delay_ms(1000);
delay_ms(1000);
// /* 回到中線 */
//
// TurnLeft(1.5);
// straight(0.5);
// TurnLeft(0.5);
// straight(4);
// /* 回到中線 */
//
// TurnRight(1.5);
// straight(0.5);
// TurnRight(1);
// straight(2);
//
// /* 回到中線 */
//
// TurnLeft(1.5);
// straight(0.5);
// TurnLeft(1);
// straight(2);
// sternway(1);
TimCounterInit(PWM_A_OFF,PWM_B_OFF);
}
}
void TurnLeft()
{
IN1_H IN2_L
IN3_H IN4_L
A=500;
B=800;
TimCounterInit(A,B);
}
void TurnRight(void)
{
IN1_H IN2_L
IN3_H IN4_L
A=800;
B=500;
TimCounterInit(A,B);
}
void straight(void)
{
IN1_H IN2_L
IN3_H IN4_L
A=600;
B=600;
TimCounterInit(A,B);
}
void sternway(void)
{
IN1_L IN2_H
IN3_L IN4_H
A=700;
B=700;
TimCounterInit(A,B);
}
void Gpio_PWM_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
//以下設(shè)定是將TIM2的通道1(PA0)的復(fù)用功能打開,這很重要很容易被忘掉
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
GPIO_InitStructure.GPIO_Pin = GPIO_PWM_A|GPIO_PWM_B; //選擇led1
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //管腳頻率為50MHZ
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //模式為復(fù)用推挽輸出
GPIO_Init(GPIO_PWM, &GPIO_InitStructure); //初始化led1寄存器
}
void Gpio_M_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_IN1|GPIO_Pin_IN2|GPIO_Pin_IN3|GPIO_Pin_IN4; //選擇led1
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //管腳頻率為50MHZ
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_Init(GPIO_IN, &GPIO_InitStructure); //初始化led1寄存器
}
/********************************************************************************************
*函數(shù)名稱:void TimCounterInit(void)
*功能說明:TIM計數(shù)初始化配置
* TIMCLK = 72 MHz, Prescaler = TIM_PSC, TIM counter clock = TIMCLK/TIM_COUNTER MHz
*******************************************************************************************/
void TimCounterInit(int rate_1,int rate_2) //rate可以改變占空比
{
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
TIM_OCInitTypeDef TIM_OCInitStructure;
/* TIM時鐘使能 */
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);
/* 基定時器初始化 */
TIM_TimeBaseStructure.TIM_Period = 1000000*0.001; //計數(shù)值 1000;須介于0~65535
TIM_TimeBaseStructure.TIM_Prescaler = 72; //分頻系數(shù),為了設(shè)定值數(shù)值較大,這里選得較小
TIM_TimeBaseStructure.TIM_ClockDivision = 0; //時鐘分割:計數(shù)模式中無作用
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //計數(shù)模式,向上計數(shù)
TIM_TimeBaseStructure.TIM_RepetitionCounter = 0; //重復(fù)計數(shù)值
TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure); //初始化TIM
/* PWM1 Mode configuration: Channel1 */
TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2;//輸出模式設(shè)定
TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;//輸出模式使能
TIM_OCInitStructure.TIM_Pulse = rate_1; //設(shè)置占空比,0時全低電平,1001時全高電平.須介于0~65535
TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;//輸出比較極性;最終輸出值是高/低電平
TIM_OC1Init(TIM2, &TIM_OCInitStructure);//輸出通道x,參數(shù)寫入
TIM_OC1PreloadConfig(TIM2, TIM_OCPreload_Enable);//使能通道x預(yù)裝載寄存器
TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2;//輸出模式設(shè)定
TIM_OCInitStructure.TIM_Pulse = rate_2; //設(shè)置占空比,0時全低電平,1001時全高電平.須介于0~65535
TIM_OC2Init(TIM2, &TIM_OCInitStructure);//輸出通道x,參數(shù)寫入
TIM_OC2PreloadConfig(TIM2, TIM_OCPreload_Enable);//使能通道x預(yù)裝載寄存器
TIM_Cmd(TIM2, ENABLE); //使能TIM
}
復(fù)制代碼
所有資料51hei提供下載:
1.PWM調(diào)速電機(jī)控制(6.10).rar
(279.69 KB, 下載次數(shù): 300)
2017-8-10 19:09 上傳
點擊文件名下載附件
PWM
下載積分: 黑幣 -5
作者:
zhahl
時間:
2017-8-10 23:55
謝謝樓主分享
作者:
glxmf
時間:
2017-11-8 21:41
下來學(xué)習(xí)一下
作者:
press
時間:
2017-12-1 15:21
謝謝漏卮分享
作者:
gintama95
時間:
2017-12-6 10:41
新人 黑幣不夠 不能下載 能不能麻煩樓主發(fā)一下我的郵箱呀
398262842@qq.com
拜托啦
作者:
mcusun2000
時間:
2017-12-22 20:39
學(xué)習(xí)一下,現(xiàn)在在做項目需要用
作者:
eretelys
時間:
2018-6-1 22:51
謝謝樓主分享
作者:
xode
時間:
2018-6-3 22:19
謝謝分享~~~
作者:
lineryang
時間:
2018-8-22 16:22
新人 黑幣不夠 不能下載 能不能麻煩樓主發(fā)一下我的郵箱呀
475225389@qq.com
拜托啦
作者:
lineryang
時間:
2018-8-22 16:23
新人不能下載 。麻煩樓主發(fā)一下我的郵箱
475225389@qq.com
。想學(xué)習(xí)學(xué)習(xí),麻煩樓z
作者:
lineryang
時間:
2018-8-22 17:09
glxmf 發(fā)表于 2017-11-8 21:41
**** 作者被禁止或刪除 內(nèi)容自動屏蔽 ****
之前那個STM32 電機(jī)控制的底層還有沒有,能發(fā)給我一下嘛。
475225389@qq.com
。學(xué)習(xí)學(xué)習(xí)
作者:
lz51
時間:
2018-9-25 18:23
為什么我輸入到F103里面 通過L298n后 蜂鳴器一直在響
作者:
lz51
時間:
2018-9-25 18:23
蜂鳴器一直在響
作者:
Tank1110
時間:
2018-9-26 10:31
謝謝分享~
作者:
mcu_mpu
時間:
2019-1-3 15:07
好東西,學(xué)習(xí)下。
作者:
活在夢里
時間:
2019-2-25 19:58
謝謝分享
作者:
yingyun
時間:
2019-4-19 14:52
謝謝樓主分享
作者:
rage1125
時間:
2019-5-17 16:53
請問下文件為什么沒有mdk打開文件。。。
作者:
辰宿列張
時間:
2019-5-21 22:31
感謝分享,學(xué)習(xí)一下
作者:
只是喜歡她
時間:
2019-6-20 15:58
你好,怎么找不到OBJ文件
作者:
32菜鳥
時間:
2019-7-18 20:20
在做智能小車中,感謝分享
作者:
abcabcxyz
時間:
2020-4-13 20:27
這個復(fù)雜么?我也想學(xué)
歡迎光臨 (http://m.raoushi.com/bbs/)
Powered by Discuz! X3.1