资源描述:
《嵌入式系统课程设计报告样例》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、《嵌入式系统应用》课程设计报告设计课题:基于STM32的直流电机调速专业班级:11电气1班学生姓名: 朱帅 指导教师:蔡海滨设计时间:2014--2015第1学期工程技术学院10直流电机控制程序设计摘要:STM32系列基于专为要求高性能、低成本、低功耗的嵌入式应用专门设计的ARMCortex-M3内核。本次使用的是STM32F103“增强型”系列。增强型系列时钟频率达到72MHz,从闪存执行代码,STM32功耗36mA,是32位市场上功耗最低的产品,相当于0.5mA/MHz。工作原理:是通过改变输出方波的占空比使负载上的平均电流功率从0-100%变化,从而改变
2、直流减速电机速度。利用脉宽调制(PWM)方式,实现调速,它的优点是电源的能量功率,能得到充分利用,电路的效率高。关键字:占空比PWM输出控制STM32电机人机交互设计概述及基本要求用单片机编程实现直流电机的控制过程,要求:具有电压调速第一章系统概述1.1总框图设计根据设计要求,我们把设计主要分为两个模块:显示模块,直流电机调速模块。10其原理图如下:系统简介:打开电源之后,电源指示灯亮,屏幕显示电机的控制电压,单片机根据采集的电压值进行PID调节,使电机的电压稳定在设定的值(电机的转速和电压成正比)第二章单元电路设计与分析显示部分:10//写寄存器函数void
3、LCD_WR_REG(u8data){LCD_RS_CLR;//写地址LCD_CS_CLR;DATAOUT(data);LCD_WR_CLR;LCD_WR_SET;LCD_CS_SET;}#else//正常IO//写寄存器函数voidLCD_WR_REG(u8data){10LCD_RS=0;//写地址LCD_CS=0;DATAOUT(data);LCD_WR=0;LCD_WR=1;LCD_CS=1;}voidLED_Init(void){RCC->APB2ENR
4、=1<<2;//使能PORTA时钟RCC->APB2ENR
5、=1<<5;//使能PORTD时钟G
6、PIOA->CRH&=0XFFFFFFF0;GPIOA->CRH
7、=0X00000003;//PA8推挽输出GPIOA->ODR
8、=1<<8;//PA8输出高GPIOD->CRL&=0XFFFFF0FF;GPIOD->CRL
9、=0X00000300;//PD.2推挽输出GPIOD->ODR
10、=1<<2;//PD.2输出高}PWM输出部分:10相关代码:voidPWM_Init(u16arr,u16psc){RCC->APB1ENR
11、=1<<1;//TIM3时钟使能GPIOA->CRL&=0X0FFFFFFF;//PA7输出GPIOA->CRL
12、=0XB0000
13、000;//复用功能输出GPIOA->ODR
14、=1<<7;//PA7上拉TIM3->ARR=arr;//设定计数器自动重装值TIM3->PSC=psc;//预分频器不分频TIM3->CCMR1
15、=7<<12;//CH2PWM2模式TIM3->CCMR1
16、=1<<11;//CH2预装载使能TIM3->CCER
17、=1<<4;//OC2输出使能TIM3->CR1=0x8000;//ARPE使能TIM3->CR1
18、=0x01;//使能定时器3}第三章主体代码10/*沉木冰悟*/#include"stm8s_hard.h"floatdet;//误差参数、采样参数u16k
19、k=0;u16pid_sum=0;u16pid_i_sum=0;/*************************************************************************FunctionName:PI算法函数*Description:PI算法*Input:Pi_temp实测参数,PID_NUM控制参数10*Output:None*Return:None************************************************************************/u16PI_MATH(f
20、loatPi_temp,u16PID_NUM,u16PID_max){det=0;det=1-Pi_temp/Pi;if(det>0.01
21、
22、det<-0.01)//超出误差范围,进行调整{pid_i_sum=pid_i_sum+det*pid_i;//求出i的离散积分kk=(int)(det*pid_p);pid_sum=kk+(int)pid_i_sum;if((PID_NUM+pid_sum)<0)//最小为0,否则为负数PID_NUM=0;elsePID_NUM=PID_NUM+pid_sum;if(PID_NUM>PID_max)PID_NUM=PI
23、D_max;//占空比最大不能超过95