单片机课设-直流电机控制

本文由用户“等你陪我看海”分享发布 更新时间:2022-07-28 07:23:26 举报文档

以下为《单片机课设-直流电机控制》的无排版文字预览,完整格式请下载

下载前请仔细阅读文字预览以及下方图片预览。图片预览是什么样的,下载的文档就是什么样的。

/

/

void PWM_Configuration(void)

{

GPIO_InitTypeDef GPIO_InitStructure;

TIM_TimeBaseInitTypeDef TIM_BaseInitStructure;

TIM_OCInitTypeDef TIM_OCInitStructure;

TIM_BDTRInitTypeDef TIM_BDTRInitStructure;

NVIC_InitTypeDef NVIC_InitStructure;

//开启TIM和相应端口时钟

//启动GPIO

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB,

ENABLE);

//启动AFIO

RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);

//启动TIM1

RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1, ENABLE);

//GPIO做相应设置,为AF输出 //PA8,PB13一组互补输出 A9,PB14一组互补输出

//PA.8/9口设置为TIM1的OC1输出口

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8 | GPIO_Pin_9;

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //复用推挽输出

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

GPIO_Init(GPIOA, &GPIO_InitStructure);

//PB.13/14口设置为TIM1_CH1N和TIM1_CH2N输出口

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13 | GPIO_Pin_14;

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

GPIO_Init(GPIOB, &GPIO_InitStructure);

GPIO_SetBits(GPIOA, GPIO_Pin_8 | GPIO_Pin_9);

GPIO_SetBits(GPIOB, GPIO_Pin_13 | GPIO_Pin_14);

NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);

NVIC_InitStructure.NVIC_IRQChannel = TIM1_UP_IRQn;

NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;

NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;

NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;

NVIC_Init(&NVIC_InitStructure);

//TIM1基本计数器设置(设置PWM频率)10KHz

TIM_BaseInitStructure.TIM_Period = 100-1; //10khz 好计算。按照1%的精确度,理论最大72000/100 = 720KHz

TIM_BaseInitStructure.TIM_Prescaler = 72-1;

TIM_BaseInitStructure.TIM_ClockDivision = 0;

TIM_BaseInitStructure.TIM_CounterMode = TIM_CounterMode_Up;//向上计数

TIM_BaseInitStructure.TIM_RepetitionCounter 内容过长,仅展示头部和尾部部分文字预览,全文请查看图片预览。 aticOutput_Enable;

TIM_BDTRConfig(TIM1, &TIM_BDTRInitStructure);

//TIM1_OC通道输出PWM

TIM_CtrlPWMOutputs(TIM1, ENABLE);

//TIM1开启

TIM_Cmd(TIM1, ENABLE);

}

int main(void)

{

static u8 motorValue = 50,oldvalue = 50;

static u8 startStop = 1,dir = 1;//startStop = 1启动 =0停止 dir =1 正转

volatile u8 key = 0;

NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //设置NVIC中断分组2:2位抢占优先级,2位响应优先级

LED_Init();

KEY_Init();

delay_init();

PWM_Configuration();

Motor_IO_Init();

LED1 = LED_ON;

while(1)

{

key = KEY_Scan(0);

if(key)

{

switch(key)

{

case KEY1_PRES:

startStop = !startStop;

break;

case KEY2_PRES:

dir = !dir;

break;

case KEY3_PRES:

motorValue += 5;

break;

case KEY4_PRES:

motorValue -= 5;

break;

default:

break;

}

if(motorValue>249)//94)

motorValue = 94;

if (startStop)

{

if(dir)

{

TIM_SetCompare2(TIM1,0);

delay_ms(500);

TIM_SetCompare1(TIM1,motorValue);

}

else

{

TIM_SetCompare1(TIM1,0);

delay_ms(500);

TIM_SetCompare2(TIM1,motorValue);

}

}

else

{

TIM_SetCompare1(TIM1,0);

TIM_SetCompare2(TIM1,0);

}

}

}

}

//S1 启动&停止 S2翻转 S3+5 S4-5

[文章尾部最后300字内容到此结束,中间部分内容请查看底下的图片预览]

以上为《单片机课设-直流电机控制》的无排版文字预览,完整格式请下载

下载前请仔细阅读上面文字预览以及下方图片预览。图片预览是什么样的,下载的文档就是什么样的。

图片预览