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

stm32通過電調(diào)帶動電機(可按鍵調(diào)速)

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

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


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


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


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


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


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


好了,下面上我的代碼。


先來頭文件吧


#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/給單片機寫程序:使得某引腳輸出500Hz的PWM信號,初始化時高電平時間設(shè)置為1.9ms,

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

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

  5     然后給修改按鍵按下的程序,修改為,按一次按鍵,高電平時間增加一點點,最大增加到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)時鐘配置

 28     Motor_Init();

 29     Tim2_init();

 30     Init_NVIC();                //中斷向量表注冊函數(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計數(shù)到19,剛好是2ms ,500hz

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

 48     

 49     

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

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

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

 53     

 54     TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1; //選擇定時器模式

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

 56     

 57     TIM_OCInitStructure.TIM_Pulse = 0; //設(shè)置待裝入捕獲比較寄存器的脈沖值,剛開始可以設(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);   //使能電機用的時鐘

 77     

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

 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ù)名稱: KEY_TI_Init

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

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

 89 void Init_TI_KEY(void)

 90 {

 91     EXTI_InitTypeDef  EXTI_InitStructure;                    //定義一個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)號INT2

 96     GPIO_EXTILineConfig(GPIO_PortSourceGPIOE, GPIO_PinSource0); //配置端口E的0引腳為中斷源      重要!! 板上標(biā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ù)名稱: 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)先級分組2

114 

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

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

117     NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;            //副優(yōu)先級為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)先級為1

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

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

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

126 }

127 

128 

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

130 ** 函數(shù)名稱: 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;        //用于計算周期數(shù)

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

139     //今天早晨我突然發(fā)現(xiàn)可能是這兩個靜態(tài)變量沒有設(shè)置,一試,果然。開心至極。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表修改定時器的比較寄存器值

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

149             

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

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

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

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

最新單片機文章
隨便看看

 
EEWorld訂閱號

 
EEWorld服務(wù)號

 
汽車開發(fā)圈

 
機器人開發(fā)圈

電子工程世界版權(quán)所有 京B2-20211791 京ICP備10001474號-1 電信業(yè)務(wù)審批[2006]字第258號函 京公網(wǎng)安備 11010802033920號 Copyright ? 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
主站蜘蛛池模板: 特克斯县| 南涧| 石楼县| 鹿邑县| 马公市| 海口市| 邢台市| 内乡县| 永善县| 资兴市| 聂拉木县| 太仆寺旗| 厦门市| 大邑县| 屏边| 静乐县| 盐边县| 花垣县| 纳雍县| 宕昌县| 昌平区| 彩票| 宁武县| 榆林市| 横山县| 咸宁市| 新宁县| 阳信县| 玉环县| 洞头县| 和顺县| 岳普湖县| 永昌县| 宜宾县| 北海市| 仁布县| 红原县| 东海县| 清徐县| 治多县| 十堰市|