娇小w搡bbbb搡bbb,《第一次の人妻》,中国成熟妇女毛茸茸,边啃奶头边躁狠狠躁视频免费观看

stm32通過(guò)電調(diào)帶動(dòng)電機(jī)(可按鍵調(diào)速)

發(fā)布者:樂(lè)觀向前最新更新時(shí)間:2020-01-07 來(lái)源: eefocus關(guān)鍵字:stm32  電調(diào)  帶動(dòng)電機(jī)  按鍵調(diào)速 手機(jī)看文章 掃描二維碼
隨時(shí)隨地手機(jī)看文章

這幾天在做32通過(guò)電調(diào)帶動(dòng)電機(jī)的實(shí)驗(yàn),上網(wǎng)一查,發(fā)現(xiàn)這方面的資料很少,經(jīng)過(guò)自己的親自實(shí)踐,總結(jié)出以下經(jīng)驗(yàn),供大家參考。


論壇上也有很多人說(shuō)自己在做,但是都遇到了同樣的瓶頸。我想他們大多是pwm的頻率和占空比沒(méi)有調(diào)到合適的值吧。


首先,我在網(wǎng)上只找到一片很好的文章,是瑞生大神寫(xiě)的:http://www.rationmcu.com/lpc1114/1126.html


我的電機(jī)是銀燕2212/1400kv經(jīng)典電機(jī) ,電調(diào)也是銀燕40A無(wú)刷電調(diào)。


通過(guò)它知道,當(dāng)pwm設(shè)置為500hz的 時(shí)候電調(diào)才能正常的工作,剛開(kāi)始時(shí)高電平時(shí)間要控制在0.7-1.9左右,讓電機(jī)帶電自檢。


通過(guò)按鍵控制占空比可以很好地 實(shí)現(xiàn)這一點(diǎn)。


好了,下面上我的代碼。


先來(lái)頭文件吧


#ifndef _Motor_H_

#define _Motor_H_

#include "stm32f10x.h"


/******************************************************************************

                            全局函數(shù)聲明

*******************************************************************************/ 

void Motor_Init(void);

//void Motor_Out(int16_t duty1,int16_t duty2,int16_t duty3,int16_t duty4);


#endif

 

