這幾天在做32通過電調帶動電機的實驗,上網一查,發現這方面的資料很少,經過自己的親自實踐,總結出以下經驗,供大家參考。
論壇上也有很多人說自己在做,但是都遇到了同樣的瓶頸。我想他們大多是pwm的頻率和占空比沒有調到合適的值吧。
首先,我在網上只找到一片很好的文章,是瑞生大神寫的:http://www.rationmcu.com/lpc1114/1126.html
我的電機是銀燕2212/1400kv經典電機 ,電調也是銀燕40A無刷電調。
通過它知道,當pwm設置為500hz的 時候電調才能正常的工作,剛開始時高電平時間要控制在0.7-1.9左右,讓電機帶電自檢。
通過按鍵控制占空比可以很好地 實現這一點。
好了,下面上我的代碼。
先來頭文件吧
#ifndef _Motor_H_
#define _Motor_H_
#include "stm32f10x.h"
/******************************************************************************
全局函數聲明
*******************************************************************************/
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信號,初始化時高電平時間設置為1.9ms,
3 然后在while循環里面加入檢測按鍵的程序,當按鍵按下,把高電平設置為0.7ms。
4 2/1.給單片機寫程序,把剛才的PWM初始化的高電平設置為0.7ms,保證剛上電,電調不會讓電機轉動。
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 //聲明函數
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(); //系統時鐘配置
28 Motor_Init();
29 Tim2_init();
30 Init_NVIC(); //中斷向量表注冊函數
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; //設置ARR的值為19,從0計數到19,剛好是2ms ,500hz
47 TIM_TimeBaseStructure.TIM_Prescaler = 7200-1;//設置PSC的值為7199,這樣的話每計數一次為0.1ms
48
49
50 TIM_TimeBaseStructure.TIM_ClockDivision = 0; //設置時鐘分割:TDTS = Tck_tim
51 TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //TIMx向上計數模式
52 TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure); //根據TIM_TimeBaseStructure中指定的參數初始化外設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; //設置待裝入捕獲比較寄存器的脈沖值,剛開始可以設置為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上的預裝載寄存器
62
63 TIM_ARRPreloadConfig(TIM2, ENABLE); //使能TIM2在ARR上的預裝載寄存器
64 TIM_Cmd(TIM2, ENABLE); //使能TIM2外設
65 }
66
67 /******************************************************************************
68 函數原型: 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 ; //設置電機使用到得管腳
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 ** 函數名稱: KEY_TI_Init
87 ** 功能描述: 按鍵 中斷配置
88 :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::*/
89 void Init_TI_KEY(void)
90 {
91 EXTI_InitTypeDef EXTI_InitStructure; //定義一個EXTI結構體變量
92
93 RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE); //使能IO復用功能,使用中斷功能重要!!!
94
95 GPIO_EXTILineConfig(GPIO_PortSourceGPIOC, GPIO_PinSource13);//配置端口C的13引腳為中斷源 重要!! 板上標號INT2
96 GPIO_EXTILineConfig(GPIO_PortSourceGPIOE, GPIO_PinSource0); //配置端口E的0引腳為中斷源 重要!! 板上標號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; //下降沿出發
100 EXTI_InitStructure.EXTI_LineCmd = ENABLE; //使能中斷線
101 EXTI_Init(&EXTI_InitStructure); //根據參數初始化中斷寄存器
102 }
103
104 /*:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
105 ** 函數名稱: Init_NVIC
106 ** 功能描述: 系統中斷配置
107
108 :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::*/
109 void Init_NVIC(void)
110 {
111 NVIC_InitTypeDef NVIC_InitStructure;
112
113 NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //設置中斷優先級分組2
114
115 NVIC_InitStructure.NVIC_IRQChannel = EXTI15_10_IRQn; //設定中斷源為PC13
116 NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 2; //中斷占優先級為2
117 NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; //副優先級為0
118 NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //使能中斷
119 NVIC_Init(&NVIC_InitStructure); //根據參數初始化中斷寄存器
120
121 NVIC_InitStructure.NVIC_IRQChannel = EXTI0_IRQn; //設定中斷源為PE0
122 NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1; //中斷占優先級為1
123 NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; //副優先級為0
124 NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //使能中斷
125 NVIC_Init(&NVIC_InitStructure); //根據參數初始化中斷寄存器
126 }
127
128
129 /*:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
130 ** 函數名稱: EXTI15_10_IRQHandler
131 ** 功能描述: 中斷15_10入口函數
132
133 :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::*/
134 void EXTI15_10_IRQHandler(void) //占空比減小
135 {
136 static uint8_t pwm_index = 0; //用于PWM查表
137 static uint8_t period_cnt = 0; //用于計算周期數
138 //就是上面兩個靜態變量沒有設置 ,導致一開始按鍵只能按一次,在往下按他的pwm表就不往下查表了,我想了一晚上啊。
139 //今天早晨我突然發現可能是這兩個靜態變量沒有設置,一試,果然。開心至極。2016.3.5
140
141 if(EXTI_GetITStatus(EXTI_Line13)!= RESET) //判斷是否發生中斷,發生則中斷標志置1
142 {
143 Delay_Ms(5); //消抖
144
145 period_cnt++;
146
147 TIM2->CCR1 = indexWave[pwm_index]; //根據PWM表修改定時器的比較寄存器值
148 pwm_index++; //標志PWM表的下一個元素
149
上一篇:STM32過濾器的作用
下一篇:對GPIO_Init(GPIOx,&GPIO_InitStructure)的理解
推薦閱讀
史海拾趣
高頻電子的業務范圍廣泛且多元化,主要包括FEI-NY、Gillam-FEI和FEI-Zyfer三個部門。FEI-NY部門主要負責紐約總部設施和子公司FEI-Asia與FEI-Elcom的運營;Gillam-FEI部門則負責比利時與法國的業務,并專注于電纜網絡同步產品的設計、研發和生產;FEI-Zyfer部門則主要經營公司加州業務,并設計生產附帶GPS技術的產品。這種多元化業務布局不僅降低了公司的經營風險,還實現了各業務之間的戰略協同和資源共享。
隨著技術的不斷成熟,Astema開始積極拓展市場。公司制定了一系列市場策略,包括與大型電子設備制造商建立合作關系、參加國際電子展等,以擴大品牌影響力。通過這些努力,Astema逐漸打開了國際市場的大門,其產品遠銷海外,市場份額穩步提升。
在激烈的市場競爭中,Arima Lasers Corp始終保持著創新的步伐。公司不斷投入研發資源,探索激光技術在各個領域的應用潛力。其中,一項關于激光通信技術的創新項目引起了業界的廣泛關注。這項技術利用激光束進行高速數據傳輸,具有傳輸速率快、安全性高等優點。隨著該技術的商業化應用,Arima Lasers Corp在通信領域取得了重大突破,引領了市場變革的潮流。
在Cyrustek公司的發展過程中,人才一直是其最重要的資產。Cyrustek注重人才的培養和引進,建立了一支高素質、專業化的技術團隊。這些人才不僅具備豐富的行業經驗和專業知識,還具備創新精神和團隊協作能力。在Cyrustek公司的發展過程中,這些人才發揮了至關重要的作用,推動了公司的不斷發展和壯大。
福斯特集團在半導體封測領域也展現了強大的實力。集團旗下擁有安徽龍芯微科技有限公司和瀘州龍芯微科技有限公司等多家子公司,這些公司均配備有全球領先的集成電路封裝測試線。通過不斷的技術創新和設備升級,福斯特集團能夠滿足客戶全方位的器件封測要求,為客戶提供高質量、高效率的封測服務。此外,公司還積極投入研發,推出多項新技術和新產品,進一步鞏固其在半導體封測領域的領先地位。
Elpac公司深知人才是企業發展的核心動力。因此,公司高度重視人才培養和團隊建設。公司建立了完善的人才培訓體系,為員工提供多樣化的培訓和發展機會。同時,公司還鼓勵員工積極參與各種創新活動和競賽,激發員工的創新精神和創造力。這種積極向上的企業文化吸引了大量優秀人才加入Elpac公司,為公司的持續發展提供了有力保障。
變頻電源簡介: 變頻電源采用先進的正弦波脈寬調制(SPWM)IGBT高頻逆變技術,內部為AC—DC—AC結構,徹底清除電網干擾,輸出波形純凈,具有穩壓、穩頻范圍寬,精度高,重量輕,體積小,輸出帶有隔離變壓器等特點,可與發電機良好配合構成高品質的 ...… 查看全部問答∨ |
最近做一些信號取樣的電路,懶惰直接把以往自己做的參數COPY,也沒看看自己用的運放和AD,結果鬧出了不少笑話,不過細細想來這也是好事,畢竟在另一個側面考慮告訴自己在設計時一定要注意每一個細節。僅以此次幫忙做一個電池系統大功率0-65V電壓差動 ...… 查看全部問答∨ |
撥出插頭,電烙鐵慢慢涼了下來,即使你沒有戴金絲邊眼鏡,在下面的操作過程中也可以顯得更斯文一些。這是只與鍵盤、鼠標、顯示器有關的故事情節,幾片灰白顏色的軟件窗口,嘟嘟的提示音,還有期盼成功并始終專注的眼神。其實我們完成了大部分內容, ...… 查看全部問答∨ |
【labview】chinese 高級 Design Pattern - Producer Consumer 【labview】Design Pattern - Producer Consumer chinese 高級 [ 本帖最后由 安_然 于 2010-5-24 15:53 編輯 ]… 查看全部問答∨ |
因為Iimage直接顯示效率不高,而且不能做動態效果。所以想先draw到一塊內存設備環境(與開發板顯示環境一樣)上,然后再bitblt到桌面dc 。這樣可以省去顏色位數轉換的時間(只是顯示的時候省掉,始終是要轉換的),于是用了以下代碼 ...… 查看全部問答∨ |
|
王老師: 經過了近20天對MSDN中設備驅動相關知識的閱讀,我對Windows平臺上的設備驅動有了一定的認識, 我想嘗試著寫一個簡單的驅動,請問我應該用什么工具編寫代碼呢? 前些時間你說過, ...… 查看全部問答∨ |
|
有如下程序for(count=0;count<=254;count=count+1) begin while(n<16) begin for(j=0;j<3;j=j+1) begin FD[n] <= fro ...… 查看全部問答∨ |
設計資源 培訓 開發板 精華推薦
- 暢游安富利人工智能云會展,挑戰60天打卡學習養成記!沖擊華為Mate40 Pro、Apple iPad Air等豪禮啦!
- LPC55S69 新一代基于ARM Cortex-M33內核 通用安全低功耗MCU
- 為英飛凌天貓旗艦店慶生|【瀏覽有禮】【下單100%有禮】
- 有獎直播:基于TI Jacinto™ 的深度學習平臺介紹
- 停工停課不停學!羅姆R課堂正式上線
- 【答題有獎】Altera Cyclone V 開發板全體驗之初識 & 評估Cyclone V !
- 半導體品牌知名度問卷調查
- 如何“配齊”脈沖負載的電源設計需求
- 泰克移動多媒體總線系列專題來襲~《HDMI2.0規范測試方案》下載有禮!
- 【社區大講堂】之讓我們學學AVR!