欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136
標題:
BLDC開環調速源程序
[打印本頁]
作者:
liklong8
時間:
2018-9-6 07:03
標題:
BLDC開環調速源程序
BLDC開環調速
0.png
(9.95 KB, 下載次數: 39)
下載附件
2018-9-13 05:03 上傳
單片機源程序如下:
/*
PG6鍵按下時,PA4 PA5指示燈亮,
PG7按下時PA4 PA5 指示燈滅。
無啟停,上電開環調速,最大可設為100%,但要有一定的最少值
電機轉動需要一點初始力
有感120度HALL。
開關控制采用上高下低有效電平設置
上橋 臂采用PWM功能。
Designed by Cache.Lee
2013.4.2
*/
#include "stm8s.h"
#include "OLED12864.h"
#include "hall.h"
#define STM8_FREQ_MHZ 16
#define PWM_FREQUENCY 16000
static const u16 hArrPwmVal = ((u16)((STM8_FREQ_MHZ * (u32)1000000)/PWM_FREQUENCY));
//hArrPwmVal=1000
#define MINPWMPERCENT 10
#define MAXPWMPERCENT 100
#define MINVALUE MINPWMPERCENT*10
//hArrPwmVal=1000
//MINPWMPERCENT*hArrPwmVal/100簡化為MINPWMPERCENT*10
#define MAXVALUE MAXPWMPERCENT*10
//MAXPWMPERCENT*hArrPwmVal/100簡化MAXPWMPERCENT*0
void GPIO_int(void)//初始化按鍵,指示燈
{
GPIOG->DDR=GPIOG->DDR&0x3f;//PG6,PG7按鍵配置為輸入模式
GPIOG->CR1=GPIOG->CR1|0xC0;//PG6,PG7按鍵配置為上拉輸入
GPIOA->DDR=GPIOA->DDR|0x30;//PA4,PA5指示燈配置為輸出模式
GPIOA->CR1=GPIOA->CR1|0x30;//PA4,PA5指示燈d配置為推挽模式
GPIOA->ODR=0x00;//點亮指示燈
}
void Clock_init(void)//時鐘配置 內部16M
{
CLK->CKDIVR=0;
}
void AD_int(void)//電位器 PF5 初始化 AIN13
{
u8 value;
u16 ADC_TDR_tmp;
ADC2->CSR = 13; //AIN13通道選擇
//select 4MHz clock based on 16MHz fMaster (div4), single mode
ADC2->CR1 = 0x20;
ADC2->CR2 = 0x08;//數據右對齊
ADC2->TDRH=0x20;//AIN13 禁止施密特觸發
ADC2->CR1 |= 0X01;//使能ADC
value=30;
while(value--); //等待ADC穩定
ADC2->CSR &= 0x7f;//清EOC標志
ADC2->CR1 |= 0x01;//啟動AD
}
void PWM_IO_init(void)
{ //PB012 下橋臂0有效
GPIOB->DDR=GPIOB->DDR|0x7;//PB012配置為輸出模式
GPIOB->CR1=GPIOB->CR1|0x7;//PB012推挽模式
GPIOB->ODR&=0xf8;//關閉下橋臂開關管
//PC123 上橋臂1有效
GPIOC->DDR=GPIOC->DDR|0x0E;//PC123配置為輸出模式
GPIOC->CR1=GPIOC->CR1|0x0E;//PC123推挽模式
GPIOC->ODR&=~(0x0E);//關閉下橋臂開關管
}
void Tim1_init(void)
{
//計數器禁止、ARR預裝載禁止、邊沿對齊模式
TIM1->CR1 = 0x04;
TIM1->SMCR = 0;//禁止從模式
TIM1->IER = 0;//禁止所有中斷
TIM1->CCER1 = 0; //禁止PWM輸出
TIM1->CCER2 = 0;
TIM1->CCMR1 = 0x60; //PWM1模式,禁止預裝載
TIM1->CCMR2 = 0x60;
TIM1->CCMR3 = 0x60;
//prescale = div1 @ 16MHz -> 62.5ns/count, Full scale = 4.09ms
TIM1->PSCRH = 0;
TIM1->PSCRL = 0;
TIM1->ARRH=hArrPwmVal/256; //PWM周期設定
TIM1->ARRL=hArrPwmVal%256;
//disable repetition counter
TIM1->RCR = 0;
TIM1->CCR1H=0;TIM1->CCR1L=0;//占空比輸出均為0
TIM1->CCR2H=0;TIM1->CCR1L=0;
TIM1->CCR3H=0;TIM1->CCR1L=0;
//使能定時計數器
TIM1->CR1 |= 0x01;
}
main()
{
unsigned int tem_c=0;
unsigned char B_k1=0,B_k2=0;
unsigned int ADConverValue=0;
for(tem_c=0;tem_c<50000;tem_c++);
Clock_init();
GPIO_int();
LCD_Init();
LCD_Fill(0);
LCD_P8x16Str(12,0,"BLDC OPEN LOOP");
LCD_P8x16Str(10,3,"PWM:");
AD_int();
OutPwmValue=MINVALUE;
PWM_IO_init();
Tim1_init();
Init_TIM2();
TIM2_InitCapturePolarity();
enableInterrupts();
while (1)
{
if((GPIOG->IDR&0x80)==0x80)B_k1=0; //PG7為高電平,未有按鍵
else if(B_k1==0)//PG7按下時,指示燈亮
{
for(tem_c=0;tem_c<500;tem_c++);
if((GPIOG->IDR&0x80)==0x00)
{
B_k1=1;
GPIOA->ODR=0x30;
}
}
if((GPIOG->IDR&0x40)==0x40)B_k2=0; //PG6為高電平,未有按鍵
else if(B_k2==0)//PG7按下時,指示燈滅
{
for(tem_c=0;tem_c<500;tem_c++);
if((GPIOG->IDR&0x40)==0x00)
{
B_k2=1;
GPIOA->ODR=0x0;
}
}
if(ADC2->CSR&0x80)
{
ADC2->CSR &= (u8)(~0x80);//清除EOC標志
ADConverValue=ADC2->DRH*256+ADC2->DRL;
ADC2->CR1 |= 0x01;//啟動AD
if(ADConverValue<MINVALUE)ADConverValue=MINVALUE;
else if(ADConverValue>MAXVALUE)ADConverValue=MAXVALUE;
OutPwmValue=ADConverValue;
Display_data(12,6,OutPwmValue/10,0);
//顯示輸出的100%,
//因為周期為:hArrPwmVal=1000,
//所以:占空比計算為outPwmValue/1000*100
//簡化為OutPwmValue/10
}
if(FaultF==1)
{
ComHandler();FaultF=2;
}
}
}
@near @interrupt void TIM1_UPD_OVF_TRG_BRK_IRQHandler (void)
{
/* In order to detect unexpected events during development,
it is recommended to set a breakpoint on the following instruction.
*/
FaultF=1;
return;
}
復制代碼
所有資料51hei提供下載:
6 BLDC 開環調速.zip
(396.25 KB, 下載次數: 58)
2018-9-6 07:03 上傳
點擊文件名下載附件
BLDC調速
下載積分: 黑幣 -5
作者:
admin
時間:
2018-9-13 05:04
補全原理圖或者詳細說明一下電路連接即可獲得100+黑幣
作者:
nhwdb
時間:
2019-1-10 10:41
不錯的源程序,很有參考價值。
作者:
mcu_mpu
時間:
2019-9-18 14:38
正在學習BLDC,學習了。
歡迎光臨 (http://m.raoushi.com/bbs/)
Powered by Discuz! X3.1