主菜:


  1 /***************************************************************************************

  2   1/給單片機(jī)寫(xiě)程序:使得某引腳輸出500Hz的PWM信號(hào),初始化時(shí)高電平時(shí)間設(shè)置為1.9ms,

  3   然后在while循環(huán)里面加入檢測(cè)按鍵的程序,當(dāng)按鍵按下,把高電平設(shè)置為0.7ms。

  4     2/1.給單片機(jī)寫(xiě)程序,把剛才的PWM初始化的高電平設(shè)置為0.7ms,保證剛上電,電調(diào)不會(huì)讓電機(jī)轉(zhuǎn)動(dòng)。

  5     然后給修改按鍵按下的程序,修改為,按一次按鍵,高電平時(shí)間增加一點(diǎn)點(diǎn),最大增加到1.9ms。

  6     

  7     我的按鍵再c13(k2)和e0(k1)

  8     日期:2016.3.4

  9 ***************************************************************************************/

 10 

 11 #include "dianji.h"

 12 

 13   uint8_t indexWave[] = {5,6,7,8,9,10,11,12,13,14,15,16,17,18,19};  //占空比表

 14     

 15 //聲明函數(shù)

 16 void Tim2_init(void);

 17 void Motor_Init(void);

 18 void Init_NVIC(void);

 19 void Delay_Ms(uint16_t time);  

 20 void Delay_Us(uint16_t time); 

 21 void Init_TI_KEY(void);

 22 

 23         

 24 int main(void)

 25 {

 26  

 27     SystemInit();                //系統(tǒng)時(shí)鐘配置

 28     Motor_Init();

 29     Tim2_init();

 30     Init_NVIC();                //中斷向量表注冊(cè)函數(shù)

 31     Init_TI_KEY();                //按鍵引腳中斷初始化

 32     

 33     while(1);

 34     

 35 }

 36 

 37 

 38 void Tim2_init(void)

 39 {    

 40     

 41     TIM_TimeBaseInitTypeDef        TIM_TimeBaseStructure;

 42     TIM_OCInitTypeDef              TIM_OCInitStructure;

 43     

 44      RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);

 45     

 46     TIM_TimeBaseStructure.TIM_Period = 20-1;    //設(shè)置ARR的值為19,從0計(jì)數(shù)到19,剛好是2ms ,500hz

 47     TIM_TimeBaseStructure.TIM_Prescaler = 7200-1;//設(shè)置PSC的值為7199,這樣的話(huà)每計(jì)數(shù)一次為0.1ms 

 48     

 49     

 50     TIM_TimeBaseStructure.TIM_ClockDivision = 0; //設(shè)置時(shí)鐘分割:TDTS = Tck_tim

 51     TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //TIMx向上計(jì)數(shù)模式

 52     TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure); //根據(jù)TIM_TimeBaseStructure中指定的參數(shù)初始化外設(shè)TIM2

 53     

 54     TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1; //選擇定時(shí)器模式

 55     TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; //比較輸出使能

 56     

 57     TIM_OCInitStructure.TIM_Pulse = 0; //設(shè)置待裝入捕獲比較寄存器的脈沖值,剛開(kāi)始可以設(shè)置為0.

 58     TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; //輸出極性:TIM輸出比較極性高

 59     

 60     TIM_OC1Init(TIM2, &TIM_OCInitStructure); 

 61     TIM_OC1PreloadConfig(TIM2, TIM_OCPreload_Enable); //使能TIM2在CCR1上的預(yù)裝載寄存器

 62 

 63     TIM_ARRPreloadConfig(TIM2, ENABLE); //使能TIM2在ARR上的預(yù)裝載寄存器

 64     TIM_Cmd(TIM2, ENABLE);  //使能TIM2外設(shè)

 65 }

 66 

 67 /******************************************************************************

 68 函數(shù)原型:    void Motor_Init(void)

 69 功    能:    PWM初始化

 70 *******************************************************************************/ 

 71 void Motor_Init(void)

 72 {

 73     

 74     GPIO_InitTypeDef GPIO_InitStructure;

 75     

 76     RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA , ENABLE);   //使能電機(jī)用的時(shí)鐘

 77     

 78     GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 ;     //設(shè)置電機(jī)使用到得管腳

 79     GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; 

 80     GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; 

 81     GPIO_Init(GPIOA, &GPIO_InitStructure);

 82 

 83 }

 84 

 85 /*:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

 86 ** 函數(shù)名稱(chēng): KEY_TI_Init

 87 ** 功能描述: 按鍵 中斷配置 

 88 :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::*/

 89 void Init_TI_KEY(void)

 90 {

 91     EXTI_InitTypeDef  EXTI_InitStructure;                    //定義一個(gè)EXTI結(jié)構(gòu)體變量

 92 

 93     RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);        //使能IO復(fù)用功能,使用中斷功能重要!!!

 94 

 95     GPIO_EXTILineConfig(GPIO_PortSourceGPIOC, GPIO_PinSource13);//配置端口C的13引腳為中斷源      重要!! 板上標(biāo)號(hào)INT2

 96     GPIO_EXTILineConfig(GPIO_PortSourceGPIOE, GPIO_PinSource0); //配置端口E的0引腳為中斷源      重要!! 板上標(biāo)號(hào)INT1

 97     EXTI_InitStructure.EXTI_Line = EXTI_Line0 | EXTI_Line13;//

 98     EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;        //中斷模式為中斷模式

 99     EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;    //下降沿出發(fā)

100     EXTI_InitStructure.EXTI_LineCmd = ENABLE;                //使能中斷線

101     EXTI_Init(&EXTI_InitStructure);                            //根據(jù)參數(shù)初始化中斷寄存器

102 }

103 

104 /*:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

105 ** 函數(shù)名稱(chēng): Init_NVIC

106 ** 功能描述: 系統(tǒng)中斷配置

107 

108 :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::*/

109 void Init_NVIC(void)

110 { 

111     NVIC_InitTypeDef  NVIC_InitStructure;

112          

113     NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);                  //設(shè)置中斷優(yōu)先級(jí)分組2

114 

115     NVIC_InitStructure.NVIC_IRQChannel = EXTI15_10_IRQn;        //設(shè)定中斷源為PC13

116     NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 2;    //中斷占優(yōu)先級(jí)為2

117     NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;            //副優(yōu)先級(jí)為0

118     NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;                //使能中斷

119     NVIC_Init(&NVIC_InitStructure);                                   //根據(jù)參數(shù)初始化中斷寄存器

120 

121     NVIC_InitStructure.NVIC_IRQChannel = EXTI0_IRQn;            //設(shè)定中斷源為PE0

