1.雙軸搖桿傳感器
PS2雙軸按鍵游戲搖桿模塊采用PS2游戲手柄上金屬按鍵搖桿電位器、模塊特設(shè)二路模擬輸出和一路數(shù)字輸出接口、輸出值分別對應(yīng)(×、Y雙軸偏移量、其類型為模擬量、按鍵表示用戶是否在z軸上按下、其類型為數(shù)字開關(guān)量、模塊集成電源指示燈、可顯示工作狀態(tài)、坐標(biāo)標(biāo)識符清晰簡明、準(zhǔn)確定位、用其可以輕松控制物體(如二自由度舵機(jī)云臺)在二維空間運(yùn)動、因此可以通控制器編程、傳感器擴(kuò)展板插接、完成具有創(chuàng)意性遙控互動作品。
硬件接口:
GND – GND
+5V – +5v
VRX – x方向模擬量
VRY – y方向模擬量
SW --按鍵狀態(tài)
2.720空心杯電機(jī)
空心杯電機(jī)轉(zhuǎn)速快,體積小,搭配螺旋槳適合用于遙控器飛機(jī)模型制作DIY電子科技制作,接線簡單,是做微型四軸飛行器的配件。使用簡單:空心杯電機(jī),欽鐵硼強(qiáng)磁性能更穩(wěn)定。
3.電機(jī)驅(qū)動模塊
(1) MOS場效應(yīng)管驅(qū)動模塊采用原裝進(jìn)口雙MOS并聯(lián)有源輸出,內(nèi)阻更低,電流大,功率強(qiáng),常溫下15A,400W,滿足了大多數(shù)設(shè)備的使用;
(2) 寬電壓,支持PWM;1:工作電壓:DC 5V–36V;
(3) 觸發(fā)信號源:數(shù)字量高低電平(DC3.3v–20V),可以接單片機(jī)IO口,PLC接口,直流電源等,可以接PWM信號,信號頻率0–20KHZ支持。
(4) 輸出能力:直流DC 5V–36V,常溫下持續(xù)電流15A,功率400W!輔助散熱條件下,最大電流可達(dá)30A。
(5) 應(yīng)用:輸出端可以控制大功率的設(shè)備,電機(jī),燈泡,LED燈帶、直流馬達(dá)、微型水泵、電磁閥等,可以輸入PWM,控制電機(jī)轉(zhuǎn)速,燈自亮度等。
4.軟設(shè)計(jì)
定時(shí)器3通道1(PA6)輸出PWM波,完成電機(jī)控制。
4.1 PWM模式
脈沖寬度調(diào)制(PWM):沖寬度調(diào)制是一種模擬控制方式,根據(jù)相應(yīng)載荷的變化來調(diào)制晶體管基極或MOS管柵極的偏置,來實(shí)現(xiàn)晶體管或MOS管導(dǎo)通時(shí)間的改變,從而實(shí)現(xiàn)開關(guān)穩(wěn)壓電源輸出的改變。這種方式能使電源的輸出電壓在工作條件變化時(shí)保持恒定,是利用微處理器的數(shù)字信號對模擬電路進(jìn)行控制的一種非常有效的技術(shù)。廣泛應(yīng)用在從測量、通信到功率控制與變換的許多領(lǐng)域中。
脈沖寬度調(diào)制(PWM)是一種對模擬信號電平進(jìn)行數(shù)字編碼的方法。通過高分辨率計(jì)數(shù)器的使用,方波的占空比被調(diào)制用來對一個(gè)具體模擬信號的電平進(jìn)行編碼。PWM信號仍然是數(shù)字的,因?yàn)樵诮o定的任何時(shí)刻,滿幅值的直流供電要么完全有(ON),要么完全無(OFF)。電壓或電流源是以一種通(ON)或斷(OFF)的重復(fù)脈沖序列被加到模擬負(fù)載上去的。通的時(shí)候即是直流供電被加到負(fù)載上的時(shí)候,斷的時(shí)候即是供電被斷開的時(shí)候。只要帶寬足夠,任何模擬值都可以使用PWM進(jìn)行編碼。
STM32芯片本身自帶PWM模式,該模式可以產(chǎn)生一個(gè)由TIMx_ARR寄存器確定頻率、由TIMx_CCRx寄存器確定占空比的信號。在TIMx_CCMRx寄存器中的OCxM位寫入’110’(PWM模式1)或’111’(PWM模式2),能夠獨(dú)立地設(shè)置每個(gè)OCx輸出通道產(chǎn)生一路PWM。必須設(shè)置TIMx_CCMRx寄存器OCxPE位以使能相應(yīng)的預(yù)裝載寄存器,最后還要設(shè)置TIMx_CR1 寄存器的ARPE位, (在向上計(jì)數(shù)或中心對稱模式中)使能自動重裝載的預(yù)裝載寄存器。僅當(dāng)發(fā)生一個(gè)更新事件的時(shí)候,預(yù)裝載寄存器才能被傳送到影子寄存器,因此在計(jì)數(shù)器開始計(jì)數(shù)之前,必須通過設(shè)置TIMx_EGR寄存器中的UG位來初始化所有的寄存器。OCx的極性可以通過軟件在TIMx_CCER寄存器中的CCxP位設(shè)置,它可以設(shè)置為高電平有效或低電平有效。 TIMx_CCER寄存器中的CCxE位控制OCx輸出使能。
4.2 PWM模式配置步驟
1.配置定時(shí)器基本功能(定時(shí)器基本功能,設(shè)置預(yù)分頻系統(tǒng),設(shè)置周期時(shí)間)---》2.設(shè)置定時(shí)器PWM模式(PWM1模式1和PWM1模式2) ---》3.設(shè)置占空比---》4.設(shè)置占空比---》5.開啟定時(shí)器;
/*****************PWM波輸出*****************
**形參:u16 psc -- 預(yù)分頻系數(shù)
** u16 arr -- PWM一個(gè)周期時(shí)間
** u16 ccr -- 占空比
**例:Tim3_CH1_PWM(72,1000,200)
**PWM的周期時(shí)間:1000us
**占空比:200/1000*100%=20%
**高電平時(shí)間:200US,低電平時(shí)間為800us
*********************************************/
void Tim3_CH1_PWM(u16 psc,u16 arr,u16 ccr)
{
//1.開時(shí)鐘
RCC->APB1ENR|=1<<1;//TIM3
RCC->APB1RSTR|=1<<1;//開復(fù)位時(shí)鐘
RCC->APB1RSTR&=~(1<<1);//關(guān)復(fù)位
RCC->APB2ENR|=1<<2;//PA
/*2.配置GPIO口*/
GPIOA->CRL&=0xf0ffffff;
GPIOA->CRL|=0x0B000000;//復(fù)用推挽輸出
/*3.配置核心寄存器*/
TIM3->CNT=0;//清空計(jì)數(shù)器中的值
TIM3->PSC=psc-1;//預(yù)分頻系數(shù)
TIM3->ARR=arr;//重裝載值
TIM3->CR1|=0x1<<7;//自動重裝載預(yù)裝載允許位
TIM3->CCMR1&=~(0x3<<0);//OC1配置為輸出
TIM3->CCMR1|=0x1<<3;//輸出比較1預(yù)裝載使能
TIM3->CCMR1|=0x6<<4;//PWM模式1,CNTCCER&=~(1<<1);//有效電平為高電平
TIM3->CCR1=ccr;
TIM3->CCER|=1<<0;//輸出使能
TIM3->CR1|=1<<0;//使能TIM3
}
為有效電平>
4.2 ADC1規(guī)則通道采集遙控值
STM32本身自帶ADC功能,有兩個(gè)12位的ADC。一種逐次逼近型模擬數(shù)字轉(zhuǎn)換器。它有多達(dá)18個(gè)通道,可測量16個(gè)外部和2個(gè)內(nèi)部信號源。各通道的A/D轉(zhuǎn)換可以單次、連續(xù)、掃描或間斷模式執(zhí)行。 ADC的結(jié)果可以左對齊或右對齊方式存儲在16位數(shù)據(jù)寄存器中。
● 12位分辨率
● 轉(zhuǎn)換結(jié)束、注入轉(zhuǎn)換結(jié)束和發(fā)生模擬看門狗事件時(shí)產(chǎn)生中斷
● 單次和連續(xù)轉(zhuǎn)換模式
● 從通道0到通道n的自動掃描模式
● 自校準(zhǔn)
● 帶內(nèi)嵌數(shù)據(jù)一致性的數(shù)據(jù)對齊
● 采樣間隔可以按通道分別編程
● 規(guī)則轉(zhuǎn)換和注入轉(zhuǎn)換均有外部觸發(fā)選項(xiàng)
● 間斷模式
● 雙重模式(帶2個(gè)或以上ADC的器件)
/****************ADC規(guī)則通道配置*******************
**
**硬件接口:PB0 --ADC1_CH8
**
*****************************************************/
void ADC_Regular_Channel(void)
{
/*1.開時(shí)鐘*/
RCC->APB2ENR|=1<<3;//PB時(shí)鐘
RCC->APB2ENR|=1<<9;//ADC1時(shí)鐘
RCC->APB2RSTR|=1<<9;//ADC1復(fù)位
RCC->APB2RSTR&=~(1<<9);//取消復(fù)位
/*2.配置GPIO口*/
GPIOB->CRL&=0xFFFFFFF0;//配置為模擬輸入
/*配置ADC工作頻率*/
RCC->CFGR&=~(0x3<<14);//清除原來寄存器中的值
RCC->CFGR|=0x2<<14;//ADC工作頻率:72MHZ/6=12MHZ
/*3.ADC核心寄存器配置*/
// ADC1->CR1&=~(0xF<<16);//獨(dú)立模式
// ADC1->CR1&=~(1<<8);//關(guān)閉掃描模式
ADC1->CR2|=1<<23;//采集內(nèi)部溫度數(shù)據(jù)
ADC1->CR2|=1<<20;//使用外部事件啟動轉(zhuǎn)換
ADC1->CR2|=0x7<<17;//選擇SWSTART事件轉(zhuǎn)換通道
// ADC1->CR2&=~(1<<11);//右對齊
// ADC1->CR2|=1<<1;//連續(xù)轉(zhuǎn)換模式
ADC1->SMPR1|=0x7<<18;//設(shè)置內(nèi)部溫度采樣時(shí)間,通道16
ADC1->SMPR2|=0X7<<24;//通道8采樣時(shí)間
ADC1->SQR1&=~(0xF<<20);//設(shè)置單次轉(zhuǎn)換的通數(shù)量為1個(gè)
ADC1->CR2|=1<<0;//開啟ADC
ADC1->CR2|=1<<3;//初始化校準(zhǔn)寄存器
while(ADC1->CR2&1<<3);//等待初始化完成
ADC1->CR2|=1<<2;//開始校準(zhǔn)
while(ADC1->CR2&1<<2);//等待校準(zhǔn)完成
}
/*******************獲取規(guī)則通道轉(zhuǎn)換*****************
**
**形參:u8 chx ---需要轉(zhuǎn)換的通道號(0~17)
**返回值:轉(zhuǎn)換成功的數(shù)據(jù)(12位)
**
******************************************************/
u16 ADC1_GetRegular_Channel_Data(u8 chx)
{
u16 dat;
ADC1->SQR3&=~(0x1F<<0*5);//清除第一轉(zhuǎn)換序列中的值
ADC1->SQR3|=chx<<0*5;//設(shè)置需要轉(zhuǎn)換的通道號
ADC1->CR2|=1<<22;//開啟轉(zhuǎn)換規(guī)則通道
while(!(ADC1->SR&1<<1)){}//等待規(guī)則通道轉(zhuǎn)換完成
dat=ADC1->DR;
return dat;
}
主函數(shù)
int main()
{
int data=0;
float data2=0;
Usartx_Init(USART1,115200,72);
TIMx_Init(TIM2,72,20*1000);
TIM3_CHx_PWM(1,3600,data);//1屏,周期50ms(20khz)
ADC_Regular_Channel();//規(guī)則通道初始化
while(1)
{
data=ADC1_GetRegular_Channel_Data(8);//完成規(guī)則通道轉(zhuǎn)換
data-=2054;
data2=data*1.0/4095*3600;
TIM3->CCR1=data2;
}
}
審核編輯:湯梓紅
-
傳感器
+關(guān)注
關(guān)注
2550文章
51035瀏覽量
753053 -
PWM
+關(guān)注
關(guān)注
114文章
5181瀏覽量
213791 -
電機(jī)
+關(guān)注
關(guān)注
142文章
9000瀏覽量
145335
發(fā)布評論請先 登錄
相關(guān)推薦
評論