stm32 pwm 電調 電機

先上代碼

python 樹莓派版本,通俗表現原理。stm32 C語言版本在後面python

import RPi.GPIO as GPIO
import time


mode=2
IN1=11

def setup():
    GPIO.setwarnings(False)
    GPIO.setmode(GPIO.BOARD)
    GPIO.setup(IN1, GPIO.OUT)

def set():
    print "set"
    try:
            print "High"
            while(1):
                GPIO.output(IN1,0)
                time.sleep(0.02-0.002)
                GPIO.output(IN1,1)
                time.sleep(0.002)
    except:
            print "low"
            while(1):
                GPIO.output(IN1,0)
                time.sleep(0.02-0.001)
                GPIO.output(IN1,1)
                time.sleep(0.001)


def loop():
    print "LOOP"
    print "run"
    try:
        while(1):
                GPIO.output(IN1,0)
                time.sleep(0.02-0.001)
                GPIO.output(IN1,1)
                time.sleep(0.001)
    except:
        while(1):
                GPIO.output(IN1,0)
                time.sleep(0.02-0.00199)
                GPIO.output(IN1,1)
                time.sleep(0.00199)
        '''
        if(up>=0.018):
            up=up
        else:
            up=up+0.0001
        '''
setup()
if( mode==1):
        set()
elif(mode==2):
        loop()

C語言版本

/***********************************************
功能:輸出PWM的定時器2初始化
輸入參數:無
輸出:無
描述:調用該函數,初始化定時器2爲PWM輸出模式
硬件鏈接:PA0,PA1,PA2,PA3
***********************************************/
void MotorInit(void)
{
    GPIO_InitTypeDef GPIO_InitStructure;
    TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
    TIM_OCInitTypeDef  TIM_OCInitStructure;
	
    uint16_t PrescalerValue = 0;    //控制電機PWM頻率
    
    
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); //打開外設A的時鐘和複用時鐘
    RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2 ,ENABLE);   //打開定時器2時鐘  
    
    
    // 設置GPIO功能。
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_Init(GPIOA, &GPIO_InitStructure);
		
    
    // 復位定時器。
    //TIM_DeInit(TIM2);
    
    // 配置計時器。
    //PrescalerValue = (uint16_t) (SystemCoreClock / 24000000) - 1;
    PrescalerValue =71;
    TIM_TimeBaseStructure.TIM_Period = 19999;		            //設爲50hz
    TIM_TimeBaseStructure.TIM_Prescaler = PrescalerValue;	//pwm時鐘分頻
    TIM_TimeBaseStructure.TIM_ClockDivision = 0;	
    TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //向上計數
    
    TIM_TimeBaseInit(TIM2,&TIM_TimeBaseStructure);
    
    
    // 配置TIM2爲PWM輸出模式
    //TIM_OCStructInit(&TIM_OCInitStructure);
    TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;
    TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
    //TIM_OCInitStructure.TIM_Pulse = 0;    //0
    TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;
    
    TIM_OC1Init(TIM2,&TIM_OCInitStructure);
    TIM_OC2Init(TIM2,&TIM_OCInitStructure);
    TIM_OC3Init(TIM2,&TIM_OCInitStructure);
    TIM_OC4Init(TIM2,&TIM_OCInitStructure);
    
    TIM_OC1PreloadConfig(TIM2, TIM_OCPreload_Enable);
    TIM_OC2PreloadConfig(TIM2, TIM_OCPreload_Enable);
    TIM_OC3PreloadConfig(TIM2, TIM_OCPreload_Enable);
    TIM_OC4PreloadConfig(TIM2, TIM_OCPreload_Enable);
    
    // 啓動計時器。
    TIM_Cmd(TIM2,ENABLE);
    //printf("Motor init success...\r\n");
}





//下面是啓動方法

	TIM_SetCompare1(TIM2,999);
	TIM_SetCompare2(TIM2,999);
	TIM_SetCompare3(TIM2,999);
	TIM_SetCompare4(TIM2,999); //先把油門打到最低,即高電平爲1ms
	delay_ms(1800);//等待電機確認
	delay_ms(1800);
	delay_ms(1800);
	delay_ms(1800);
	delay_ms(1800);
	delay_ms(1800);
	delay_ms(1800);
	delay_ms(1800);
	TIM_SetCompare1(TIM2,1800); //再把高電平時間設爲1~2ms
	TIM_SetCompare2(TIM2,1800);
	TIM_SetCompare3(TIM2,1800);
	TIM_SetCompare4(TIM2,1800);

以前作過T形馬達的小車,是經過pwm波控制小車速度,四軸飛行器的無刷電機也差很少。控制方法以下所述安全

控制頻率

個人電調控制頻率(pwm波的頻率)50Hz就ok了。有的電調可能要500Hz或者其它的數值函數

所謂油門

油門就是pwm波的高電平持續時間(也多是指佔空比,over)oop

控制方法

第一次啓動設置行程

先讓控制器輸出50Hz(T=20ms),高電平時間爲2ms的pwm波,而後給電調上電。持續這個波一下子到提示音響起。搞不清楚各類提示音的話就估摸着二、3s就好了。 而後當即讓控制器輸出50Hz,高電平時間爲1ms的pwm波,持續一下子到提示音響起。這個時候你能夠斷電了。ui

正常狀況下啓動電機

先讓控制器輸出50Hz,高電平持續時間爲1ms的pwm波,而後給電調上電。持續一下子聽到提示音後,把高電平時間調爲1~2ms之間,電機就啓動了。spa

珍愛生命,注意安全

相關文章
相關標籤/搜索