122     NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;    //中斷占優(yōu)先級(jí)為1

123     NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;            //副優(yōu)先級(jí)為0

124     NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;                //使能中斷

125     NVIC_Init(&NVIC_InitStructure);                                   //根據(jù)參數(shù)初始化中斷寄存器

126 }

127 

128 

129 /*:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

130 ** 函數(shù)名稱(chēng): EXTI15_10_IRQHandler

131 ** 功能描述: 中斷15_10入口函數(shù)            

132 

133 :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::*/

134 void EXTI15_10_IRQHandler(void)   //占空比減小

135 {

136     static uint8_t pwm_index = 0;            //用于PWM查表

137     static uint8_t period_cnt = 0;        //用于計(jì)算周期數(shù)

138     //就是上面兩個(gè)靜態(tài)變量沒(méi)有設(shè)置 ,導(dǎo)致一開(kāi)始按鍵只能按一次,在往下按他的pwm表就不往下查表了,我想了一晚上啊。

139     //今天早晨我突然發(fā)現(xiàn)可能是這兩個(gè)靜態(tài)變量沒(méi)有設(shè)置,一試,果然。開(kāi)心至極。2016.3.5

140     

141     if(EXTI_GetITStatus(EXTI_Line13)!= RESET)      //判斷是否發(fā)生中斷,發(fā)生則中斷標(biāo)志置1

142     {

143            Delay_Ms(5);  //消抖

144 

145              period_cnt++;            

146                 

147                 TIM2->CCR1 = indexWave[pwm_index];    //根據(jù)PWM表修改定時(shí)器的比較寄存器值

148                 pwm_index++;                                                //標(biāo)志PWM表的下一個(gè)元素

149             

[1] [2]
關(guān)鍵字:stm32  電調(diào)  帶動(dòng)電機(jī)  按鍵調(diào)速 引用地址:stm32通過(guò)電調(diào)帶動(dòng)電機(jī)(可按鍵調(diào)速)

上一篇:STM32過(guò)濾器的作用
下一篇:對(duì)GPIO_Init(GPIOx,&GPIO_InitStructure)的理解

推薦閱讀最新更新時(shí)間:2025-05-22 20:25

解析市電調(diào)光LED照明通用設(shè)計(jì)方案
  白熾燈表現(xiàn)為具備自穩(wěn)定特性的純電阻負(fù)載, LED 則需要一個(gè)電流源。LED產(chǎn)生的光通量近似正比于流經(jīng)該器件的電流。LED的正向電壓隨電流增加而增加,但隨溫度的上升而減少。在這方面,LED表現(xiàn)得象二極管。   LED在電子系統(tǒng)中使用已經(jīng)有很多年了,主要用作電子設(shè)備的指示燈。最近在亮度和色彩深度方面取得的重大進(jìn)步,意味著LED現(xiàn)在可以用于更廣泛的應(yīng)用,從手機(jī)和多媒體播放機(jī)中的趣味 照明 ,一直到取代商業(yè)和家庭照明應(yīng)用中的傳統(tǒng)光源。   推動(dòng) LED照明 市場(chǎng)發(fā)展的關(guān)鍵推動(dòng)力是 高亮度LED 和智能LED控制器的出現(xiàn)。采用高亮度LED的產(chǎn)品設(shè)計(jì)師面臨著許多設(shè)計(jì)挑戰(zhàn),包括散熱管理、驅(qū)動(dòng)方案、拓?fù)浼軜?gòu)和已有的基礎(chǔ)設(shè)
[電源管理]
VSCode+arm-none-eabi+msys使用Make實(shí)現(xiàn)STM32交叉編譯
記錄一下在Windows平臺(tái)下,利用VSCode的arm-none-eabi擴(kuò)展和msys使用Make實(shí)現(xiàn)STM32的交叉編譯。 準(zhǔn)備: 1.安裝arm-none-eabi擴(kuò)展 在VSCode的擴(kuò)展窗口,搜索eabi,安裝windows-arm-none-eabi擴(kuò)展 需要注意:我最開(kāi)始安裝的0.1.6版本,但是編譯到最后copy的時(shí)候出錯(cuò),安裝0.1.2版本后,就正常,目前沒(méi)有去詳細(xì)分析原因。 這里搜索出來(lái)的時(shí)候,只能安裝最新版本,安裝成功后,可以點(diǎn)擊“設(shè)置”- “Install Another Version...” 來(lái)安裝舊版本。有的時(shí)候“Install Another Version...”不可點(diǎn)擊,重啟一下
[單片機(jī)]
STM32芯片存儲(chǔ)器映射概述
STM32系統(tǒng)構(gòu)架 當(dāng)你拿到一款芯片后,怎樣可以快速了解到它具有哪些功能?了解單片機(jī)的系統(tǒng)架構(gòu)是使用款芯片的基礎(chǔ),這些信息在芯片手冊(cè)上都會(huì)有詳細(xì)的說(shuō)明,并且它們會(huì)被安排在最前面的章節(jié),目的就是讓用戶(hù)最開(kāi)始就能夠關(guān)注到該款芯片具有哪些功能,特點(diǎn)。 STM32F103系統(tǒng)結(jié)構(gòu) 從上圖我們可以了解到STM32F103系列的主要系統(tǒng)組成單元: CPU核:使用ARM Cortex-M3內(nèi)核; 存儲(chǔ)器: STM32F103系列微控制器采用經(jīng)典的哈佛架構(gòu),程序存儲(chǔ)和數(shù)據(jù)存儲(chǔ)采用獨(dú)立的存儲(chǔ)器空間; ICode:指令代碼,F(xiàn)lash存儲(chǔ)器用于存儲(chǔ)程序; DCode:數(shù)據(jù)代碼,SRAM用于存儲(chǔ)數(shù)據(jù); 外設(shè): GPIO;
[單片機(jī)]
<font color='red'>STM32</font>芯片存儲(chǔ)器映射概述
STM32單片機(jī)SPI的使用原理解析
1、SPI使用原理 以數(shù)據(jù)交換實(shí)現(xiàn)數(shù)據(jù)傳輸,第一個(gè)跳變沿實(shí)現(xiàn)數(shù)據(jù)輸出,第二個(gè)跳變沿實(shí)現(xiàn)采樣。如下圖 2、GPIO的配置 GPIO_InitTypeDef GPIO_InitStructure; //配置SPI2管腳 RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO|RCC_APB2Periph_GPIOB, ENABLE); GPIO_InitStructure.GPIO_ Pi n = GPIO_Pin_13 |GPIO_Pin_14| GPIO_Pin_15; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStru
[單片機(jī)]
<font color='red'>STM32</font>單片機(jī)SPI的使用原理解析
基于STM32的智能飲水機(jī)系統(tǒng)設(shè)計(jì)
一、項(xiàng)目背景 隨著智能化的迅速發(fā)展,人們對(duì)于生活中的各類(lèi)設(shè)備也越來(lái)越有智能化的需求,其中智能飲水機(jī)是一種比較常見(jiàn)的設(shè)備。智能飲水機(jī)不僅可以提供飲用水,還可以通過(guò)智能化的技術(shù)滿(mǎn)足人們對(duì)于水質(zhì)、水溫、出水量等方面的需求。因此,當(dāng)前設(shè)計(jì)了一種基于STM32的智能飲水機(jī)系統(tǒng),以滿(mǎn)足人們對(duì)智能化飲水機(jī)的需求。 智能飲水機(jī)系統(tǒng)其主要功能包括: 【1】控制加熱芯片:通過(guò)繼電器模塊控制加熱芯片,在水燒開(kāi)后自動(dòng)斷電。 【2】液位感應(yīng):使用液位傳感器感應(yīng)水箱水位,當(dāng)水位過(guò)低時(shí)通過(guò)語(yǔ)音模塊進(jìn)行播報(bào)提示。 【3】移動(dòng)端控制:Android手機(jī)端可以顯示當(dāng)前雙水箱內(nèi)的水溫,設(shè)置出水溫度及出水量,并且還可以控制出水操作。 【4】主控芯片:采用STM32F
[單片機(jī)]
基于<font color='red'>STM32</font>的智能飲水機(jī)系統(tǒng)設(shè)計(jì)
適用 STM32 通用 Bootloader ,讓 OTA 更加 Easy
隨著物聯(lián)網(wǎng)時(shí)代到來(lái),越來(lái)越多的智能設(shè)備擁有了在線升級(jí)的能力,無(wú)論是系統(tǒng)更新,產(chǎn)品功能迭代還是漏洞修復(fù)都能在第一時(shí)間抵達(dá)用戶(hù)手中的智能設(shè)備。 在線升級(jí)功能需要使用 OTA (Over-the-Air) 技術(shù) ,OTA 技術(shù)簡(jiǎn)單地說(shuō)就是通過(guò)網(wǎng)絡(luò)來(lái)升級(jí)手中的智能設(shè)備,進(jìn)而使用設(shè)備最新版本的功能。而 OTA 技術(shù)中必不可少的一環(huán)就是通過(guò) Bootloader 來(lái)管理、升級(jí)設(shè)備固件。 由于 OTA 功能由多種復(fù)雜技術(shù)組成,因此添加 OTA 功能有一定的技術(shù)門(mén)檻。很多開(kāi)發(fā)者遇到莫名其妙的問(wèn)題,進(jìn)而導(dǎo)致 OTA 升級(jí)失敗,常見(jiàn)問(wèn)題如下: 升級(jí)過(guò)程缺少專(zhuān)業(yè)的安全機(jī)制 APP 無(wú)法正常啟動(dòng) 程序莫名跑飛,出現(xiàn) hardfault 固件搬運(yùn)失
[單片機(jī)]
適用 <font color='red'>STM32</font> 通用 Bootloader ,讓 OTA 更加 Easy
如何采用STM32配置SPI實(shí)現(xiàn)同步通信
SPI是一種高速的,全雙工,同步的通信總線,原理和使用簡(jiǎn)單,占用引腳資源少,是一種常用的通信方式。 STM32通常有2~3個(gè)SPI接口 根據(jù)STM32手冊(cè)的使用方法: 1. Enable peripheral clock 2. Enable SCK, MOSI, MISO and NSS GPIO clocks 3. Peripherals alternate function: ? Connect the pin to the desired peripherals‘ Alternate Function (AF) ? Call GPIO_Init() function. 4. Program the Polarity,
[單片機(jī)]
如何采用<font color='red'>STM32</font>配置SPI實(shí)現(xiàn)同步通信
基于無(wú)操作系統(tǒng)的STM32單片機(jī)開(kāi)發(fā)
現(xiàn)在非常多的的MCU性能都還不錯(cuò),同時(shí)用戶(hù)也會(huì)去擴(kuò)展一些外部RAM,這樣如果高效便捷的管理這些內(nèi)存是一個(gè)重要話(huà)題。 今天給大家分享一份源碼:基于無(wú)操作系統(tǒng)的STM32單片機(jī)開(kāi)發(fā),功能強(qiáng)大,可申請(qǐng)到地址空間連續(xù)的不同大小的內(nèi)存空間,且用戶(hù)接口簡(jiǎn)單,使用方便。 正文部分: 1 源碼說(shuō)明 源碼包含memory.h 和 memory.c 兩個(gè)文件(嵌入式C/C++代碼的“標(biāo)配”),其源碼中包含重要的注釋。memory.h文件 :包含結(jié)構(gòu)體等定義,函數(shù)API申明等;memory.c文件 :是實(shí)現(xiàn)內(nèi)存管理相關(guān)API函數(shù)的原型。 2 頭文件memory.h 頭文件是相關(guān)的定義和申請(qǐng): #ifndef__MEMORY
[單片機(jī)]
小廣播
設(shè)計(jì)資源 培訓(xùn) 開(kāi)發(fā)板 精華推薦

最新單片機(jī)文章
隨便看看

 
EEWorld訂閱號(hào)

 
EEWorld服務(wù)號(hào)

 
汽車(chē)開(kāi)發(fā)圈

 
機(jī)器人開(kāi)發(fā)圈

電子工程世界版權(quán)所有 京B2-20211791 京ICP備10001474號(hào)-1 電信業(yè)務(wù)審批[2006]字第258號(hào)函 京公網(wǎng)安備 11010802033920號(hào) Copyright ? 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
主站蜘蛛池模板: 南部县| 泰兴市| 准格尔旗| 托里县| 大足县| 右玉县| 珠海市| 闵行区| 南阳市| 宜川县| 宁夏| 嫩江县| 姜堰市| 常熟市| 常德市| 富源县| 东乡族自治县| 介休市| 麟游县| 满城县| 乌审旗| 绥滨县| 新巴尔虎右旗| 林芝县| 昌宁县| 临沭县| 登封市| 历史| 南涧| 宽城| 嘉义市| 金堂县| 沾化县| 分宜县| 浦东新区| 新和县| 麻江县| 花垣县| 肥城市| 阿拉善右旗| 乐清市|